【发布时间】:2014-06-06 22:05:26
【问题描述】:
我正在研究一个使用 FORTRAN 版本的 OPENMP 的程序。在那里我遇到了一个相当奇怪的结构。为了使“do”循环并行,使用了以下构造
count = 0
!$OMP PARALLEL
do
if (count > N ) exit
!$OMP CRITICAL
count = count + 1
!$OMP END CRITICAL
call WORK ! do some work here
end do
!$OMP END PARALLEL
我不太确定,上面的代码是否真的使 do 循环并行。我知道这样做的标准方法是使用以下工作共享结构。
!$OMP PARALLEL
!$OMP DO
do count = 1,N
call WORK ! do some work here
end do
!$OMP ENDDO
!$OMP END PARALLEL
我已经通过实施标准工作共享结构测试了这两种可能性,并在使用它时观察到了一些加速。我可以想象$OMP CRITICAL 构造可能会充当瓶颈并导致一些减速。我认为,如果线程以不同的速度执行,则使用非标准方法进行工作共享可能是有益的。但是,我不确定我的想法有多准确。
提前谢谢你
亚历克斯
【问题讨论】:
标签: parallel-processing fortran openmp