Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/c-c++-common/goacc/nested-reductions.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
1 /* Test cases of nested reduction loops that should compile cleanly. */ | |
2 | |
3 void acc_parallel (void) | |
4 { | |
5 int i, j, k, sum, diff; | |
6 | |
7 #pragma acc parallel | |
8 { | |
9 #pragma acc loop reduction(+:sum) | |
10 for (i = 0; i < 10; i++) | |
11 for (j = 0; j < 10; j++) | |
12 for (k = 0; k < 10; k++) | |
13 sum = 1; | |
14 | |
15 #pragma acc loop collapse(2) reduction(+:sum) | |
16 for (i = 0; i < 10; i++) | |
17 for (j = 0; j < 10; j++) | |
18 for (k = 0; k < 10; k++) | |
19 sum = 1; | |
20 | |
21 #pragma acc loop reduction(+:sum) | |
22 for (i = 0; i < 10; i++) | |
23 #pragma acc loop reduction(+:sum) | |
24 for (j = 0; j < 10; j++) | |
25 for (k = 0; k < 10; k++) | |
26 sum = 1; | |
27 | |
28 #pragma acc loop reduction(+:sum) | |
29 for (i = 0; i < 10; i++) | |
30 #pragma acc loop collapse(2) reduction(+:sum) | |
31 for (j = 0; j < 10; j++) | |
32 for (k = 0; k < 10; k++) | |
33 sum = 1; | |
34 | |
35 #pragma acc loop reduction(+:sum) | |
36 for (i = 0; i < 10; i++) | |
37 for (j = 0; j < 10; j++) | |
38 #pragma acc loop reduction(+:sum) | |
39 for (k = 0; k < 10; k++) | |
40 sum = 1; | |
41 | |
42 #pragma acc loop reduction(+:sum) | |
43 for (i = 0; i < 10; i++) | |
44 #pragma acc loop reduction(+:sum) | |
45 for (j = 0; j < 10; j++) | |
46 #pragma acc loop reduction(+:sum) | |
47 for (k = 0; k < 10; k++) | |
48 sum = 1; | |
49 | |
50 #pragma acc loop reduction(+:sum) reduction(-:diff) | |
51 for (i = 0; i < 10; i++) | |
52 { | |
53 #pragma acc loop reduction(+:sum) | |
54 for (j = 0; j < 10; j++) | |
55 #pragma acc loop reduction(+:sum) | |
56 for (k = 0; k < 10; k++) | |
57 sum = 1; | |
58 | |
59 #pragma acc loop reduction(-:diff) | |
60 for (j = 0; j < 10; j++) | |
61 #pragma acc loop reduction(-:diff) | |
62 for (k = 0; k < 10; k++) | |
63 diff = 1; | |
64 } | |
65 } | |
66 } | |
67 | |
68 /* The same tests as above, but using a combined parallel loop construct. */ | |
69 | |
70 void acc_parallel_loop (void) | |
71 { | |
72 int i, j, k, l, sum, diff; | |
73 | |
74 #pragma acc parallel loop | |
75 for (int h = 0; h < 10; ++h) | |
76 { | |
77 #pragma acc loop reduction(+:sum) | |
78 for (i = 0; i < 10; i++) | |
79 for (j = 0; j < 10; j++) | |
80 for (k = 0; k < 10; k++) | |
81 sum = 1; | |
82 | |
83 #pragma acc loop collapse(2) reduction(+:sum) | |
84 for (i = 0; i < 10; i++) | |
85 for (j = 0; j < 10; j++) | |
86 for (k = 0; k < 10; k++) | |
87 sum = 1; | |
88 | |
89 #pragma acc loop reduction(+:sum) | |
90 for (i = 0; i < 10; i++) | |
91 #pragma acc loop reduction(+:sum) | |
92 for (j = 0; j < 10; j++) | |
93 for (k = 0; k < 10; k++) | |
94 sum = 1; | |
95 | |
96 #pragma acc loop reduction(+:sum) | |
97 for (i = 0; i < 10; i++) | |
98 #pragma acc loop collapse(2) reduction(+:sum) | |
99 for (j = 0; j < 10; j++) | |
100 for (k = 0; k < 10; k++) | |
101 sum = 1; | |
102 | |
103 #pragma acc loop reduction(+:sum) | |
104 for (i = 0; i < 10; i++) | |
105 for (j = 0; j < 10; j++) | |
106 #pragma acc loop reduction(+:sum) | |
107 for (k = 0; k < 10; k++) | |
108 sum = 1; | |
109 | |
110 #pragma acc loop reduction(+:sum) | |
111 for (i = 0; i < 10; i++) | |
112 #pragma acc loop reduction(+:sum) // { dg-warning "insufficient partitioning available to parallelize loop" } | |
113 for (j = 0; j < 10; j++) | |
114 #pragma acc loop reduction(+:sum) | |
115 for (k = 0; k < 10; k++) | |
116 sum = 1; | |
117 | |
118 #pragma acc loop reduction(+:sum) reduction(-:diff) | |
119 for (i = 0; i < 10; i++) | |
120 { | |
121 #pragma acc loop reduction(+:sum) // { dg-warning "insufficient partitioning available to parallelize loop" } | |
122 for (j = 0; j < 10; j++) | |
123 #pragma acc loop reduction(+:sum) | |
124 for (k = 0; k < 10; k++) | |
125 sum = 1; | |
126 | |
127 #pragma acc loop reduction(-:diff) // { dg-warning "insufficient partitioning available to parallelize loop" } | |
128 for (j = 0; j < 10; j++) | |
129 #pragma acc loop reduction(-:diff) | |
130 for (k = 0; k < 10; k++) | |
131 diff = 1; | |
132 } | |
133 } | |
134 } | |
135 | |
136 /* The same tests as above, but now the outermost reduction clause is on | |
137 the parallel region, not the outermost loop. */ | |
138 | |
139 void acc_parallel_reduction (void) | |
140 { | |
141 int i, j, k, sum, diff; | |
142 | |
143 #pragma acc parallel reduction(+:sum) | |
144 { | |
145 for (i = 0; i < 10; i++) | |
146 for (j = 0; j < 10; j++) | |
147 for (k = 0; k < 10; k++) | |
148 sum = 1; | |
149 | |
150 for (i = 0; i < 10; i++) | |
151 #pragma acc loop | |
152 for (j = 0; j < 10; j++) | |
153 for (k = 0; k < 10; k++) | |
154 sum = 1; | |
155 | |
156 #pragma acc loop reduction(+:sum) | |
157 for (i = 0; i < 10; i++) | |
158 for (j = 0; j < 10; j++) | |
159 #pragma acc loop reduction(+:sum) | |
160 for (k = 0; k < 10; k++) | |
161 sum = 1; | |
162 | |
163 for (i = 0; i < 10; i++) | |
164 for (j = 0; j < 10; j++) | |
165 #pragma acc loop | |
166 for (k = 0; k < 10; k++) | |
167 sum = 1; | |
168 | |
169 #pragma acc loop reduction(+:sum) | |
170 for (i = 0; i < 10; i++) | |
171 #pragma acc loop reduction(+:sum) | |
172 for (j = 0; j < 10; j++) | |
173 #pragma acc loop reduction(+:sum) | |
174 for (k = 0; k < 10; k++) | |
175 sum = 1; | |
176 | |
177 #pragma acc loop reduction(+:sum) reduction(-:diff) | |
178 for (i = 0; i < 10; i++) | |
179 { | |
180 #pragma acc loop reduction(+:sum) | |
181 for (j = 0; j < 10; j++) | |
182 #pragma acc loop reduction(+:sum) | |
183 for (k = 0; k < 10; k++) | |
184 sum = 1; | |
185 | |
186 #pragma acc loop reduction(-:diff) | |
187 for (j = 0; j < 10; j++) | |
188 #pragma acc loop reduction(-:diff) | |
189 for (k = 0; k < 10; k++) | |
190 diff = 1; | |
191 } | |
192 | |
193 #pragma acc loop reduction(+:sum) | |
194 for (i = 0; i < 10; i++) | |
195 { | |
196 #pragma acc loop reduction(+:sum) | |
197 for (j = 0; j < 10; j++) | |
198 #pragma acc loop reduction(+:sum) | |
199 for (k = 0; k < 10; k++) | |
200 sum = 1; | |
201 | |
202 #pragma acc loop reduction(-:diff) | |
203 for (j = 0; j < 10; j++) | |
204 #pragma acc loop reduction(-:diff) | |
205 for (k = 0; k < 10; k++) | |
206 diff = 1; | |
207 } | |
208 | |
209 #pragma acc loop reduction(+:sum) | |
210 for (i = 0; i < 10; i++) | |
211 { | |
212 #pragma acc loop reduction(+:sum) | |
213 for (j = 0; j < 10; j++) | |
214 #pragma acc loop reduction(+:sum) | |
215 for (k = 0; k < 10; k++) | |
216 sum = 1; | |
217 | |
218 #pragma acc loop | |
219 for (j = 0; j < 10; j++) | |
220 #pragma acc loop reduction(-:diff) | |
221 for (k = 0; k < 10; k++) | |
222 diff = 1; | |
223 } | |
224 } | |
225 } | |
226 | |
227 /* The same tests as above, but using a combined parallel loop construct, and | |
228 the outermost reduction clause is on that one, not the outermost loop. */ | |
229 void acc_parallel_loop_reduction (void) | |
230 { | |
231 int i, j, k, sum, diff; | |
232 | |
233 #pragma acc parallel loop reduction(+:sum) | |
234 for (int h = 0; h < 10; ++h) | |
235 { | |
236 for (i = 0; i < 10; i++) | |
237 for (j = 0; j < 10; j++) | |
238 for (k = 0; k < 10; k++) | |
239 sum = 1; | |
240 | |
241 for (i = 0; i < 10; i++) | |
242 #pragma acc loop | |
243 for (j = 0; j < 10; j++) | |
244 for (k = 0; k < 10; k++) | |
245 sum = 1; | |
246 | |
247 #pragma acc loop reduction(+:sum) | |
248 for (i = 0; i < 10; i++) | |
249 for (j = 0; j < 10; j++) | |
250 #pragma acc loop reduction(+:sum) | |
251 for (k = 0; k < 10; k++) | |
252 sum = 1; | |
253 | |
254 for (i = 0; i < 10; i++) | |
255 for (j = 0; j < 10; j++) | |
256 #pragma acc loop | |
257 for (k = 0; k < 10; k++) | |
258 sum = 1; | |
259 | |
260 #pragma acc loop reduction(+:sum) | |
261 for (i = 0; i < 10; i++) | |
262 #pragma acc loop reduction(+:sum) // { dg-warning "insufficient partitioning available to parallelize loop" } | |
263 for (j = 0; j < 10; j++) | |
264 #pragma acc loop reduction(+:sum) | |
265 for (k = 0; k < 10; k++) | |
266 sum = 1; | |
267 | |
268 #pragma acc loop reduction(+:sum) reduction(-:diff) | |
269 for (i = 0; i < 10; i++) | |
270 { | |
271 #pragma acc loop reduction(+:sum) // { dg-warning "insufficient partitioning available to parallelize loop" } | |
272 for (j = 0; j < 10; j++) | |
273 #pragma acc loop reduction(+:sum) | |
274 for (k = 0; k < 10; k++) | |
275 sum = 1; | |
276 | |
277 #pragma acc loop reduction(-:diff) // { dg-warning "insufficient partitioning available to parallelize loop" } | |
278 for (j = 0; j < 10; j++) | |
279 #pragma acc loop reduction(-:diff) | |
280 for (k = 0; k < 10; k++) | |
281 diff = 1; | |
282 } | |
283 | |
284 #pragma acc loop reduction(+:sum) | |
285 for (i = 0; i < 10; i++) | |
286 { | |
287 #pragma acc loop reduction(+:sum) // { dg-warning "insufficient partitioning available to parallelize loop" } | |
288 for (j = 0; j < 10; j++) | |
289 #pragma acc loop reduction(+:sum) | |
290 for (k = 0; k < 10; k++) | |
291 sum = 1; | |
292 | |
293 #pragma acc loop reduction(-:diff) // { dg-warning "insufficient partitioning available to parallelize loop" } | |
294 for (j = 0; j < 10; j++) | |
295 #pragma acc loop reduction(-:diff) | |
296 for (k = 0; k < 10; k++) | |
297 diff = 1; | |
298 } | |
299 | |
300 #pragma acc loop reduction(+:sum) | |
301 for (i = 0; i < 10; i++) | |
302 { | |
303 #pragma acc loop reduction(+:sum) // { dg-warning "insufficient partitioning available to parallelize loop" } | |
304 for (j = 0; j < 10; j++) | |
305 #pragma acc loop reduction(+:sum) | |
306 for (k = 0; k < 10; k++) | |
307 sum = 1; | |
308 | |
309 #pragma acc loop // { dg-warning "insufficient partitioning available to parallelize loop" } | |
310 for (j = 0; j < 10; j++) | |
311 #pragma acc loop reduction(-:diff) | |
312 for (k = 0; k < 10; k++) | |
313 diff = 1; | |
314 } | |
315 } | |
316 } | |
317 | |
318 /* The same tests as above, but inside a routine construct. */ | |
319 #pragma acc routine gang | |
320 void acc_routine (void) | |
321 { | |
322 int i, j, k, sum, diff; | |
323 | |
324 { | |
325 #pragma acc loop reduction(+:sum) | |
326 for (i = 0; i < 10; i++) | |
327 for (j = 0; j < 10; j++) | |
328 for (k = 0; k < 10; k++) | |
329 sum = 1; | |
330 | |
331 #pragma acc loop collapse(2) reduction(+:sum) | |
332 for (i = 0; i < 10; i++) | |
333 for (j = 0; j < 10; j++) | |
334 for (k = 0; k < 10; k++) | |
335 sum = 1; | |
336 | |
337 #pragma acc loop reduction(+:sum) | |
338 for (i = 0; i < 10; i++) | |
339 #pragma acc loop reduction(+:sum) | |
340 for (j = 0; j < 10; j++) | |
341 for (k = 0; k < 10; k++) | |
342 sum = 1; | |
343 | |
344 #pragma acc loop reduction(+:sum) | |
345 for (i = 0; i < 10; i++) | |
346 #pragma acc loop collapse(2) reduction(+:sum) | |
347 for (j = 0; j < 10; j++) | |
348 for (k = 0; k < 10; k++) | |
349 sum = 1; | |
350 | |
351 #pragma acc loop reduction(+:sum) | |
352 for (i = 0; i < 10; i++) | |
353 for (j = 0; j < 10; j++) | |
354 #pragma acc loop reduction(+:sum) | |
355 for (k = 0; k < 10; k++) | |
356 sum = 1; | |
357 | |
358 #pragma acc loop reduction(+:sum) | |
359 for (i = 0; i < 10; i++) | |
360 #pragma acc loop reduction(+:sum) | |
361 for (j = 0; j < 10; j++) | |
362 #pragma acc loop reduction(+:sum) | |
363 for (k = 0; k < 10; k++) | |
364 sum = 1; | |
365 | |
366 #pragma acc loop reduction(+:sum) reduction(-:diff) | |
367 for (i = 0; i < 10; i++) | |
368 { | |
369 #pragma acc loop reduction(+:sum) | |
370 for (j = 0; j < 10; j++) | |
371 #pragma acc loop reduction(+:sum) | |
372 for (k = 0; k < 10; k++) | |
373 sum = 1; | |
374 | |
375 #pragma acc loop reduction(-:diff) | |
376 for (j = 0; j < 10; j++) | |
377 #pragma acc loop reduction(-:diff) | |
378 for (k = 0; k < 10; k++) | |
379 diff = 1; | |
380 } | |
381 } | |
382 } | |
383 | |
384 void acc_kernels (void) | |
385 { | |
386 int i, j, k, sum, diff; | |
387 | |
388 /* FIXME: These tests are not meaningful yet because reductions in | |
389 kernels regions are not supported yet. */ | |
390 #pragma acc kernels | |
391 { | |
392 #pragma acc loop reduction(+:sum) | |
393 for (i = 0; i < 10; i++) | |
394 for (j = 0; j < 10; j++) | |
395 for (k = 0; k < 10; k++) | |
396 sum = 1; | |
397 | |
398 #pragma acc loop reduction(+:sum) | |
399 for (i = 0; i < 10; i++) | |
400 #pragma acc loop reduction(+:sum) | |
401 for (j = 0; j < 10; j++) | |
402 for (k = 0; k < 10; k++) | |
403 sum = 1; | |
404 | |
405 #pragma acc loop reduction(+:sum) | |
406 for (i = 0; i < 10; i++) | |
407 for (j = 0; j < 10; j++) | |
408 #pragma acc loop reduction(+:sum) | |
409 for (k = 0; k < 10; k++) | |
410 sum = 1; | |
411 | |
412 #pragma acc loop reduction(+:sum) | |
413 for (i = 0; i < 10; i++) | |
414 #pragma acc loop reduction(+:sum) | |
415 for (j = 0; j < 10; j++) | |
416 #pragma acc loop reduction(+:sum) | |
417 for (k = 0; k < 10; k++) | |
418 sum = 1; | |
419 } | |
420 } |