Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Open MPI

Глава 15 из книги "Архитектура приложений с открытым исходным кодом", том 2.
Оригинал: Open MPI, глава из книги "The Architecture of Open Source Applications" том 2.
Автор: Jeffrey M. Squyres
Дата публикации: 2012 г.
Перевод: Н.Ромоданов
Дата перевода: июнь 2013 г.

Creative Commons

Перевод был сделан в соответствие с лицензией Creative Commons. С русским вариантом лицензии можно ознакомиться здесь.

15.1. Введение

Open MPI [GFB +04] - это программная реализация стандарта интерфейса передачи сообщений (MPI) с открытым исходным кодом. Для того, чтобы можно было рассматривать архитектуру и внутреннюю организацию Open MPI, нужно немного обсудить стандарт MPI.

Интерфейс передачи сообщений (MPI)

Стандарт MPI создан и поддерживается форумом MPI Forum - открытой группой, состоящей из экспертов по параллельным вычислениям, причем как из производственных, так и из научных кругов. В стандарте MPI определяется интерфейс API, который используется для переносимого высокопроизводительного межпроцессного взаимодействия (IPC) определенного типа: передачи сообщений. В частности, в документе MPI описывается надежная передача дискретных сообщений между процессами MPI. Хотя определение «процесс MPI» подлежит некоторой интерпретации для конкретной платформы, он, как правило, соответствует концепции процесса операционной системы (например, процесса POSIX). Интерфейс MPI специально предназначен реализации в среднем слое, что означает, что приложения, находящиеся выше, вызывают функции MPI для передачи сообщений.

MPI определяет высокоуровневый интерфейс API, что означает, что в нем абстрагируются от всех лежащих ниже транспортных механизмов, используемых при передаче сообщений между процессами. Идея состоит в том, чтобы процесс X, отправляющий сообщение, мог, по сути, сказать следующее: "берем этот массив из 1073 значений двойной точности и отправляем его процессу Y". Соответствующий процесс Y, получающий сообщение, по сути, мог сказать: "получаем массив из 1073 значений двойной точности от процесса X". Происходит чудо и массив из 1073 значений двойной точности поступает в ожидающий его буфер в процессе Y.

Обратите внимание на то, чего нет в этом обмене: нет такого понятия, как создание подключения, нет потока байтов, который нужно интерпретировать и нет сетевых адресов, используемых при обмене. Интерфейс MPI, абстрагируясь от всего этого, не только скрывает всю эту сложность от приложения, находящегося на более высоком уровне, но и делает приложение переносимым в другие среды и на другие транспортные уровни, осуществляющие передачу сообщений. В частности, правильное приложение MPI является совместимым по исходному коду в широком спектре платформ и типов сетей.

В интерфейсе MPI определяется не только соединение типа «точка-точка» (например, отправка и получение сообщения), в нем также определяются другие шаблоны соединения, например, коллективные (collective) соединения. Коллективными операциями являются такие, при которых в одном действии коммуникации участвуют несколько процессов. Например, надежное широковещательная передача данных (broadcast), когда в начале операции сообщение есть у одного процесса, а в конце операции это сообщение есть у всех процессов в группе. В MPI также определены другие концепции и шаблоны коммуникации, которые здесь не описываются. На момент написания статьи последней версией стандарта MPI был стандарт MPI-2.2 [For09]. Также были опубликованы черновые версии нового стандарта MPI-3; он должен быть опубликован уже в конце 2012 года. Прим. пер.: эта версия была опубликована 21 сентября 2012 года.

Использование MPI

Есть много реализаций стандарта MPI, в которых поддерживается широкий спектр различных платформ, операционных систем и типов сетей. В некоторых реализациях открытый исходный код, некоторые из них - закрытый. Open MPI, как следует из названия, является одной из реализаций с открытым исходным кодом. К числу типичных транспортных сетей MPI относятся следующие (но ими не ограничиваются): различные протоколы поверх Ethernet (например, TCP, iWARP, UDP, сами фреймы Ethernet и т.д.), совместно используемая память и InfiniBand.

Реализации MPI обычно используются в так называемых средах «высокопроизводительных вычислений» (HPC). Интерфейс MPI, в сущности, предоставляет соединения типа IPC для программ моделирования, вычислительных алгоритмов и других приложений типа «больших числовых молотилок».Для входных данных, с которыми работают эти приложения, обычно требуется выполнять слишком большой объем вычислений с тем, чтобы можно было ограничиться только одним сервером; задания MPI распределены по десяткам, сотням, а то и тысячам серверов, причем для того, чтобы решить одну вычислительную задачу, все они работают сообща.

Это означает, что приложения, использующие MPI, являются по своей сути параллельными и требуют высокой вычислительной мощности. Нет ничего необычного в том, что все ядра процессора при выполнении задания MPI работают на 100%. Для ясности — задания MPI обычно выполняются в специализированных средах, где процессы MPI являются единственным приложением, запущенным на машине (конечно, в дополнение к минимальным функциональным возможностям операционной системы).

Таким образом, реализации MPI, как правило, ориентированы на обеспечение чрезвычайно высокой производительности, измеряемой такими показателями, как:

  • Чрезвычайно низкими задержками при передаче коротких сообщений. В качестве примера, 1-байтовое сообщение может быть отправлено из процесса Linux пользовательского уровня через коммутатор InfiniBand и получено в целевом процессе Linux пользовательского уровня на другом сервере за время, чуть более 1 микросекунды (т.е., 0,000001 секунды).
  • Чрезвычайно высокая скорость отправки сообщений в сеть при передаче коротких сообщений. Некоторые поставщики имеют реализации MPI (в паре со специальным оборудованием), которые могут отправлять в сеть до 28 млн. сообщений в секунду.
  • Быстрый разгон (в зависимости от размера сообщения) до максимальной пропускной способности, поддерживаемой базовым транспортным механизмом.
  • Незначительное потребление ресурсов. Все ресурсы, используемые MPI (например, память, кэш и пропускная способность шины) не могут использоваться в приложении. Поэтому реализации MPI пытаются соблюсти баланс незначительного потребления ресурсов, одновременно обеспечивая высокую производительность.

Open MPI

Первая версия стандарта MPI - MPI-1.0 была опубликована в 1994 г. [Mes93]. Версия MPI-2.0, являющаяся набором дополнений поверх стандарта MPI-1, была завершена в 1996 г. [GGHL +96].

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

Open MPI представляет собой объединение четырех исследовательских/академических реализаций MPI с открытым исходным кодом: LAM/MPI, LA/MPI (Лос-Аламосский вариант MPI) и FT-MPI (отказоустойчивый вариант MPI). Вскоре после создания группы Open MPI к ней присоединилась команда проекта PACX-MPI.

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

После долгих обсуждений было принято решение отказаться от наших четырех уже существующих вариантов кода и взять из предыдущих проектов только лучшие идеи. Это решение было обусловлено главным образом следующими соображениями:

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

Таким образом, проявился проект Open MPI. Первый раз он был помещен в Subversion 22 ноября 2003 года.


Далее Архитектура