PR c++/86342 - -Wdeprecated-copy and system headers.
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-fortran / reduction-6.f90
blobe76867a313fa2735fcfe328bdae7970412e97e45
1 ! { dg-do run }
2 ! { dg-additional-options "-cpp -w" }
4 program reduction
5 implicit none
7 integer, parameter :: n = 100, n2 = 1000, chunksize = 10
8 integer :: i, gs1, gs2, ws1, ws2, vs1, vs2, cs1, cs2, hs1, hs2
9 integer :: j, red, vred
11 gs1 = 0
12 gs2 = 0
13 ws1 = 0
14 ws2 = 0
15 vs1 = 0
16 vs2 = 0
17 cs1 = 0
18 cs2 = 0
19 hs1 = 0
20 hs2 = 0
22 !$acc parallel num_gangs (1000)
23 !$acc loop reduction(+:gs1, gs2) gang
24 do i = 1, n
25 gs1 = gs1 + 1
26 gs2 = gs2 + 2
27 end do
28 !$acc end parallel
30 !$acc parallel num_workers (4) vector_length (32)
31 !$acc loop reduction(+:ws1, ws2) worker
32 do i = 1, n
33 ws1 = ws1 + 1
34 ws2 = ws2 + 2
35 end do
36 !$acc end parallel
38 !$acc parallel vector_length (32)
39 !$acc loop reduction(+:vs1, vs2) vector
40 do i = 1, n
41 vs1 = vs1 + 1
42 vs2 = vs2 + 2
43 end do
44 !$acc end parallel
46 !$acc parallel num_gangs(8) num_workers(4) vector_length(32)
47 !$acc loop reduction(+:cs1, cs2) gang worker vector
48 do i = 1, n
49 cs1 = cs1 + 1
50 cs2 = cs2 + 2
51 end do
52 !$acc end parallel
54 ! Verify the results on the host
55 do i = 1, n
56 hs1 = hs1 + 1
57 hs2 = hs2 + 2
58 end do
60 if (gs1 .ne. hs1) STOP 1
61 if (gs2 .ne. hs2) STOP 2
63 if (ws1 .ne. hs1) STOP 3
64 if (ws2 .ne. hs2) STOP 4
66 if (vs1 .ne. hs1) STOP 5
67 if (vs2 .ne. hs2) STOP 6
69 if (cs1 .ne. hs1) STOP 7
70 if (cs2 .ne. hs2) STOP 8
72 ! Nested reductions.
74 red = 0
75 vred = 0
77 !$acc parallel num_gangs(10) vector_length(32)
78 !$acc loop reduction(+:red) gang
79 do i = 1, n/chunksize
80 !$acc loop reduction(+:red) vector
81 do j = 1, chunksize
82 red = red + chunksize
83 end do
84 end do
85 !$acc end parallel
87 do i = 1, n/chunksize
88 do j = 1, chunksize
89 vred = vred + chunksize
90 end do
91 end do
93 if (red .ne. vred) STOP 9
94 end program reduction