Extract 'goacc_enter_exit_data_internal' from 'libgomp/oacc-mem.c:GOACC_enter_exit_data'
libgomp/ * oacc-mem.c (goacc_enter_exit_data_internal): New function, extracted from... (GOACC_enter_exit_data): ... here. (GOACC_declare): Use it. Co-Authored-By: Andrew Stubbs <ams@codesourcery.com>
This commit is contained in:
parent
0a77c7033a
commit
7999363961
|
@ -1320,56 +1320,22 @@ goacc_exit_data_internal (struct gomp_device_descr *acc_dev, size_t mapnum,
|
||||||
gomp_mutex_unlock (&acc_dev->lock);
|
gomp_mutex_unlock (&acc_dev->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
GOACC_enter_exit_data (int flags_m, size_t mapnum, void **hostaddrs,
|
goacc_enter_exit_data_internal (int flags_m, size_t mapnum, void **hostaddrs,
|
||||||
size_t *sizes, unsigned short *kinds, int async,
|
size_t *sizes, unsigned short *kinds,
|
||||||
int num_waits, ...)
|
bool data_enter, int async, int num_waits,
|
||||||
|
va_list *ap)
|
||||||
{
|
{
|
||||||
int flags = GOACC_FLAGS_UNMARSHAL (flags_m);
|
int flags = GOACC_FLAGS_UNMARSHAL (flags_m);
|
||||||
|
|
||||||
struct goacc_thread *thr;
|
struct goacc_thread *thr;
|
||||||
struct gomp_device_descr *acc_dev;
|
struct gomp_device_descr *acc_dev;
|
||||||
bool data_enter = false;
|
|
||||||
size_t i;
|
|
||||||
|
|
||||||
goacc_lazy_initialize ();
|
goacc_lazy_initialize ();
|
||||||
|
|
||||||
thr = goacc_thread ();
|
thr = goacc_thread ();
|
||||||
acc_dev = thr->dev;
|
acc_dev = thr->dev;
|
||||||
|
|
||||||
/* Determine if this is an "acc enter data". */
|
|
||||||
for (i = 0; i < mapnum; ++i)
|
|
||||||
{
|
|
||||||
unsigned char kind = kinds[i] & 0xff;
|
|
||||||
|
|
||||||
if (kind == GOMP_MAP_POINTER
|
|
||||||
|| kind == GOMP_MAP_TO_PSET
|
|
||||||
|| kind == GOMP_MAP_STRUCT)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (kind == GOMP_MAP_FORCE_ALLOC
|
|
||||||
|| kind == GOMP_MAP_FORCE_PRESENT
|
|
||||||
|| kind == GOMP_MAP_ATTACH
|
|
||||||
|| kind == GOMP_MAP_FORCE_TO
|
|
||||||
|| kind == GOMP_MAP_TO
|
|
||||||
|| kind == GOMP_MAP_ALLOC)
|
|
||||||
{
|
|
||||||
data_enter = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (kind == GOMP_MAP_RELEASE
|
|
||||||
|| kind == GOMP_MAP_DELETE
|
|
||||||
|| kind == GOMP_MAP_DETACH
|
|
||||||
|| kind == GOMP_MAP_FORCE_DETACH
|
|
||||||
|| kind == GOMP_MAP_FROM
|
|
||||||
|| kind == GOMP_MAP_FORCE_FROM)
|
|
||||||
break;
|
|
||||||
|
|
||||||
gomp_fatal (">>>> GOACC_enter_exit_data UNHANDLED kind 0x%.2x",
|
|
||||||
kind);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool profiling_p = GOACC_PROFILING_DISPATCH_P (true);
|
bool profiling_p = GOACC_PROFILING_DISPATCH_P (true);
|
||||||
|
|
||||||
acc_prof_info prof_info;
|
acc_prof_info prof_info;
|
||||||
|
@ -1433,13 +1399,7 @@ GOACC_enter_exit_data (int flags_m, size_t mapnum, void **hostaddrs,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (num_waits)
|
if (num_waits)
|
||||||
{
|
goacc_wait (async, num_waits, ap);
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start (ap, num_waits);
|
|
||||||
goacc_wait (async, num_waits, &ap);
|
|
||||||
va_end (ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
goacc_aq aq = get_goacc_asyncqueue (async);
|
goacc_aq aq = get_goacc_asyncqueue (async);
|
||||||
|
|
||||||
|
@ -1462,6 +1422,52 @@ GOACC_enter_exit_data (int flags_m, size_t mapnum, void **hostaddrs,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GOACC_enter_exit_data (int flags_m, size_t mapnum, void **hostaddrs,
|
||||||
|
size_t *sizes, unsigned short *kinds, int async,
|
||||||
|
int num_waits, ...)
|
||||||
|
{
|
||||||
|
/* Determine if this is an OpenACC "enter data". */
|
||||||
|
bool data_enter = false;
|
||||||
|
for (size_t i = 0; i < mapnum; ++i)
|
||||||
|
{
|
||||||
|
unsigned char kind = kinds[i] & 0xff;
|
||||||
|
|
||||||
|
if (kind == GOMP_MAP_POINTER
|
||||||
|
|| kind == GOMP_MAP_TO_PSET
|
||||||
|
|| kind == GOMP_MAP_STRUCT)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (kind == GOMP_MAP_FORCE_ALLOC
|
||||||
|
|| kind == GOMP_MAP_FORCE_PRESENT
|
||||||
|
|| kind == GOMP_MAP_ATTACH
|
||||||
|
|| kind == GOMP_MAP_FORCE_TO
|
||||||
|
|| kind == GOMP_MAP_TO
|
||||||
|
|| kind == GOMP_MAP_ALLOC)
|
||||||
|
{
|
||||||
|
data_enter = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (kind == GOMP_MAP_RELEASE
|
||||||
|
|| kind == GOMP_MAP_DELETE
|
||||||
|
|| kind == GOMP_MAP_DETACH
|
||||||
|
|| kind == GOMP_MAP_FORCE_DETACH
|
||||||
|
|| kind == GOMP_MAP_FROM
|
||||||
|
|| kind == GOMP_MAP_FORCE_FROM)
|
||||||
|
break;
|
||||||
|
|
||||||
|
gomp_fatal (">>>> GOACC_enter_exit_data UNHANDLED kind 0x%.2x",
|
||||||
|
kind);
|
||||||
|
}
|
||||||
|
|
||||||
|
va_list ap;
|
||||||
|
va_start (ap, num_waits);
|
||||||
|
goacc_enter_exit_data_internal (flags_m, mapnum, hostaddrs, sizes, kinds,
|
||||||
|
data_enter, async, num_waits, &ap);
|
||||||
|
va_end (ap);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
GOACC_declare (int flags_m, size_t mapnum,
|
GOACC_declare (int flags_m, size_t mapnum,
|
||||||
void **hostaddrs, size_t *sizes, unsigned short *kinds)
|
void **hostaddrs, size_t *sizes, unsigned short *kinds)
|
||||||
|
@ -1475,32 +1481,26 @@ GOACC_declare (int flags_m, size_t mapnum,
|
||||||
|
|
||||||
switch (kind)
|
switch (kind)
|
||||||
{
|
{
|
||||||
case GOMP_MAP_FORCE_ALLOC:
|
|
||||||
case GOMP_MAP_FORCE_FROM:
|
|
||||||
case GOMP_MAP_FORCE_TO:
|
|
||||||
case GOMP_MAP_RELEASE:
|
|
||||||
case GOMP_MAP_DELETE:
|
|
||||||
GOACC_enter_exit_data (flags_m, 1, &hostaddrs[i], &sizes[i],
|
|
||||||
&kinds[i], GOMP_ASYNC_SYNC, 0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GOMP_MAP_FORCE_DEVICEPTR:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GOMP_MAP_ALLOC:
|
case GOMP_MAP_ALLOC:
|
||||||
if (!acc_is_present (hostaddrs[i], sizes[i]))
|
if (acc_is_present (hostaddrs[i], sizes[i]))
|
||||||
GOACC_enter_exit_data (flags_m, 1, &hostaddrs[i], &sizes[i],
|
continue;
|
||||||
&kinds[i], GOMP_ASYNC_SYNC, 0);
|
/* FALLTHRU */
|
||||||
break;
|
case GOMP_MAP_FORCE_ALLOC:
|
||||||
|
|
||||||
case GOMP_MAP_TO:
|
case GOMP_MAP_TO:
|
||||||
GOACC_enter_exit_data (flags_m, 1, &hostaddrs[i], &sizes[i],
|
case GOMP_MAP_FORCE_TO:
|
||||||
&kinds[i], GOMP_ASYNC_SYNC, 0);
|
goacc_enter_exit_data_internal (flags_m, 1, &hostaddrs[i], &sizes[i],
|
||||||
|
&kinds[i], true, GOMP_ASYNC_SYNC, 0, NULL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GOMP_MAP_FROM:
|
case GOMP_MAP_FROM:
|
||||||
GOACC_enter_exit_data (flags_m, 1, &hostaddrs[i], &sizes[i],
|
case GOMP_MAP_FORCE_FROM:
|
||||||
&kinds[i], GOMP_ASYNC_SYNC, 0);
|
case GOMP_MAP_RELEASE:
|
||||||
|
case GOMP_MAP_DELETE:
|
||||||
|
goacc_enter_exit_data_internal (flags_m, 1, &hostaddrs[i], &sizes[i],
|
||||||
|
&kinds[i], false, GOMP_ASYNC_SYNC, 0, NULL);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GOMP_MAP_FORCE_DEVICEPTR:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GOMP_MAP_FORCE_PRESENT:
|
case GOMP_MAP_FORCE_PRESENT:
|
||||||
|
|
Loading…
Reference in New Issue