отношение между разрядами процессов после использования MPI_COMM_split

Я использовал 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 соответственно в новом коммуникаторе, или упорядочивание могло бы отличаться?

1
задан dks12345 12 May 2010 в 12:43
поделиться

2 ответа

Согласно это (выделено мной):

Внутри каждой подгруппы процессы ранжируются в порядок, определенный значением ключа аргумента, со связями , разбитыми в соответствии с их рангом в старой группе .

Итак, да, если процессы 6–9 предоставляют такое же значение для ключа , тогда они получат ранги 0–3 в новом коммуникаторе, соответственно. Однако, если это критично для правильности программы, вы должны явно указать это в своем коде, используя метод Эдрика.

1
ответ дан 3 September 2019 в 00:37
поделиться

Вы должны использовать аргумент «ключ» для MPI_Comm_split , чтобы управлять порядком в новом коммуникаторе. Например, вы можете использовать ранг в MPI_Comm_world (или ваш "id_original") в качестве ключа, например:

MPI_Comm_split( MPI_COMM_WORLD, id_original >= 6 && id_original <= 9,
                id_original, &newComm ); 
1
ответ дан 3 September 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: