【发布时间】:2015-05-31 20:05:22
【问题描述】:
我在 Fortran 中工作。我的目的是用 OPENMP 并行处理这种程序:
do t=1, t_fin (sequential)
a sequence of do loops (not sequential)
end do
循环是顺序的(时间的)。我试图在每个顺序循环迭代开始时创建线程,但这会使代码比它可能的慢。因此,我的问题是是否可以在开始循环之前只创建一次线程。实际上:
!$OMP PARALLEL
!$OMP SECTIONS
!$OMP CRITICAL
do t=1, t_fin
sequence of OMP do
end do
!$OMP END CRITICAL
!$OMP END PARALLEL
我已经尝试过这种方式,但它就像只有一个线程一样工作。我想这取决于有一个包含omp do 的外部临界区这一事实。但是,我想用多个线程执行内部omp do。有没有办法获得这个?
【问题讨论】:
-
我不确定你的问题到底是什么。为什么不使用单个
omp parallel do指令并行化循环?你为什么使用sections?你为什么要critical部分?您知道临界区一次只允许一个线程,对吧?你的代码没有意义......