Научная статья на тему 'Использование решетчатых графов для исследования многоконвейерной модели вычислений'

Использование решетчатых графов для исследования многоконвейерной модели вычислений Текст научной статьи по специальности «Математика»

CC BY
141
22
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
КОНВЕЙЕРИЗАЦИЯ / ОТОБРАЖЕНИЕ ЦИКЛОВ / МНОГОКОНВЕЙЕРНЫЕ ВЫЧИСЛЕНИЯ / РЕШЕТЧАТЫЙ ГРАФ / ГРАФ ЗАВИСИМОСТЕЙ / МОДЕЛИ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛЕНИЙ / PIPELINING / LOOP MAPPING / MULTIPIPELINE CALCULATIONS / LATTICE GRAPH / DEPENDENCE GRAPH / MODELS OF PARALLEL COMPUTING

Аннотация научной статьи по математике, автор научной работы — Штейнберг Роман Борисович

Рассматриваются задачи отображения нетесных гнезд циклов на многоконвейерную вычислительную систему и синхронизации нескольких конвейеров в многоконвейерной вычислительной системе. В рамках рассматриваемой модели допускается возможность пересылок данных между конвейерами. Для исследования применяется теория решетчатых графов. Результаты этой и других работ используются при разработке Открытой распараллеливающей системы.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по математике , автор научной работы — Штейнберг Роман Борисович

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Consideration of Lattice Graphs Applying to Investigation of the Multipipeline Calculations Model

There are two problems considered in the present paper. The problem of maping of not perfect loopnests onto and the problem of several pipeline synchronization in multipipeline computer system. In the context of considering model, the possibility of data send between pipelines is allowed. The analysis uses the lattice graphs theory. The results of this and other researches are applied to development of Open Parallelizing System.

Текст научной работы на тему «Использование решетчатых графов для исследования многоконвейерной модели вычислений»

УДК 681.3

ИСПОЛЬЗОВАНИЕ РЕШЕТЧАТЫХ ГРАФОВ ДЛЯ ИССЛЕДОВАНИЯ МНОГОКОНВЕЙЕРНОЙ МОДЕЛИ ВЫЧИСЛЕНИЙ

© 2009 г. Р.Б. Штейнберг

Южный федеральный университет, Southern Federal University,

344090, Ростов н/Д, ул. Мильчакова, 8а, 344090, Rostov-on-Don, Milchakov St., 8a,

dnjme@math. sfedu.ru dnjme@math. sfedu.ru

Рассматриваются задачи отображения нетесных гнезд циклов на многоконвейерную вычислительную систему и синхронизации нескольких конвейеров в многоконвейерной вычислительной системе. В рамках рассматриваемой модели допускается возможность пересылок данных между конвейерами. Для исследования применяется теория решетчатых графов. Результаты этой и других работ используются при разработке Открытой распараллеливающей системы.

Ключевые слова: конвейеризация, отображение циклов, многоконвейерные вычисления, решетчатый граф, граф зависимостей, модели параллельных вычислений.

There are two problems considered in the present paper. The problem of maping of not perfect loopnests onto and the problem of several pipeline synchronization in multipipeline computer system. In the context of considering model, the possibility of data send between pipelines is allowed. The analysis uses the lattice graphs theory. The results of this and other researches are applied to development of Open Parallelizing System.

Keywords: Pipelining, loop mapping, multipipeline calculations, lattice graph, dependence graph, models of parallel computing.

Рассматривается многоконвейерная модель вычислений и возможность отображения на нее тесных гнезд циклов. Получены формулы вычисления задержки между стартами конвейеров в рамках многоконвейерной модели вычислений [1], выражающие зависимость задержки в стартах конвейеров от вида линейных индексных выражений вхож-

дений, образующих зависимость, а также от времени пересылки данных между конвейерами и времени выполнения одной итерации цикла. Данная работа выполняется в рамках проекта Открытой распараллеливающей системы (ОРС) [2], [3] и основанном на ОРС тренажере параллельного программиста.

Пример 1.

for (i1=1; i1<=N1; i1++)

for (i2=1; i2<=N2; i2++)

u[i1],[i2] = u[i1 - 1][i2] + u[i1][i2-1] +

+u[i1 + 1][i2] + u[i1][i2 + 1].

Для конвейеризации этого цикла необходимо избавиться от антизависимостей с помощью переименования индексных переменных [4]. for (i1=1; i1<=N1; i1++) for (i2=1; i2<=N2; i2++) u1[i1],[i2] = u1[i1-1][i2]+u1[i1][i2-1]+ +u[i1+1][i2]+u[i1][i2+1].

