brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 4ffdd91 Raw
57 lines · c
1// RUN: %libomp-compile-and-run2// critial with hint was introduced with icc 193// UNSUPPORTED: icc-184 5#include <stdio.h>6#include <omp.h>7#include "omp_testsuite.h"8 9int test_omp_critical(int iter) {10  int sum;11  int known_sum;12 13  sum = 0;14#pragma omp parallel15  {16    int mysum = 0;17    int i;18#pragma omp for19    for (i = 0; i < 1000; i++)20      mysum = mysum + i;21 22    switch (iter % 4) {23    case 0:24#pragma omp critical(c0) hint(omp_sync_hint_uncontended)25      sum = mysum + sum;26      break;27    case 1:28#pragma omp critical(c1) hint(omp_sync_hint_contended)29      sum = mysum + sum;30      break;31    case 2:32#pragma omp critical(c2) hint(omp_sync_hint_nonspeculative)33      sum = mysum + sum;34      break;35    case 3:36#pragma omp critical(c3) hint(omp_sync_hint_speculative)37      sum = mysum + sum;38      break;39    default:;40    }41  }42  known_sum = 999 * 1000 / 2;43  return (known_sum == sum);44}45 46int main() {47  int i;48  int num_failed = 0;49 50  for (i = 0; i < 4 * REPETITIONS; i++) {51    if (!test_omp_critical(i)) {52      num_failed++;53    }54  }55  return num_failed;56}57