1 /* Test 'no_create' clause on compute construct, with data present on the
2 device. */
3
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <openacc.h>
7
8 #define N 128
9
10 int
11 main (int argc, char *argv[])
12 {
13 int var;
14 int *arr = (int *) malloc (N * sizeof (*arr));
15 int *devptr[2];
16
17 acc_copyin (&var, sizeof (var));
18 acc_copyin (arr, N * sizeof (*arr));
19
20 #pragma acc parallel no_create(var, arr[0:N]) copyout(devptr)
21 {
22 devptr[0] = &var;
23 devptr[1] = &arr[2];
24 }
25 if (acc_hostptr (devptr[0]) != (void *) &var)
26 __builtin_abort ();
27 if (acc_hostptr (devptr[1]) != (void *) &arr[2])
28 __builtin_abort ();
29 #if ACC_MEM_SHARED
30 if (devptr[0] != &var)
31 __builtin_abort ();
32 if (devptr[1] != &arr[2])
33 __builtin_abort ();
34 #else
35 if (devptr[0] == &var)
36 __builtin_abort ();
37 if (devptr[1] == &arr[2])
38 __builtin_abort ();
39 #endif
40
41 #pragma acc parallel no_create(var, arr[0:N]) copyout(devptr) async
42 {
43 devptr[0] = &arr[N - 2];
44 devptr[1] = &var;
45 }
46 #pragma acc wait
47 if (acc_hostptr (devptr[0]) != (void *) &arr[N - 2])
48 __builtin_abort ();
49 if (acc_hostptr (devptr[1]) != (void *) &var)
50 __builtin_abort ();
51 #if ACC_MEM_SHARED
52 if (devptr[0] != &arr[N - 2])
53 __builtin_abort ();
54 if (devptr[1] != &var)
55 __builtin_abort ();
56 #else
57 if (devptr[0] == &arr[N - 2])
58 __builtin_abort ();
59 if (devptr[1] == &var)
60 __builtin_abort ();
61 #endif
62
63 acc_delete (&var, sizeof (var));
64 acc_delete (arr, N * sizeof (*arr));
65
66 free (arr);
67
68 return 0;
69 }