связь между рядами процессов после использования MPI_COMM_split - PullRequest
1 голос
/ 12 мая 2010

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

Ответы [ 2 ]

1 голос
/ 13 мая 2010

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

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

Так что да, если процессы 6-9 предоставляют одинаковое значение для key, то они получат ранги 0-3 в новом коммуникаторе, соответственно. Если это имеет решающее значение для правильности программы, тогда вы должны сделать это явным образом в своем коде, используя метод Эдрика.

1 голос
/ 12 мая 2010

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

MPI_Comm_split( MPI_COMM_WORLD, id_original >= 6 && id_original <= 9,
                id_original, &newComm ); 
...