我正在研究使用openMP进行嵌套parallalization的行为,我发现这个问题我很难解释。
#include <stdio.h>
#include <omp.h>
int main (){
int N = 3;
int i,j;
#pragma omp parallel num_threads(3)
{
omp_set_nested(1);
#pragma omp for private(j)
for(i = 0; i<N; i++){
for(j = 0; j<N; j++){
printf("AAAAA ");
}
printf("\n");
}
}
return 0;
}
上述程序的正确打印输出
AAAAA AAAAA AAAAA
AAAAA AAAAA AAAAA
AAAAA AAAAA AAAAA
但偶尔会打印出来
AAAAA AAAAA AAAAA
AAAAA AAAAA AAAAA AAAAA
AAAAA AAAAA
或其他一些配置。我当时认为这与我是如何做的有关。在线程之间共享,但是在使用嵌套循环时,我还没有能够找到omp如何显式处理它。为什么会这样?