Операционные системы распределенных вычислительных систем

       

MPI - Message-Passing Interface


(Message Passing Interface Forum, May 5, 1994

 http://www.mpi-forum.org)

 (1) Цели:

·

Создать  интерфейс  прикладного программирования (не только для компиляторов или библиотек реализации систем);

·      Обеспечить   возможность   эффективных  коммуникаций  (избежать копирования из памяти в  память,  позволить  совмещение  вычислений  и коммуникаций  или разгрузку на коммуникационный процессор там,  где он есть);

·      Разрешить расширения для использования в гетерогенной среде;

·      Исходить из надежности  коммуникаций  (пользователь  не  должен бороться  с  коммуникационными  сбоями  -  это  дело  коммуникационных подсистем нижнего уровня);

·      Определить  интерфейс,  который  бы  не  слишком  отличался  от используемых в настоящее время, таких как PVM, Express, P4, и пр.;

·      Определить интерфейс,  который мог бы быстро быть реализован на многих продаваемых  платформах  без  серьезной  переделки  нижележащего коммуникационного и системного ПО.

**************************************************************

(2)   Что включено в MPI ?

·      Коммуникации точка-точка;

·      Коллективные операции;

·      Группы процессов;

·      Коммуникационные контексты;



·      Простой   способ  создания  процессов  для  модели  SPMD  (одна программа  используется  для  обработки  разных   данных   на   разных процессорах);

·      Топология процессов.

**************************************************************

(3)   Что не включено в MPI ?

·      Явные  операции  с  разделяемой памятью и явная поддержка нитей (процессов с общей памятью);

·      Операции,  которые  требуют  больше  поддержки  от операционных систем,  чем действующие в настоящее время стандарты на ОС  (например, получение сообщений через механизм прерываний, активные сообщения);


·      Вспомогательные функции, такие как таймеры.

**************************************************************

  (4)   Некоторые понятия.

     Коммуникационные операции могут быть:

неблокирущие -  если  возврат   осуществляется   до   завершения операции;

блокируюшие - если возврат  означает,  что  пользователь может использовать ресурсы (например, буфера), указанные в вызове;

Операция называется локальной,  если  ее  выполнение  не  требует коммуникаций; нелокальной, если   ее   выполнение  может  требовать коммуникаций; коллективной,  если в ее выполнении должны  участвовать все процессы группы.

  (5)   Группы, контексты, коммуникаторы.

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

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

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

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

Имеются предопределенные коммуникаторы (точнее,  создаваемые  при инициализации MPI-системы):

·      MPI_COMM_ALL - все процессы



·      MPI_COMM_PEER  -   все,   кроме  главного процесса.

**************************************************************

(6) Операции над группами (локальные, без обмена сообщениями).

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

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

(7)  Точечные коммуникации.

Основные операции - send, receive

Операции могут быть блокирующими и неблокирующими.

В операции send задается:

·      адрес буфера в памяти;

·      количество посылаемых элементов;

·      тип данных каждого элемента;

·      номер процесса-адресата в его группе;

·      тег сообщения;

·      коммуникатор.

(последние 3 параметра - аналоги «почтового конверта»)

В операции receive задается:

·      адрес буфера в памяти;

·      количество посылаемых элементов;

·      тип данных каждого элемента;

·      номер процесса-адресата в его группе (либо «любой»);

·      тег сообщения (либо «любой»);

·      коммуникатор;

·      статус (источник и тег,  необходимые в том  случае,  когда  они неизвестны - при их задании с помощью шаблона «любой»).

Предусмотрена конвертация данных при работе в гетерогенной среде.

Имеется четыре  режима коммуникаций - стандартный,  буферизуемый, синхронный и режим готовности.

В стандартном  режиме  последовательность  выдачи операций send и receive произвольна,  операция send завершается тогда, когда сообщение изъято  из  памяти и она уже может использоваться процессом.  При этом выполнение  операции  может  осуществляться  независимо   от   наличия receive,  либо  требовать  наличие  (вопрос  реализации MPI).  Поэтому операция считается нелокальной.



В буферизуемом режиме  последовательность  выдачи операций send и receive произвольна,  операция send завершается тогда, когда сообщение изъято  из  памяти и помещено в буфер. Если места в буфере нет - ошибка программы (но есть возможность определить свой буфер).  Операция локальная.

В синхронном    режиме    последовательность    выдачи   операций произвольна, но операция send завершается только после выдачи и начала выполнения операции receive. Операция нелокальная.

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

Во всех   четырех  режимах  операция  receive  завершается  после получения сообщения в заданный пользователем буфер приема.

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

Имеются операции проверки  поступающих  процессу  сообщений,  без чтения их в буфер (например, для определения длины сообщения и запроса затем памяти под него).

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

Имеется составная  операция  send-receive,  позволяющая  избежать трудностей с порядком выдачи отдельных операций в обменивающихся между собой процессах.  Для частного случая обмена  данными  одного  типа  и длины  предлагается специальная операция (send-receive-replace),  в которой для посылки и приема сообщения используется один буфер.


Содержание раздела