Академический Документы
Профессиональный Документы
Культура Документы
РАСПАРАЛЛЕЛИВАНИЯ АЛГОРИТМОВ
С.В. Баханович
Институт математики НАН Беларуси
Математическая модель алгоритма
Область вычислений V
Каждой операции алгоритма ставится в соответствие точка
многомерного целочисленного пространства. Размерность
пространства определяется глубиной вложенных циклов
программы. Координаты точки, как правило, – это упорядоченный
набор значений счетчиков циклов, при которых выполняется
операция алгоритма. Множество всех таких точек образуют
область вычисления алгоритма.
Определение
Операция S ( J ) зависит от операции S ( I ), если:
1) S ( I ) выполняется раньше S ( J );
2) S ( I ) и S ( J ) используют одно и то же данное и, по крайней
мере, одно из использований есть переопределение;
3) между операциями S ( I ) и S ( J ) это данное не
переопределяется.
Идентификация
Зависимость между операциями S ( I ) и S ( J ) идентифицируется
вектором зависимостей J I .
Типы зависимостей
Типы информационных зависимостей определяются характером
использования общих данных в операциях S ( I ) и S ( J ).
Истинные зависимости
S ( I ): a = f ( )
S ( J ): b = g (a)
Антизависимости
S ( I ): b = g (a)
S ( J ): a = f ( )
Зависимости по выходу
S ( I ): a = f ( )
S ( J ): a = g ( )
Математическая модель алгоритма.
Пример
for i=1 to N do
for j=1 to N do
a[i][j] = a[i-1][j]+a[i][j-1]+a[i-1][j+1]
Область вычислений
V (i, j ) Z 2 1 i N , 1 j N
Множество векторов зависимостей
(1,0), (0,1), (1, 1)
j
i
Распараллеливание алгоритма
Функция таймирования
t :V Z,
Функция таймирования ставит в соответствие каждой операции S ( J )
алгоритма целое значение t ( J ), которое может быть интерпретиро-
вано как момент времени выполнения (условный) этой операции.
t ( J ) t ( I ), J , I V , S ( I ) S ( J ).
Функция таймирования
t ( J ) J , J V Z n , Z n .
Условие сохранения зависимостей
t ( J ) t ( J ), J , J V , .
или, с учетом вида функции таймирования
1, .
Поиск вектора таймирования. Пример
V (i, j ) Z 2 1 i N , 1 j N J max = (N,N)
1 1, 2 1, 1 2 1.
Оценка времени выполнения алгоритма j
T max t ( J ) min t ( J ) 1 J J
max min J min = (1,1)
J V J V i
Поиск оптимального вектора таймирования
min J max J min 1,
min 1 ( N 1) 2 ( N 1) 1 1, 2 1, 1 2 1
Функция таймирования
N+2 3N
V (i, j ) Z 1 i N , 1 j N
2
7
(1,0), (0,1), (1, 1)
6
t (i, j ) 2i j, (i, j ) V .
5
j 3
2i+j=k
i
Построение и описание множеств
параллельных операций алгоритма
Множество операций алгоритма, которые можно выполнить одно-
временно, определяется координатами точек области вычислений,
принадлежащих одной и той же секущей плоскости таймирования.
V par (k ) (i, j ) Z 2 2i j k , 1 i N , 1 j N
Представление множества параллельных операций в форме,
пригодной для построения программного кода
2i j k j k 2i j k 2i
1 i N 1 i N 1 i N
1 j N 1 k 2i N (k N ) / 2 i (k 1) / 2
V par (k ) (i, k 2i ) Z 2 max{1, (k N ) / 2} i min{N , (k 1) / 2}
Преобразование к параллельному алгоритму
7
for I=1 to N do
for j=1 to N do 6
a[i][j] = a[i-1][j]+a[i][j-1]+a[i-1][j+1] 5
j 3
Параллельный алгоритм
i
for k=3 to 3N do
for i=max{1, (k-N)/2} to min{N, k/2} do parallel
a[i][k-2i] = a[i-1][k-2i]+a[i][k-2i-1]+a[i-1][k-2i+1]
Разбиение алгоритма на независимые части
Функции таймирования могут быть использованы для поиска и
выделения в алгоритме независимых ветвей исполнения операций.
В этом случае значение функции таймирования интерпретируется
как номер независимой части алгоритма.
t ( J ) t ( I ), J , I V , S ( I ) S ( J ).
Любая пара информационно зависимых операций должна иметь
одно и тоже значение функции таймирования. Для алгоритмов с
однородными зависимостями это условие принимает вид:
t ( J ) t ( J ), J , J V , .
Или, с учетом функций таймирования вида t ( J ) J ,
0, .
Разбиение на независимые части. Пример
for i=1 to N do
for j=1 to N do
a[i][j] = a[i][j]+a[i-1][j-1]
V (i, j ) Z 2 1 i N , 1 j N
(1,1) j
1 2 0 (1, 1)
Функция таймирования
t (i , j ) i j , (i , j ) V .
Преобразование к параллельному алгоритму
Исходный алгоритм
for i=1 to N do
for j=1 to N do
a[i][j] = a[i][j]+a[i-1][j-1]
V ind (k ) (i, i k ) Z 2 max{1, k 1} i min{ N , k N }
Параллельный алгоритм
for k=1-N to N-1 do parallel
for i=max{1, k+1} to min{N, k+N} do
a[i][i-k] = a[i][i-k]+a[i-1][i-k-1]