Будем реализовывать последний двойной цикл на многоконвейерной архитектуре так, что внутренний цикл будет отображаться на конвейер для каждого значения счетчика i1. Однако запустить одновременно несколько конвейеров для разных значений i1 невозможно. Это связано с наличием зависимостей по данным между циклами, отображаемыми на конвейеры. Например, конвейер при i1 = 2 использует данные, вычисляемые конвейером, соответствующим i1 = 1. Для разрешения конфликтов такого рода можно запускать конвейеры с задержками.

Для определения задержек необходимо рассмотреть все истинные зависимости по данным в цикле. Зависимость ul[il][i2-l]—Hil[il][i2] - внутриконвей-ерная, a ul[il-l][i2]-Hil[il][i2] - зависимость между данными из соседних конвейеров.

Элементарный решетчатый граф [5] для зависимости ul [il-1] | i21 >Li 1 [il] [i2] изображен на рисунке.

Время выполнения одной итерации конвейеризуемого цикла обозначим Tit. Время пересылки данного между конвейерами - Tsend. Для данного примера задержку между стартами конвейеров z можно оценить снизу величиной Tsend + Tit.

i2

н-1-1-ь

н-Ь

-I—►

il

Решетчатый граф цикла Конец примера.

Описание многоконвейерной модели вычислений

Вернемся к общей постановке задачи. Будет рассмотрена возможность отображения на многоконвейерную архитектуру многомерных циклов следующего вида:

for(k1=0; k1<N[1]; k1++) for(k2=0; k2<N[2]; k2++) - (1) for(ks=0; ks<N[s]; ks++) Statements,

где Statements - формальное обозначение составного оператора, состоящего только из операторов присваивания.

Для простоты изложения будем предполагать, что многоконвейерная вычислительная система, рассматриваемая в данной модели, состоит из N[l]xN[2]x...xN[s-l] и более конвейерных вычислителей с общей памятью. В гнезде циклов (1) конвей-ерно выполняется внутренний цикл. Таких конвейеров будет N[l]xN[2]x...xN[s-l].

Уточним условия, при которых будет конвейеризоваться внутренний цикл.

1. Количество вычислительных ресурсов неогра-ничено, т.е. в один момент времени можно запустить любое количество конвейеров.

2. Время дискретно. Время между стартами итераций внутри одного конвейера обозначим iii (интервал инициализации итераций, [6]). Время пересылки данного между конвейерами системы - Tsend.

3. Конвейеры всегда стартуют последовательно, и время между стартами соседних конвейеров - величина постоянная. Будем называть её задержкой между стартами конвейеров, или просто задержкой, и обозначать z. В удачном случае (отсутствие зависимостей) z = 0.

4. Значащие элементы любого n-мерного массива X[k1,k2,...,kn], вхождения которого принадлежат описанному выше фрагменту программы, находятся не только в целочисленном прямоугольнике [l,N[5]]x[l,N[6]]x...x[l,N[n]], но и за его пределами, т.е. для любых значений счетчиков циклов k1,k2,.. ,,kn элемент массива X[k1,k2,...,kn] имеет значение, важное для работы программы. Разумно предположить, что в правильно работающей программе индексные выражения находятся в пределах границ массива.

В дальнейшем эти условия, формирующие математическую модель вычислений, будем называть соглашениями. Отметим, что переход от полученного в итоге решения к решению задачи с ограниченным количеством ресурсов и/или переменным количеством конвейеров, стартующих одновременно, представляется несложным.

Формула вычисления задержки в стартах конвейеров

Так как гнездо циклов (1) является тесным, расписание выполнения фрагмента программы будет строиться как последовательность работ конвейеров, сформированных по самому вложенному циклу. Учитываться будут только зависимости, которые находятся в блоке операторов Statements.

Для гнезд циклов вида (1) характерно, что входные данные на конвейеры могут попадать только двумя способами: 1) снаружи гнезда циклов; 2) с одного из предшествующих конвейеризуемых циклов. Это позволяет оценить задержку в стартах конвейеров, учитывая только дуги решетчатого графа гнезда циклов (1).

Пусть /=(ii, i2,., is), J=(j1,j2,. • •,js) - некоторые итерации цикла (1). Обозначим через Npipe(I) номер конвейера, на котором будет вычисляться итерация I. Тогда Npipe(I) определяется формулой

N ■ I

pipe ^ _

s-2 s-2

Z\ia n^f + i.

ff=ll ß=a

ls-1

+ 1

(2)

