2 ! { dg-additional-options "-w" }
9 integer, parameter :: n
= 10, ng
= 8, nw
= 4, vl
= 32
10 integer :: i
, vresult
, rg
, rw
, rv
, rc
11 logical :: lrg
, lrw
, lrv
, lrc
, lvresult
12 integer, dimension (n
) :: array
28 !$acc parallel num_gangs(ng) copy(rg)
29 !$acc loop reduction(+:rg) gang
35 !$acc parallel num_workers(nw) copy(rw)
36 !$acc loop reduction(+:rw) worker
42 !$acc parallel vector_length(vl) copy(rv)
43 !$acc loop reduction(+:rv) vector
49 !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
50 !$acc loop reduction(+:rc) gang worker vector
58 vresult
= vresult
+ array(i
)
61 if (rg
.ne
. vresult
) call abort
62 if (rw
.ne
. vresult
) call abort
63 if (rv
.ne
. vresult
) call abort
64 if (rc
.ne
. vresult
) call abort
76 !$acc parallel num_gangs(ng) copy(rg)
77 !$acc loop reduction(*:rg) gang
83 !$acc parallel num_workers(nw) copy(rw)
84 !$acc loop reduction(*:rw) worker
90 !$acc parallel vector_length(vl) copy(rv)
91 !$acc loop reduction(*:rv) vector
97 !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
98 !$acc loop reduction(*:rc) gang worker vector
106 vresult
= vresult
* array(i
)
109 if (rg
.ne
. vresult
) call abort
110 if (rw
.ne
. vresult
) call abort
111 if (rv
.ne
. vresult
) call abort
112 if (rc
.ne
. vresult
) call abort
124 !$acc parallel num_gangs(ng) copy(rg)
125 !$acc loop reduction(max:rg) gang
127 rg
= max (rg
, array(i
))
131 !$acc parallel num_workers(nw) copy(rw)
132 !$acc loop reduction(max:rw) worker
134 rw
= max (rw
, array(i
))
138 !$acc parallel vector_length(vl) copy(rv)
139 !$acc loop reduction(max:rv) vector
141 rv
= max (rv
, array(i
))
145 !$acc parallel num_gangs(ng) Num_workers(nw) vector_length(vl) copy(rc)
146 !$acc loop reduction(max:rc) gang worker vector
148 rc
= max (rc
, array(i
))
154 vresult
= max (vresult
, array(i
))
157 if (rg
.ne
. vresult
) call abort
158 if (rw
.ne
. vresult
) call abort
159 if (rv
.ne
. vresult
) call abort
160 if (rc
.ne
. vresult
) call abort
172 !$acc parallel num_gangs(ng) copy(rg)
173 !$acc loop reduction(min:rg) gang
175 rg
= min (rg
, array(i
))
179 !$acc parallel num_workers(nw) copy(rw)
180 !$acc loop reduction(min:rw) worker
182 rw
= min (rw
, array(i
))
186 !$acc parallel vector_length(vl) copy(rv)
187 !$acc loop reduction(min:rv) vector
189 rv
= min (rv
, array(i
))
193 !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
194 !$acc loop reduction(min:rc) gang worker vector
196 rc
= min (rc
, array(i
))
202 vresult
= min (vresult
, array(i
))
205 if (rg
.ne
. vresult
) call abort
206 if (rw
.ne
. vresult
) call abort
207 if (rv
.ne
. vresult
) call abort
208 if (rc
.ne
. vresult
) call abort
220 !$acc parallel num_gangs(ng) copy(rg)
221 !$acc loop reduction(iand:rg) gang
223 rg
= iand (rg
, array(i
))
227 !$acc parallel num_workers(nw) copy(rw)
228 !$acc loop reduction(iand:rw) worker
230 rw
= iand (rw
, array(i
))
234 !$acc parallel vector_length(vl) copy(rv)
235 !$acc loop reduction(iand:rv) vector
237 rv
= iand (rv
, array(i
))
241 !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
242 !$acc loop reduction(iand:rc) gang worker vector
244 rc
= iand (rc
, array(i
))
250 vresult
= iand (vresult
, array(i
))
253 if (rg
.ne
. vresult
) call abort
254 if (rw
.ne
. vresult
) call abort
255 if (rv
.ne
. vresult
) call abort
256 if (rc
.ne
. vresult
) call abort
268 !$acc parallel num_gangs(ng) copy(rg)
269 !$acc loop reduction(ior:rg) gang
271 rg
= ior (rg
, array(i
))
275 !$acc parallel num_workers(nw) copy(rw)
276 !$acc loop reduction(ior:rw) worker
278 rw
= ior (rw
, array(i
))
282 !$acc parallel vector_length(vl) copy(rv)
283 !$acc loop reduction(ior:rv) gang
285 rv
= ior (rv
, array(i
))
289 !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
290 !$acc loop reduction(ior:rc) gang worker vector
292 rc
= ior (rc
, array(i
))
298 vresult
= ior (vresult
, array(i
))
301 if (rg
.ne
. vresult
) call abort
302 if (rw
.ne
. vresult
) call abort
303 if (rv
.ne
. vresult
) call abort
304 if (rc
.ne
. vresult
) call abort
316 !$acc parallel num_gangs(ng) copy(rg)
317 !$acc loop reduction(ieor:rg) gang
319 rg
= ieor (rg
, array(i
))
323 !$acc parallel num_workers(nw) copy(rw)
324 !$acc loop reduction(ieor:rw) worker
326 rw
= ieor (rw
, array(i
))
330 !$acc parallel vector_length(vl) copy(rv)
331 !$acc loop reduction(ieor:rv) vector
333 rv
= ieor (rv
, array(i
))
337 !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(rc)
338 !$acc loop reduction(ieor:rc) gang worker vector
340 rc
= ieor (rc
, array(i
))
346 vresult
= ieor (vresult
, array(i
))
349 if (rg
.ne
. vresult
) call abort
350 if (rw
.ne
. vresult
) call abort
351 if (rv
.ne
. vresult
) call abort
352 if (rc
.ne
. vresult
) call abort
364 !$acc parallel num_gangs(ng) copy(lrg)
365 !$acc loop reduction(.and.:lrg) gang
367 lrg
= lrg
.and
. (array(i
) .ge
. 5)
371 !$acc parallel num_workers(nw) copy(lrw)
372 !$acc loop reduction(.and.:lrw) worker
374 lrw
= lrw
.and
. (array(i
) .ge
. 5)
378 !$acc parallel vector_length(vl) copy(lrv)
379 !$acc loop reduction(.and.:lrv) vector
381 lrv
= lrv
.and
. (array(i
) .ge
. 5)
385 !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
386 !$acc loop reduction(.and.:lrc) gang worker vector
388 lrc
= lrc
.and
. (array(i
) .ge
. 5)
394 lvresult
= lvresult
.and
. (array(i
) .ge
. 5)
397 if (lrg
.neqv
. lvresult
) call abort
398 if (lrw
.neqv
. lvresult
) call abort
399 if (lrv
.neqv
. lvresult
) call abort
400 if (lrc
.neqv
. lvresult
) call abort
412 !$acc parallel num_gangs(ng) copy(lrg)
413 !$acc loop reduction(.or.:lrg) gang
415 lrg
= lrg
.or
. (array(i
) .ge
. 5)
419 !$acc parallel num_workers(nw) copy(lrw)
420 !$acc loop reduction(.or.:lrw) worker
422 lrw
= lrw
.or
. (array(i
) .ge
. 5)
426 !$acc parallel vector_length(vl) copy(lrv)
427 !$acc loop reduction(.or.:lrv) vector
429 lrv
= lrv
.or
. (array(i
) .ge
. 5)
433 !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
434 !$acc loop reduction(.or.:lrc) gang worker vector
436 lrc
= lrc
.or
. (array(i
) .ge
. 5)
442 lvresult
= lvresult
.or
. (array(i
) .ge
. 5)
445 if (lrg
.neqv
. lvresult
) call abort
446 if (lrw
.neqv
. lvresult
) call abort
447 if (lrv
.neqv
. lvresult
) call abort
448 if (lrc
.neqv
. lvresult
) call abort
460 !$acc parallel num_gangs(ng) copy(lrg)
461 !$acc loop reduction(.eqv.:lrg) gang
463 lrg
= lrg
.eqv
. (array(i
) .ge
. 5)
467 !$acc parallel num_workers(nw) copy(lrw)
468 !$acc loop reduction(.eqv.:lrw) worker
470 lrw
= lrw
.eqv
. (array(i
) .ge
. 5)
474 !$acc parallel vector_length(vl) copy(lrv)
475 !$acc loop reduction(.eqv.:lrv) vector
477 lrv
= lrv
.eqv
. (array(i
) .ge
. 5)
481 !$acc parallel num_workers(nw) vector_length(vl) copy(lrc)
482 !$acc loop reduction(.eqv.:lrc) gang worker vector
484 lrc
= lrc
.eqv
. (array(i
) .ge
. 5)
490 lvresult
= lvresult
.eqv
. (array(i
) .ge
. 5)
493 if (lrg
.neqv
. lvresult
) call abort
494 if (lrw
.neqv
. lvresult
) call abort
495 if (lrv
.neqv
. lvresult
) call abort
496 if (lrc
.neqv
. lvresult
) call abort
499 ! '.neqv.' reductions
508 !$acc parallel num_gangs(ng) copy(lrg)
509 !$acc loop reduction(.neqv.:lrg) gang
511 lrg
= lrg
.neqv
. (array(i
) .ge
. 5)
515 !$acc parallel num_workers(nw) copy(lrw)
516 !$acc loop reduction(.neqv.:lrw) worker
518 lrw
= lrw
.neqv
. (array(i
) .ge
. 5)
522 !$acc parallel vector_length(vl) copy(lrv)
523 !$acc loop reduction(.neqv.:lrv) vector
525 lrv
= lrv
.neqv
. (array(i
) .ge
. 5)
529 !$acc parallel num_gangs(ng) num_workers(nw) vector_length(vl) copy(lrc)
530 !$acc loop reduction(.neqv.:lrc) gang worker vector
532 lrc
= lrc
.neqv
. (array(i
) .ge
. 5)
538 lvresult
= lvresult
.neqv
. (array(i
) .ge
. 5)
541 if (lrg
.neqv
. lvresult
) call abort
542 if (lrw
.neqv
. lvresult
) call abort
543 if (lrv
.neqv
. lvresult
) call abort
544 if (lrc
.neqv
. lvresult
) call abort
545 end program reduction_1