When calling MPI_BCAST, is there any implied synchronization? For example, if the sender process were to get to the MPI_BCAST before others could it do the BCAST and then continue without any acknowledgements? Some recent tests with code like:
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
shows that with two threads they both reach completion, despite only the sender doing a call to MPI_BCAST.
Output:
1 done 0
0 done 0
Could this be a problem with the MPI installation I'm working with (MPICH), or is this standard behavior for MPI?
Bcast
is a collective communication call, and as such blocks. More precisely, it blocks until all processes in the specified communicator have made a matching call to Bcast
, at which point communication occurs and execution continues.
Your code is too simplified for debugging purposes. Can you post a working minimal example that demonstrates the problem?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With