ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
64
коммуникатор newcomm так, что все обмены в ней гарантированно выполняются
независимо от других операций обмена.
Детали внутреннего представления коммуникаторов и групп зависят от кон-
кретной реализации, пользователь не имеет к ним прямого доступа. В MPI сущест-
вует механизм "кэширования", который позволяет связать с коммуникатором новый
набор атрибутов. Это "высший пилотаж" программирования на MPI.
Группы процессов
Группой называют упорядоченное множество процессов. Каждому процессу в
группе сопоставлен свой ранг. Операции с группами могут выполняться отдельно от
операций с коммуникаторами, но в операциях обмена используются только комму-
никаторы. В MPI имеется специальная предопределенная пустая группа
mpi_group_empty.
Коммуникаторы бывают двух типов:
интракоммуникаторы —
для операций
внутри одной группы процессов и
интеркоммуникаторы —
для двухточечного об-
мена между двумя группами процессов. Интракоммуникатором, в частности, явля-
ется mpi_comm_world.
В MPI-программах чаще используются интракоммуникаторы. Интракоммуни-
катор включает экземпляр группы, контекст обмена для всех его видов, а также,
возможно, виртуальную топологию (о топологиях мы поговорим в следующей гла-
ве) и другие атрибуты. Контекст обеспечивает возможность создания изолирован-
ных друг от друга, а потому "безопасных", областей взаимодействия. Система сама
управляет их разделением. Контекст играет роль дополнительного тега, который
дифференцирует сообщения.
MPI поддерживает обмены между двумя непересекающимися группами про-
цессов. Если параллельная программа состоит из нескольких параллельных моду-
лей, удобно разрешить одному модулю обмениваться сообщениями с другим, ис-
пользуя для адресации локальные по отношению ко второму модулю ранги. Такой
подход удобен, например, при программировании параллельных клиент-серверных
приложений. Интеробмены реализуются с помощью интеркоммуникаторов, которые
объединяют две группы процессов общим контекстом. В контексте, связанном с ин-
теркоммуникатором, передача сообщения в локальной группе всегда сопровождает-
ся его приемом в удаленной группе — это двухточечная операция. Группа, содер-
жащая процесс, который инициирует операцию интеробмена, называется
локальной
группой,
а группа, содержащая процесс-адресат, —
удаленной группой.
Интеробмен
задается парой коммуникатор — ранг, при этом ранг задается относительно удален-
ной группы.