brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 539bb5a Raw
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