8 integer u(0:1023), v(0:1023), w(0:1023)
9 !$omp declare target (u, v, w)
13 integer function f1 (a, b)
15 !$omp target map(from: d)
16 !$omp teams distribute parallel do simd default(none) firstprivate (a, b) shared(u, v, w)
24 integer function f2 (a, b, c)
25 integer :: a, b, c, d, e
26 !$omp target map(from: d, e)
27 !$omp teams distribute parallel do simd default(none) firstprivate (a, b, c) shared(u, v, w) linear(d) lastprivate(e)
36 integer function f3 (a1, b1, a2, b2)
37 integer :: a1, b1, a2, b2, d1, d2
38 !$omp target map(from: d1, d2)
39 !$omp teams distribute parallel do simd default(none) firstprivate (a1, b1, a2, b2) shared(u, v, w) lastprivate(d1, d2) &
43 u(d1 * 32 + d2) = v(d1 * 32 + d2) + w(d1 * 32 + d2)
50 integer function f4 (a1, b1, a2, b2)
51 integer :: a1, b1, a2, b2, d1, d2
52 !$omp target map(from: d1, d2)
53 !$omp teams distribute parallel do simd default(none) firstprivate (a1, b1, a2, b2) shared(u, v, w) collapse(2)
56 u(d1 * 32 + d2) = v(d1 * 32 + d2) + w(d1 * 32 + d2)
67 if (f1 (0, 1024) /= 1024) stop 1
68 if (f2 (0, 1024, 17) /= 1024 + (17 + 5 * 1023)) stop 2
69 if (f3 (0, 32, 0, 32) /= 64) stop 3
70 if (f4 (0, 32, 0, 32) /= 64) stop 3