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
19int sum;
20char* correct_kind_string;
21omp_sched_t correct_kind;
22int correct_chunk_size;
23
24int 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
65int 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

source code of openmp/runtime/test/worksharing/for/omp_for_schedule_runtime.c