ТАЙМИРУЮЩИЕ ФУНКЦИИ Таймирующую функцию

реклама
ТАЙМИРУЮЩИЕ ФУНКЦИИ
(дополнение к разделу 1.3)
Таймирующую функцию сокращенно будем называть t-функцией (от «timing
function»; теперь принят термин «scheduling function»).
Значения таймирующей функции: операциям Sβ(J) приписаны некоторые числа,
упорядоченные в соответствии с зависимостями.
Другое название (Воеводин В.В.) – развёртка графа алгоритма. Определение:
вещественный функционал, определённый на вершинах графа алгоритма, называется
развёрткой графа, если он не убывает вдоль дуг графа.
Использование таймирующих функций
1. Любая t-функция задаёт информационные разрезы алгоритма:
t(i,j)=i
j
i
1
2
3
1
2
3
1
2
3
i
j
Здесь и далее одному значению функции соответствует одно множество операций
алгоритма.
j
i
3
3
3
2
2
2
1
1
1
t(i,j)=j
i
j
1
j
i
4
5
6
3
4
5
2
3
4
(
)
i
j
j
3
3
3
2
2
2
1
1
1
(
)
i
2. f-функции (расщепляющие t-функции) задают параллельные множества операций
алгоритма (разбиение операций на группы, которые могут быть выполнены независимо
друг от друга).
j
i
3
3
3
Мн-во 3
2
2
2
Мн-во 2
1
1
1
Мн-во 1
i
j
2
(
)
3. Строгие t-функции задают параллельные формы алгоритма (разбиение операций
на группы, в которых операции могут быть выполнены независимо).
j
i
4
5
6 Ярус 5
3
4
5 Ярус 4
2 Ярус 1
3 Ярус 2
4 Ярус 3
(
)
i
j
Параллелизм, задаваемый таймирующими функциями, называется скошенным.
Частным случаем скошенного параллелизма является координатный параллелизм.
Координатный параллелизм определяется параллельным циклом, параметром которого
является один из параметров исходного гнезда циклов.
4. Независимые друг от друга t-функции задают семейства информационных
разрезов алгоритма и поэтому могут быть использованы для увеличения зернистости
вычислений (разбиение на супервершины, тайлы). Например, можно использовать
независимые t-функции t(i,j)=i и t(i,j)=j.
j
j
i
j
i
i
j
Обратных связей между тайлами быть не должно. Например, такое разбиение
недопустимо (используются функции, не являющиеся таймирующими):
3
i
j
Можно произвести разбиение следующим образом (используются две независимые
t-функции):
j
i
i
j
5. Векторные t-функции задают преобразования циклов. Приведем пример.
Рассмотрим двумерный цикл:
do i = 1, N
do j = 1, N
S1: a(i,j) = a(i–1,j) + a(i,j–1)
enddo
enddo
Применим преобразование inew=i+j, jnew=j алгоритма, задаваемое векторной
S
S
таймирующей функцией t1 1 (i, j ), t2 1 (i, j )   i  j, j  . Получим (см. пример в разделе 1.4)
do inew = 2, 2N
do jnew = max(1, inew– N), min(inew–1, N)
S1: a(inew– jnew, jnew) = a(inew– jnew –1, jnew) + a(inew– jnew, jnew –1)
enddo
enddo


4
6. Векторные t-функции могут задавать параллельные процессы вычислений.
В
частности,
параллельные
процессы
1
2
3
вычислений могут задавать векторные
функции вида  t1 , t2 ,..., tn  , где ti ( J )  ei J ,
(
) . На рисунке функция
()
1
3
2
t1 ( J )  e1 J , J   i, j  , задает номер процесса,
t2 ( J )  e2 J
функция
задает
порядок
P
выполнения операций в одном процессе.
r
11 Pr1
j
i
2 Pr2
3 Pr3
i
j1
Пример векторной таймирующей функции, вторая компонента которой не
является таймирующей функцией
Таймирующая функции вида t(J)= τ J+a, τ  Zn, a  Z, называется координатной
таймирующей функцией, если a=0 и вектор τ содержит ровно одну отличную от нуля
компоненту. Можно гарантировать наличие стольких координатных таймирующих
функций, сколько координат векторов, характеризующих глобальные зависимости,
оказываются неотрицательными. Действительно, если ζ -я компонента вектора τ равна 1,
остальные компоненты равны 0, компонента с номером ζ вектора J–I зависимостей
неотрицательна, то t(J)–t(I)=t( j1 jn )–t( i1 in )= jζ  iζ ≥0.
Пусть задана векторная t-функция  t1 , t2 ,..., tn  , ti ( J )  ei J . Функция t1 задает порядок
выполнения операций в соответствии с итерациями самого внешнего цикла и поэтому
всегда является таймирующей. Координатные функции ti ( J ) , i  2, не обязательно
являются таймирующими. Они упорядочивают операции алгоритма в соответствии с
внутренними циклами при фиксированных значениях внешних циклов. Приведем
пример, в котором t2 не является таймирующей функцией:
do i = 1,N
do j = 1, N
a(i,j) = a(i,j–1) + a(i–1,j+1)
enddo
enddo
(
(
),
),
t (i, j ) =(t1(i,j),t2(i,j))=(i,j).
j
i
Здесь t2(i,j) не является таймирующей
функцией (не выполняется условие сохранения
зависимостей).
i
j
5
Скачать