Параллельные вычисления. Баканов В.М. - 99 стр.

UptoLike

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

- 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 и данные и вычисления по процессорам виртуальной параллельной
машины распределяет программист и именно на него возлагается полная от-