Параллельное программирование: Учебное пособие, страница 74

Система параллельного программирования, основанная на модели передачи сообщений, нашла свое отражение в спецификации библиотечных функций, которая была разработана в 1993—1994 годах группой MPIForum, в состав которой входили представители академических и промышленных кругов. Эта спецификация стала первым стандартом систем передачи сообщений. В MPI были учтены достижения многих проектов по созданию систем передачи сообщений, известных под сокращенными названиями: NX/2, Express, nCUBE, Vertex, p4, PARMACS, PVM, Chameleon, Zipcode, Chimp и т. д. Конкретные реализации MPI представляют собой библиотеки подпрограмм, которые могут использоваться в программах на языках C/C++ и FORTRAN. В 1998 году принят и опубликован модифицированный и дополненный стандарт второй версии спецификации – MPI-2.

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

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

Во-вторых, наличие стандарта могло бы снабдить разработчиков аппаратуры четким набором программ эффективного действия.

В-третьих, стандарт мог бы стать предпосылкой к разработкам промышленного программного обеспечения для решения параллельных задач.

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

Система MPI поддерживает модель программирования, в которой параллельная программа порождает процессы, взаимодействующие между собой с помощью обращений к подпрограммам передачи и приема сообщений. При инициализации MPI-программы создается фиксированный набор процессов, размещаемых на заданном множестве процессоров. В группах процессов, размещаемых на каждом процессоре, могут выполняться разные программы, поэтому модель программирования MPI иногда называют MPMD-моделью (Multiple Program Multiple Data — множество программ множество данных), в отличие от SPMD-модели, где на каждом процессоре выполняются только одинаковые задачи.

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

Конкретные реализации MPI обычно дополняются специальными пакетами программ и утилит. Это связано с тем, что спецификация MPI не поддерживает запуск процессов во время выполнения MPI-программы, не дает описания параллельного ввода/вывода и не имеет возможности получить доступ в ядро некоторых закрытых операционных систем, например, таких, как Windows 98 и ниже. Последний факт предопределил доминирование на рынке реализаций MPI под операционные системы LINUX.

С развитием сетевых версий операционных систем Windows (Windows NT, XP, 2000) появились и реализации MPI, работающие на кластерах машин, связанных с сетью посредством стандартного последовательного порта или через порт SCI (масштабируемый когерентный интерфейс). К ним можно отнести такие свободно распространяемые и постоянно совершенствуемые версии, как MPICH.NT, SCI-MPICH и NT-MPICH. Для их установки прилагается и соответствующее руководство.