我的样本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设计这种代码?
非常感谢您的回答!
谢谢!
答案 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