Fortran MPI和OpenMP附加线程

时间:2016-08-13 02:25:24

标签: multithreading fortran mpi openmp

我有一个已经与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。 那是为什么?

0 个答案:

没有答案