3 ! Test no_create clause with data/parallel constructs.
8 logical :: shared_memory
9 integer, parameter :: n
= 512
10 integer :: myvar
, myarr(n
)
13 shared_memory
= .false
.
14 !$acc kernels copyin (shared_memory)
15 shared_memory
= .true
.
23 call do_on_target(myvar
, n
, myarr
)
25 if (shared_memory
) then
26 if (myvar
.ne
. 44) stop 10
28 if (myvar
.ne
. 33) stop 11
31 if (shared_memory
) then
32 if (myarr(i
) .ne
. i
* 2) stop 20
34 if (myarr(i
) .ne
. i
) stop 21
43 !$acc enter data copyin(myvar, myarr)
44 call do_on_target(myvar
, n
, myarr
)
45 !$acc exit data copyout(myvar, myarr)
47 if (myvar
.ne
. 44) stop 30
49 if (myarr(i
) .ne
. i
* 2) stop 31
53 subroutine do_on_target (var
, n
, arr
)
56 integer :: var
, n
, arr(n
)
59 !$acc data no_create (var, arr)
61 if (acc_is_present(var
)) then
62 ! The no_create clause is meant for partially shared-memory machines. This
63 ! test is written to work on non-shared-memory machines, though this is not
64 ! necessarily a useful way to use the no_create clause in practice.
66 !$acc parallel !no_create (var)
72 if (acc_is_present(arr
)) then
73 ! The no_create clause is meant for partially shared-memory machines. This
74 ! test is written to work on non-shared-memory machines, though this is not
75 ! necessarily a useful way to use the no_create clause in practice.
77 !$acc parallel loop !no_create (arr)
81 !$acc end parallel loop
90 end subroutine do_on_target