Доказательство этой формулы можно провести по индукции, однако здесь она доказана не будет, но в качестве иллюстрации ниже приведен пример. Пример 2.

&г(к1=0; к1<М; к1++)

&г(к2=0; к2<ГО; к2++) {

х[к1] = у[к2]

Юг(к3=0; к3<Ш; к3++)

{

7[к3] = х[к2] + а[к3] Юг(к4=0; к4<М; к4++)

х[к4] = у[к3+50] + с[к4]

}

}

В соответствии с соглашениями итерация I = (0,0,0,0) выполняется на конвейере номер 1, I = (0,0,1,0) - 2, I = (0,0,2,0) - 3 и т.д. Итерация I = (0,1,0,0) выполняется на конвейере номер N3 + 1, /=(0,1,1,0) - N3+2 и т.д. Итерация /=(1,0,0,0) -ШхШ + 1,1= (1,0,1,0) - ШхШ + 2 и т.д. Это следует из описанной модели и в то же время может быть вычислено по формуле (2). Конец примера.

Обозначим через А пространство итераций цикла (1), т.е. А определяется равенством А = {/ е 1 < < /„ < Ы(а). 1 < а < в}; ТЬе%т(1) - время старта конвейера, на котором будет выполняться итерация /е А. Тогда в соответствии с соглашением 3 получаем

ГЬе6т(/)=2Х(Жр1ре(/)-1). (3)

Пусть u - генератор; v - использование, принадлежащие гнезду циклов (1). Предположим, что на итерации /е А вычисляется значение для генератора и. Обозначим через Tca\c(u, I) время, которое пройдет с момента старта итерации I на конвейере N,^(7) до момента, когда будет получен результат вычисления значения генератора и, принадлежащего самому вложенному циклу.

Предположим I — I. Пусть Тёеп(и, I) - момент времени, соответствующий окончанию вычисления значения генератора и на итерации I. Он определяется двумя параметрами: моментом старта конвейера N^(0 и моментом старта итерации I относительно этого конвейера.

т%еп(и, I) = ТЫёт(Т) + ш X + ТЫс(и, Г). (4)

Пусть Тже(г, I) - момент времени, когда потребуется значение использования V на итерации I. Напомним, что использование V отображается на некоторый вычислительный элемент (ВЭ). Предположим также, что этот ВЭ в результате составления расписания будет читать данные сразу при старте конвейера. Тогда верна формула:

I) = ГьевтС-О + Ш ХЛ • (5)

Предположим, что ВЭ в результате составления расписания будет читать первое данное через время t после старта конвейера. Тогда в (5) необходимо добавить еще одно слагаемое t.

Разность Тше^, I) и Тёеп(и, I) определяет промежуток времени между этими событиями, т.е. время, до-

пустимое для передачи данного. Но величина параметра t, упомянутого в предыдущем абзаце, станет известна только после составления расписания. Значит, на этом этапе необходимо воспользоваться оценкой, которая отражает худший случай, т.е. наименьший зазор по времени. Следовательно, далее будем предполагать, что верна формула (5).

Итак, рассмотрим разность Тше^, I) и Тёеп(и, I). Тр1ре(и, V, I, I) - допустимое время передачи данного между генератором и, который записывает данные на итерации I, и использованием V, которое именно их считывает на итерации I. Ясно, что в этом случае на решетчатом графе, построенном по паре вхождений и и V, будет дуга (I, I). Для величины Тр1ре(и, V, I, I) справедлива формула:

Тр1ре(и, V, 1,1)= Тъф^!) + /'/'/' ху; -- (ТьевтСО + Ш X к + ТЫс(и, I)) . (6)

Следует отметить, что (6) и все описанные выше обозначения введены без учета существования информационной зависимости между генератором и на итерации I и использованием V на итерации I. Далее в этой работе (6) будет применяться именно для вхождений, связанных информационной зависимостью.

Обозначим через й дугу графа информационных связей, соединяющую вхождения и и V. Введем вспомогательное обозначение, смысл которого будет раскрыт ниже:

т\ </■/■•/ > Гса1с<■/>Тжпй -Ш х О, -1,)3

-1

.-Л 2

s-2

I

а-1

+ Л-1 ~h-\

ß=a

Предположим, что и - генератор, а V - использование, принадлежащие самому вложенному циклу в гнезде (1). Пусть использование V на итерации I зависит от генератора и на итерации I. Тогда, исходя из определения величины Тр1ре(и, V, I, I), время Тр1ре(и, V, I, I) - Т8еп<1 должно быть неотрицательно. Воспользуемся формулой (6), а затем (3):

