6 subroutine test_workshare
7 integer :: i
, j
, k
, l
, m
8 double precision, dimension (64) :: d
, e
9 integer, dimension (10) :: f
, g
10 integer, dimension (16, 16) :: a
, b
, c
11 integer, dimension (16) :: n
21 forall (i
= 1:16, j
= 1:16) a (i
, j
) = i
* 16 + j
22 forall (j
= 1:16) n (j
) = j
23 !$omp parallel num_threads (4) private (j, k)
33 where (g
.gt
. 6) f
= f
+ sum (g
)
36 where (f
.gt
. 210) g
= 0
37 !$omp end workshare nowait
39 forall (j
= 1:16, k
= 1:16) b (k
, j
) = a (j
, k
)
40 forall (k
= 1:16) c (k
, 1:16) = a (1:16, k
)
41 forall (j
= 2:16, n (17 - j
) / 4 * 4 .ne
. n (17 - j
))
42 n (j
) = n (j
- 1) * n (j
)
49 !$omp critical (critical_foox)
51 !$omp end critical (critical_foox)
53 !$omp parallel num_threads (2)
54 !$ if (omp_get_thread_num () .eq. 0) m = omp_get_num_threads ()
61 if (any (f
.ne
. (/100, 100, 100, 210, 210, 210, 310, 310, 337, 337/))) &
63 if (any (g
.ne
. (/-1, -1, -1, 0, 0, 0, 0, 0, 0, 0/))) call abort
64 if (i
.ne
. 20) call abort
65 !$ if (l .ne. 128 + m) call abort
66 if (any (d
.ne
. 1 .or
. e
.ne
. 1)) call abort
67 if (any (b
.ne
. transpose (a
))) call abort
68 if (any (c
.ne
. b
)) call abort
69 if (any (n
.ne
. (/1, 2, 6, 12, 5, 30, 42, 56, 9, 90, &
70 & 110, 132, 13, 182, 210, 240/))) call abort
71 end subroutine test_workshare