lib-16-2.f90 1008 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. ! See also "lib-16.f90".
  2. ! { dg-do run }
  3. ! { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } }
  4. program main
  5. implicit none
  6. include "openacc_lib.h"
  7. integer, parameter :: N = 256
  8. integer, allocatable :: h(:)
  9. integer :: i
  10. integer :: async = 5
  11. allocate (h(N))
  12. do i = 1, N
  13. h(i) = i
  14. end do
  15. call acc_copyin (h)
  16. do i = 1, N
  17. h(i) = i + i
  18. end do
  19. call acc_update_device_async (h, sizeof (h), async)
  20. if (acc_is_present (h) .neqv. .TRUE.) stop 1
  21. call acc_wait (async)
  22. h(:) = 0
  23. call acc_copyout_async (h, sizeof (h), async)
  24. call acc_wait (async)
  25. do i = 1, N
  26. if (h(i) /= i + i) stop 2
  27. end do
  28. call acc_copyin (h, sizeof (h))
  29. h(:) = 0
  30. call acc_update_self_async (h, sizeof (h), async)
  31. if (acc_is_present (h) .neqv. .TRUE.) stop 3
  32. call acc_wait (async)
  33. do i = 1, N
  34. if (h(i) /= i + i) stop 4
  35. end do
  36. call acc_delete_async (h, async)
  37. call acc_wait (async)
  38. if (acc_is_present (h) .neqv. .FALSE.) stop 5
  39. end program