1 /* Test asynchronous, unstructed data regions, directives variant. */
2 /* See also data-2-lib.c. */
9 main (int argc
, char **argv
)
12 float *a
, *b
, *c
, *d
, *e
;
16 nbytes
= N
* sizeof (float);
18 a
= (float *) malloc (nbytes
);
19 b
= (float *) malloc (nbytes
);
20 c
= (float *) malloc (nbytes
);
21 d
= (float *) malloc (nbytes
);
22 e
= (float *) malloc (nbytes
);
24 for (i
= 0; i
< N
; i
++)
30 #pragma acc enter data copyin (a[0:N]) async
31 #pragma acc enter data copyin (b[0:N]) async
32 #pragma acc enter data copyin (N) async
34 #pragma acc parallel present (a[0:N], b[0:N], N) async
36 for (i
= 0; i
< N
; i
++)
39 #pragma acc update self (a[0:N]) async
40 #pragma acc update self (b[0:N]) async
44 for (i
= 0; i
< N
; i
++)
50 for (i
= 0; i
< N
; i
++)
56 #pragma acc update device (a[0:N]) async (1)
57 #pragma acc update device (b[0:N]) async (1)
59 #pragma acc parallel present (a[0:N], b[0:N], N) async (1)
61 for (i
= 0; i
< N
; i
++)
64 #pragma acc update self (a[0:N]) async (1)
65 #pragma acc update self (b[0:N]) async (1)
68 /* Test unseen async-argument. */
71 for (i
= 0; i
< N
; i
++)
77 for (i
= 0; i
< N
; i
++)
85 #pragma acc update device (a[0:N]) async (0)
86 #pragma acc update device (b[0:N]) async (1)
87 #pragma acc enter data copyin (c[0:N]) async (2)
88 #pragma acc enter data copyin (d[0:N]) async (3)
90 #pragma acc parallel present (a[0:N], b[0:N], N) wait (0) async (1)
92 for (i
= 0; i
< N
; i
++)
93 b
[i
] = (a
[i
] * a
[i
] * a
[i
]) / a
[i
];
95 #pragma acc parallel present (a[0:N], c[0:N], N) wait (0) async (2)
97 for (i
= 0; i
< N
; i
++)
98 c
[i
] = (a
[i
] + a
[i
] + a
[i
] + a
[i
]) / a
[i
];
100 #pragma acc parallel present (a[0:N], d[0:N], N) wait (0) async (3)
102 for (i
= 0; i
< N
; i
++)
103 d
[i
] = ((a
[i
] * a
[i
] + a
[i
]) / a
[i
]) - a
[i
];
105 #pragma acc update self (a[0:N]) async (0)
106 #pragma acc update self (b[0:N]) async (1)
107 #pragma acc update self (c[0:N]) async (2)
108 #pragma acc update self (d[0:N]) async (3)
110 #pragma acc wait async (0)
113 for (i
= 0; i
< N
; i
++)
115 assert (a
[i
] == 3.0);
116 assert (b
[i
] == 9.0);
117 assert (c
[i
] == 4.0);
118 assert (d
[i
] == 1.0);
121 for (i
= 0; i
< N
; i
++)
130 #pragma acc update device (a[0:N]) async (10)
131 #pragma acc update device (b[0:N]) async (11)
132 #pragma acc update device (c[0:N]) async (12)
133 #pragma acc update device (d[0:N]) async (13)
134 #pragma acc enter data copyin (e[0:N]) async (14)
136 #pragma acc parallel present (a[0:N], b[0:N], N) wait (10) async (11)
137 for (int ii
= 0; ii
< N
; ii
++)
138 b
[ii
] = (a
[ii
] * a
[ii
] * a
[ii
]) / a
[ii
];
140 #pragma acc parallel present (a[0:N], c[0:N], N) wait (10) async (12)
141 for (int ii
= 0; ii
< N
; ii
++)
142 c
[ii
] = (a
[ii
] + a
[ii
] + a
[ii
] + a
[ii
]) / a
[ii
];
144 #pragma acc parallel present (a[0:N], d[0:N], N) wait (10) async (13)
145 for (int ii
= 0; ii
< N
; ii
++)
146 d
[ii
] = ((a
[ii
] * a
[ii
] + a
[ii
]) / a
[ii
]) - a
[ii
];
148 #pragma acc parallel present (a[0:N], b[0:N], c[0:N], d[0:N], e[0:N], N) wait (11) wait (12) wait (13) async (14)
149 for (int ii
= 0; ii
< N
; ii
++)
150 e
[ii
] = a
[ii
] + b
[ii
] + c
[ii
] + d
[ii
];
152 #pragma acc exit data copyout (a[0:N]) async (10)
153 #pragma acc exit data copyout (b[0:N]) async (11)
154 #pragma acc exit data copyout (c[0:N]) async (12)
155 #pragma acc exit data copyout (d[0:N]) async (13)
156 #pragma acc exit data copyout (e[0:N]) async (14)
157 #pragma acc exit data delete (N) async (15)
160 for (i
= 0; i
< N
; i
++)
162 assert (a
[i
] == 2.0);
163 assert (b
[i
] == 4.0);
164 assert (c
[i
] == 4.0);
165 assert (d
[i
] == 1.0);
166 assert (e
[i
] == 11.0);