]> gcc.gnu.org Git - gcc.git/blob - libgomp/testsuite/libgomp.fortran/examples-4/e.51.2.f90
[AArch64][testsuite] Adjust some arith+compare tests for potentially more aggressive...
[gcc.git] / libgomp / testsuite / libgomp.fortran / examples-4 / e.51.2.f90
1 ! { dg-do run }
2
3 module e_51_2_mod
4 contains
5 subroutine init (v1, v2, N)
6 integer :: i, N
7 real :: v1(N), v2(N)
8 do i = 1, N
9 v1(i) = i + 2.0
10 v2(i) = i - 3.0
11 end do
12 end subroutine
13
14 subroutine init_again (v1, v2, N)
15 integer :: i, N
16 real :: v1(N), v2(N)
17 do i = 1, N
18 v1(i) = i - 3.0
19 v2(i) = i + 2.0
20 end do
21 end subroutine
22
23 subroutine check (p, N)
24 integer :: i, N
25 real, parameter :: EPS = 0.00001
26 real :: diff, p(N)
27 do i = 1, N
28 diff = p(i) - 2 * (i + 2.0) * (i - 3.0)
29 if (diff > EPS .or. -diff > EPS) call abort
30 end do
31 end subroutine
32
33 subroutine vec_mult (N)
34 real :: p(N), v1(N), v2(N)
35 integer :: i, N
36 call init (v1, v2, N)
37 !$omp target data map(from: p)
38 !$omp target map(to: v1, v2 )
39 !$omp parallel do
40 do i = 1, N
41 p(i) = v1(i) * v2(i)
42 end do
43 !$omp end target
44 call init_again (v1, v2, N)
45 !$omp target map(to: v1, v2 )
46 !$omp parallel do
47 do i = 1, N
48 p(i) = p(i) + v1(i) * v2(i)
49 end do
50 !$omp end target
51 !$omp end target data
52 call check (p, N)
53 end subroutine
54 end module
55
56 program e_51_2
57 use e_51_2_mod, only : vec_mult
58 integer :: n
59 n = 1000
60 call vec_mult (n)
61 end program
This page took 0.04075 seconds and 5 git commands to generate.