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
test_omp_for_runtime()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("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("Known Sum = %d, Calculated Sum = %d\n", known_sum, sum);
60 error = 1;
61 }
62 return !error;
63 }
64
main(int argc,char ** argv)65 int main(int argc, char** argv)
66 {
67 int i;
68 int num_failed=0;
69 if (argc != 3) {
70 fprintf(stderr, "usage: %s schedule_kind chunk_size\n", argv[0]);
71 fprintf(stderr, " Run with envirable OMP_SCHEDULE=kind[,chunk_size]\n");
72 return 1;
73 }
74 correct_kind = atoi(argv[1]);
75 correct_chunk_size = atoi(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