agr*_*ppa 6 synchronization broadcast mpi
在调用MPI_BCAST时,是否有任何隐含的同步?例如,如果发送者进程在其他人可以进入MPI_BCAST之前进行BCAST然后继续而没有任何确认?最近的一些测试代码如:
program test
include 'mpif.h'
integer ierr, tid, tmp
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, tid, ierr)
tmp = tid
if(tid.eq.0) then
call MPI_BCAST(tmp,1,MPI_INTEGER,MPI_ROOT,MPI_COMM_WORLD, ierr)
else
endif
write(*,*) tid,'done'
call MPI_FINALIZE(ierr)
end
Run Code Online (Sandbox Code Playgroud)
尽管只有发送者正在调用MPI_BCAST,但它显示两个线程都完成了.
输出:
1 done 0
0 done 0
Run Code Online (Sandbox Code Playgroud)
这可能是我正在使用的MPI安装(MPICH)的问题,还是MPI的标准行为?
Bcast是集体通信呼叫,因此是块。更准确地说,它会阻塞,直到指定通信器中的所有进程都对 进行匹配的调用Bcast,此时发生通信并继续执行。
您的代码对于调试目的来说过于简化。您可以发布一个演示该问题的最小工作示例吗?