Мой вопрос, наверное, глупый, но все же я задам его, чтобы быть уверенным!
Вопрос: Ожидаете ли вы, что два приведенных ниже кода будут работать одинаково, используя MPI_Comm_Split для создания 1 вспомогательного коммуникатора? (например, предположим, что я запускаю код с 6 процедурами с рангом от 0 до 5)
Примечание: код написан на фортране 90 с компилятором Intel 2019, и я использую Mpich для Mpi.
КОД 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
КОД 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 не вызывается одинаково в двух кодах, но для меня он должен вести себя одинаково, но я не уверен... Я читал, что Mpi_Comm_Split должен вызываться в той же строке, но как процедуры могут знать, что вызов Mpi_Comm_Split делается то на одной строке, то на другой (мне без разницы)?!
Примечание: С Mpich и intel fortran я протестировал его, и обе реализации разделения коммуникатора работают, но я боюсь поведения разных компиляторов Mpi...