我有一个已经与MPI并行的代码。每个MPI过程都必须在网格上进行大量计算。代码看起来像这样:
do i=starti,stopi
call function1(input1(i),output1)
call function1(input2(i+1),output2)
call function1(input3(i+2,output3)
call solve(output1,output2,output3,OUTPUT(i))
end do
MPI具有不同的starti和stopi范围。例如,我有两个流程:
process 1 starti=1 , stopi=100
process 2 starti=101 , stopi=200
这工作得非常好,但我想使用OpenMP来加快速度。修改后的代码如下所示:
do i=starti,stopi
!$OMP PARALLEL SECTIONS
!$OMP SECTION
call function1(input1(i),output1)
!$OMP SECTION
call function1(input2(i+1),output2)
!$OMP SECTION
call function1(input3(i+2),output3)
!$OMP END PARALLEL SECTIONS
call solve(output1,output2,output3,OUTPUT(i))
end do
但是,当我使用2个MPI进程和3个OpenMP线程运行此代码时,它比纯MPI慢2倍。 CPU不是这种情况,因为我有4个内核/ 8个线程的CPU。 那是为什么?