kernels-loop-1.f90 938 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. ! Exercise the auto, independent, seq and tile loop clauses inside
  2. ! kernels regions.
  3. ! { dg-do run }
  4. program loops
  5. integer, parameter :: n = 20
  6. integer :: i, a(n), b(n)
  7. a(:) = 0
  8. b(:) = 0
  9. ! COPY
  10. !$acc kernels copy (a)
  11. !$acc loop auto
  12. do i = 1, n
  13. a(i) = i
  14. end do
  15. !$acc end kernels
  16. do i = 1, n
  17. b(i) = i
  18. end do
  19. call check (a, b, n)
  20. ! COPYOUT
  21. a(:) = 0
  22. !$acc kernels copyout (a)
  23. !$acc loop independent
  24. do i = 1, n
  25. a(i) = i
  26. end do
  27. !$acc end kernels
  28. do i = 1, n
  29. if (a(i) .ne. b(i)) stop 1
  30. end do
  31. call check (a, b, n)
  32. ! COPYIN
  33. a(:) = 0
  34. !$acc kernels copyout (a) copyin (b)
  35. !$acc loop seq
  36. do i = 1, n
  37. a(i) = b(i)
  38. end do
  39. !$acc end kernels
  40. call check (a, b, n)
  41. end program loops
  42. subroutine check (a, b, n)
  43. integer :: n, a(n), b(n)
  44. integer :: i
  45. do i = 1, n
  46. if (a(i) .ne. b(i)) stop 2
  47. end do
  48. end subroutine check