Здавалка
Главная | Обратная связь

Работа с группами и коммуникаторами.Область связи. Коммуникаторы.



Часто в приложениях возникает потребность ограничить область коммуникаций некоторым набором процессов, которые составляют подмножество исходного набора. Для выполнения каких-либо коллективных операций внутри этого подмножества из них должна быть сформирована своя область связи, описываемая своим коммуникатором. Для решения таких задач 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.

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

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

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






©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.