3.1 Общее описание стандарта MPI

В этой главе мы рассмотрим стандарт MPI (Message parsing interface – интерфейс передачи сообщений), который используется в системах с распределенной памятью. Он возник в 1994 году как решение проблемы разнообразия архитектур параллельных вычислительных систем и обеспечение возможности создания мобильных (переносимых между различными компьютерными платформами) программ. Наличие такого стандарта позволило разработать стандартные библиотеки программ (MPI-библиотеки), в которых оказалось возможным скрыть большинство архитектурных особенностей параллельных вычислительных систем и, как результат, существенно упростить проблему создания параллельных программ. Более того, стандартизация базового системного уровня позволила в значительной степени обеспечить мобильность параллельных программ, поскольку в настоящее время реализации MPI-стандарта имеются для большинства компьютерных платформ.

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

Формально MPI-подход основан на включении в программные модули вызовов функций специальной библиотеки (заголовочные и библиотечные файлы для языков С/С++ и Fortran) и загрузчика параллельно исполняемого кода в вычислительные узлы (ВУ). Подобные библиотеки имеются практически для всех платформ, поэтому написанные с использованием технологии MPI взаимодействия ветвей параллельного приложения программы независимы от машинной архитектуры (могут исполняться на однопроцессорных и многопроцессорных c общей или разделяемой памятью ЭВМ), от расположения ветвей (выполнение на одном или разных процессорах) и от API (Application Program Interface) конкретной операционной системы (ОС).

MPI является (довольно) низкоуровневым инструментом программиста; c помощью MPI созданы рассчитанные на численные методы специализированные библиотеки (например, включающая решение систем линейных уравнений, обращение матриц, ортогональные преобразования, поиск собственных значений и т.п. библиотеки ScaLAPACK и AZTEC для плотнозаполненных и разреженных матриц соответственно). MPI не обеспечивает механизмов задания начального размещения процессов по вычислительным узлам (процессорам); это должен явно задать программист или воспользоваться неким сторонним механизмом.

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

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