40 lines
1.1 KiB
Fortran
40 lines
1.1 KiB
Fortran
|
! { 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
|