1 | // RUN: %libomp-compile |
2 | // RUN: env OMP_SCHEDULE=static %libomp-run 1 0 |
3 | // RUN: env OMP_SCHEDULE=static,10 %libomp-run 1 10 |
4 | // RUN: env OMP_SCHEDULE=dynamic %libomp-run 2 1 |
5 | // RUN: env OMP_SCHEDULE=dynamic,11 %libomp-run 2 11 |
6 | // RUN: env OMP_SCHEDULE=guided %libomp-run 3 1 |
7 | // RUN: env OMP_SCHEDULE=guided,12 %libomp-run 3 12 |
8 | // RUN: env OMP_SCHEDULE=auto %libomp-run 4 1 |
9 | // RUN: env OMP_SCHEDULE=trapezoidal %libomp-run 101 1 |
10 | // RUN: env OMP_SCHEDULE=trapezoidal,13 %libomp-run 101 13 |
11 | // RUN: env OMP_SCHEDULE=static_steal %libomp-run 2 1 |
12 | // RUN: env OMP_SCHEDULE=static_steal,14 %libomp-run 2 14 |
13 | |
14 | #include <stdio.h> |
15 | #include <stdlib.h> |
16 | #include <math.h> |
17 | #include "omp_testsuite.h" |
18 | |
19 | int sum; |
20 | char* correct_kind_string; |
21 | omp_sched_t correct_kind; |
22 | int correct_chunk_size; |
23 | |
24 | int test_omp_for_runtime() |
25 | { |
26 | int sum; |
27 | int known_sum; |
28 | int chunk_size; |
29 | int error; |
30 | omp_sched_t kind; |
31 | |
32 | sum = 0; |
33 | error = 0; |
34 | known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2; |
35 | omp_get_schedule(&kind, &chunk_size); |
36 | |
37 | printf("omp_get_schedule() returns: Schedule = %d, Chunk Size = %d\n" , |
38 | kind, chunk_size); |
39 | if (kind != correct_kind) { |
40 | printf("kind(%d) != correct_kind(%d)\n" , kind, correct_kind); |
41 | error = 1; |
42 | } |
43 | if (chunk_size != correct_chunk_size) { |
44 | printf(format: "chunk_size(%d) != correct_chunk_size(%d)\n" , chunk_size, |
45 | correct_chunk_size); |
46 | error = 1; |
47 | } |
48 | |
49 | #pragma omp parallel |
50 | { |
51 | int i; |
52 | #pragma omp for schedule(runtime) |
53 | for (i = 1; i <= LOOPCOUNT; i++) { |
54 | #pragma omp critical |
55 | sum+=i; |
56 | } |
57 | } |
58 | if (known_sum != sum) { |
59 | printf(format: "Known Sum = %d, Calculated Sum = %d\n" , known_sum, sum); |
60 | error = 1; |
61 | } |
62 | return !error; |
63 | } |
64 | |
65 | int main(int argc, char** argv) |
66 | { |
67 | int i; |
68 | int num_failed=0; |
69 | if (argc != 3) { |
70 | fprintf(stderr, format: "usage: %s schedule_kind chunk_size\n" , argv[0]); |
71 | fprintf(stderr, format: " Run with envirable OMP_SCHEDULE=kind[,chunk_size]\n" ); |
72 | return 1; |
73 | } |
74 | correct_kind = atoi(nptr: argv[1]); |
75 | correct_chunk_size = atoi(nptr: argv[2]); |
76 | |
77 | for (i = 0; i < REPETITIONS; i++) { |
78 | if (!test_omp_for_runtime()) { |
79 | num_failed++; |
80 | } |
81 | } |
82 | return num_failed; |
83 | } |
84 | |