summaryrefslogtreecommitdiffstats
path: root/openmp/runtime/test/affinity/bug-nested.c
diff options
context:
space:
mode:
authorJonathan Peyton <jonathan.l.peyton@intel.com>2019-01-15 19:39:32 +0000
committerJonathan Peyton <jonathan.l.peyton@intel.com>2019-01-15 19:39:32 +0000
commit9355d0dc13c01c80e74f0dd14230356f58a99e55 (patch)
treec0a3471d5458884c0211a48ac5ed74bcbdd28a95 /openmp/runtime/test/affinity/bug-nested.c
parent45b511fb05f9073d72c1511bebd772f8e9dd6f35 (diff)
downloadbcm5719-llvm-9355d0dc13c01c80e74f0dd14230356f58a99e55.tar.gz
bcm5719-llvm-9355d0dc13c01c80e74f0dd14230356f58a99e55.zip
[OpenMP] Fix for nested proc_bind affinity bug
Using proc_bind clause on a nested #pragma omp parallel region with KMP_AFFINITY set causes an assertion error. This assertion occurs because the place-partition-var is not properly initialized in the nested master threads. Trying to get an intuitive result with KMP_AFFINITY + proc_bind is difficult because of how the KMP_AFFINITY gtid-to-place mapping occurs. This patch creates an initial place list no matter what affinity mechanism is used. For KMP_AFFINITY, the place-partition-var is initialized to all the places. Differential Revision: https://reviews.llvm.org/D55795 llvm-svn: 351227
Diffstat (limited to 'openmp/runtime/test/affinity/bug-nested.c')
-rw-r--r--openmp/runtime/test/affinity/bug-nested.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/openmp/runtime/test/affinity/bug-nested.c b/openmp/runtime/test/affinity/bug-nested.c
new file mode 100644
index 00000000000..a81b5f36292
--- /dev/null
+++ b/openmp/runtime/test/affinity/bug-nested.c
@@ -0,0 +1,33 @@
+// RUN: %libomp-compile && env KMP_AFFINITY=compact %libomp-run
+// REQUIRES: openmp-4.0
+
+#include <stdio.h>
+#include <stdint.h>
+#include <omp.h>
+#include "omp_testsuite.h"
+
+int test_nested_affinity_bug() {
+ int a = 0;
+ omp_set_nested(1);
+ #pragma omp parallel num_threads(2) shared(a)
+ {
+ #pragma omp parallel num_threads(2) shared(a) proc_bind(close)
+ {
+ #pragma omp atomic
+ a++;
+ }
+ }
+ return 1;
+}
+
+int main() {
+ int i;
+ int num_failed = 0;
+
+ for (i = 0; i < REPETITIONS; i++) {
+ if (!test_nested_affinity_bug()) {
+ num_failed++;
+ }
+ }
+ return num_failed;
+}
OpenPOWER on IntegriCloud