PR c++/86342 - -Wdeprecated-copy and system headers.
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-fortran / par-reduction-2-2.f
blob5694de1aee8e144d4c82da2e4bf1e25aa3a09279
1 ! Test of reduction on parallel directive (with async).
2 ! Variant of "../libgomp.oacc-c-c++-common/par-reduction-2.c".
3 ! Variant using the "openacc" module.
5 ! { dg-do run }
7 PROGRAM MAIN
8 USE OPENACC
9 IMPLICIT NONE
11 INTEGER RES, RES1, RES2
13 RES1 = 0
14 RES2 = 0
16 !$ACC PARALLEL NUM_GANGS(256) NUM_WORKERS(32) VECTOR_LENGTH(32)
17 !$ACC& REDUCTION(+:RES1) COPY(RES1, RES2) ASYNC(1)
18 res1 = res1 + 5
20 !$ACC ATOMIC
21 res2 = res2 + 5
22 !$ACC END PARALLEL
24 IF (ACC_GET_DEVICE_TYPE () .EQ. ACC_DEVICE_HOST) THEN
25 RES = 1 * 5
26 ELSE
27 RES = 256 * 5
28 END IF
30 CALL ACC_ASYNC_WAIT (1)
32 IF (RES .NE. RES1) STOP 1
33 IF (RES .NE. RES2) STOP 2
35 RES1 = 1
36 RES2 = 1
38 !$ACC PARALLEL NUM_GANGS(8) NUM_WORKERS(32) VECTOR_LENGTH(32)
39 !$ACC& REDUCTION(*:RES1) COPY(RES1, RES2) ASYNC(1)
40 res1 = res1 * 5
42 !$ACC ATOMIC
43 res2 = res2 * 5
44 !$ACC END PARALLEL
46 IF (ACC_GET_DEVICE_TYPE () .EQ. ACC_DEVICE_HOST) THEN
47 RES = 5 ** 1
48 ELSE
49 RES = 5 ** 8
50 END IF
52 CALL ACC_ASYNC_WAIT_ALL
54 IF (RES .NE. RES1) STOP 3
55 IF (RES .NE. RES2) STOP 4
57 END PROGRAM