subarrays-2.f90 1.5 KB

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