next up previous contents
Next: Доступ в интеркоммуникаторах Up: Группы, контексты и коммуникаторы Previous: Библиотечный пример 2   Contents

Интер-коммуникация

Этот раздел представляет концепцию интер-коммуникации и описывает средства MPI, которые ее поддерживают.

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

Интер-коммуникация является обменом типа ``точка-точка'' между процессами в различных группах (парный обмен). Группа, содержащая процесс, который инициализирует операцию интеркоммуникации, называется ``локальной группой'', то есть отправителем при посылке и получателем при приеме. Группа, содержащая целевой процесс, называется ``удаленной группой'', этот процесс является получателем при отправке и отправителем при приеме. Как и в интра-коммуникации, целевой процесс определяется парой (communicator, rank). В отличие от интра-коммуникации, номер указывается относительно второй, отдаленной группы.

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

Обобoщенные свойства интер- и интра-коммуникаторов:

Чтобы определить, является ли коммуникатор интер- или интра-коммуникатором, используется функция MPI_COMM_TEST_INTER. Интер-коммуникаторы могут использоваться как аргументы для некоторых функций доступа к коммуникаторам. Интер-коммуникаторы не могут использоваться как вход для некоторых процедур создания интра-коммуникаторов (например, MPI_COMM_CREATE).

Совет разработчикам: Для целей парного обмена коммуникаторы могут быть представлены в каждом процессе кортежем, состоящим из:

Для интер-коммуникаторов аргумент group описывает удаленную группу, а source - номер процесса в локальной группе. Для интра-коммуникаторов group является коммуникаторной группой, source - номером процесса в этой группе, а send_context и receive_context идентичны. Группа представлена таблицей ``номер - абсолютный адрес''.

При обсуждении интер-коммуникатора важно изучить процессы в локальных и удаленных группах. Рассмотрим процесс P в группе ${\rm P}$, которая имеет интеркоммуникатор Cp, и процесс Q в группе Q, которая имеет интеркоммуникатор С$_{Q}$ Тогда

Пусть P посылает сообщение Q, используя интер-коммуникатор. Тогда P использует таблицу group, чтобы найти абсолютный адрес Q; source и send_context добавлены в конец сообщения.

Пусть Q запускает прием с явным аргументом отправителя, используя интер-коммуникатор. Тогда Q сопоставляет receive_context с контекстом сообщения, а аргумент источника - с источником сообщения.

Такой же алгоритм пригоден и для интракоммуникаторов.

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



Subsections

Alex Otwagin 2002-12-10