我编写了一个程序到并行版,但遇到了一个问题。这个程序很大,我试图在最外层并行化它。这个程序是用fortran编写的,以下是我的代码的方案。
program main
use omp_lib
implicit none
declare some variables...
call omp_set_num_threads(n)
!$OMP parallel do
!$OMP private(a,b,c,d)
do i=1,5000000
call sub1(a,b,c)
b=c+d;c=b+d;...
call sub2(b,c,d)
if (logical_expression) cycle
call sub3()
call sub4()
enddo
end program
最后一个循环有一些条件cycle
,这些条件主要发生在i
s很小的情况下。因此,当我尝试打印出正在执行的循环i
时,我终于在执行结束时得到了它,i
是连续且大的。如果我在屏幕上打印出i
,我看到程序的速度与执行结束时的顺序版一样慢。有没有人知道为什么以及如何解决这个问题?