1! { dg-do run } 2! 3program subarrays 4 integer, parameter :: n = 20, c = 10, low = 5, high = 10 5 integer :: i, a(n), b(n) 6 7 a(:) = 0 8 b(:) = 0 9 10 ! COPY 11 12 !$acc parallel copy (a(low:high)) 13 !$acc loop 14 do i = low, high 15 a(i) = i 16 end do 17 !$acc end parallel 18 19 do i = low, high 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(low:high)) 30 !$acc loop 31 do i = low, high 32 a(i) = i 33 end do 34 !$acc end parallel 35 36 do i = low, high 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(low:high)) copyin (b(low:high)) 46 !$acc loop 47 do i = low, high 48 a(i) = b(i) 49 end do 50 !$acc end parallel 51 52 call check (a, b, n) 53 54 ! PRESENT_OR_COPY 55 56 a(:) = 0 57 58 !$acc parallel pcopy (a(low:high)) 59 !$acc loop 60 do i = low, high 61 a(i) = i 62 end do 63 !$acc end parallel 64 65 call check (a, b, n) 66 67 ! PRESENT_OR_COPYOUT 68 69 a(:) = 0 70 71 !$acc parallel pcopyout (a(low:high)) 72 !$acc loop 73 do i = low, high 74 a(i) = i 75 end do 76 !$acc end parallel 77 78 call check (a, b, n) 79 80 ! PRESENT_OR_COPYIN 81 82 a(:) = 0 83 84 !$acc parallel pcopyout (a(low:high)) & 85 !$acc & pcopyin (b(low:high)) 86 !$acc loop 87 do i = low, high 88 a(i) = b(i) 89 end do 90 !$acc end parallel 91 92 call check (a, b, n) 93end program subarrays 94 95subroutine check (a, b, n) 96 integer :: n, a(n), b(n) 97 integer :: i 98 99 do i = 1, n 100 if (a(i) .ne. b(i)) STOP 2 101 end do 102end subroutine check 103