diff options
Diffstat (limited to 'final/runtime/test/worksharing/for/omp_for_schedule_runtime.c')
-rw-r--r-- | final/runtime/test/worksharing/for/omp_for_schedule_runtime.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/final/runtime/test/worksharing/for/omp_for_schedule_runtime.c b/final/runtime/test/worksharing/for/omp_for_schedule_runtime.c new file mode 100644 index 0000000..b957fc3 --- /dev/null +++ b/final/runtime/test/worksharing/for/omp_for_schedule_runtime.c @@ -0,0 +1,82 @@ +// RUN: %libomp-compile +// RUN: env OMP_SCHEDULE=static %libomp-run 1 0 +// RUN: env OMP_SCHEDULE=static,10 %libomp-run 1 10 +// RUN: env OMP_SCHEDULE=dynamic %libomp-run 2 1 +// RUN: env OMP_SCHEDULE=dynamic,11 %libomp-run 2 11 +// RUN: env OMP_SCHEDULE=guided %libomp-run 3 1 +// RUN: env OMP_SCHEDULE=guided,12 %libomp-run 3 12 +// RUN: env OMP_SCHEDULE=auto %libomp-run 4 1 +// RUN: env OMP_SCHEDULE=trapezoidal %libomp-run 101 1 +// RUN: env OMP_SCHEDULE=trapezoidal,13 %libomp-run 101 13 +// RUN: env OMP_SCHEDULE=static_steal %libomp-run 102 1 +// RUN: env OMP_SCHEDULE=static_steal,14 %libomp-run 102 14 +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include "omp_testsuite.h" + +int sum; +char* correct_kind_string; +omp_sched_t correct_kind; +int correct_chunk_size; + +int test_omp_for_runtime() +{ + int sum; + int known_sum; + int chunk_size; + int error; + omp_sched_t kind; + + sum = 0; + error = 0; + known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2; + omp_get_schedule(&kind, &chunk_size); + + printf("omp_get_schedule() returns: Schedule = %d, Chunk Size = %d\n", + kind, chunk_size); + if (kind != correct_kind) { + printf("kind(%d) != correct_kind(%d)\n", kind, correct_kind); + error = 1; + } + if (chunk_size != correct_chunk_size) { + printf("chunk_size(%d) != correct_chunk_size(%d)\n", chunk_size, + correct_chunk_size); + error = 1; + } + + #pragma omp parallel + { + int i; + #pragma omp for schedule(runtime) + for (i = 1; i <= LOOPCOUNT; i++) { + #pragma omp critical + sum+=i; + } + } + if (known_sum != sum) { + printf("Known Sum = %d, Calculated Sum = %d\n", known_sum, sum); + error = 1; + } + return !error; +} + +int main(int argc, char** argv) +{ + int i; + int num_failed=0; + if (argc != 3) { + fprintf(stderr, "usage: %s schedule_kind chunk_size\n", argv[0]); + fprintf(stderr, " Run with envirable OMP_SCHEDULE=kind[,chunk_size]\n"); + return 1; + } + correct_kind = atoi(argv[1]); + correct_chunk_size = atoi(argv[2]); + + for (i = 0; i < REPETITIONS; i++) { + if (!test_omp_for_runtime()) { + num_failed++; + } + } + return num_failed; +} |