/ьеВт(-0 + Ш ХЛ - (/Ье6ш(/) +

+ /'/'/' X + ТЫс(и, I)) - Гвепд > 0, ' ] + Л-1

s- 2

I

а=1

ß=a

>

+ • С ^Тса1с <1,1 ¿-ТэепС > 0 .

Тогда г > Тх{й,1,1).

Предположим, что есть два набора (й!, II) и (ё2, !2, I), которые влияют на значение г. Будем считать, что дуга указывает на зависимость между генератором и! и использованием v1, й2 - между генератором и2 и использованием v2. Предположим также, что /\(</ь 1\, > 7\(</2, /2, -/2), тогда, очевидно, г > Т\(й\, /|. .1]). В противном случае данное, которое генерируется ВЭ, соответствующим и!, не успеет попасть на вход ВЭ, использующего v2. Таким образом, чтобы найти г по фрагменту программы, необходимо выбрать максимум функции Т на всех наборах (й, I, I).

Введем в рассмотрение О - граф информационных зависимостей для тела самого вложенного цикла в гнезде циклов (1); II - множество дуг графа О. Для каждого </е £/ система функций {Р^ „}, 1< а опи-

сывает элементарный решетчатый граф зависимости d, а набор выпуклых многогранников {Dd „}, 1< a <pd является набором областей определения для соответствующих функций I\j а. Тогда

z> maxmax тах Тх (l,Fda ^С^ ^ (7)

deU \<a<pdJeDd a

В этой формуле максимум берется по всем парам итераций (I, J), которые соответствуют дугам минимального решетчатого графа.

Так как функции {Fda}, 1< a <pd являются аффинными и определены на выпуклых множествах, максимум находится не полным перебором всех точек областей {Dda}, 1< a <pd, ас использованием методов дискретной оптимизации. В частном случае, это уже было проделано в [1].

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Необходимо отметить, что при попытке решить эту же задачу для нетесных гнезд циклов, основным отличием является то, что становится возможным еще один способ получения входных данных для вычислений на конвейерах: вычисление значений операторами присваивания, не попавшими на конвейеры, но находящимися в гнезде циклов. Указанное отличие существенно влияет на подход, применяемый к исследованию такой задачи. В настоящий момент ведется работа по решению этой задачи и составлению расписания для нетесных гнезд циклов в рамках той же многоконвейерной модели вычислений.

Предположим, что в гнезде циклов (1) есть антизависимости. Тогда предлагается это гнездо циклов преобразовать так, чтобы от них избавиться. В этом может помочь преобразование - растягивание скаляров (array expansion) или комбинация преобразований - введение временных переменных (temp arrays) и разрезание циклов (loop distribution). Второй вариант от антизависимости не избавляет, но позволяет убрать ее из цикла и далее отобразить цикл на конвейер. С выход-

ными зависимостями внутри цикла нужно бороться аналогичным образом.

Следует отметить, что в реальных вычислительных системах важно использовать ресурсы максимально эффективно, так как их количество ограничено. Поэтому разрезание цикла (loop distribution) может освободить ресурсы, которые были бы загружены без его применения. Но может быть и противоположная ситуация, когда ресурсов не хватает на весь цикл целиком. Тогда разрезание цикла (loop distribution) будет просто необходимо для выполнения этого фрагмента программы. Точно также преобразование внесения оператора в самый вложенный цикл в одних случаях может упростить процедуру составления расписания, в других - увеличить количество необходимых для выполнения гнезда циклов ресурсов настолько, что их может оказаться недостаточно для вычисления данного фрагмента программы.

Литература

1. Штейнберг Р.Б. Вычисление задержки в стартах конвейеров для суперкомпьютеров со структурно процедурной организацией вычислений // Искусственный интеллект. 2003. № 4. С. 105-112.

2. Состояние и возможности открытой распараллеливающей системы / Б.Я. Штейнберг [и др]. // Перспективы систем информатики: сб. тр. VI междунар. конф. памяти академика А.П. Ершова. Новосибирск, 2006. С. 127.

3. URL: http://www.ops.rsu.ru (дата обращения 11.02.2008).

4. Штейнберг Б.Я. Подстановка и переименование индексных переменных в многомерных циклах // Изв. вузов. Сев.-Кавк. регион. Юбилейный выпуск. 2002. С. 94-99.

5. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. СПб., 2002. 599 с.

6. Французов Ю.А. Обзор методов распараллеливания кода и программной конвейеризации // Программирование. 1992. № 3. С. 16-37.

Поступила в редакцию 22 февраля 2008 г.

i Надоели баннеры? Вы всегда можете отключить рекламу.