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 }