При вызове 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
показывает, что с двумя потоками они оба достигают завершения, несмотря на то, что только отправитель делает вызов MPI_BCAST.
Выход:
1 done 0
0 done 0
Может ли это быть проблемой с установкой MPI, с которой я работаю (MPICH), или это стандартное поведение для MPI?