123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- program subarrays
- integer, parameter :: n = 20, c = 10, low = 5, high = 10
- integer :: i, a(n), b(n)
- a(:) = 0
- b(:) = 0
- ! COPY
- !$acc parallel copy (a(low:high))
- !$acc loop
- do i = low, high
- a(i) = i
- end do
- !$acc end parallel
- do i = low, high
- b(i) = i
- end do
- call check (a, b, n)
- ! COPYOUT
- a(:) = 0
- !$acc parallel copyout (a(low:high))
- !$acc loop
- do i = low, high
- a(i) = i
- end do
- !$acc end parallel
- do i = low, high
- if (a(i) .ne. b(i)) call abort
- end do
- call check (a, b, n)
- ! COPYIN
- a(:) = 0
- !$acc parallel copyout (a(low:high)) copyin (b(low:high))
- !$acc loop
- do i = low, high
- a(i) = b(i)
- end do
- !$acc end parallel
- call check (a, b, n)
- ! PRESENT_OR_COPY
- a(:) = 0
-
- !$acc parallel pcopy (a(low:high))
- !$acc loop
- do i = low, high
- a(i) = i
- end do
- !$acc end parallel
- call check (a, b, n)
- ! PRESENT_OR_COPYOUT
- a(:) = 0
- !$acc parallel pcopyout (a(low:high))
- !$acc loop
- do i = low, high
- a(i) = i
- end do
- !$acc end parallel
- call check (a, b, n)
- ! PRESENT_OR_COPYIN
- a(:) = 0
- !$acc parallel pcopyout (a(low:high)) &
- !$acc & pcopyin (b(low:high))
- !$acc loop
- do i = low, high
- a(i) = b(i)
- end do
- !$acc end parallel
- call check (a, b, n)
- end program subarrays
- subroutine check (a, b, n)
- integer :: n, a(n), b(n)
- integer :: i
- do i = 1, n
- if (a(i) .ne. b(i)) call abort
- end do
- end subroutine check
|