brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 3c7912b Raw
90 lines · c
1// RUN: %clang %openmp_flags %flags-use-compiler-omp-h %s -o %t && %libomp-run2// UNSUPPORTED: gcc-5, gcc-6, gcc-7, gcc-83// UNSUPPORTED: clang-5, clang-6, clang-7, clang-8, clang-9, clang-104// UNSUPPORTED: icc5 6#include <stdio.h>7#include <stdlib.h>8#include <omp.h>9#include "omp_my_sleep.h"10 11int a, b;12 13void mutexinoutset_task() {14  if (b != 0) {15    fprintf(stderr, "mutexinoutset_task: b != 0 at start of task\n");16    exit(EXIT_FAILURE);17  }18  b++;19  if (b != 1) {20    fprintf(stderr, "mutexinoutset_task: b != 1\n");21    exit(EXIT_FAILURE);22  }23  my_sleep(0.1);24  b--;25  if (b != 0) {26    fprintf(stderr, "mutexinoutset_task: b != 0 at end of task\n");27    exit(EXIT_FAILURE);28  }29}30 31int main(int argc, char** argv) {32  omp_depend_t dep_a_in;33  omp_depend_t dep_a_out;34  omp_depend_t dep_a_inout;35  omp_depend_t dep_a_mutexinoutset;36 37  a = 0;38  b = 0;39 40  #pragma omp depobj(dep_a_in) depend(in: a)41  #pragma omp depobj(dep_a_out) depend(out: a)42  #pragma omp depobj(dep_a_inout) depend(inout: a)43  #pragma omp depobj(dep_a_mutexinoutset) depend(mutexinoutset: a)44 45  #pragma omp parallel46  {47    #pragma omp single48    {49 50      #pragma omp task depend(depobj: dep_a_out)51      {52        my_sleep(0.1);53        a = 10;54      }55 56      #pragma omp task depend(depobj: dep_a_inout)57      {58        my_sleep(0.1);59        a++;60      }61 62      #pragma omp task depend(depobj: dep_a_mutexinoutset)63      mutexinoutset_task();64      #pragma omp task depend(depobj: dep_a_mutexinoutset)65      mutexinoutset_task();66      #pragma omp task depend(depobj: dep_a_mutexinoutset)67      mutexinoutset_task();68      #pragma omp task depend(depobj: dep_a_mutexinoutset)69      mutexinoutset_task();70      #pragma omp task depend(depobj: dep_a_mutexinoutset)71      mutexinoutset_task();72 73      #pragma omp task depend(depobj: dep_a_in)74      { a += 10; }75    }76  }77 78  if (a != 21) {79    fprintf(stderr, "a (%d) != 21\n", a);80    exit(EXIT_FAILURE);81  }82 83  #pragma omp depobj(dep_a_in) destroy84  #pragma omp depobj(dep_a_out) destroy85  #pragma omp depobj(dep_a_inout) destroy86  #pragma omp depobj(dep_a_mutexinoutset) destroy87 88  return EXIT_SUCCESS;89}90