Что такое аргумент «int key» в функции MPI MPI_Comm_split_type? - PullRequest
0 голосов
/ 03 июня 2019

со ссылкой на официальную документацию по конкретной функции:

#include <mpi.h>
int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key,
    MPI_Info info, MPI_Comm *newcomm)

отсюда: https://www.open -mpi.org / DOC / v3.0 / man3 / MPI_Comm_split_type.3.php

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

Я не совсем уверен, что понимаю, поэтому мой вопрос:

Будет ли значение в ключе новым значением ранга каждого процесса в новом коммуникаторе? Нужно ли передавать таким образом явно ранг / идентификатор каждого процесса?

1 Ответ

0 голосов
/ 03 июня 2019

Как отмечено в комментариях, ключ используется для определения ранга процесса в новом коммуникаторе. Самый низкий ключ получает ранг ноль, следующий самый низкий ранг 1 и так далее. Таким образом, у нас есть 3 ранга в старом коммуникаторе, использующих один и тот же цвет, и эти ранги предоставляют ключи 5, 167 и 19, этот процесс, обеспечивающий ключ 5, будет иметь ранг 0 в новом коммуникаторе, что обеспечивает ключ 19 иметь ранг 1, а предоставление 167 будет рангом 2. Связи разрываются, сохраняя порядок рангов, как в исходном коммуникаторе. Таким образом, если вы просто предоставите ключ 0 и все процессы, вызывающие MPI_Comm_split, предоставят один и тот же цвет, это создаст новый коммуникатор, в котором ранги будут точно такими же, как и у старого. В качестве последнего примера рассмотрим коммуникатор размером nproc и каждый процесс с рангом my_rank. Если затем вы вызываете MPI_Comm_split, где каждый процесс предоставляет один и тот же цвет, а ключ (nproc - my_rank), то новый коммуникатор будет иметь тот же размер, что и старый, но порядок рангов будет обратным.

...