2 ! { dg-require-effective-target offload_device_nonshared_as }
5 integer, parameter :: THRESHOLD
= 500
7 subroutine init (v1
, v2
, N
)
16 subroutine init_again (v1
, v2
, N
)
25 subroutine check (p
, N
)
27 real, parameter :: EPS
= 0.00001
30 diff
= p(i
) - 2 * (i
+ 2.0) * (i
- 3.0)
31 if (diff
> EPS
.or
. -diff
> EPS
) call abort
35 subroutine vec_mult (N
)
36 use omp_lib
, only
: omp_is_initial_device
37 real :: p(N
), v1(N
), v2(N
)
40 !$omp target data if(N > THRESHOLD) map(from: p)
41 !$omp target if(N > THRESHOLD) map(to: v1, v2)
42 if (omp_is_initial_device ()) call abort
48 call init_again (v1
, v2
, N
)
49 !$omp target if(N > THRESHOLD) map(to: v1, v2)
50 if (omp_is_initial_device ()) call abort
53 p(i
) = p(i
) + v1(i
) * v2(i
)
62 use e_51_6_mod
, only
: vec_mult