Параллельное программирование в стандарте MPI. Баканов В.М - 8 стр.

UptoLike

Составители: 

- 8 -
Неблокирующие функции возвращают квитанции (‘requests’), которые
погашаютсяпри завершении; до погашения квитанции с переменными
и массивами, которые были аргументами неблокирующей функции, ни-
чего делать нельзя.
Локальные функции не инициируют пересылок данных между ветвями.
Локальными являются большинство информационных функций (т.к. ко-
пии системных данных уже хранятся в каждой ветви). Функция передачи
MPI_Send
и функция синхронизации
MPI_Barrier
не являются локальны-
ми, поскольку производят пересылку. В то же время функция приема
MPI_Recv
(парная для
MPI_Send
) является локальной: она всего лишь пас-
сивно ждет поступления данных, ничего не пытаясь сообщить другим
ветвям.
Коллективные функции должны быть вызваны всеми ветвями-
абонентами коммуникатора (о понятии коммуникатора см. ниже), пере-
даваемого им как аргумент. Несоблюдение этого правила приводит к
ошибкам на стадии выполнения программы (обычно кповисаниюпро-
граммы).
В MPI продумано объединение ветвей в коллективы (это помогает надеж-
нее отличать сообщения друг от друга). Достигается это
введением в функ-
ции MPI параметра типакоммуникатор’, который можно рассматривать как
дескриптор (номер) коллектива (он ограничивает область действия данной
функции соответствующим коллективом). Коммуникатор коллектива, кото-
рый включает в себя все ветви приложения, создается автоматически (при
выполнении функции MPI_INIT) и называется MPI_COMM_WORLD; в
дальнейшем имеется возможность (функция MPI_Comm_split) создавать но-
вые коммуникаторы. Имеют место
включающий только самого себя как про-
цесс коммуникатор MPI_COMM_SELF и (заведомо неверный) коммуникатор
MPI_COMM_NULL; в случае возможности (динамического) порождения но-
вых процессов ситуация сложнее (подробнее см. [3
÷
5]).
Наиболее простыми функциями коммуникаций являются функцииточка-
точка’, в таких взаимодействиях участвуют два процесса, причем один
процесс является отправителем сообщения, а другой - получателем.
Процесс-отправитель вызывает одну из процедур передачи данных и явно
указывает номер в коммуникаторе процесса-получателя, а процесс-
получатель должен вызвать одну из процедур приема с указанием
того же
коммуникатора (в некоторых случаях необязательно знать точный номер
процесса-отправителя в заданном коммуникаторе).
Все процедуры этой группы делятся на два класса: процедуры с блокиров-
кой (с синхронизацией) и процедуры без блокировки (асинхронные). Проце-
дуры обмена с блокировкой приостанавливают работу процесса до выполне-
ния определенного условия, а возврат из асинхронных
процедур происходит
немедленно после инициализации соответствующей коммуникационной опе-
рации. Неаккуратное использование процедур с блокировкой может привести
                                     -8-

      Неблокирующие функции возвращают квитанции (‘requests’), которые
      ‘погашаются’ при завершении; до погашения квитанции с переменными
      и массивами, которые были аргументами неблокирующей функции, ни-
      чего делать нельзя.
  •   Локальные функции не инициируют пересылок данных между ветвями.
      Локальными являются большинство информационных функций (т.к. ко-
      пии системных данных уже хранятся в каждой ветви). Функция передачи
      MPI_Send и функция синхронизации MPI_Barrier не являются локальны-
      ми, поскольку производят пересылку. В то же время функция приема
      MPI_Recv (парная для MPI_Send) является локальной: она всего лишь пас-
      сивно ждет поступления данных, ничего не пытаясь сообщить другим
      ветвям.
  •   Коллективные функции       должны быть вызваны всеми ветвями-
      абонентами коммуникатора (о понятии коммуникатора см. ниже), пере-
      даваемого им как аргумент. Несоблюдение этого правила приводит к
      ошибкам на стадии выполнения программы (обычно к ‘повисанию’ про-
      граммы).

   В MPI продумано объединение ветвей в коллективы (это помогает надеж-
нее отличать сообщения друг от друга). Достигается это введением в функ-
ции MPI параметра типа ‘коммуникатор’, который можно рассматривать как
дескриптор (номер) коллектива (он ограничивает область действия данной
функции соответствующим коллективом). Коммуникатор коллектива, кото-
рый включает в себя все ветви приложения, создается автоматически (при
выполнении функции MPI_INIT) и называется MPI_COMM_WORLD; в
дальнейшем имеется возможность (функция MPI_Comm_split) создавать но-
вые коммуникаторы. Имеют место включающий только самого себя как про-
цесс коммуникатор MPI_COMM_SELF и (заведомо неверный) коммуникатор
MPI_COMM_NULL; в случае возможности (динамического) порождения но-
вых процессов ситуация сложнее (подробнее см. [3 ÷ 5]).
  Наиболее простыми функциями коммуникаций являются функции ‘точка-
точка’, в таких взаимодействиях участвуют два процесса, причем один
процесс является отправителем сообщения, а другой - получателем.
Процесс-отправитель вызывает одну из процедур передачи данных и явно
указывает номер в коммуникаторе процесса-получателя, а процесс-
получатель должен вызвать одну из процедур приема с указанием того же
коммуникатора (в некоторых случаях необязательно знать точный номер
процесса-отправителя в заданном коммуникаторе).
  Все процедуры этой группы делятся на два класса: процедуры с блокиров-
кой (с синхронизацией) и процедуры без блокировки (асинхронные). Проце-
дуры обмена с блокировкой приостанавливают работу процесса до выполне-
ния определенного условия, а возврат из асинхронных процедур происходит
немедленно после инициализации соответствующей коммуникационной опе-
рации. Неаккуратное использование процедур с блокировкой может привести