我在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循环结束时是否还有其他方法可以设置某种障碍?感谢。
答案 0 :(得分:3)
你想要达到什么目的?将障碍放在那里,如果允许,则意味着您希望所有线程在迭代和迭代时停止并等待彼此。如果您的线程数少于5,您希望发生什么?这不一定是僵局吗?
你可以做的只是内部循环并行化,那么你会得到一个隐含的障碍。或者你可以使用ordered
子句强制迭代的一些重要部分按照索引的顺序以正确的顺序执行。
也许你的真实案例更复杂,结构也不同,但你必须发布真正的问题。在你的例子中,那里没有障碍。