mirror of
https://github.com/autc04/Retro68.git
synced 2024-12-01 11:52:47 +00:00
258 lines
4.3 KiB
Fortran
258 lines
4.3 KiB
Fortran
! { dg-do run }
|
|
|
|
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
|
|
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
|
|
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
|
|
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
|
|
do i = 1, N
|
|
c(i) = (a(i) * 4) / a(i)
|
|
end do
|
|
!$acc end parallel
|
|
|
|
!$acc parallel async (1)
|
|
!$acc loop
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
do i = 1, N
|
|
b(i) = (a(i) * a(i) * a(i)) / a(i)
|
|
end do
|
|
!$acc end kernels
|
|
|
|
!$acc kernels async (1)
|
|
do i = 1, N
|
|
c(i) = (a(i) * 4) / a(i)
|
|
end do
|
|
!$acc end kernels
|
|
|
|
!$acc kernels async (1)
|
|
!$acc loop
|
|
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)
|
|
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
|
|
do i = 1, N
|
|
c(i) = (a(i) * 4) / a(i)
|
|
end do
|
|
!$acc end kernels
|
|
|
|
!$acc kernels async (1)
|
|
!$acc loop
|
|
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
|
|
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
|