Системное программное обеспечение - Учебное пособие (Терехин А.Н.)

4.15среда параллельного программирования mpi

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

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

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

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

Краткий обзор параллельных архитектур.

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

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

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

Системы с распределенной памятью – MPP.

Примером системы с распределенной памятью может служить массивно-параллельная архитектура – MPP[15]. Массивно-параллельные системы состоят из однородных вычислительных узлов, каждый из которых включает в себя:

один или несколько процессоров

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

коммуникационный процессор или сетевой адаптер

устройства ввода/вывода

Схема MPP системы, где каждый вычислительный узел (ВУ) имеет один процессорный элемент (например, RISC-процессор, одинаковый для всех ВУ), память и коммуникационное устройство, изображена на рисунке.

Рис. 22 Архитектура MPP.

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

          Поскольку в MPP-системе каждый узел представляет собой относительно самостоятельную единицу, то, как правило, управление массивно-параллельной системой в целом осуществляется одним из двух способов:

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

«Полноценная» ОС работает только на управляющей машине, а на каждом из узлов MPP-системы работает некоторый сильно «урезанный» вариант ОС, обеспечивающий работу  задач на данном узле.

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

Системы с общей памятью – SMP.

В качестве наиболее распространенного примера систем с общей памятью рассмотрим архитектуру SMP[16] – симметричную мультипроцессорную систему. SMP-системы состоят из нескольких однородных процессоров и массива общей памяти, который обычно состоит из нескольких независимых блоков. Слово «симметричный» в названии данной архитектуры указывает на то, что все процессоры имеют доступ напрямую (т.е. возможность адресации) к любой точке памяти, причем доступ любого процессора ко всем ячейкам памяти осуществляется с одинаковой скоростью. Общая схема SMP-архитектуры изображена на Рис. 23.

Рис. 23 Архитектура SMP

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

Очевидно, что наличие общей памяти в SMP-архитектурах позволяет эффективно организовать обмен данными между задачами, выполняющимися на разных процессорах, с использованием механизма разделяемой памяти. Однако сложность организации симметричного доступа к памяти и поддержания согласованности кэшей накладывает существенное ограничение на количество процессоров в таких системах – в реальности их число обычно не превышает 32 – в то время, как стоимость таких машин весьма велика. Некоторым компромиссом между масштабируемостью и однородностью доступа к памяти являются NUMA-архитектуры, которые мы рассмотрим далее.