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
This commit is contained in:
parent
53c1201606
commit
a091118d2c
|
@ -1,5 +1,12 @@
|
||||||
2015-07-20 Nathan Sidwell <nathan@codesourcery.com>
|
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.
|
* plugin/plugin-nvptx.c (struct targ_fn_descriptor): Move later.
|
||||||
(struct ptx_image_data): Move earlier, add fns field.
|
(struct ptx_image_data): Move earlier, add fns field.
|
||||||
(struct ptx_device): Add images and image_lock fields.
|
(struct ptx_device): Add images and image_lock fields.
|
||||||
|
|
|
@ -105,12 +105,12 @@ GOACC_parallel (int device, void (*fn) (void *),
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (num_waits)
|
||||||
|
{
|
||||||
va_start (ap, num_waits);
|
va_start (ap, num_waits);
|
||||||
|
|
||||||
if (num_waits > 0)
|
|
||||||
goacc_wait (async, num_waits, ap);
|
goacc_wait (async, num_waits, ap);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
}
|
||||||
|
|
||||||
acc_dev->openacc.async_set_async_func (async);
|
acc_dev->openacc.async_set_async_func (async);
|
||||||
|
|
||||||
|
@ -225,14 +225,12 @@ GOACC_enter_exit_data (int device, size_t mapnum,
|
||||||
|| host_fallback)
|
|| host_fallback)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (num_waits > 0)
|
if (num_waits)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start (ap, num_waits);
|
va_start (ap, num_waits);
|
||||||
|
|
||||||
goacc_wait (async, num_waits, ap);
|
goacc_wait (async, num_waits, ap);
|
||||||
|
|
||||||
va_end (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 goacc_thread *thr = goacc_thread ();
|
||||||
struct gomp_device_descr *acc_dev = thr->dev;
|
struct gomp_device_descr *acc_dev = thr->dev;
|
||||||
int i;
|
|
||||||
|
|
||||||
assert (num_waits >= 0);
|
while (num_waits--)
|
||||||
|
|
||||||
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);
|
int qid = va_arg (ap, int);
|
||||||
|
|
||||||
if (acc_async_test (qid))
|
if (acc_async_test (qid))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (async == acc_async_sync)
|
||||||
acc_wait (qid);
|
acc_wait (qid);
|
||||||
}
|
else if (qid == async)
|
||||||
return;
|
;/* 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 (async == acc_async_noval && num_waits == 0)
|
else
|
||||||
{
|
|
||||||
acc_dev->openacc.async_wait_all_async_func (acc_async_noval);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < num_waits; i++)
|
|
||||||
{
|
|
||||||
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)
|
|
||||||
acc_dev->openacc.async_wait_async_func (qid, async);
|
acc_dev->openacc.async_wait_async_func (qid, async);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -412,14 +384,12 @@ GOACC_update (int device, size_t mapnum,
|
||||||
|| host_fallback)
|
|| host_fallback)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (num_waits > 0)
|
if (num_waits)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start (ap, num_waits);
|
va_start (ap, num_waits);
|
||||||
|
|
||||||
goacc_wait (async, num_waits, ap);
|
goacc_wait (async, num_waits, ap);
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -454,15 +424,20 @@ GOACC_update (int device, size_t mapnum,
|
||||||
|
|
||||||
void
|
void
|
||||||
GOACC_wait (int async, int num_waits, ...)
|
GOACC_wait (int async, int num_waits, ...)
|
||||||
|
{
|
||||||
|
if (num_waits)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start (ap, num_waits);
|
va_start (ap, num_waits);
|
||||||
|
|
||||||
goacc_wait (async, num_waits, ap);
|
goacc_wait (async, num_waits, ap);
|
||||||
|
|
||||||
va_end (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
|
int
|
||||||
GOACC_get_num_threads (void)
|
GOACC_get_num_threads (void)
|
||||||
|
|
Loading…
Reference in New Issue