Поделиться через


функция MPI_Comm_split

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

Синтаксис

int MPIAPI MPI_Comm_split(
        MPI_Comm comm,
        int      color,
        int      key,
  _Out_ MPI_Comm *newcomm
);

Параметры

  • Comm
    Коммуникатор для разделения.

  • color
    Новый коммуникатор, которому будет назначен вызывающий процесс. Значение цвета должно быть не отрицательным.

    Если процесс задает значение цветаMPI_UNDEFINED, функция возвращает MPI_COMM_NULL в параметре newcomm вызывающей процедуре.

  • key
    Относительный ранг вызывающего процесса в группе нового коммуникатора. Дополнительные сведения об использовании параметров ключа и цвета см. в разделе Примечания.

  • newcomm [out]
    При возврате содержит дескриптор для нового коммуникатора.

Возвращаемое значение

Возвращает MPI_SUCCESS при успешном выполнении. В противном случае возвращаемое значение представляет собой код ошибки.

В Fortran возвращаемое значение хранится в параметре IERROR .

Fortran

    MPI_COMM_SPLIT(COMM,COLOR,KEY,NEWCOMM,IERROR)
        INTEGER COMM, COLOR, KEY, NEWCOMM, IERROR

Комментарии

Это коллективная функция, но каждый процесс может указать разные значения для параметров цвета и ключа .

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

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

В случае с коммуникационатором внутриобщих данных вызов MPI_COMM_CREATE(comm, group, new-comm) эквивалентен вызову MPI_COMM_SPLIT(comm, color, key, newcomm)метода , где процессы, которые являются членами группы, указывают номер группы на основе уникальной нумерации всех несвязанных групп для параметра color и их ранга в группе для ключевого параметра. Все процессы, не входящие в группу, указывают MPI_UNDEFINED для параметра color .

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

Для внутриобщих пользователей функции MPI_Comm_split и MPI_Comm_create предоставляют аналогичную возможность разделения взаимодействующей группы на несвязанные подгруппы.

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

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

Коммуникаторы, созданные MPI_Comm_split , не могут перекрываться. Чтобы преодолеть это ограничение, можно вызвать функцию MPI_Comm_split несколько раз. Таким образом можно создать несколько перекрывающихся структур связи. Рекомендуется использовать цвет и ключевые параметры в таких операциях разделения.

Результатом функции MPI_Comm_split на интеркоммуникаторе является то, что эти процессы слева с тем же цветом, что и процессы справа, объединяются для создания нового интеркоммуникатора. Параметр key определяет относительный ранг процессов на каждой стороне интеркоммуникатора. Новый коммуникатор с дескриптором MPI_COMM_NULL возвращается тем процессам, которые указывают MPI_UNDEFINED в качестве цвета или указывают цвет, указанный только на одной стороне интеркоммуникатора.

Требования

Продукт

Распространяемый пакет HPC 2012 MS-MPI, пакет HPC 2008 R2 распространяемый пакет MS-MPI, пакет HPC 2008 MS-MPI или клиентские служебные программы пакета HPC 2008

Заголовок

Mpi.h; Mpif.h

Библиотека

Msmpi.lib

DLL

Msmpi.dll

См. также раздел

Функции коммуникатора MPI

MPI_Comm_create