! { dg-do run } ! See also '../libgomp.oacc-c-c++-common/f-asyncwait-1.c'. ! { dg-additional-options "--param=openacc-kernels=decompose" } */ ! { dg-additional-options "-fopt-info-all-omp" } ! { dg-additional-options "-foffload=-fopt-info-all-omp" } */ ! { dg-additional-options "--param=openacc-privatization=noisy" } ! { dg-additional-options "-foffload=--param=openacc-privatization=noisy" } ! Prune a few: uninteresting, and potentially varying depending on GCC configuration (data types): ! { dg-prune-output {note: variable 'D\.[0-9]+' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} } */ ! It's only with Tcl 8.5 (released in 2007) that "the variable 'varName' ! passed to 'incr' may be unset, and in that case, it will be set to [...]", ! so to maintain compatibility with earlier Tcl releases, we manually ! initialize counter variables: ! { dg-line l_dummy[variable c_compute 0 c_loop_i 0] } ! { dg-message "dummy" "" { target iN-VAl-Id } l_dummy } to avoid ! "WARNING: dg-line var l_dummy defined, but not used". */ program asyncwait integer, parameter :: N = 64 real, allocatable :: a(:), b(:), c(:), d(:), e(:) integer i allocate (a(N)) allocate (b(N)) allocate (c(N)) allocate (d(N)) allocate (e(N)) a(:) = 3.0 b(:) = 0.0 !$acc data copy (a(1:N)) copy (b(1:N)) !$acc parallel async !$acc loop ! { dg-line l_loop_i[incr c_loop_i] } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } ! { dg-optimized "assigned OpenACC gang vector loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } do i = 1, N b(i) = a(i) end do !$acc end parallel !$acc wait !$acc end data do i = 1, N if (a(i) .ne. 3.0) STOP 1 if (b(i) .ne. 3.0) STOP 2 end do a(:) = 2.0 b(:) = 0.0 !$acc data copy (a(1:N)) copy (b(1:N)) !$acc parallel async (1) !$acc loop ! { dg-line l_loop_i[incr c_loop_i] } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } ! { dg-optimized "assigned OpenACC gang vector loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } do i = 1, N b(i) = a(i) end do !$acc end parallel !$acc wait (1) !$acc end data do i = 1, N if (a(i) .ne. 2.0) STOP 3 if (b(i) .ne. 2.0) STOP 4 end do a(:) = 3.0 b(:) = 0.0 c(:) = 0.0 d(:) = 0.0 !$acc data copy (a(1:N)) copy (b(1:N)) copy (c(1:N)) copy (d(1:N)) !$acc parallel async (1) do i = 1, N b(i) = (a(i) * a(i) * a(i)) / a(i) end do !$acc end parallel !$acc parallel async (1) do i = 1, N c(i) = (a(i) * 4) / a(i) end do !$acc end parallel !$acc parallel async (1) !$acc loop ! { dg-line l_loop_i[incr c_loop_i] } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } ! { dg-optimized "assigned OpenACC gang vector loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } do i = 1, N d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i) end do !$acc end parallel !$acc wait (1) !$acc end data do i = 1, N if (a(i) .ne. 3.0) STOP 5 if (b(i) .ne. 9.0) STOP 6 if (c(i) .ne. 4.0) STOP 7 if (d(i) .ne. 1.0) STOP 8 end do a(:) = 2.0 b(:) = 0.0 c(:) = 0.0 d(:) = 0.0 e(:) = 0.0 !$acc data copy (a(1:N), b(1:N), c(1:N), d(1:N), e(1:N)) !$acc parallel async (1) do i = 1, N b(i) = (a(i) * a(i) * a(i)) / a(i) end do !$acc end parallel !$acc parallel async (1) !$acc loop ! { dg-line l_loop_i[incr c_loop_i] } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } ! { dg-optimized "assigned OpenACC gang vector loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } do i = 1, N c(i) = (a(i) * 4) / a(i) end do !$acc end parallel !$acc parallel async (1) !$acc loop ! { dg-line l_loop_i[incr c_loop_i] } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } ! { dg-optimized "assigned OpenACC gang vector loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } do i = 1, N d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i) end do !$acc end parallel !$acc parallel wait (1) async (1) !$acc loop ! { dg-line l_loop_i[incr c_loop_i] } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } ! { dg-optimized "assigned OpenACC gang vector loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } do i = 1, N e(i) = a(i) + b(i) + c(i) + d(i) end do !$acc end parallel !$acc wait (1) !$acc end data do i = 1, N if (a(i) .ne. 2.0) STOP 9 if (b(i) .ne. 4.0) STOP 10 if (c(i) .ne. 4.0) STOP 11 if (d(i) .ne. 1.0) STOP 12 if (e(i) .ne. 11.0) STOP 13 end do a(:) = 3.0 b(:) = 0.0 !$acc data copy (a(1:N)) copy (b(1:N)) !$acc kernels async !$acc loop ! { dg-line l_loop_i[incr c_loop_i] } ! { dg-note {forwarded loop nest in OpenACC 'kernels' region to 'parloops' for analysis} {} { target *-*-* } l_loop_i$c_loop_i } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } ! { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } do i = 1, N b(i) = a(i) end do !$acc end kernels !$acc wait !$acc end data do i = 1, N if (a(i) .ne. 3.0) STOP 14 if (b(i) .ne. 3.0) STOP 15 end do a(:) = 2.0 b(:) = 0.0 !$acc data copy (a(1:N)) copy (b(1:N)) !$acc kernels async (1) !$acc loop ! { dg-line l_loop_i[incr c_loop_i] } ! { dg-note {forwarded loop nest in OpenACC 'kernels' region to 'parloops' for analysis} {} { target *-*-* } l_loop_i$c_loop_i } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } ! { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } do i = 1, N b(i) = a(i) end do !$acc end kernels !$acc wait (1) !$acc end data do i = 1, N if (a(i) .ne. 2.0) STOP 16 if (b(i) .ne. 2.0) STOP 17 end do a(:) = 3.0 b(:) = 0.0 c(:) = 0.0 d(:) = 0.0 !$acc data copy (a(1:N)) copy (b(1:N)) copy (c(1:N)) copy (d(1:N)) !$acc kernels async (1) ! { dg-line l_compute[incr c_compute] } ! { dg-note {OpenACC 'kernels' decomposition: variable 'i' in 'copy' clause requested to be made addressable} {} { target *-*-* } l_compute$c_compute } ! { dg-note {variable 'i' made addressable} {} { target *-*-* } l_compute$c_compute } */ ! { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_compute$c_compute } ! { dg-note {beginning 'parloops' part in OpenACC 'kernels' region} {} { target *-*-* } .+1 } do i = 1, N b(i) = (a(i) * a(i) * a(i)) / a(i) end do !$acc end kernels !$acc kernels async (1) ! { dg-line l_compute[incr c_compute] } ! { dg-note {OpenACC 'kernels' decomposition: variable 'i' in 'copy' clause requested to be made addressable} {} { target *-*-* } l_compute$c_compute } ! { dg-note {variable 'i' already made addressable} {} { target *-*-* } l_compute$c_compute } */ ! { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_compute$c_compute } ! { dg-note {beginning 'parloops' part in OpenACC 'kernels' region} {} { target *-*-* } .+1 } do i = 1, N c(i) = (a(i) * 4) / a(i) end do !$acc end kernels !$acc kernels async (1) !$acc loop ! { dg-line l_loop_i[incr c_loop_i] } ! { dg-note {forwarded loop nest in OpenACC 'kernels' region to 'parloops' for analysis} {} { target *-*-* } l_loop_i$c_loop_i } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } ! { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } do i = 1, N d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i) end do !$acc end kernels !$acc wait (1) !$acc end data do i = 1, N if (a(i) .ne. 3.0) STOP 18 if (b(i) .ne. 9.0) STOP 19 if (c(i) .ne. 4.0) STOP 20 if (d(i) .ne. 1.0) STOP 21 end do a(:) = 2.0 b(:) = 0.0 c(:) = 0.0 d(:) = 0.0 e(:) = 0.0 !$acc data copy (a(1:N), b(1:N), c(1:N), d(1:N), e(1:N)) !$acc kernels async (1) ! { dg-line l_compute[incr c_compute] } ! { dg-note {OpenACC 'kernels' decomposition: variable 'i' in 'copy' clause requested to be made addressable} {} { target *-*-* } l_compute$c_compute } ! { dg-note {variable 'i' already made addressable} {} { target *-*-* } l_compute$c_compute } */ ! { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_compute$c_compute } ! { dg-note {beginning 'parloops' part in OpenACC 'kernels' region} {} { target *-*-* } .+1 } do i = 1, N b(i) = (a(i) * a(i) * a(i)) / a(i) end do !$acc end kernels !$acc kernels async (1) !$acc loop ! { dg-line l_loop_i[incr c_loop_i] } ! { dg-note {forwarded loop nest in OpenACC 'kernels' region to 'parloops' for analysis} {} { target *-*-* } l_loop_i$c_loop_i } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } ! { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } do i = 1, N c(i) = (a(i) * 4) / a(i) end do !$acc end kernels !$acc kernels async (1) !$acc loop ! { dg-line l_loop_i[incr c_loop_i] } ! { dg-note {forwarded loop nest in OpenACC 'kernels' region to 'parloops' for analysis} {} { target *-*-* } l_loop_i$c_loop_i } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } ! { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } do i = 1, N d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i) end do !$acc end kernels !$acc kernels wait (1) async (1) !$acc loop ! { dg-line l_loop_i[incr c_loop_i] } ! { dg-note {forwarded loop nest in OpenACC 'kernels' region to 'parloops' for analysis} {} { target *-*-* } l_loop_i$c_loop_i } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } ! { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } do i = 1, N e(i) = a(i) + b(i) + c(i) + d(i) end do !$acc end kernels !$acc wait (1) !$acc end data do i = 1, N if (a(i) .ne. 2.0) STOP 22 if (b(i) .ne. 4.0) STOP 23 if (c(i) .ne. 4.0) STOP 24 if (d(i) .ne. 1.0) STOP 25 if (e(i) .ne. 11.0) STOP 26 end do end program asyncwait