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


функция MPI_Comm_create

Извлекает подмножество группы процессов для отдельных вычислений MIMD в отдельном коммуникаторе.

Синтаксис

int MPIAPI MPI_Comm_create(
        MPI_Comm  comm,
        MPI_Group group,
  _Out_ MPI_Comm  *newcomm
);

Параметры

  • Comm
    Исходный коммуникатор.

  • group
    Группа, определяющая запрошенную подмножество процессов в исходном коммуникаторе.

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

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

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

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

Fortran

    MPI_COMM_CREATE(COMM,GROUP,NEWCOMM,IERROR)
        INTEGER COMM, GROUP, NEWCOMM, IERROR

Комментарии

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

Если параметр comm ссылается на внутриобщий коммуникатор, эта функция возвращает новый коммуникатор с группой связи в соответствии с параметром group . Никакие кэшированные сведения не передаются из исходного коммуникатора в новый коммуникатор. Каждый процесс должен вызываться с параметром группы , который является подгруппой группы, связанной с исходным коммуникатором. Возможное значение — MPI_GROUP_EMPTY. Процессы могут указывать разные значения для параметра group . Если процесс вызывает с непустой группой, то все процессы в этой группе должны вызывать функцию с одинаковыми значениями для параметра группы , то есть одни и те же члены в том же порядке. В противном случае функция возвращает ошибку. Этот результат означает, что набор групп, указанных в процессах, должен быть несвязанным. Если вызывающий процесс является членом группы, указанной в параметре group , то параметр newcomm представляет коммуникатор с указанной группой в качестве связанной группы. Если процесс задает группу, к которой он не принадлежит, например MPI_GROUP_EMPTY, то параметр newcomm возвращает MPI_COMM_NULL.

Интерфейс поддерживает исходный механизм из MPI-1.1, который требовал одну и ту же группу во всех процессах comm. Он был расширен в MPI-2.2, чтобы разрешить использование несвязанных подгрупп, чтобы реализации исключили ненужный обмен данными, которые функция MPI_Comm_split будет нести, когда пользователь уже знает членство в несвязанных подгруппах.

Функция MPI_Comm_create является коллективной и должна вызываться всеми процессами в группе исходного коммуникатора. Требование, чтобы вся группа принимала участие в вызове, возникает из-за следующих проблем:

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

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

Требования

Продукт

Распространяемый пакет 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_split