1! { dg-do run } 2! 3program subarrays 4 integer, parameter :: n = 20, c = 10 5 integer :: i, a(n), b(n) 6 7 a(:) = 0 8 b(:) = 0 9 10 ! COPY 11 12 !$acc parallel copy (a(1:n)) 13 !$acc loop 14 do i = 1, n 15 a(i) = i 16 end do 17 !$acc end parallel 18 19 do i = 1, n 20 b(i) = i 21 end do 22 23 call check (a, b, n) 24 25 ! COPYOUT 26 27 a(:) = 0 28 29 !$acc parallel copyout (a(1:n)) 30 !$acc loop 31 do i = 1, n 32 a(i) = i 33 end do 34 !$acc end parallel 35 36 do i = 1, n 37 if (a(i) .ne. b(i)) STOP 1 38 end do 39 call check (a, b, n) 40 41 ! COPYIN 42 43 a(:) = 0 44 45 !$acc parallel copyout (a(1:n)) copyin (b(1:n)) 46 !$acc loop 47 do i = 1, n 48 a(i) = i 49 end do 50 !$acc end parallel 51 52 call check (a, b, n) 53 54 ! PRESENT_OR_COPY 55 56 !$acc parallel pcopy (a(1:n)) 57 !$acc loop 58 do i = 1, n 59 a(i) = i 60 end do 61 !$acc end parallel 62 63 call check (a, b, n) 64 65 ! PRESENT_OR_COPYOUT 66 67 a(:) = 0 68 69 !$acc parallel pcopyout (a(1:n)) 70 !$acc loop 71 do i = 1, n 72 a(i) = i 73 end do 74 !$acc end parallel 75 76 call check (a, b, n) 77 78 ! PRESENT_OR_COPYIN 79 80 a(:) = 0 81 82 !$acc parallel pcopyout (a(1:n)) pcopyin (b(1:n)) 83 !$acc loop 84 do i = 1, n 85 a(i) = i 86 end do 87 !$acc end parallel 88 89 call check (a, b, n) 90end program subarrays 91 92subroutine check (a, b, n) 93 integer :: n, a(n), b(n) 94 integer :: i 95 96 do i = 1, n 97 if (a(i) .ne. b(i)) STOP 2 98 end do 99end subroutine check 100