1.2. DVM–подход к разработке параллельных программ
DVM-система предоставляет единый комплекс средств для разработки параллельных программ научно-технических расчетов на языках Си и Фортран 77.
Модель параллелизма DVM. Модель параллелизма DVM базируется на модели параллелизма по данным. Аббревиатура DVM отражает два названия модели: распределенная виртуальная память (Distributed Virtual Memory) и распределенная виртуальная машина (Distributed Virtual Mashine). Эти два названия указывают на адаптацию модели DVM как для систем с общей памятью, так и для систем с распределенной памятью. Высокоуровневая модель DVM позволяет не только снизить трудоемкость разработки параллельных программ, но и определяет единую формализованную базу для систем поддержки выполнения, отладки, оценки и прогноза производительности.
Языки и компиляторы. В отличие от стандарта HPF в системе DVM не ставилась задача полной автоматизации распараллеливания вычислений и синхронизации работы с общими данными. С помощью высокоуровневых спецификаций программист полностью управляет эффективностью выполнения параллельной программы. С другой стороны, при проектировании и развитии языка Fortran DVM отслеживалась совместимость с подмножеством стандартов HPF1 и HPF2.
Единая модель параллелизма встроена в языки Си и Фортран 77 на базе конструкций, которые “невидимы” для стандартных компиляторов, что позволяет иметь один экземпляр программы для последовательного и параллельного выполнения. Компиляторы с языков C‑DVM и Fortran DVM переводят DVM-программу в программу на соответствующем языке (Си или Фортран 77) с вызовами функций системы поддержки параллельного выполнения. Поэтому единственным требованием к параллельной системе является наличие компиляторов с языков Си и Фортран 77.
Технология выполнения и отладки. Единая модель параллелизма позволяет иметь для двух языков единую систему поддержки выполнения и, как следствие, единую систему отладки, анализа и прогноза производительности. Выполнение и отладка DVM-программ может осуществляться в следующих режимах:
· Последовательное выполнение и отладка средствами стандартных компиляторов с языков Си и Фортран 77.
· Псевдо-параллельное выполнение на рабочей станции (среда WINDOWS и UNIX).
· Параллельное выполнение на параллельной ЭВМ.
При псевдо-параллельном и параллельном выполнении возможны следующие режимы отладки:
ü автоматическая проверка правильности директив параллелизма;
ü трассировка и сравнение результатов параллельного и последовательного выполнения;
ü накопление и визуализация трассировки данных;
ü накопление данных о производительности и прогноз производительности параллельного выполнения.
2. Обзор языка
2.1. Модель программирования и модель параллелизма
Язык Fortran DVM (FDVM) представляет собой язык Фортран 77 [5], расширенный спецификациями параллелизма. Эти спецификации оформлены в виде специальных комментариев, которые называются директивами. Директивы FDVM можно условно разделить на три подмножества:
· Распределение данных (разделы 2, 3, 4, 8, 9)
· Распределение вычислений (разделы 5, 7)
· Спецификация удаленных данных (раздел 6)
Модель параллелизма FDVM базируется на специальной форме параллелизма по данным: одна программа – множество потоков данных (ОПМД). В этой модели одна и та же программа выполняется на каждом процессоре, но каждый процессор выполняет свое подмножество операторов в соответствии с распределением данных.
В модели FDVM пользователь вначале определяет многомерный массив виртуальных процессоров, на секции которого будут распределяться данные и вычисления. При этом секция может варьироваться от полного массива процессоров до отдельного процессора.
На следующем этапе определяются массивы, которые должны быть распределены между процессорами (распределенные данные). Эти массивы специфицируются директивами отображения данных (раздел 4). Остальные переменные (распределяемые по умолчанию) отображаются по одному экземпляру на каждый процессор (размноженные данные). Размноженная переменная должна иметь одно и то же значение на каждом процессоре за исключением переменных в параллельных конструкциях (см. раздел 5.1.3, 5.1.4 и 7.5).
Модель FDVM определяет два уровня параллелизма:
· параллелизм по данным на секции массива процессоров;
· параллелизм задач – независимые вычисления на секциях массива процессоров.
Параллелизм по данным реализуется распределением витков тесно-гнездового цикла между процессорами (раздел 5). При этом каждый виток такого параллельного цикла полностью выполняется на одном процессоре. Операторы вне параллельного цикла выполняются по правилу собственных вычислений (раздел 5.2).
Параллелизм задач реализуется распределением данных и независимых вычислений на секции массива процессоров (раздел 7).
При вычислении значения собственной переменной процессору могут потребоваться как значения собственных переменных, так и значения несобственных (удаленных) переменных. Все удаленные переменные должны быть указаны в директивах доступа к удаленным данным (раздел 6).
2.2. Синтаксис директив FDVM
Синтаксис директив FDVM описывается следующей БНФ формой:
is по определению
or альтернатива
[ ] необязательная конструкция
[ ]… повторение конструкции 0 или более раз
x-list x [ , x ]…
Синтаксис директивы.
directive-line | is CDVM$ dvm-directive |
or *DVM$ dvm-directive |
dvm-directive | is specification-directive |
or executable-directive |
specification-directive | is processors-directive |
or align-directive | |
or distribute-directive | |
or template-directive | |
or pointer-directive | |
or shadow-directive | |
or dynamic-directive | |
or inherit-directive | |
or remote-group-directive | |
or reduction-group-directive | |
or task-directive | |
or heap-directive | |
or asyncid-directive |
executable-directive | is realign-directive |
or redistribute-directive | |
or parallel-directive | |
or remote-access-directive | |
or shadow-group-directive | |
or shadow-start-directive | |
or shadow-wait-directive | |
or reduction-start-directive | |
or reduction-wait-directive | |
or new-value-directive | |
or prefetch-directive | |
or reset-directive | |
or parallel-task-loop-directive | |
or map-directive | |
or task-region-directive | |
or end-task-region-directive | |
or on-directive | |
or end-on-directive | |
or f90-directive | |
or asynchronous-directive | |
or end-asynchronous-directive | |
or asyncwait-directive |
Ограничения:
· Cпецкомментарий directive-line подчиняется правилам написания комментария в фиксированной форме.
· Директивы спецификации должны находиться в разделе спецификаций.
· Исполняемые директивы должны находиться среди исполняемых операторов.
· Любое выражение, входящее в директиву спецификации, должно быть выражением спецификации (см. Приложение 1, п.2.4).
Никакой оператор не может находиться среди строк продолжения директивы. Строка directive-line не может находиться внутри продолженного оператора. Ниже приводится пример директивы с продолжением. Отметим, что позиция 6 должна быть пробелом за исключением случая, когда она используется для обозначения продолжения.
CDVM$ ALIGN SPACE1( I, J, K )
CDVM$* WITH SPACE(J, K, I )
3. Массивы виртуальных процессоров. Директива PROCESSORS
Директива PROCESSORS определяет один или несколько массивов виртуальных процессоров.
Синтаксис.
processors-directive | is PROCESSORS processors-decl-list |
processors-decl | is processors-name ( explicit-shape-spec-list ) |
explicit-shape-spec | is [ lower-bound : ] upper-bound |
lower-bound | is int-expr |
upper-bound | is int-expr |
Встроенная функция NUMBER_OF_PROCESSORS ( ) может использоваться для определения количества физических процессоров, на которых выполняется вся программа.
Разрешается использовать несколько массивов виртуальных процессоров разной формы при следующем условии: количество процессоров в каждом массиве должно быть равно значению встроенной функции NUMBER_OF_PROCESSORS ( ). Если два массива виртуальных процессоров имеют одинаковую форму, то соответствующие элементы этих массивов ссылаются на один виртуальный процессор.
Пример 3.1. Описание массивов виртуальных процессоров.
CDVM$ PROCESSORS P( N )
CDVM$ PROCESSORS Q( NUMBER_OF_PROCESSORS( ) ),
CDVM$* R(2, NUMBER_OF_PROCESSORS( )/2)
Значение N должно быть равно значению функции NUMBER_OF_PROCESSORS ( ).
Массивы процессоров являются локальными объектами процедуры. Массивы данных с атрибутами COMMON и SAVE могут быть отображены на локальные массивы виртуальных процессоров при следующем условии: при каждом вызове процедуры локальный массив процессоров имеет одно и то же определение.
4. Распределение данных
FDVM поддерживает распределение блоками (равными и неравными), наследуемое распределение, распределение динамических массивов и распределение через выравнивание.
4.1. Директивы DISTRIBUTE и REDISTRIBUTE
Синтаксис.
distribute-directive | is dist-action distributee dist-directive-stuff |
or dist-action [ dist-directive-stuff ] :: distributee-list |
dist-action | is DISTRIBUTE |
or REDISTRIBUTE |
dist-directive-stuff | is dist-format-list [ dist-onto-clause ] |
distributee | is array-name |
dist-format | is BLOCK |
or GEN_BLOCK ( block-size-array ) | |
or WGT_BLOCK ( block-weight-array , nblock) | |
or * |
dist-onto-clause | is ONTO dist-target |
dist-target | is processors-name [(processors-section-subscript-list )] | |
processors-section-subscript | is [ subscript ] : [ subscript ] | |
| ||
subscript | is int-expr |
|
nblock | is int-expr | |
block-size-array | is array-name | |
block-weight-array | is array-name |
Ограничения:
· Длина списка dist-format-list должна быть равна количеству измерений массива. Т. е. для каждого измерения должен быть задан формат распределения.
· Количество распределенных измерений массива (формат задан не *) должно быть равно количеству измерений dist-target.
· Массив block-size-array в спецификации GEN_BLOCK, должен быть одномерным целочисленным массивом, размер которого равен размеру соответствующего измерения массива процессоров, а сумма значений его элементов равна размеру распределяемого измерения.
· Массив block-weight-array в спецификации WGT_BLOCK, должен быть одномерным массивом типа DOUBLE PRECISION.
· В одном списке dist-format-list не может быть указан формат GEN_BLOCK и формат WGT_BLOCK.
· Директива REDISTRIBUTE может применяться только к массивам со спецификацией DYNAMIC.
· Отсутствие dist-directive-stuff допустимо только в директиве DISTRIBUTE. В этом случае распределяемый массив может использоваться только после выполнения директивы REDISTRIBUTE.
Спецификация ONTO указывает массив или секцию массива виртуальных процессоров. Если спецификация ONTO не указана, то распределение осуществляется по базовому массиву виртуальных процессоров, который является параметром запуска программы на выполнение. Когда директива REDISTRIBUTE без спецификации ONTO выполняется в ON‑блоке, то распределение осуществляется на секцию массива процессоров этого ON‑блока (см. радел 7).
Несколько одинаково распределяемых массивов (A1, A2,…) можно распределить одной директивой вида
CDVM$ DISTRIBUTE dist-directive-stuff :: A1, A2, …
При этом массивы должны иметь одинаковое число измерений, но необязательно одинаковые размеры измерений.
Рассмотрим форматы распределения для одного измерения массива (одномерный массив A(N) ) и для одного измерения массива процессоров (одномерный массив R(P) ). Многомерные распределения рассматриваются в разделе 4.1.5.
4.1.1. Формат BLOCK
На каждом процессоре распределяется блок размером ë(N-1)/Pû +1 элементов. При некоторых соотношениях N и P несколько последних процессоров могут не содержать значений элементов массива.
Пример 4.1. Распределение по формату BLOCK
A | B | C | ||||
R(1) | 1 | 1 | 1 | |||
2 | 2 | 2 | ||||
CDVM$ PROCESSORS R( 4 ) | 3 | 3 | 3 | |||
4 | ||||||
REAL A (12), B(13), C(11) | R(2) | 4 | 5 | 4 | ||
5 | 6 | 5 | ||||
6 | 7 | 6 | ||||
CDVM$ DISTRIBUTE A (BLOCK) ONTO R | 8 | |||||
R(3) | 7 | 9 | 7 | |||
CDVM$ DISTRIBUTE (BLOCK) ONTO R :: B | 8 | 10 | 8 | |||
9 | 11 | 9 | ||||
12 | ||||||
CDVM$ DISTRIBUTE C (BLOCK) | ||||||
R(4) | 10 | 13 | 10 | |||
11 | 11 | |||||
12 | ||||||
4.1.2. Формат GEN_BLOCK
Распределение блоками разных размеров позволяет влиять на балансировку загрузки процессоров для алгоритмов, которые выполняют разное количество вычислений на различных участках области данных.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 |


