функция 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 |