87 lines · c
1// RUN: %libomp-compile2// RUN: env KMP_DISP_NUM_BUFFERS=0 %libomp-run3// RUN: env KMP_DISP_NUM_BUFFERS=1 %libomp-run4// RUN: env KMP_DISP_NUM_BUFFERS=3 %libomp-run5// RUN: env KMP_DISP_NUM_BUFFERS=4 %libomp-run6// RUN: env KMP_DISP_NUM_BUFFERS=7 %libomp-run7// RUN: %libomp-compile -DMY_SCHEDULE=guided8// RUN: env KMP_DISP_NUM_BUFFERS=1 %libomp-run9// RUN: env KMP_DISP_NUM_BUFFERS=3 %libomp-run10// RUN: env KMP_DISP_NUM_BUFFERS=4 %libomp-run11// RUN: env KMP_DISP_NUM_BUFFERS=7 %libomp-run12// UNSUPPORTED: clang-11, clang-1213#include <stdio.h>14#include <omp.h>15#include <stdlib.h>16#include <limits.h>17#include "omp_testsuite.h"18 19#define INCR 720#define MY_MAX 20021#define MY_MIN -20022#define NUM_LOOPS 10023#ifndef MY_SCHEDULE24# define MY_SCHEDULE dynamic25#endif26 27int a, b, a_known_value, b_known_value;28 29int test_kmp_set_disp_num_buffers()30{31 int success = 1;32 a = 0;33 b = 0;34 // run many small dynamic loops to stress the dispatch buffer system35 #pragma omp parallel36 {37 int i,j;38 for (j = 0; j < NUM_LOOPS; j++) {39 #pragma omp for schedule(MY_SCHEDULE) nowait40 for (i = MY_MIN; i < MY_MAX; i+=INCR) {41 #pragma omp atomic42 a++;43 }44 #pragma omp for schedule(MY_SCHEDULE) nowait45 for (i = MY_MAX; i >= MY_MIN; i-=INCR) {46 #pragma omp atomic47 b++;48 }49 }50 }51 // detect failure52 if (a != a_known_value || b != b_known_value) {53 success = 0;54 printf("a = %d (should be %d), b = %d (should be %d)\n", a, a_known_value,55 b, b_known_value);56 }57 return success;58}59 60int main(int argc, char** argv)61{62 int i,j;63 int num_failed=0;64 65 // figure out the known values to compare with calculated result66 a_known_value = 0;67 b_known_value = 0;68 69 for (j = 0; j < NUM_LOOPS; j++) {70 for (i = MY_MIN; i < MY_MAX; i+=INCR)71 a_known_value++;72 for (i = MY_MAX; i >= MY_MIN; i-=INCR)73 b_known_value++;74 }75 76 for(i = 0; i < REPETITIONS; i++) {77 if(!test_kmp_set_disp_num_buffers()) {78 num_failed++;79 }80 }81 if (num_failed == 0)82 printf("passed\n");83 else84 printf("failed %d\n", num_failed);85 return num_failed;86}87