openmp parallel for collapse私有变量外循环

时间:2014-10-27 22:46:32

标签: c++ multithreading multiprocessing openmp

考虑以下使用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}})?

1 个答案:

答案 0 :(得分:1)

您要显示的代码的代码段会触发未定义的行为。事实上, loop-construct 必须遵守一些限制才能符合要求(参见OpenMP 4.0标准的第2.7.1节)。特别是第一个限制读取(强调我的):

  

与循环结构相关的所有循环必须完全嵌套;   也就是说,必须没有干预代码或任何OpenMP指令   在任何两个循环之间。