哪个openMP pragma用于阻塞循环?

Nic*_*nce 3 c++ openmp

我的算法(求解泊松方程)是完全可并行化的 - 假设所有线程在每次迭代结束时同步.

Function f, fNext;
init(f);
#pragma omp parallel
for(int step=0; step<maxITER; step++) {
#pragma omp for
   for(int i=0; i<N; i++) {
      for(int j=0; j<N; j++) {
         fNext(i,j) = someOperator( f(i,j) );
      }
   }
   f = fNext;
}//Threads must synchronize here
Run Code Online (Sandbox Code Playgroud)

并#pragma omp for确保持续到下一个迭代之前线程同步?

Jon*_*rsi 5

是.从OpenMP规范(例如,v 3.1,但这从一开始就已经存在),在"工作共享结构:"下

除非指定了nowait子句,否则在循环结构的末尾有一个隐式屏障.

也就是说,在for循环结束时,除非你做类似的事情,否则#pragma omp for nowait会有一个隐含的障碍,这样f=fNext在所有线程完成for循环之前不会执行任何线程.