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
34 lines
601 B
C
34 lines
601 B
C
// 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;
|
|
}
|