Подразумеваемая синхронизация с MPI_BCAST для отправителя и получателя?

Есть ли подразумеваемая синхронизация при вызове 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?

6
задан agrippa 11 July 2011 в 16:45
поделиться