1 /* Verify back to back 'async' operations, one data mapping.
2
3 Due to one data mapping, this isn't using the libgomp 'cbuf' buffering.
4 */
5
6
7 #include <stdlib.h>
8
9
10 #define N 128
11
12
13 static void
14 t1 (void)
15 {
16 unsigned int *a;
17 int i;
18 int nbytes;
19
20 nbytes = N * sizeof (unsigned int);
21
22 a = (unsigned int *) malloc (nbytes);
23
24 for (i = 0; i < N; i++)
25 a[i] = 3;
26
27 #pragma acc parallel async copy (a[0:N])
28 for (int ii = 0; ii < N; ii++)
29 a[ii] += 1;
30
31 #pragma acc parallel async copy (a[0:N])
32 for (int ii = 0; ii < N; ii++)
33 a[ii] += 1;
34
35 #pragma acc wait
36
37 for (i = 0; i < N; i++)
38 if (a[i] != 5)
39 abort ();
40 }
41
42
43 static void
44 t2 (void)
45 {
46 unsigned int *a;
47 int i;
48 int nbytes;
49
50 nbytes = N * sizeof (unsigned int);
51
52 a = (unsigned int *) malloc (nbytes);
53
54 #pragma acc data copyin (a[0:N])
55 {
56 for (i = 0; i < N; i++)
57 a[i] = 3;
58
59 #pragma acc update async device (a[0:N])
60 #pragma acc parallel async present (a[0:N])
61 for (int ii = 0; ii < N; ii++)
62 a[ii] += 1;
63 #pragma acc update async host (a[0:N])
64
65 #pragma acc update async device (a[0:N])
66 #pragma acc parallel async present (a[0:N])
67 for (int ii = 0; ii < N; ii++)
68 a[ii] += 1;
69 #pragma acc update async host (a[0:N])
70
71 #pragma acc wait
72 }
73
74 for (i = 0; i < N; i++)
75 if (a[i] != 5)
76 abort ();
77 }
78
79
80 int
81 main (void)
82 {
83 t1 ();
84
85 t2 ();
86
87 return 0;
88 }