2 ! { dg-require-effective-target offload_device_nonshared_as }
4 subroutine init (v1
, v2
, N
)
14 subroutine check (p
, N
)
16 real, parameter :: EPS
= 0.00001
19 diff
= p(i
) - (i
+ 2.0) * (i
- 3.0)
20 if (diff
> EPS
.or
. -diff
> EPS
) STOP 1
24 subroutine vec_mult (p
, N
)
25 use omp_lib
, only
: omp_is_initial_device
27 real, allocatable
:: v1(:), v2(:)
29 !$omp declare target (init)
30 !$omp target data map(to: v1, v2, N) map(from: p)
31 !$omp task shared(v1, v2, p) depend(out: v1, v2)
32 !$omp target map(to: v1, v2, N)
33 if (omp_is_initial_device ()) STOP 2
34 allocate (v1(N
), v2(N
))
38 !$omp task shared(v1, v2, p) depend(in: v1, v2)
39 !$omp target map(to: v1, v2, N) map(from: p)
40 if (omp_is_initial_device ()) STOP 3
55 integer, parameter :: N
= 1000