Коммуникатор MPI для поддиапазона MPI_COMM_WORLD

Каков простой способ создать (под)коммуникатор, содержащий последовательные ранги [rStart,..., последний ранг MPI_COMM_WORLD] из MPI_COMM_WORLD?

rStart равно >= 0, т. е. необходимо исключить первые rStart рангов.


person user2052436    schedule 06.03.2019    source источник


Ответы (1)


Самый простой код должен иметь

MPI_Comm_split(MPI_COMM_WORLD, rank < rStart, rank, &new_comm);

работать на всех рангах MPI_COMM_WORLD. Это создаст два коммуникатора - все ранги, начинающиеся с rStart, получат тот, который вы хотите, остальные могут просто MPI_Comm_free свой коммуникатор.

Если вы не можете легко заставить исключенные ранги запускать один и тот же код, вы можете использовать MPI_Comm_create_group, но тогда вы также должны сначала создать группу.

person Zulan    schedule 06.03.2019
comment
Прочитав про MPI_Comm_split, я понял, что (rank < rStart ? MPI_UNDEFINED : 0) даже лучше для второго аргумента: он выдаст MPI_COMM_NULL на первых рангах. - person user2052436; 06.03.2019