Этот раздел представляет концепцию интер-коммуникации и описывает средства MPI, которые ее поддерживают.
В приложениях, содержащих много исполнительных модулей, различные группы процессов выполняют отличающиеся модули, и процессы из этих модулей связываются друг с другом по принципу конвейера или по более общей схеме графа связей между модулями. В этих приложениях для процесса наиболее естественным способом описания целевого процесса является указание номера целевого процесса в пределах целевой группы. В приложениях, которые содержат внутренние серверы уровня пользователя, каждый сервер может быть группой процессов, которая обеспечивает услуги для одного или большего количества клиентов, и каждый клиент может быть группой процессов, которая использует услуги одного или большего количества серверов. В таких приложениях снова проще всего будет определить целевой процесс его номером в пределах целевой группы. Этот тип связи называется ``интер-коммуникация'' и используемый коммуникатор называется ``интер-коммуникатор''.
Интер-коммуникация является обменом типа ``точка-точка'' между процессами в различных группах (парный обмен). Группа, содержащая процесс, который инициализирует операцию интеркоммуникации, называется ``локальной группой'', то есть отправителем при посылке и получателем при приеме. Группа, содержащая целевой процесс, называется ``удаленной группой'', этот процесс является получателем при отправке и отправителем при приеме. Как и в интра-коммуникации, целевой процесс определяется парой (communicator, rank). В отличие от интра-коммуникации, номер указывается относительно второй, отдаленной группы.
Все конструкторы интер-коммуникаторов являются блокирующими и требуют, чтобы локальные и удаленные группы были непересекающимися, чтобы избежать тупиковых ситуаций.
Обобoщенные свойства интер- и интра-коммуникаторов:
Чтобы определить, является ли коммуникатор интер- или интра-коммуникатором, используется функция MPI_COMM_TEST_INTER. Интер-коммуникаторы могут использоваться как аргументы для некоторых функций доступа к коммуникаторам. Интер-коммуникаторы не могут использоваться как вход для некоторых процедур создания интра-коммуникаторов (например, MPI_COMM_CREATE).
Совет разработчикам: Для целей парного обмена коммуникаторы могут быть представлены в каждом процессе кортежем, состоящим из:
Для интер-коммуникаторов аргумент group описывает удаленную группу, а source - номер процесса в локальной группе. Для интра-коммуникаторов group является коммуникаторной группой, source - номером процесса в этой группе, а send_context и receive_context идентичны. Группа представлена таблицей ``номер - абсолютный адрес''.
При обсуждении интер-коммуникатора важно изучить процессы в локальных и удаленных группах. Рассмотрим процесс P в группе , которая имеет интеркоммуникатор Cp, и процесс Q в группе Q, которая имеет интеркоммуникатор С Тогда
Cp.receive_context = C. send_context и этот контекст уникален в P.
Пусть P посылает сообщение Q, используя интер-коммуникатор. Тогда P использует таблицу group, чтобы найти абсолютный адрес Q; source и send_context добавлены в конец сообщения.
Пусть Q запускает прием с явным аргументом отправителя, используя интер-коммуникатор. Тогда Q сопоставляет receive_context с контекстом сообщения, а аргумент источника - с источником сообщения.
Такой же алгоритм пригоден и для интракоммуникаторов.
Чтобы поддерживать конструкторы и средства доступа к интер-коммуникаторам, необходимо расширить эту модель дополнительными структурами, которые сохраняют информацию о локальной коммуникационной группе, и дополнительными контекстами защиты.[]