xref: /llvm-project/openmp/runtime/test/env/kmp_set_dispatch_buf.c (revision 5dd4d0d46fb892975bbb3a086da5a3a9996ced4d)
14c4bda16SSaiyedul Islam // RUN: %libomp-compile
24c4bda16SSaiyedul Islam // RUN: env KMP_DISP_NUM_BUFFERS=0 %libomp-run
34c4bda16SSaiyedul Islam // RUN: env KMP_DISP_NUM_BUFFERS=1 %libomp-run
44c4bda16SSaiyedul Islam // RUN: env KMP_DISP_NUM_BUFFERS=3 %libomp-run
54c4bda16SSaiyedul Islam // RUN: env KMP_DISP_NUM_BUFFERS=4 %libomp-run
6067325f9SJonathan Peyton // RUN: env KMP_DISP_NUM_BUFFERS=7 %libomp-run
74c4bda16SSaiyedul Islam // RUN: %libomp-compile -DMY_SCHEDULE=guided
84c4bda16SSaiyedul Islam // RUN: env KMP_DISP_NUM_BUFFERS=1 %libomp-run
94c4bda16SSaiyedul Islam // RUN: env KMP_DISP_NUM_BUFFERS=3 %libomp-run
104c4bda16SSaiyedul Islam // RUN: env KMP_DISP_NUM_BUFFERS=4 %libomp-run
114c4bda16SSaiyedul Islam // RUN: env KMP_DISP_NUM_BUFFERS=7 %libomp-run
12*5dd4d0d4SAndreyChurbanov // UNSUPPORTED: clang-11, clang-12
13067325f9SJonathan Peyton #include <stdio.h>
14067325f9SJonathan Peyton #include <omp.h>
15067325f9SJonathan Peyton #include <stdlib.h>
16067325f9SJonathan Peyton #include <limits.h>
17067325f9SJonathan Peyton #include "omp_testsuite.h"
18067325f9SJonathan Peyton 
19067325f9SJonathan Peyton #define INCR 7
20067325f9SJonathan Peyton #define MY_MAX 200
21067325f9SJonathan Peyton #define MY_MIN -200
22067325f9SJonathan Peyton #define NUM_LOOPS 100
23067325f9SJonathan Peyton #ifndef MY_SCHEDULE
24067325f9SJonathan Peyton # define MY_SCHEDULE dynamic
25067325f9SJonathan Peyton #endif
26067325f9SJonathan Peyton 
27067325f9SJonathan Peyton int a, b, a_known_value, b_known_value;
28067325f9SJonathan Peyton 
test_kmp_set_disp_num_buffers()29067325f9SJonathan Peyton int test_kmp_set_disp_num_buffers()
30067325f9SJonathan Peyton {
31067325f9SJonathan Peyton   int success = 1;
32067325f9SJonathan Peyton   a = 0;
33067325f9SJonathan Peyton   b = 0;
34067325f9SJonathan Peyton   // run many small dynamic loops to stress the dispatch buffer system
35067325f9SJonathan Peyton   #pragma omp parallel
36067325f9SJonathan Peyton   {
37067325f9SJonathan Peyton     int i,j;
38067325f9SJonathan Peyton     for (j = 0; j < NUM_LOOPS; j++) {
39067325f9SJonathan Peyton       #pragma omp for schedule(MY_SCHEDULE) nowait
40067325f9SJonathan Peyton       for (i = MY_MIN; i < MY_MAX; i+=INCR) {
41067325f9SJonathan Peyton         #pragma omp atomic
42067325f9SJonathan Peyton         a++;
43067325f9SJonathan Peyton       }
44067325f9SJonathan Peyton       #pragma omp for schedule(MY_SCHEDULE) nowait
45067325f9SJonathan Peyton       for (i = MY_MAX; i >= MY_MIN; i-=INCR) {
46067325f9SJonathan Peyton         #pragma omp atomic
47067325f9SJonathan Peyton         b++;
48067325f9SJonathan Peyton       }
49067325f9SJonathan Peyton     }
50067325f9SJonathan Peyton   }
51067325f9SJonathan Peyton   // detect failure
52067325f9SJonathan Peyton   if (a != a_known_value || b != b_known_value) {
53067325f9SJonathan Peyton     success = 0;
54067325f9SJonathan Peyton     printf("a = %d (should be %d), b = %d (should be %d)\n", a, a_known_value,
55067325f9SJonathan Peyton            b, b_known_value);
56067325f9SJonathan Peyton   }
57067325f9SJonathan Peyton   return success;
58067325f9SJonathan Peyton }
59067325f9SJonathan Peyton 
main(int argc,char ** argv)60067325f9SJonathan Peyton int main(int argc, char** argv)
61067325f9SJonathan Peyton {
62067325f9SJonathan Peyton   int i,j;
63067325f9SJonathan Peyton   int num_failed=0;
64067325f9SJonathan Peyton 
65067325f9SJonathan Peyton   // figure out the known values to compare with calculated result
66067325f9SJonathan Peyton   a_known_value = 0;
67067325f9SJonathan Peyton   b_known_value = 0;
68067325f9SJonathan Peyton 
69067325f9SJonathan Peyton   for (j = 0; j < NUM_LOOPS; j++) {
70067325f9SJonathan Peyton     for (i = MY_MIN; i < MY_MAX; i+=INCR)
71067325f9SJonathan Peyton       a_known_value++;
72067325f9SJonathan Peyton     for (i = MY_MAX; i >= MY_MIN; i-=INCR)
73067325f9SJonathan Peyton       b_known_value++;
74067325f9SJonathan Peyton   }
75067325f9SJonathan Peyton 
76067325f9SJonathan Peyton   for(i = 0; i < REPETITIONS; i++) {
77067325f9SJonathan Peyton     if(!test_kmp_set_disp_num_buffers()) {
78067325f9SJonathan Peyton       num_failed++;
79067325f9SJonathan Peyton     }
80067325f9SJonathan Peyton   }
81*5dd4d0d4SAndreyChurbanov   if (num_failed == 0)
82*5dd4d0d4SAndreyChurbanov     printf("passed\n");
83*5dd4d0d4SAndreyChurbanov   else
84*5dd4d0d4SAndreyChurbanov     printf("failed %d\n", num_failed);
85067325f9SJonathan Peyton   return num_failed;
86067325f9SJonathan Peyton }
87