Мой вопрос, вероятно, глупый, но я все же задам его, чтобы быть уверенным!
Вопрос: Ожидаете ли вы, что два приведенных ниже кода будут работать одинаково, используя MPI_Comm_Split для построения 1 субкоммуникатора? (например, допустим, я запускаю код с 6 процессами с рангом от 0 до 5)
NB: Код в Fortran 90 с компилятором Intel 2019, и я использую Mpich для Mpi.
CODE 1
call Mpi_Init(ierror)
call Mpi_Comm_Rank(mpi_comm_world,rank,ierror)
if (rank > 2) then
call Mpi_Comm_Split(mpi_comm_world,0,rank,new_comm,ierror)
else
call Mpi_Comm_Split(mpi_comm_world,mpi_undefined,rank,new_comm,ierror)
endif
CODE 2
call Mpi_Init(ierror)
call Mpi_Comm_Rank(mpi_comm_world,rank,ierror)
if (rank > 2) then
color = 0
else
color = mpi_undefined
endif
call Mpi_Comm_Split(mpi_comm_world,color,rank,new_comm,ierror)
Mpi_Comm_Split не вызывается То же самое в 2 кодах, но для меня, он должен вести себя одинаково, но я не уверен ... Я читал, что Mpi_Comm_Split должен вызываться в той же строке, но как Procs может знать, что вызов Mpi_Comm_Split выполняется в та или иная строка (для меня это не имеет никакого смысла)?!
NB: С Mpich и intel fortran я проверил это, и оба работали над разделением коммуникатора, но я боюсь поведения разных компиляторов Mpi ...