diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2015-07-20 17:31:46 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2015-07-20 17:31:46 +0000 |
commit | a091118d2c7bdd3a6fa2de0694aff47071051956 (patch) | |
tree | 828f194bd1d3ecfa54cee8c29cceabdc3b74ef9d /libgomp | |
parent | 53c1201606a2a8901544620eadc5965745b6e7de (diff) | |
download | gcc-a091118d2c7bdd3a6fa2de0694aff47071051956.zip gcc-a091118d2c7bdd3a6fa2de0694aff47071051956.tar.gz gcc-a091118d2c7bdd3a6fa2de0694aff47071051956.tar.bz2 |
oacc-parallel.c (GOACC_parallel): Move variadic handling into wait=-specific if.
* oacc-parallel.c (GOACC_parallel): Move variadic handling into
wait=-specific if.
(GOACC_enter_exit_data, GOACC_update): Use consistent num_waits
!=0 condition.
(goacc_waits): Move !num_waits handling to ...
(GOACC_wait): ... here, the only caller that might have zero waits.
From-SVN: r226011
Diffstat (limited to 'libgomp')
-rw-r--r-- | libgomp/ChangeLog | 7 | ||||
-rw-r--r-- | libgomp/oacc-parallel.c | 79 |
2 files changed, 34 insertions, 52 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 6c7b942..0628b77 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,5 +1,12 @@ 2015-07-20 Nathan Sidwell <nathan@codesourcery.com> + * oacc-parallel.c (GOACC_parallel): Move variadic handling into + wait=-specific if. + (GOACC_enter_exit_data, GOACC_update): Use consistent num_waits + !=0 condition. + (goacc_waits): Move !num_waits handling to ... + (GOACC_wait): ... here, the only caller that might have zero waits. + * plugin/plugin-nvptx.c (struct targ_fn_descriptor): Move later. (struct ptx_image_data): Move earlier, add fns field. (struct ptx_device): Add images and image_lock fields. diff --git a/libgomp/oacc-parallel.c b/libgomp/oacc-parallel.c index d899946..e1ea2c6 100644 --- a/libgomp/oacc-parallel.c +++ b/libgomp/oacc-parallel.c @@ -105,13 +105,13 @@ GOACC_parallel (int device, void (*fn) (void *), return; } - va_start (ap, num_waits); + if (num_waits) + { + va_start (ap, num_waits); + goacc_wait (async, num_waits, ap); + va_end (ap); + } - if (num_waits > 0) - goacc_wait (async, num_waits, ap); - - va_end (ap); - acc_dev->openacc.async_set_async_func (async); if (!(acc_dev->capabilities & GOMP_OFFLOAD_CAP_NATIVE_EXEC)) @@ -225,14 +225,12 @@ GOACC_enter_exit_data (int device, size_t mapnum, || host_fallback) return; - if (num_waits > 0) + if (num_waits) { va_list ap; va_start (ap, num_waits); - goacc_wait (async, num_waits, ap); - va_end (ap); } @@ -350,47 +348,21 @@ goacc_wait (int async, int num_waits, va_list ap) { struct goacc_thread *thr = goacc_thread (); struct gomp_device_descr *acc_dev = thr->dev; - int i; - assert (num_waits >= 0); - - if (async == acc_async_sync && num_waits == 0) - { - acc_wait_all (); - return; - } - - if (async == acc_async_sync && num_waits) - { - for (i = 0; i < num_waits; i++) - { - int qid = va_arg (ap, int); - - if (acc_async_test (qid)) - continue; - - acc_wait (qid); - } - return; - } - - if (async == acc_async_noval && num_waits == 0) - { - acc_dev->openacc.async_wait_all_async_func (acc_async_noval); - return; - } - - for (i = 0; i < num_waits; i++) + while (num_waits--) { int qid = va_arg (ap, int); if (acc_async_test (qid)) continue; - /* If we're waiting on the same asynchronous queue as we're launching on, - the queue itself will order work as required, so there's no need to - wait explicitly. */ - if (qid != async) + if (async == acc_async_sync) + acc_wait (qid); + else if (qid == async) + ;/* If we're waiting on the same asynchronous queue as we're + launching on, the queue itself will order work as + required, so there's no need to wait explicitly. */ + else acc_dev->openacc.async_wait_async_func (qid, async); } } @@ -412,14 +384,12 @@ GOACC_update (int device, size_t mapnum, || host_fallback) return; - if (num_waits > 0) + if (num_waits) { va_list ap; va_start (ap, num_waits); - goacc_wait (async, num_waits, ap); - va_end (ap); } @@ -455,13 +425,18 @@ GOACC_update (int device, size_t mapnum, void GOACC_wait (int async, int num_waits, ...) { - va_list ap; - - va_start (ap, num_waits); - - goacc_wait (async, num_waits, ap); + if (num_waits) + { + va_list ap; - va_end (ap); + va_start (ap, num_waits); + goacc_wait (async, num_waits, ap); + va_end (ap); + } + else if (async == acc_async_sync) + acc_wait_all (); + else if (async == acc_async_noval) + acc_dev->openacc.async_wait_all_async_func (acc_async_noval); } int |