Введение в практику разработки параллельных программ в стандарте MPI. Баканов В.М - 6 стр.

UptoLike

Составители: 

- 6 -
Строго говоря, технология MPI подразумевает подход
MPMD (Multiple Pro-
gram
Multiple Data: множество программ
множество данных), при этом
одновременно (и относительно независимо друг от друга) на различных ВУ
выполняются несколько (базирующихся на различных исходных текстах)
программных ветвей, в определенные промежутки времени обменивающиеся
данными. Однако подобные программы слишком громоздки при написании
(для каждого ВУ требуется отдельный исходной текст), поэтому на практике
применяется
SPMD-подход (Single Program - Multiple Data: одна программа
множество данных), предполагающий исполнение на различных ВУ логиче-
ски выделенных условными операторами участков идентичного кода. Все
ветви программы запускаются загрузчиком одновременно как процессы
UNIX; количество ветвей фиксированосогласно стандарту MPI 1.1 в ходе
работы порождение новых ветвей невозможно.
Параллельно выполняющиеся программы обычно не используют привыч-
ного пользователям ОС Windows оконного
интерфейса (вследствие как труд-
ности связывания окон с конкретным экземпляром приложения, так и несу-
щественности использования подобного интерфейса при решении серьезных
счетных задач). Отладка параллельного приложения также существенно от-
личается от таковой обычного последовательного [3].
В дальнейшем будем считать, что параллельное приложение состоит из не-
скольких ветвей
(или процессов, или задач), выполняющихся одновременно
на ВУ; при этом процессы обмениваются друг с другом данными в виде со-
общений (рис.1). Каждое сообщение имеет идентификатор, который позво-
ляет программе и библиотеке связи отличать их друг от друга. В MPI сущест-
вует понятие области связи;
области связи имеют независимую друг от друга
нумерацию процессов (коммуникатор
как раз и определяет область связи).
В общем случае создание параллельной программы включает в себя (ук-
рупненно) две основные стадии:
Исходно-последовательный алгоритм подвергается декомпозиции (распа-
раллеливанию), т.е. разбивается на независимо работающие ветви; для
взаимодействия в ветви вводятся два типа дополнительных нематематиче-
ских операции: прием (Send) и передача (Receive) данных.
Распараллеленный алгоритм оформляется в виде программы, в которой
операции приема и передачи записываются в терминах конкретной систе-
мы связи между ветвями (в нашем случае MPI).
Несколько подробнее этот процесс описан в [4], для желающих серьезно
заняться проблемой рекомендуется работа [1].
Т.к. время обмена данными между ветвями намного (на порядки) больше
времени доступа к собственной (локальной) памяти, распределение работы
между процессами должно бытькрупнозернистым’ [1]. Типичный размер
этого зерна (гранулы) составляет десятки-сотни тысяч машинных операций
  Строго говоря, технология MPI подразумевает подход MPMD (Multiple Pro-
gram − Multiple Data: множество программ − множество данных), при этом
одновременно (и относительно независимо друг от друга) на различных ВУ
выполняются несколько (базирующихся на различных исходных текстах)
программных ветвей, в определенные промежутки времени обменивающиеся
данными. Однако подобные программы слишком громоздки при написании
(для каждого ВУ требуется отдельный исходной текст), поэтому на практике
применяется SPMD-подход (Single Program - Multiple Data: одна программа –
множество данных), предполагающий исполнение на различных ВУ логиче-
ски выделенных условными операторами участков идентичного кода. Все
ветви программы запускаются загрузчиком одновременно как процессы
UNIX; количество ветвей фиксировано – согласно стандарту MPI 1.1 в ходе
работы порождение новых ветвей невозможно.
  Параллельно выполняющиеся программы обычно не используют привыч-
ного пользователям ОС Windows оконного интерфейса (вследствие как труд-
ности связывания окон с конкретным экземпляром приложения, так и несу-
щественности использования подобного интерфейса при решении серьезных
счетных задач). Отладка параллельного приложения также существенно от-
личается от таковой обычного последовательного [3].
  В дальнейшем будем считать, что параллельное приложение состоит из не-
скольких ветвей (или процессов, или задач), выполняющихся одновременно
на ВУ; при этом процессы обмениваются друг с другом данными в виде со-
общений (рис.1). Каждое сообщение имеет идентификатор, который позво-
ляет программе и библиотеке связи отличать их друг от друга. В MPI сущест-
вует понятие области связи; области связи имеют независимую друг от друга
нумерацию процессов (коммуникатор как раз и определяет область связи).
  В общем случае создание параллельной программы включает в себя (ук-
рупненно) две основные стадии:

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

  Несколько подробнее этот процесс описан в [4], для желающих серьезно
заняться проблемой рекомендуется работа [1].
  Т.к. время обмена данными между ветвями намного (на порядки) больше
времени доступа к собственной (локальной) памяти, распределение работы
между процессами должно быть ‘крупнозернистым’ [1]. Типичный размер
этого зерна (гранулы) составляет десятки-сотни тысяч машинных операций

                                     -6-