到目前为止,我认为MPI屏障正在阻塞。因此,当进程遇到MPI障碍时,它应该停止并等待其他进程到达同一障碍。
然后在某些时候我编写了以下错误:
[...]
if (my_rank==0) then
call mpi_barrier(mpi_comm_world,ierr)
end if
[...]
现在我原本期望所有其他进程继续他们的工作,并最终会在下一次阻塞mpi调用时挂起。过程0在上述屏障处无限期等待。
但事实并非如此。所有进程都继续执行,它们都挂在代码中的下一个mpi调用中。我在第二次mpi调用之前打印出所有进程的等级,所以我知道他们都到达了那一点,包括任务0。
我像疯了一样排除故障,找到错误,直到我终于在代码中进一步回顾并找到了上面的错误。
有没有人遇到过这样的行为?我对mpi_barrier工作有误解吗?我使用的是mvapich2.2和ifort15。
感谢您的帮助。