1! { dg-do run } 2 3program asyncwait 4 integer, parameter :: N = 64 5 real, allocatable :: a(:), b(:), c(:), d(:), e(:) 6 integer i 7 8 allocate (a(N)) 9 allocate (b(N)) 10 allocate (c(N)) 11 allocate (d(N)) 12 allocate (e(N)) 13 14 a(:) = 3.0 15 b(:) = 0.0 16 17 !$acc data copy (a(1:N)) copy (b(1:N)) 18 19 !$acc parallel async 20 !$acc loop 21 do i = 1, N 22 b(i) = a(i) 23 end do 24 !$acc end parallel 25 26 !$acc wait 27 !$acc end data 28 29 do i = 1, N 30 if (a(i) .ne. 3.0) STOP 1 31 if (b(i) .ne. 3.0) STOP 2 32 end do 33 34 a(:) = 2.0 35 b(:) = 0.0 36 37 !$acc data copy (a(1:N)) copy (b(1:N)) 38 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 45 46 !$acc wait (1) 47 !$acc end data 48 49 do i = 1, N 50 if (a(i) .ne. 2.0) STOP 3 51 if (b(i) .ne. 2.0) STOP 4 52 end do 53 54 a(:) = 3.0 55 b(:) = 0.0 56 c(:) = 0.0 57 d(:) = 0.0 58 59 !$acc data copy (a(1:N)) copy (b(1:N)) copy (c(1:N)) copy (d(1:N)) 60 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 66 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 72 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 79 80 !$acc wait (1) 81 !$acc end data 82 83 do i = 1, N 84 if (a(i) .ne. 3.0) STOP 5 85 if (b(i) .ne. 9.0) STOP 6 86 if (c(i) .ne. 4.0) STOP 7 87 if (d(i) .ne. 1.0) STOP 8 88 end do 89 90 a(:) = 2.0 91 b(:) = 0.0 92 c(:) = 0.0 93 d(:) = 0.0 94 e(:) = 0.0 95 96 !$acc data copy (a(1:N), b(1:N), c(1:N), d(1:N), e(1:N)) 97 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 103 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 110 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 117 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 124 125 !$acc wait (1) 126 !$acc end data 127 128 do i = 1, N 129 if (a(i) .ne. 2.0) STOP 9 130 if (b(i) .ne. 4.0) STOP 10 131 if (c(i) .ne. 4.0) STOP 11 132 if (d(i) .ne. 1.0) STOP 12 133 if (e(i) .ne. 11.0) STOP 13 134 end do 135 136 a(:) = 3.0 137 b(:) = 0.0 138 139 !$acc data copy (a(1:N)) copy (b(1:N)) 140 141 !$acc kernels async 142 !$acc loop 143 do i = 1, N 144 b(i) = a(i) 145 end do 146 !$acc end kernels 147 148 !$acc wait 149 !$acc end data 150 151 do i = 1, N 152 if (a(i) .ne. 3.0) STOP 14 153 if (b(i) .ne. 3.0) STOP 15 154 end do 155 156 a(:) = 2.0 157 b(:) = 0.0 158 159 !$acc data copy (a(1:N)) copy (b(1:N)) 160 161 !$acc kernels async (1) 162 !$acc loop 163 do i = 1, N 164 b(i) = a(i) 165 end do 166 !$acc end kernels 167 168 !$acc wait (1) 169 !$acc end data 170 171 do i = 1, N 172 if (a(i) .ne. 2.0) STOP 16 173 if (b(i) .ne. 2.0) STOP 17 174 end do 175 176 a(:) = 3.0 177 b(:) = 0.0 178 c(:) = 0.0 179 d(:) = 0.0 180 181 !$acc data copy (a(1:N)) copy (b(1:N)) copy (c(1:N)) copy (d(1:N)) 182 183 !$acc kernels async (1) 184 do i = 1, N 185 b(i) = (a(i) * a(i) * a(i)) / a(i) 186 end do 187 !$acc end kernels 188 189 !$acc kernels async (1) 190 do i = 1, N 191 c(i) = (a(i) * 4) / a(i) 192 end do 193 !$acc end kernels 194 195 !$acc kernels async (1) 196 !$acc loop 197 do i = 1, N 198 d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i) 199 end do 200 !$acc end kernels 201 202 !$acc wait (1) 203 !$acc end data 204 205 do i = 1, N 206 if (a(i) .ne. 3.0) STOP 18 207 if (b(i) .ne. 9.0) STOP 19 208 if (c(i) .ne. 4.0) STOP 20 209 if (d(i) .ne. 1.0) STOP 21 210 end do 211 212 a(:) = 2.0 213 b(:) = 0.0 214 c(:) = 0.0 215 d(:) = 0.0 216 e(:) = 0.0 217 218 !$acc data copy (a(1:N), b(1:N), c(1:N), d(1:N), e(1:N)) 219 220 !$acc kernels async (1) 221 do i = 1, N 222 b(i) = (a(i) * a(i) * a(i)) / a(i) 223 end do 224 !$acc end kernels 225 226 !$acc kernels async (1) 227 !$acc loop 228 do i = 1, N 229 c(i) = (a(i) * 4) / a(i) 230 end do 231 !$acc end kernels 232 233 !$acc kernels async (1) 234 !$acc loop 235 do i = 1, N 236 d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i) 237 end do 238 !$acc end kernels 239 240 !$acc kernels wait (1) async (1) 241 !$acc loop 242 do i = 1, N 243 e(i) = a(i) + b(i) + c(i) + d(i) 244 end do 245 !$acc end kernels 246 247 !$acc wait (1) 248 !$acc end data 249 250 do i = 1, N 251 if (a(i) .ne. 2.0) STOP 22 252 if (b(i) .ne. 4.0) STOP 23 253 if (c(i) .ne. 4.0) STOP 24 254 if (d(i) .ne. 1.0) STOP 25 255 if (e(i) .ne. 11.0) STOP 26 256 end do 257end program asyncwait 258