2015-07-04 Marc Glisse <marc.glisse@inria.fr>
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-fortran / asyncwait-1.f90
blobb6e637ba43f71f090c8db738601d59908875ab27
1 ! { dg-do run }
3 program asyncwait
4 integer, parameter :: N = 64
5 real, allocatable :: a(:), b(:), c(:), d(:), e(:)
6 integer i
8 allocate (a(N))
9 allocate (b(N))
10 allocate (c(N))
11 allocate (d(N))
12 allocate (e(N))
14 a(:) = 3.0
15 b(:) = 0.0
17 !$acc data copy (a(1:N)) copy (b(1:N))
19 !$acc parallel async
20 !$acc loop
21 do i = 1, N
22 b(i) = a(i)
23 end do
24 !$acc end parallel
26 !$acc wait
27 !$acc end data
29 do i = 1, N
30 if (a(i) .ne. 3.0) call abort
31 if (b(i) .ne. 3.0) call abort
32 end do
34 a(:) = 2.0
35 b(:) = 0.0
37 !$acc data copy (a(1:N)) copy (b(1:N))
39 !$acc parallel async (1)
40 !$acc loop
41 do i = 1, N
42 b(i) = a(i)
43 end do
44 !$acc end parallel
46 !$acc wait (1)
47 !$acc end data
49 do i = 1, N
50 if (a(i) .ne. 2.0) call abort
51 if (b(i) .ne. 2.0) call abort
52 end do
54 a(:) = 3.0
55 b(:) = 0.0
56 c(:) = 0.0
57 d(:) = 0.0
59 !$acc data copy (a(1:N)) copy (b(1:N)) copy (c(1:N)) copy (d(1:N))
61 !$acc parallel async (1)
62 do i = 1, N
63 b(i) = (a(i) * a(i) * a(i)) / a(i)
64 end do
65 !$acc end parallel
67 !$acc parallel async (1)
68 do i = 1, N
69 c(i) = (a(i) * 4) / a(i)
70 end do
71 !$acc end parallel
73 !$acc parallel async (1)
74 !$acc loop
75 do i = 1, N
76 d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i)
77 end do
78 !$acc end parallel
80 !$acc wait (1)
81 !$acc end data
83 do i = 1, N
84 if (a(i) .ne. 3.0) call abort
85 if (b(i) .ne. 9.0) call abort
86 if (c(i) .ne. 4.0) call abort
87 if (d(i) .ne. 1.0) call abort
88 end do
90 a(:) = 2.0
91 b(:) = 0.0
92 c(:) = 0.0
93 d(:) = 0.0
94 e(:) = 0.0
96 !$acc data copy (a(1:N), b(1:N), c(1:N), d(1:N), e(1:N))
98 !$acc parallel async (1)
99 do i = 1, N
100 b(i) = (a(i) * a(i) * a(i)) / a(i)
101 end do
102 !$acc end parallel
104 !$acc parallel async (1)
105 !$acc loop
106 do i = 1, N
107 c(i) = (a(i) * 4) / a(i)
108 end do
109 !$acc end parallel
111 !$acc parallel async (1)
112 !$acc loop
113 do i = 1, N
114 d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i)
115 end do
116 !$acc end parallel
118 !$acc parallel wait (1) async (1)
119 !$acc loop
120 do i = 1, N
121 e(i) = a(i) + b(i) + c(i) + d(i)
122 end do
123 !$acc end parallel
125 !$acc wait (1)
126 !$acc end data
128 do i = 1, N
129 if (a(i) .ne. 2.0) call abort
130 if (b(i) .ne. 4.0) call abort
131 if (c(i) .ne. 4.0) call abort
132 if (d(i) .ne. 1.0) call abort
133 if (e(i) .ne. 11.0) call abort
134 end do
135 end program asyncwait