aboutsummaryrefslogtreecommitdiff
path: root/final/runtime/test/worksharing/for/omp_for_schedule_runtime.c
diff options
context:
space:
mode:
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.c82
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;
+}