Каков простой способ создать (под)коммуникатор, содержащий последовательные ранги [rStart
,..., последний ранг MPI_COMM_WORLD
] из MPI_COMM_WORLD
?
rStart
равно >= 0, т. е. необходимо исключить первые rStart
рангов.
Каков простой способ создать (под)коммуникатор, содержащий последовательные ранги [rStart
,..., последний ранг MPI_COMM_WORLD
] из MPI_COMM_WORLD
?
rStart
равно >= 0, т. е. необходимо исключить первые rStart
рангов.
Самый простой код должен иметь
MPI_Comm_split(MPI_COMM_WORLD, rank < rStart, rank, &new_comm);
работать на всех рангах MPI_COMM_WORLD
. Это создаст два коммуникатора - все ранги, начинающиеся с rStart
, получат тот, который вы хотите, остальные могут просто MPI_Comm_free
свой коммуникатор.
Если вы не можете легко заставить исключенные ранги запускать один и тот же код, вы можете использовать MPI_Comm_create_group
, но тогда вы также должны сначала создать группу.
MPI_Comm_split
, я понял, что (rank < rStart ? MPI_UNDEFINED : 0)
даже лучше для второго аргумента: он выдаст MPI_COMM_NULL
на первых рангах.
- person user2052436; 06.03.2019