61 lines
1,008 B
C
61 lines
1,008 B
C
|
/* { dg-skip-if "" { *-*-* } { "-DACC_MEM_SHARED=1" } } */
|
||
|
|
||
|
#include <openacc.h>
|
||
|
#include <assert.h>
|
||
|
|
||
|
#define N 1024
|
||
|
|
||
|
struct mystr {
|
||
|
int *data;
|
||
|
};
|
||
|
|
||
|
static void
|
||
|
test (unsigned variant)
|
||
|
{
|
||
|
int arr[N];
|
||
|
struct mystr s;
|
||
|
|
||
|
s.data = arr;
|
||
|
|
||
|
acc_copyin (&s, sizeof (s));
|
||
|
acc_create (s.data, N * sizeof (int));
|
||
|
|
||
|
for (int i = 0; i < 20; i++)
|
||
|
{
|
||
|
if ((variant + i) % 1)
|
||
|
{
|
||
|
#pragma acc enter data attach(s.data)
|
||
|
}
|
||
|
else
|
||
|
acc_attach ((void **) &s.data);
|
||
|
|
||
|
if ((variant + i) % 2)
|
||
|
{
|
||
|
#pragma acc exit data detach(s.data)
|
||
|
}
|
||
|
else
|
||
|
acc_detach ((void **) &s.data);
|
||
|
}
|
||
|
|
||
|
assert (acc_is_present (arr, N * sizeof (int)));
|
||
|
assert (acc_is_present (&s, sizeof (s)));
|
||
|
|
||
|
acc_delete (arr, N * sizeof (int));
|
||
|
|
||
|
assert (!acc_is_present (arr, N * sizeof (int)));
|
||
|
|
||
|
acc_copyout (&s, sizeof (s));
|
||
|
|
||
|
assert (!acc_is_present (&s, sizeof (s)));
|
||
|
assert (s.data == arr);
|
||
|
}
|
||
|
|
||
|
int
|
||
|
main (int argc, char *argv[])
|
||
|
{
|
||
|
for (unsigned variant = 0; variant < 4; ++variant)
|
||
|
test (variant);
|
||
|
|
||
|
return 0;
|
||
|
}
|