哪个openMP pragma用于阻塞循环?

时间:2011-08-12 11:04:02

标签: 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

#pragma omp for在继续下一次迭代之前是否确保线程同步?

1 个答案:

答案 0 :(得分:5)

是。从OpenMP Spec开始(例如,v 3.1,但从开始就开始),在“工作共享结构:”下

  

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

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