Я использовал MPI_Comm_split для разделения коммуникатора MPI по умолчанию. Если первоначально было 10 процессов в коммуникаторе по умолчанию, MPI_COMM_WORLD, и, скажем, их разряды были определены id_original. Новый коммуникатор состоял из 4 процессов с id_original 6,7,8,9. Эти процессы будут иметь разряды определенными, скажем, id_new в новом коммуникаторе. Что будет отношением между разрядами процессов в этих двух коммуникаторах. Будут процессы с id_original 6,7,8,9 будут иметь новые разряды 0,1,2,3 соответственно в новом коммуникаторе, или упорядочивание могло бы отличаться?
Согласно это (выделено мной):
Внутри каждой подгруппы процессы ранжируются в порядок, определенный значением ключа аргумента, со связями , разбитыми в соответствии с их рангом в старой группе .
Итак, да, если процессы 6–9 предоставляют такое же значение для ключа
, тогда они получат ранги 0–3 в новом коммуникаторе, соответственно. Однако, если это критично для правильности программы, вы должны явно указать это в своем коде, используя метод Эдрика.
Вы должны использовать аргумент «ключ» для MPI_Comm_split , чтобы управлять порядком в новом коммуникаторе. Например, вы можете использовать ранг в MPI_Comm_world (или ваш "id_original") в качестве ключа, например:
MPI_Comm_split( MPI_COMM_WORLD, id_original >= 6 && id_original <= 9,
id_original, &newComm );