我知道有同样的问题,我想知道的是如果我使用" #pragma omp parallel for"在循环内,程序是否每次迭代都会生成线程?或者让他们一次并重复使用它们?
for(i=1;i<ni;i++)
{
#pragma omp parallel for
for(j=1;j<nj;j++)
{
some codes.....
}
and some codes ....(with loop)
}
如果此代码在每次迭代时生成线程,我该如何优化?
实际上,我的代码并不是完美的嵌套循环,也不能修改嵌套循环。答案 0 :(得分:1)
有些情况对only parallelize the inner loop and not the outer loop有用,所以关于是否在外循环的每次迭代中重新创建线程都是一个很好的问题。
GCC,ICC和MSVC都会创建名为thread pool的内容,因此您的问题的答案是线程只创建一次并重复使用。据我所知,OpenMP标准中没有任何内容表明必须创建一个线程池。没有线程池,内部循环可能是much slower。