diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2018-12-28 12:34:14 +0100 |
---|---|---|
committer | Thomas Schwinge <tschwinge@gcc.gnu.org> | 2018-12-28 12:34:14 +0100 |
commit | 59d5960cdba3fb1bd8d9c234fc36fb634b3e9ab2 (patch) | |
tree | 4a94d5d6765f11cca6f5d093ef0afa7a5c98b934 /libgomp | |
parent | 5a12987e79513b46d317c6973555c582ba4da895 (diff) | |
download | gcc-59d5960cdba3fb1bd8d9c234fc36fb634b3e9ab2.zip gcc-59d5960cdba3fb1bd8d9c234fc36fb634b3e9ab2.tar.gz gcc-59d5960cdba3fb1bd8d9c234fc36fb634b3e9ab2.tar.bz2 |
For libgomp OpenACC entry points, redefine the "device" argument to "flags"
... so that we're then able to use this for other flags in addition to
"GOACC_FLAG_HOST_FALLBACK".
gcc/
* omp-expand.c (expand_omp_target): Restructure OpenACC vs. OpenMP
code paths. Update for libgomp OpenACC entry points change.
include/
* gomp-constants.h (GOACC_FLAG_HOST_FALLBACK)
(GOACC_FLAGS_MARSHAL_OP, GOACC_FLAGS_UNMARSHAL): Define.
libgomp/
* oacc-parallel.c (GOACC_parallel_keyed, GOACC_parallel)
(GOACC_data_start, GOACC_enter_exit_data, GOACC_update)
(GOACC_declare): Redefine the "device" argument to "flags".
From-SVN: r267448
Diffstat (limited to 'libgomp')
-rw-r--r-- | libgomp/ChangeLog | 6 | ||||
-rw-r--r-- | libgomp/oacc-parallel.c | 52 |
2 files changed, 39 insertions, 19 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 5b014b0..aa69f42 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,4 +1,10 @@ 2018-12-28 Thomas Schwinge <thomas@codesourcery.com> + + * oacc-parallel.c (GOACC_parallel_keyed, GOACC_parallel) + (GOACC_data_start, GOACC_enter_exit_data, GOACC_update) + (GOACC_declare): Redefine the "device" argument to "flags". + +2018-12-28 Thomas Schwinge <thomas@codesourcery.com> Cesar Philippidis <cesar@codesourcery.com> * target.c (struct gomp_coalesce_chunk): New structure. diff --git a/libgomp/oacc-parallel.c b/libgomp/oacc-parallel.c index e2405d7..57bd484 100644 --- a/libgomp/oacc-parallel.c +++ b/libgomp/oacc-parallel.c @@ -38,6 +38,16 @@ #include <stdarg.h> #include <assert.h> + +/* In the ABI, the GOACC_FLAGs are encoded as an inverted bitmask, so that we + continue to support the following two legacy values. */ +_Static_assert (GOACC_FLAGS_UNMARSHAL (GOMP_DEVICE_ICV) == 0, + "legacy GOMP_DEVICE_ICV broken"); +_Static_assert (GOACC_FLAGS_UNMARSHAL (GOMP_DEVICE_HOST_FALLBACK) + == GOACC_FLAG_HOST_FALLBACK, + "legacy GOMP_DEVICE_HOST_FALLBACK broken"); + + /* Returns the number of mappings associated with the pointer or pset. PSET have three mappings, whereas pointer have two. */ @@ -105,17 +115,18 @@ handle_ftn_pointers (size_t mapnum, void **hostaddrs, size_t *sizes, static void goacc_wait (int async, int num_waits, va_list *ap); -/* Launch a possibly offloaded function on DEVICE. FN is the host fn +/* Launch a possibly offloaded function with FLAGS. FN is the host fn address. MAPNUM, HOSTADDRS, SIZES & KINDS describe the memory blocks to be copied to/from the device. Varadic arguments are keyed optional parameters terminated with a zero. */ void -GOACC_parallel_keyed (int device, void (*fn) (void *), +GOACC_parallel_keyed (int flags_m, void (*fn) (void *), size_t mapnum, void **hostaddrs, size_t *sizes, unsigned short *kinds, ...) { - bool host_fallback = device == GOMP_DEVICE_HOST_FALLBACK; + int flags = GOACC_FLAGS_UNMARSHAL (flags_m); + va_list ap; struct goacc_thread *thr; struct gomp_device_descr *acc_dev; @@ -145,7 +156,7 @@ GOACC_parallel_keyed (int device, void (*fn) (void *), /* Host fallback if "if" clause is false or if the current device is set to the host. */ - if (host_fallback) + if (flags & GOACC_FLAG_HOST_FALLBACK) { goacc_save_and_set_bind (acc_device_host); fn (hostaddrs); @@ -269,7 +280,7 @@ GOACC_parallel_keyed (int device, void (*fn) (void *), /* Legacy entry point, only provide host execution. */ void -GOACC_parallel (int device, void (*fn) (void *), +GOACC_parallel (int flags_m, void (*fn) (void *), size_t mapnum, void **hostaddrs, size_t *sizes, unsigned short *kinds, int num_gangs, int num_workers, int vector_length, @@ -281,10 +292,11 @@ GOACC_parallel (int device, void (*fn) (void *), } void -GOACC_data_start (int device, size_t mapnum, +GOACC_data_start (int flags_m, size_t mapnum, void **hostaddrs, size_t *sizes, unsigned short *kinds) { - bool host_fallback = device == GOMP_DEVICE_HOST_FALLBACK; + int flags = GOACC_FLAGS_UNMARSHAL (flags_m); + struct target_mem_desc *tgt; #ifdef HAVE_INTTYPES_H @@ -302,7 +314,7 @@ GOACC_data_start (int device, size_t mapnum, /* Host fallback or 'do nothing'. */ if ((acc_dev->capabilities & GOMP_OFFLOAD_CAP_SHARED_MEM) - || host_fallback) + || (flags & GOACC_FLAG_HOST_FALLBACK)) { tgt = gomp_map_vars (NULL, 0, NULL, NULL, NULL, NULL, true, GOMP_MAP_VARS_OPENACC); @@ -333,13 +345,14 @@ GOACC_data_end (void) } void -GOACC_enter_exit_data (int device, size_t mapnum, +GOACC_enter_exit_data (int flags_m, size_t mapnum, void **hostaddrs, size_t *sizes, unsigned short *kinds, int async, int num_waits, ...) { + int flags = GOACC_FLAGS_UNMARSHAL (flags_m); + struct goacc_thread *thr; struct gomp_device_descr *acc_dev; - bool host_fallback = device == GOMP_DEVICE_HOST_FALLBACK; bool data_enter = false; size_t i; @@ -349,7 +362,7 @@ GOACC_enter_exit_data (int device, size_t mapnum, acc_dev = thr->dev; if ((acc_dev->capabilities & GOMP_OFFLOAD_CAP_SHARED_MEM) - || host_fallback) + || (flags & GOACC_FLAG_HOST_FALLBACK)) return; if (num_waits) @@ -523,11 +536,12 @@ goacc_wait (int async, int num_waits, va_list *ap) } void -GOACC_update (int device, size_t mapnum, +GOACC_update (int flags_m, size_t mapnum, void **hostaddrs, size_t *sizes, unsigned short *kinds, int async, int num_waits, ...) { - bool host_fallback = device == GOMP_DEVICE_HOST_FALLBACK; + int flags = GOACC_FLAGS_UNMARSHAL (flags_m); + size_t i; goacc_lazy_initialize (); @@ -536,7 +550,7 @@ GOACC_update (int device, size_t mapnum, struct gomp_device_descr *acc_dev = thr->dev; if ((acc_dev->capabilities & GOMP_OFFLOAD_CAP_SHARED_MEM) - || host_fallback) + || (flags & GOACC_FLAG_HOST_FALLBACK)) return; if (num_waits) @@ -643,7 +657,7 @@ GOACC_get_thread_num (void) } void -GOACC_declare (int device, size_t mapnum, +GOACC_declare (int flags_m, size_t mapnum, void **hostaddrs, size_t *sizes, unsigned short *kinds) { int i; @@ -663,7 +677,7 @@ GOACC_declare (int device, size_t mapnum, case GOMP_MAP_POINTER: case GOMP_MAP_RELEASE: case GOMP_MAP_DELETE: - GOACC_enter_exit_data (device, 1, &hostaddrs[i], &sizes[i], + GOACC_enter_exit_data (flags_m, 1, &hostaddrs[i], &sizes[i], &kinds[i], GOMP_ASYNC_SYNC, 0); break; @@ -672,18 +686,18 @@ GOACC_declare (int device, size_t mapnum, case GOMP_MAP_ALLOC: if (!acc_is_present (hostaddrs[i], sizes[i])) - GOACC_enter_exit_data (device, 1, &hostaddrs[i], &sizes[i], + GOACC_enter_exit_data (flags_m, 1, &hostaddrs[i], &sizes[i], &kinds[i], GOMP_ASYNC_SYNC, 0); break; case GOMP_MAP_TO: - GOACC_enter_exit_data (device, 1, &hostaddrs[i], &sizes[i], + GOACC_enter_exit_data (flags_m, 1, &hostaddrs[i], &sizes[i], &kinds[i], GOMP_ASYNC_SYNC, 0); break; case GOMP_MAP_FROM: - GOACC_enter_exit_data (device, 1, &hostaddrs[i], &sizes[i], + GOACC_enter_exit_data (flags_m, 1, &hostaddrs[i], &sizes[i], &kinds[i], GOMP_ASYNC_SYNC, 0); break; |