考虑以下使用OpenMP运行的代码
#pragma omp parallel for collapse(2)
for(int i=0; i<10; i++)
{
int var; // is this private to execute_thread?
for(int j=0; j<10; j++)
{
execute_thread(i,j);
}
}
由于collapse(2)
子句,对于所有execute_thread(i,j)
和i
,此双循环并行化并且j
并行执行。我的问题如下:变量var
是在每个线程私有的内部循环上面声明的,还是内部循环中所有线程共享的变量for(int j...)
({{1}})?
答案 0 :(得分:1)
您要显示的代码的代码段会触发未定义的行为。事实上, loop-construct 必须遵守一些限制才能符合要求(参见OpenMP 4.0标准的第2.7.1节)。特别是第一个限制读取(强调我的):
与循环结构相关的所有循环必须完全嵌套; 也就是说,必须没有干预代码或任何OpenMP指令 在任何两个循环之间。