1257853Sjmmv! { dg-do run } 2257853Sjmmv 3257853Sjmmvmodule e_53_3_mod 4257853Sjmmv !$omp declare target (N, p, v1, v2) 5257853Sjmmv integer, parameter :: N = 1000 6257853Sjmmv real :: p(N), v1(N), v2(N) 7257853Sjmmvend module 8257853Sjmmv 9257853Sjmmvsubroutine init (v1, v2, N) 10257853Sjmmv integer :: i, N 11 real :: v1(N), v2(N) 12 do i = 1, N 13 v1(i) = i + 2.0 14 v2(i) = i - 3.0 15 end do 16end subroutine 17 18subroutine check (p, N) 19 integer :: i, N 20 real, parameter :: EPS = 0.00001 21 real :: diff, p(N) 22 do i = 1, N 23 diff = p(i) - (i + 2.0) * (i - 3.0) 24 if (diff > EPS .or. -diff > EPS) call abort 25 end do 26end subroutine 27 28subroutine vec_mult () 29 use e_53_3_mod 30 integer :: i 31 call init (v1, v2, N); 32 !$omp target update to(v1, v2) 33 !$omp target 34 !$omp parallel do 35 do i = 1,N 36 p(i) = v1(i) * v2(i) 37 end do 38 !$omp end target 39 !$omp target update from (p) 40 call check (p, N) 41end subroutine 42 43program e_53_3 44 call vec_mult () 45end program 46