Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ГОСЫ / Paral_programirovanie_otvety_3vopros

.pdf
Скачиваний:
182
Добавлен:
15.02.2016
Размер:
717.98 Кб
Скачать

Парные операции передачи данных выполняются для процессов, принадлежащих одному и тому же коммуникатору. Коллективные операции применяются одновременно для всех процессов коммуникатора.

В ходе вычислений могут создаваться новые и удаляться существующие группы процессов и коммуникаторы. Один и тот же процесс может принадлежать разным группам и коммуникаторам. Все имеющиеся в параллельной программе процессы входят в состав создаваемого по умолчанию коммуникатора с идентификатором MPI_COMM_WORLD.

MPI не предусматривает механизмов поведения при ошибках в коммуникационной системе и не обеспечивает никаких механизмов для обработки коммуникационных отказов.

По умолчанию программная ошибка, обнаруженная во время исполнения MPI процедуры,

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

MPI возвращают код, который указывает на успешное или не успешное завершение операции. Пользователь может самостоятельно проанализировать возвращаемый код MPI-

ошибки и предусмотреть свою собственную обработку ошибочных ситуаций.

При выполнении операций передачи сообщений для указания передаваемых или получаемых данных в функциях MPI необходимо указывать тип пересылаемых данных. MPI

содержит большой набор базовых типов данных, во многом совпадающих с типами данных в алгоритмических языках C и Fortran. Кроме того, в MPI имеются возможности для создания новых производных типов данных для более точного и краткого описания содержимого пересылаемых сообщений.

MPI содержит функции создания виртуальных топологий. Топология – это логическая организация процессов в группе (внутри коммуникатора).

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

Наиболее общим видом топологии процессов является структура графа. Узлы графа соответствуют процессам, ребра соответствуют связям между процессами.

31

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

0. Например, соотношение между номером процесса в группе и координатами в решетке

[2, 2] для четырех процессов будет следующим:

coord (0,0): rank 0

сoord (0,1): rank 1

сoord (1,0): rank 2

сoord (1,1): rank 3

32

2. Реализация интерфейса передачи данных (MPICH). Общая характеристика среды выполнения MPI программ.

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

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

Возможны два способа построения реализаций:

1)прямая реализация для конкретной ЭВМ и

2)реализация через AD (интерфейс абстрактного устройства).

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

затем архитектура ADI поставщиками параллельного оборудования реализуется в конкретной системе программно. Такая двухступенчатая реализация MPI уменьшает число вариантов и обеспечивает переносимость реализаций.

В Аргоннской национальной лаборатории США подготовлены и получили широкое распространение реализации MPI, получившие название MPICH (CH взята из названия пакета Сhameleon, который ранее использовался для систем с передачей сообщений, многое из этого пакета вошло в MPIСH).

Имеется три поколения MPIСH, связанных с развитием ADI.

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

ADI-2 –обеспечило эффективный коммуникационный механизмы с большим объемом функций.

ADI-3 – обеспечило адаптацию к различным коммуникационным архитектурам, удаленный доступ и поддержку операций MPI-2, таких как динамическое управление процессами.

ADI для обмена сообщениями должен обеспечивать четыре набора функций:

1)для описания передаваемых и получаемых сообщений;

2)для перемещения данных между ADI и передающей аппаратурой;

3)для управления списком зависших сообщений (как посланных, так и принимаемых);

33

4) для получения основной информации об исполнительной среде и ее состоянии (например,

как много задач выполняется)

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

Рассмотрим механизм работы MPIСH на примере реализаций функций передачи MPI_Send

и MPI_Recive. Здесь используются 2 протокола: Eager и Rendezvous.

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

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

которая следует за данными. Метод посылки данных вместе с оболочкой называется eager

протоколом.

Когда сообщение прибывает, возможны два случая:

1)соответствующая приемная процедура запущена,

2)соответствующая приемная процедура не запущена.

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

Rendezvous. Используется для доставки большого объема данных на процесс-получатель.

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

Главное преимущество протокола «рандеву» состоит в том, что он позволяет принимать произвольно большие сообщения в любом количестве. Но для коротких сообщений он не используется. Возможно большое количество других протоколов и их модификаций

.

Канальный интерфейс является одним из наиболее важных уровней иерархии ADI и может иметь множественные реализации. Например, р4 – для систем с передачей сообщений, и p2 –

34

для систем с общей памятью. Реализация Chameleon, построена на базе интерфейса p4,

многие ее элементы частично использовались в реализации MPICH.

Поэтому в MPICH также используется интерфейс p4, который перенесен поставщиками аппаратуры на ряд машин. Интерфейс p2 также адаптирован для ряда систем.

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

профилирования, отладки и т.д.

