ВУЗ:
Составители:
Рубрика:
- 99 -
параллельными циклами и параллельными секциями. Глубинная основа под-
хода заключается в представлении параллельной программы системой ни-
тей (нить - thread – упрощенный процесс, взаимодействующий с другими
нитями посредством общих переменных и простейшей синхронизации). При
этом вспомогательную работу (создание и уничтожение нитей, распределе-
ние между ними витков параллельных циклов и параллельных секций – вы-
зовов
процедур, напр.) выполняет компилятор.
Первая попытка разработки подобного подхода относится еще к 1990 г., но
только в 1997 г. появился стандарт языка OpenMP Fortran (позднее появились
аналоги для C и Fortran’90/95, [6],
http://openmp.org
). Программа на OpenMP
начинает свое выполнение в виде единственного (именуемого главной ни-
тью) процесса. Главная нить выполняется последовательно до тех пор, пока
управление не дойдет до начала первой параллельной области программы
(описываемой директивами
PARALLEL
и
END PARALLEL
). При входе в парал-
лельную область главная нить порождает определенное число подчиненных
ей нитей, образующих вместе с ней текущую группу нитей, при выходе из
параллельной области все порожденные при входе в нее нити сливаются с
главной нитью (в целом последовательно реализуется серия параллельных
процессов, многократно повторяющая диаграмму рис.3б). Все
находящиеся
внутри параллельной области операторы (включая вызовы процедур) вы-
полняются всеми нитями текущей группы параллельно до момента выхода из
параллельной области или встречи одной из инструкций распределения рабо-
ты
DO
(распределение витков цикла между нитями),
SECTIONS
(распределе-
ние между нитями заданных секций программы),
SINGLE
(указание секции,
которая должны выполняться единой нитью). Для организации вычислений
используются высокоуровневые директивы синхронизации. Пример простой
программы с использованием OpenMP приведен в Приложении 2.
Программирование в технологии OpenMP в целом проще, чем на HPF, од-
нако распределение данных в OpenMP практически никак не описывается
(понятно, что OpenMP идеален для многопроцессорных вычислительных
систем c общей памятью). Перспективным можно
было бы считать дополне-
ние OpenMP возможностями распределения данных, однако реально в на-
стоящее время развивается подход, объединяющий OpenMP (средство про-
граммирования процессов) и MPI (механизм объединения процессов) - гиб-
ридная модель параллелизма по управлению с передачей сообщений, [6].
Примером системы, объединяющей распределение как вычислений так и
данных, является DVM (Distributed Virtual Memory или Distributed Virtual
Machine, 1994,
http://keldysh.ru/dvm
), существуют версии Fortran’DVM и
C’DVM. Система разработки параллельных программ DVM разработана в
ИПМ им. М.В.Келдыша при участии студентов и аспирантов МГУ [1,6].
В DVM и данные и вычисления по процессорам виртуальной параллельной
машины распределяет программист и именно на него возлагается полная от-
- 99 - параллельными циклами и параллельными секциями. Глубинная основа под- хода заключается в представлении параллельной программы системой ни- тей (нить - thread – упрощенный процесс, взаимодействующий с другими нитями посредством общих переменных и простейшей синхронизации). При этом вспомогательную работу (создание и уничтожение нитей, распределе- ние между ними витков параллельных циклов и параллельных секций – вы- зовов процедур, напр.) выполняет компилятор. Первая попытка разработки подобного подхода относится еще к 1990 г., но только в 1997 г. появился стандарт языка OpenMP Fortran (позднее появились аналоги для C и Fortran’90/95, [6], http://openmp.org). Программа на OpenMP начинает свое выполнение в виде единственного (именуемого главной ни- тью) процесса. Главная нить выполняется последовательно до тех пор, пока управление не дойдет до начала первой параллельной области программы (описываемой директивами PARALLEL и END PARALLEL). При входе в парал- лельную область главная нить порождает определенное число подчиненных ей нитей, образующих вместе с ней текущую группу нитей, при выходе из параллельной области все порожденные при входе в нее нити сливаются с главной нитью (в целом последовательно реализуется серия параллельных процессов, многократно повторяющая диаграмму рис.3б). Все находящиеся внутри параллельной области операторы (включая вызовы процедур) вы- полняются всеми нитями текущей группы параллельно до момента выхода из параллельной области или встречи одной из инструкций распределения рабо- ты DO (распределение витков цикла между нитями), SECTIONS (распределе- ние между нитями заданных секций программы), SINGLE (указание секции, которая должны выполняться единой нитью). Для организации вычислений используются высокоуровневые директивы синхронизации. Пример простой программы с использованием OpenMP приведен в Приложении 2. Программирование в технологии OpenMP в целом проще, чем на HPF, од- нако распределение данных в OpenMP практически никак не описывается (понятно, что OpenMP идеален для многопроцессорных вычислительных систем c общей памятью). Перспективным можно было бы считать дополне- ние OpenMP возможностями распределения данных, однако реально в на- стоящее время развивается подход, объединяющий OpenMP (средство про- граммирования процессов) и MPI (механизм объединения процессов) - гиб- ридная модель параллелизма по управлению с передачей сообщений, [6]. Примером системы, объединяющей распределение как вычислений так и данных, является DVM (Distributed Virtual Memory или Distributed Virtual Machine, 1994, http://keldysh.ru/dvm), существуют версии Fortran’DVM и C’DVM. Система разработки параллельных программ DVM разработана в ИПМ им. М.В.Келдыша при участии студентов и аспирантов МГУ [1,6]. В DVM и данные и вычисления по процессорам виртуальной параллельной машины распределяет программист и именно на него возлагается полная от-
Страницы
- « первая
- ‹ предыдущая
- …
- 97
- 98
- 99
- 100
- 101
- …
- следующая ›
- последняя »