У call были достаточно большие буферы, которые он пытался отправить, вероятно, он заблокировал бы и корневой процесс. Это завершилось только потому, что вы, вероятно, отправляли небольшие объемы данных, которые были буферизованы внутри.

ызове 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?

Ответы на вопрос(2)

Ваш ответ на вопрос