Как правило, средства запуска параллельных программ разрабатываются и поставляются с реализацией MPI-библиотек. Для версий MPICH – это скрипт с именем mpirun или mpiexec

которым с помощью дополнительных ключей подается обязательные параметры:

1.количество процессов, которые необходимо создать при запуске,

2.исполняемый файл параллельной программы.

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

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

параллельные системы. MPICH содержит кроме самой библиотеки функций MPI

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

35

3. Особенности взаимодействия параллельных процессов с использованием блокирующих операций двухточечных обменов MPI. Коммуникационные режимы.

Основу MPI составляют операции передачи сообщений. Которые выполняют парные

(point-to-point) операции между двумя процессами и коллективные (collective)

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

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

Передача и прием сообщений процессами – это базовый коммуникационный механизм MPI.

Основными операциями парного обмена являются операции send (послать) и receive

(получить).

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

сообщения. Это: source, destination, tag, communicator (номер процесса-отправителя сообщения, номер процесса-получателя, тэг, коммуникатор). Целочисленный аргумент тэг используется, чтобы различать типы сообщений. Диапазон значений тэга находится в пределах максимального целого значения для данного представления.

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

В MPI предопределен коммуникатор MPI_COMM_WORLD. Он разрешает обмен для всех процессов, которые доступны после инициализации MPI, и процессы идентифицируются их номерами в группе MPI_COMM_WORLD.

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

36

Функции передачи сообщений реализована в 4 режимах:

1)стандартный режим, при котором

на время выполнения функции процесс-отправитель сообщения блокируется,

после завершения функции буфер может быть использован повторно,

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

2)Синхронный режим состоит в том, что завершение функции отправки сообщения происходит только при получении от процесса-получателя подтверждения о начале приема отправленного сообщения, отправленное сообщение или полностью принято процессом-

получателем или находится в состоянии приема,

3)Буферизованный режим предполагает использование дополнительных системных буферов для копирования в них отправляемых сообщений; как результат, функция отправки сообщения завершается сразу же после копирования сообщения в системный буфер,

4)Режим передачи по готовности может быть использован только, если операция приема сообщения уже инициирована. Буфер сообщения после завершения функции отправки сообщения может быть повторно использован.

Для именования функций отправки сообщения для разных режимов выполнения в MPI

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

MPI_Ssend – синхронный режим, MPI_Bsend – буферизованный режим,

MPI_Rsend – режим по готовности.

Практическое использование режимов:

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

37

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

3.Синхронный режим является наиболее медленным, т.к. требует подтверждения приема. В тоже время, этот режим наиболее надежен – можно рекомендовать его для передачи длинных сообщений.

Для функции приема MPI_Recv не существует различных режимов работы.

Семантика двухточечных обменов

Очередность. Сообщения не обгоняют друг друга: если отправитель последовательно посылает два сообщения в один адрес, то они должны быть приняты в том же порядке. Если получатель выполняет два приема последовательно и оба соответствуют тому же сообщению,

то вторая операция не будет принимать это сообщение, если первая операция все еще не выполнена. Это требование облегчает установление соответствия посылки и приема. Если процесс имеет однопоточное исполнение, тогда любые два обмена, выполняемые этим процессом, упорядочены.

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

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

Может иметь место ошибка, когда недостаток ресурсов ограничивает выполнение вызова.

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

меньше количества присланных данных, иначе возникнет ошибка переполнения. Если

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

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

1.Формируется пакет сообщения, который включает передаваемые данные

(информационную часть) – это buf, и служебную информацию сообщения. Это поля: source, destination, tag и communicator.

38

Информационная часть – это определенное количество байт данных, размер информационной части = MPI_Datatype (число байт типа передаваемых данных) * count

(кол-во элементов). Адрес начала массива передаваемых данных задается первым параметром в функции MPI_Send.

2.От процесса-передатчика сообщение уходит на коммуникационный уровень к процессу-приемнику.

3.Данные от пришедшего сообщения помещаются в приемный буфер, адрес начала

принимающего массива задается первым параметром в функции MPI_Recv.

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

39

4. Особенности взаимодействия параллельных процессов с использованием не блокирующих операций двухточечных обменов MPI. Коммуникационные режимы.

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

Имена не блокирующих функций аналогичны именам соответствующих блокирующих функций с добавлением префикса I (Immediate). Список параметров не блокирующих функций содержит весь набор параметров блокирующих функций и один дополнительный параметр request с типом MPI_Request (в функции MPI_Irecv отсутствует также параметр status):

MPI_Isend()

MPI_Ibsend() MPI_Irecv()

MPI_Issend()

MPI_Irsend()

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

буферизованный, синхронный и по готовности.

Вызов не блокирующей функции приводит к инициации запрошенной операции передачи

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

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

40