在do循环中不允许使用openmp屏障

时间:2013-11-20 06:53:42

标签: fortran openmp

我在fortran中有以下类型的openmp do循环:

!$OMP PARALLEL PRIVATE(i,j) DEFAULT(SHARED)
!$OMP DO
      do i=1,5
         do j=1,5
            A(i,j)=i+j
         enddo
!$OMP BARRIER
      enddo
!$OMP END DO
!$OMP END PARALLEL

我正在获取屏障错误的非法上下文...在内部do循环结束时是否还有其他方法可以设置某种障碍?感谢。

1 个答案:

答案 0 :(得分:3)

你想要达到什么目的?将障碍放在那里,如果允许,则意味着您希望所有线程在迭代和迭代时停止并等待彼此。如果您的线程数少于5,您希望发生什么?这不一定是僵局吗?

你可以做的只是内部循环并行化,那么你会得到一个隐含的障碍。或者你可以使用ordered子句强制迭代的一些重要部分按照索引的顺序以正确的顺序执行。

也许你的真实案例更复杂,结构也不同,但你必须发布真正的问题。在你的例子中,那里没有障碍。