MPI设计循环代码

时间:2016-04-26 15:38:55

标签: fortran mpi

我的样本fortran代码是这样的:

call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD, ntasks, ierr)

if (myid==0) then
10  serial_subroutine1   
end if

parallel_function (myid, ntasks)

if (myid==0) then
   serial_subroutine2
   if (some requirements meet) go to 10
end if

call MPI_FINALIZE(IERR)
end

似乎serial_subroutine1中的某些输出晚于parallel_function中的输出。并且程序不会在serial_subroutine2中输出任何内容,就像它已经停止一样。

我想知道导致这个问题的原因以及如何解决这个问题?我应该如何通过MPI设计这种代码?

非常感谢您的回答!

谢谢!

1 个答案:

答案 0 :(得分:0)

我相信你想要一个如下的循环。只要你的条件得到满足,我就假设你想要通过并行呼叫。

logical :: keep_going
...

keep_going=.true.
do

  if(myid==0) call serial1()

  call parallel(myid,tasks)

! Do more serial work and test on root pe
  if(myid==0) then
    call serial2()
    keep_going=some_test_on_root_pe()
  endif

  ! let everyone know if we are continuing
  call mpi_bcast(keep_going,1,mpi_logical,0,mpi_comm_world,ierr)

  ! Do we bail out?
  if(.not. keep_going) exit
enddo