1! Test the copy, copyin, copyout, pcopy, pcopyin, pcopyout, and pcreate 2! clauses on kernels constructs. 3 4! { dg-do run } 5 6program map 7 integer, parameter :: n = 20, c = 10 8 integer :: i, a(n), b(n), d(n) 9 10 a(:) = 0 11 b(:) = 0 12 13 ! COPY 14 15 !$acc kernels copy (a) 16 !$acc loop 17 do i = 1, n 18 a(i) = i 19 end do 20 !$acc end kernels 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 kernels copyout (a) 33 !$acc loop 34 do i = 1, n 35 a(i) = i 36 end do 37 !$acc end kernels 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 kernels copyout (a) copyin (b) 49 !$acc loop 50 do i = 1, n 51 a(i) = i 52 end do 53 !$acc end kernels 54 55 call check (a, b, n) 56 57 ! PRESENT_OR_COPY 58 59 !$acc kernels pcopy (a) 60 !$acc loop 61 do i = 1, n 62 a(i) = i 63 end do 64 !$acc end kernels 65 66 call check (a, b, n) 67 68 ! PRESENT_OR_COPYOUT 69 70 a(:) = 0 71 72 !$acc kernels pcopyout (a) 73 !$acc loop 74 do i = 1, n 75 a(i) = i 76 end do 77 !$acc end kernels 78 79 call check (a, b, n) 80 81 ! PRESENT_OR_COPYIN 82 83 a(:) = 0 84 85 !$acc kernels pcopyout (a) pcopyin (b) 86 !$acc loop 87 do i = 1, n 88 a(i) = i 89 end do 90 !$acc end kernels 91 92 call check (a, b, n) 93 94 ! PRESENT_OR_CREATE 95 96 a(:) = 0 97 98 !$acc kernels pcopyout (a) pcreate (d) 99 !$acc loop 100 do i = 1, n 101 d(i) = i 102 a(i) = d(i) 103 end do 104 !$acc end kernels 105 106 call check (a, b, n) 107end program map 108 109subroutine check (a, b, n) 110 integer :: n, a(n), b(n) 111 integer :: i 112 113 do i = 1, n 114 if (a(i) .ne. b(i)) stop 2 115 end do 116end subroutine check 117