ВУЗ:
Составители:
Рубрика:
- 6 -
одновременно (и относительно независимо друг от друга) на различных ВУ
выполняются несколько (базирующихся на различных исходных текстах)
программных ветвей, в определенные промежутки времени обменивающиеся
данными. Однако подобные программы слишком громоздки при написании
(для каждого ВУ требуется отдельный исходной текст), поэтому на практике
применяется
SPMD
-подход (Single Program - Multiple Data: одна программа –
множество данных), предполагающий исполнение на различных ВУ логиче-
ски выделенных условными операторами участков идентичного кода. Все
ветви программы запускаются загрузчиком одновременно как процессы
UNIX; количество ветвей фиксировано – согласно стандарту MPI 1.1 в ходе
работы порождение новых ветвей невозможно.
Параллельно выполняющиеся программы обычно не используют привыч-
ного пользователям ОС Windows оконного
интерфейса (вследствие как труд-
ности связывания окон с конкретным экземпляром приложения, так и несу-
щественности использования подобного интерфейса при решении серьезных
счетных задач). Отладка параллельного приложения также существенно от-
личается от таковой обычного последовательного [3].
В дальнейшем будем считать, что параллельное приложение состоит из не-
скольких ветвей
(или процессов, или задач), выполняющихся одновременно
на ВУ; при этом процессы обмениваются друг с другом данными в виде со-
общений (рис.1). Каждое сообщение имеет идентификатор, который позво-
ляет программе и библиотеке связи отличать их друг от друга. В MPI суще-
ствует понятие области связи;
области связи имеют независимую друг от
друга нумерацию процессов (коммуникатор
как раз и определяет область
связи).
В общем случае создание параллельной программы включает в себя (ук-
рупненно) две основные стадии:
• Исходно-последовательный алгоритм подвергается декомпозиции (распа-
раллеливанию), т.е. разбивается на независимо работающие ветви; для
взаимодействия в ветви вводятся два типа дополнительных нематематиче-
ских операции: прием (
Send
) и передача (
Receive
) данных.
• Распараллеленный алгоритм оформляется в виде программы, в которой
операции приема и передачи записываются в терминах конкретной систе-
мы связи между ветвями (в нашем случае MPI).
Несколько подробнее этот процесс описан в [4,5], для желающих серьезно
заняться проблемой рекомендуются работы [1,3].
Т.к. время обмена данными между ветвями намного (на порядки) больше
времени доступа к собственной (локальной) памяти, распределение работы
между процессами должно быть ‘крупнозернистым’ [1]. Типичный размер
этого зерна (гранулы) составляет десятки-сотни тысяч машинных операций
(что на порядки превышает типичный размер оператора языков Fortran или
C/C++, [3]). В зависимости от размеров гранул говорят о мелкозернистом и
крупнозернистом параллелизме (fine-grained parallelism и coarse-grained par-
-6- одновременно (и относительно независимо друг от друга) на различных ВУ выполняются несколько (базирующихся на различных исходных текстах) программных ветвей, в определенные промежутки времени обменивающиеся данными. Однако подобные программы слишком громоздки при написании (для каждого ВУ требуется отдельный исходной текст), поэтому на практике применяется SPMD-подход (Single Program - Multiple Data: одна программа – множество данных), предполагающий исполнение на различных ВУ логиче- ски выделенных условными операторами участков идентичного кода. Все ветви программы запускаются загрузчиком одновременно как процессы UNIX; количество ветвей фиксировано – согласно стандарту MPI 1.1 в ходе работы порождение новых ветвей невозможно. Параллельно выполняющиеся программы обычно не используют привыч- ного пользователям ОС Windows оконного интерфейса (вследствие как труд- ности связывания окон с конкретным экземпляром приложения, так и несу- щественности использования подобного интерфейса при решении серьезных счетных задач). Отладка параллельного приложения также существенно от- личается от таковой обычного последовательного [3]. В дальнейшем будем считать, что параллельное приложение состоит из не- скольких ветвей (или процессов, или задач), выполняющихся одновременно на ВУ; при этом процессы обмениваются друг с другом данными в виде со- общений (рис.1). Каждое сообщение имеет идентификатор, который позво- ляет программе и библиотеке связи отличать их друг от друга. В MPI суще- ствует понятие области связи; области связи имеют независимую друг от друга нумерацию процессов (коммуникатор как раз и определяет область связи). В общем случае создание параллельной программы включает в себя (ук- рупненно) две основные стадии: • Исходно-последовательный алгоритм подвергается декомпозиции (распа- раллеливанию), т.е. разбивается на независимо работающие ветви; для взаимодействия в ветви вводятся два типа дополнительных нематематиче- ских операции: прием (Send) и передача (Receive) данных. • Распараллеленный алгоритм оформляется в виде программы, в которой операции приема и передачи записываются в терминах конкретной систе- мы связи между ветвями (в нашем случае MPI). Несколько подробнее этот процесс описан в [4,5], для желающих серьезно заняться проблемой рекомендуются работы [1,3]. Т.к. время обмена данными между ветвями намного (на порядки) больше времени доступа к собственной (локальной) памяти, распределение работы между процессами должно быть ‘крупнозернистым’ [1]. Типичный размер этого зерна (гранулы) составляет десятки-сотни тысяч машинных операций (что на порядки превышает типичный размер оператора языков Fortran или C/C++, [3]). В зависимости от размеров гранул говорят о мелкозернистом и крупнозернистом параллелизме (fine-grained parallelism и coarse-grained par-
Страницы
- « первая
- ‹ предыдущая
- …
- 4
- 5
- 6
- 7
- 8
- …
- следующая ›
- последняя »