6.1. Определение основных понятий
Часто в приложениях возникает потребность ограничить область коммуникаций некоторым набором процессов, которые составляют подмножество исходного набора. Для выполнения каких-либо коллективных операций внутри этого подмножества из них должна быть сформирована своя область связи, описываемая своим коммуникатором. Для решения таких задач MPI поддерживает два взаимосвязанных механизма. Во-первых, имеется набор функций для работы с группами процессов как упорядоченными множествами, и, во-вторых, набор функций для работы с коммуникаторами для создания новых коммуникаторов как описателей новых областей связи.
Группа представляет собой упорядоченное множество процессов. Каждый процесс идентифицируется переменной целого типа. Идентификаторы процессов образуют непрерывный ряд, начинающийся с 0. В MPI вводится специальный тип данных MPI_Group и набор функций для работы с переменными и константами этого типа. Существует две предопределенных группы:
MPI_GROUP_EMPTY | - | группа, не содержащая ни одного процесса; |
MPI_GROUP_NULL | - | значение возвращаемое, когда группа не может быть создана. |
Созданная группа не может быть модифицирована (расширена или усечена), может быть только создана новая группа. Интересно отметить, что при инициализации MPI не создается группы, соответствующей коммуникатору MPI_COMM_WORLD. Она должна создаваться специальной функцией явным образом.
Коммуникатор представляет собой скрытый объект с некоторым набором атрибутов, а также правилами его создания, использования и уничтожения. Коммуникатор описывает некоторую область связи. Одной и той же области связи может соответствовать несколько коммуникаторов, но даже в этом случае они не являются тождественными и не могут участвовать во взаимном обмене сообщениями. Если данные посылаются через один коммуникатор, процесс-получатель может получить их только через тот же самый коммуникатор.
В MPI существует два типа коммуникаторов:
intracommunicator | - | описывает область связи некоторой группы процессов; |
intercommunicator | - | служит для связи между процессами двух различных групп. |
Тип коммуникатора можно определить с помощью специальной функции MPI_Comm_test_inter.
IN | comm | - | коммуникатор; |
OUT | flag | - | возвращает true, если comm - intercommunicator. |
Функция возвращает значение "истина", если коммуникатор является inter коммуникатором.
При инициализации MPI создается два предопределенных коммуникатора:
MPI_COMM_WORLD | - описывает область связи, содержащую все процессы; |
MPI_COMM_SELF | - описывает область связи, состоящую из одного процесса. |