1! Exercise the auto, independent, seq and tile loop clauses inside 2! parallel regions. 3 4! { dg-do run } 5 6program loops 7 integer, parameter :: n = 20, c = 10 8 integer :: i, a(n), b(n) 9 10 a(:) = 0 11 b(:) = 0 12 13 ! COPY 14 15 !$acc parallel copy (a) 16 !$acc loop auto 17 do i = 1, n 18 a(i) = i 19 end do 20 !$acc end parallel 21 22 do i = 1, n 23 b(i) = i 24 end do 25 26 call check (a, b, n) 27 28 ! COPYOUT 29 30 a(:) = 0 31 32 !$acc parallel copyout (a) 33 !$acc loop independent 34 do i = 1, n 35 a(i) = i 36 end do 37 !$acc end parallel 38 39 do i = 1, n 40 if (a(i) .ne. b(i)) stop 1 41 end do 42 call check (a, b, n) 43 44 ! COPYIN 45 46 a(:) = 0 47 48 !$acc parallel copyout (a) copyin (b) 49 !$acc loop seq 50 do i = 1, n 51 a(i) = i 52 end do 53 !$acc end parallel 54 55 call check (a, b, n) 56 57 ! PRESENT_OR_COPY 58 59 !$acc parallel pcopy (a) 60 !$acc loop tile (*) 61 do i = 1, n 62 a(i) = i 63 end do 64 !$acc end parallel 65 66 call check (a, b, n) 67 68end program loops 69 70subroutine check (a, b, n) 71 integer :: n, a(n), b(n) 72 integer :: i 73 74 do i = 1, n 75 if (a(i) .ne. b(i)) stop 2 76 end do 77end subroutine check 78