1 #include <stdlib.h>
2
3 #define N (1024 * 512)
4 #define COUNTERTYPE unsigned int
5
6 int
7 main (void)
8 {
9 unsigned int *__restrict a;
10 unsigned int *__restrict b;
11 unsigned int *__restrict c;
12
13 a = (unsigned int *__restrict)malloc (N * sizeof (unsigned int));
14 b = (unsigned int *__restrict)malloc (N * sizeof (unsigned int));
15 c = (unsigned int *__restrict)malloc (N * sizeof (unsigned int));
16
17 #pragma acc enter data create (a[0:N])
18 #pragma acc kernels present (a[0:N])
19 {
20 for (COUNTERTYPE i = 0; i < N; i++)
21 a[i] = i * 2;
22 }
23 #pragma acc exit data copyout (a[0:N])
24
25 #pragma acc enter data create (b[0:N])
26 #pragma acc kernels present (b[0:N])
27 {
28 for (COUNTERTYPE i = 0; i < N; i++)
29 b[i] = i * 4;
30 }
31 #pragma acc exit data copyout (b[0:N])
32
33
34 #pragma acc enter data copyin (a[0:N], b[0:N]) create (c[0:N])
35 #pragma acc kernels present (a[0:N], b[0:N], c[0:N])
36 {
37 for (COUNTERTYPE ii = 0; ii < N; ii++)
38 c[ii] = a[ii] + b[ii];
39 }
40 #pragma acc exit data copyout (c[0:N])
41
42 for (COUNTERTYPE i = 0; i < N; i++)
43 if (c[i] != a[i] + b[i])
44 abort ();
45
46 free (a);
47 free (b);
48 free (c);
49
50 return 0;
51 }