
- •Параллелизм. Зависимости. Граф зависимостей алгоритма (программы).
- •1. Гранулированность параллелизма
- •На уровне программы.
- •На уровне аппаратуры
- •При параллельном программировании на языках высокого уровня обычно учитывается среднезернистый параллелизм и параллелизм
- •2. Классические виды зависимостей между операторами программы
- •1. Зависимости по данным
- •1.Зависимости OUT-OUT, IN-OUT, связаны с экономией памяти и являются в некотором смысле избыточными
- •Определение зависимости сводится к проверке соотношения
- •Зависимость по данным между
- •Если имеется m-мерный массив А и индексные выражения массива линейны, то тогда система
- •Проблемы.
- •Параллельная ярусная схема (параллельная схема программы).
- ••Ранжирование графа. Размещение операторов на ярусах. На одном ярусе находятся операторы, между которыми
- •Метрики для параллельных программ.
- •Пусть время счета задачи на каждом i-ом процессоре состоит из времени, затраченного на

Параллелизм. Зависимости. Граф зависимостей алгоритма (программы).
Некоторые метрики параллелизма.
О времени коммуникаций в системах с распределенной памятью

1. Гранулированность параллелизма
Размер гранулы (порции вычислений, вычислительный квант) – количество операций
Крупнозернистый параллелизм (а) Мелкозернистый параллелизм (b) Среднезернистый параллелизм (с)

На уровне программы.
Мелкозернистый параллелизм Среднезернистый параллелизм
Операнды выражения |
Операторы программы |
((a*b +c)*b + g/(e-f) )*h |
x= sin(a+b) |
y= a**2+b**2 |
|
IF(x>y) THEN CALL F(x)
ELSE CALL G(y) ENDIF
Крупнозернистый параллелизм Параллелизм задач (программ, многих операторов)
n одинаковых вычислений над различными параметрами. Метод Монте-Карло. Многообластные методы.

На уровне аппаратуры
Мелкозернистый параллелизм
Микропроцессорный параллелизм, параллелизм внутри 1 процессора. (несколько функциональных устройств, несколько конвейеров,
несколько команд VLIW)
На этом уровне возможна такая же классификация по уровням параллелизма
Среднезернистый параллелизм
Многопроцессорные системы (с распределенной памятью, с общей памятью)
Крупнозернистый параллелизм
Многопроцессорные системы, ГРИД-системы (кластеры
многопроцессорных систем).

При параллельном программировании на языках высокого уровня обычно учитывается среднезернистый параллелизм и параллелизм задач.
Мелкозернистый – чаще при построении оценок, теоретических исследований, либо в компиляторах, при отображении на мелкозернистый параллелизм аппаратуры.

2. Классические виды зависимостей между операторами программы
1. Зависимость по управлению (CONTROL)
Оператор S2 непосредственно зависит от S1 по управлению, если S2 выполняется непосредственно после S1.
Оператор S1 зависит от S2 по управлению, если существует цепочка S1, Si,…,Sj,S2, в которой каждая пара (S1, Si),…,(Sj,S2) непосредственно зависит по управлению.
S1 S1
…
S2 S2

1. Зависимости по данным
1.1.OUT-IN (TRUE, истинная, DATA-FLOW)
Значение вычисляется, затем используется. S1: x =…
S2: …= … x …
Оператор S2 зависит от S1 (при наличии зависимости по управлению S2 от S1)
1.2.IN-OUT (ANTI)
Значение используется, затем (пере)вычисляется. S1: …= … x…
S2: x =…
Оператор S2 зависит от S1 (при наличии зависимости по управлению S2 от S1)
1.3. OUT-OUT (OUTPUT, по выходу)
Значение вычисляется, затем перевычисляется. S1: x =…
S2: x =…
Оператор S2 зависит от S1 (при наличии зависимости по управлению S2 от S1)
1.4. IN-IN (INPUT, по входу)
Значение используется в обоих операторах. S1: …= x
S2: …= x
Оператор S2 зависит от S1 (при наличии зависимости по управлению S2 от S1)

1.Зависимости OUT-OUT, IN-OUT, связаны с экономией памяти и являются в некотором смысле избыточными и могут быть устранены введением дополнительных переменных.
2.Зависимость IN-IN с точки зрения распараллеливания особого интереса не представляет.
3.Основной тип зависимости, которую необходимо знать при построении параллельной программы - OUT-IN
Другие типы зависимостей.
Зависимости по удаленным данным (модель распараллеливания по данным).
Зависимости для алгоритма (“естественный параллелизм”, без учета
управления, непроцедурность).
Статический и динамический анализ зависимостей.

Di Si
1 |
n |
1 |
m |
X D1 |
,..., X Dn |
...Y S1 |
,...,Y Sm (*) |
- переменные, входящие в оператор (в общем случае могут совпадать)
- множества индексов индексного пространства I, (области вычисления)
I - множества индексов индексного пространства I, (области использования) Чтобы построить области вычисления и использования, нужен анализ:
1)областей описания переменных,
2)областей операторов, в которые входит рассматриваемый оператор (например, циклов)
3)индексных выражений (для индексов вида ai+b области обычно строятся)

Определение зависимости сводится к проверке соотношения
Di D j
(возможно с учетом управления).
Строить пересечение, вообще говоря, не надо, достаточно определить или опровергнуть факт пересечения.
Зависимости в циклах между витками. Задача линейного программирования.
Пусть в гнезде из r вложенных DO-циклов, операторы S1 и S2 обращаются
кd - мерному массиву A, индексные выражения которого представлены линейными функциями hq(i1, i2, ... , ir) и gq(i1, i2, . . . , ir), где q = 1, . . . , d.
DO i1 = …
DO ir = …
A ( …,hq(i1, i2, ... , ir),…) = …
… |
= … A ( …,gq(i1, i2, ... , ir),…) |