1 | // RUN: %libomp-compile-and-run |
2 | |
3 | // The test checks nonmonotonic scheduling works correctly when threads |
4 | // may execute different loops concurrently. |
5 | |
6 | #include <stdio.h> |
7 | #include <omp.h> |
8 | |
9 | #define N 200 |
10 | #define C 20 |
11 | int main() |
12 | { |
13 | int i, l0 = 0, l1 = 0; |
14 | #pragma omp parallel num_threads(8) |
15 | { |
16 | #pragma omp for schedule(nonmonotonic:dynamic,C) nowait |
17 | for (i = 0; i < N; ++i) { |
18 | #pragma omp atomic |
19 | l0++; |
20 | } |
21 | #pragma omp for schedule(nonmonotonic:dynamic,C) nowait |
22 | for (i = 0; i < N * N; ++i) { |
23 | #pragma omp atomic |
24 | l1++; |
25 | } |
26 | } |
27 | if (l0 != N || l1 != N * N) { |
28 | printf(format: "failed l0 = %d, l1 = %d, should be %d %d\n" , l0, l1, N, N * N); |
29 | return 1; |
30 | } else { |
31 | printf(format: "passed\n" ); |
32 | return 0; |
33 | } |
34 | } |
35 | |