123456789101112131415161718192021222324252627282930313233343536373839 |
- ! { dg-do run }
- program main
- use iso_c_binding, only: c_sizeof
- use openacc, only: acc_is_present
- implicit none
- integer i
- integer, parameter :: n = 100
- real*4 b(n), c(n)
- real :: d(n), e(n)
- common /BLOCK/ d, e
- !$acc enter data create(b) create(d)
- if (.not. acc_is_present(b, c_sizeof(b))) stop 1
- if (.not. acc_is_present(d, c_sizeof(d))) stop 2
- #if !ACC_MEM_SHARED
- if (acc_is_present(c, 1) .or. acc_is_present(c, c_sizeof(c))) stop 3
- if (acc_is_present(e, 1) .or. acc_is_present(e, c_sizeof(d))) stop 4
- #endif
- !$acc parallel loop no_create(b) no_create(c) no_create(/BLOCK/)
- do i = 1, n
- b(i) = i
- d(i) = -i
- end do
- !$acc end parallel loop
- if (.not. acc_is_present(b, c_sizeof(b))) stop 5
- if (.not. acc_is_present(d, c_sizeof(d))) stop 6
- #if !ACC_MEM_SHARED
- if (acc_is_present(c, 1) .or. acc_is_present(c, c_sizeof(c))) stop 7
- if (acc_is_present(e, 1) .or. acc_is_present(e, c_sizeof(e))) stop 8
- #endif
- !$acc exit data copyout(b) copyout(d)
- if (any(abs(b - [(real(i), i = 1, n)]) > 10*epsilon(b))) stop 9
- if (any(abs(d - [(real(-i), i = 1, n)]) > 10*epsilon(d))) stop 10
- end program main
|