Вперед: 4.6.2. Функции работы с группами
Назад: 4.5.2. Пересылка упакованных данных
К содержанию: Оглавление


4.6. Работа с группами и коммуникаторами

4.6.1. Основные определения

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

Группа представляет собой упорядоченное множество процессов. Каждый процесс идентифицируется переменной целого типа. Идентификаторы процессов образуют непрерывный ряд, начинающийся с 0. В MPI вводится специальный тип данных MPI_Group и набор функций для работы с переменными и константами этого типа. Существует две предопределенных группы:
MPI_GROUP_EMPTY - группа, не содержащая ни одного процесса;
MPI_GROUP_NULL - значение возвращаемое, когда группа не может быть создана.

Созданная группа не может быть модифицирована (расширена или усечена), может быть только создана новая группа. Интересно отметить, что при инициализации MPI не создается группы, соответствующей коммуникатору MPI_COMM_WORLD. Она должна создаваться специальной функцией явным образом.

Коммуникатор представляет собой скрытый объект с некоторым набором атрибутов, а также правилами его создания, использования и уничтожения. Коммуникатор описывает некоторую область связи. Одной и той же области связи может соответствовать несколько коммуникаторов, но даже в этом случае они не являются тождественными и не могут участвовать во взаимном обмене сообщениями. Если данные посылаются через один коммуникатор, процесс-получатель может получить их только через тот же самый коммуникатор.

В MPI существует два типа коммуникаторов:
intracommunicator - описывает область связи некоторой группы процессов;
intercommunicator - служит для связи между процессами двух различных групп.

Тип коммуникатора можно определить с помощью специальной функции MPI_Comm_test_inter.

С:
MPI_Comm_test_inter(MPI_Comm comm, int *flag)

FORTRAN:
MPI_COMM_TEST_INTER(COMM, FLAG, IERROR)
INTEGER COMM, IERROR
LOGICAL FLAG
IN comm - коммуникатор;
OUT flag - возвращает true, если comm - intercommunicator.

Функция возвращает значение "истина", если коммуникатор является inter коммуникатором.

При инициализации MPI создается два предопределенных коммуникатора:

MPI_COMM_WORLD - описывает область связи, содержащую все процессы;
MPI_COMM_SELF - описывает область связи, состоящую из одного процесса.


Вперед: 4.6.2. Функции работы с группами
Назад: 4.5.2. Пересылка упакованных данных
К содержанию: Оглавление