ISSN 2079-3316 ПРОГРАММНЫЕ СИСТЕМЫ: ТЕОРИЯ И ПРИЛОЖЕНИЯ №4(35), 2017, с. 3-20 УДК 004.4'422
А. С. Лебедев
Организация информационного обмена
между параллельными процессами при автоматическом распараллеливании линейных программ для кластерных систем с применением модели многогранников
Аннотация. В работе предложен метод организации информационного обмена между параллельными процессами для преобразования программы, сгенерированной инструментом CLooG на основе расписания и размещения вычислений, в параллельную MPI-программу, учитывающую оптимальное размещение данных. Предполагается, что пространственно-временные преобразования программы являются аффинными и вычисляются методами модели многогранников в соответствии с принципом оптимизации временной и пространственной локальности данных. Введено понятие многогранника коммуникаций для определения набора данных, участвующих в информационном обмене с двухсторонней коммуникацией процессов. Применение метода проиллюстрировано на примере распараллеливания алгоритма LU-разложения.
Ключевые слова и фразы: Автоматическое распараллеливание, модель многогранников, локальность данных, кластерные системы, информационный обмен.
Введение
С увеличением количества вычислительных элементов в современных процессорах вычислительные системы приобретают все большую степень параллелизма. Разработка вычислительного программного кода, способного эффективно задействовать возможности аппаратуры, всегда являлась сложной задачей. Сегодня одним из актуальных подходов решения данной задачи является автоматическое распараллеливание программ.
Исследование выполнено при финансовой поддержке РФФИ в рамках проекта 16-07-00096 А.
© А. С. Лебедев, 2017
© Институт системного анализа ФИЦ «Информатика и управление» РАН, 2017 © Программные системы: теория и приложения, 2017
ЭС1: 10.25209/2079-3316-2017-8-4-3-20
Большинство вычислительно емких научных и инженерных приложений тратят значительную часть времени исполнения на вложенности циклов, часто отвечающие критериям линейности программ. Модель многогранников [1] предоставляет мощный математический аппарат, упрощающий анализ и преобразование таких программ с целью улучшения быстродействия путем повышения степени параллелизма и оптимизации локальности данных при вычислениях. Методы модели многогранников широко используются в статической компиляции [2-4]. Код, написанный на языке высокого уровня (чаще всего это C или FORTRAN), оптимизируется для параллельного выполнения и компилируется для целевой архитектуры. Распараллеливание в модели многогранников осуществляется в пять этапов.
(1 ) Анализ информационных зависимостей [5]. Рассматриваются потоковые зависимости (чтение после записи), антизависимости (запись после чтения), зависимости через выход (запись после записи).
(2) Построение многомерного аффинного расписания программы, обладающего параллелизмом и сохраняющего логический порядок операций в соответствии с зависимостями по данным. Широко применяемыми на практике стали классические методы поиска расписаний, ориентированные на минимизацию задержки расписания [6, 7], и современный подход [4], ориентированный на оптимизацию локальности данных.
(3) Построение пространственного размещения вычислений и данных. Вычисляется аффинное размещение, обладающее параллелизмом, и уменьшающее стоимость коммуникаций [8,9].
(4) Разбиение индексного пространства виртуальных процессоров [9, 10] — сопоставление виртуальных процессоров физическим.
(5) Генерация параллельной программы по алгоритму CLooG [11] в соответствии с пространственно-временным преобразованием, заданным функциями расписания и размещения, и разбиением.
Ранее автором были проанализированы современные подходы к вычислению пространственно-временных преобразований, и предложен новый, обладающий более гибкими средствами задания критериев качества альтернатив, подход [12], реализующий принцип оптимизации временной и пространственной локальности данных [4] с расширением жадной схемы Футриера [7] при вычислении многомерных расписаний и сохранением свойства вперед направленных коммуникаций (forward communication only placements, FCO) [9] при
вычислении размещений. Предложенный в [12] автором метод применим для вычислительных систем SMP и NUMA, и предназначен для конструирования параллельных программ с помощью генератора CLooG [11] и директив OpenMP (#pragma omp parallel for), размещаемых перед заголовками параллельных циклов (циклов, итерирующих по пространству виртуальных процессоров). Позднее был предложен метод построения размещений вычислений и данных для систем с распределенной памятью (кластеров) [13], также сохраняющий свойство FCO и реализующий принцип пространственной локальности данных [4]. Если задача кодогенерации для систем с общей памятью решается механически применением кодогенератора CLooG и расстановкой директив OpenMP, то конструирование параллельной программы для систем с распределенной памятью требует организации информационного обмена между параллельными процессами. Существующие работы в этом направлении предполагают трансляцию произвольной OpenMP-программы в MPI-программу и не оптимизируют пространственную локальность данных: STEP [14] предполагает, что данные загружены на всех процессорах, OMP2MPI [15] вводит понятие главного процесса, являющегося планировщиком работ и брокером данных с общим доступом.
Целью настоящей работы является разработка метода организации информационного обмена между параллельными процессами для преобразования программы, сгенерированной CLooG [11] на основе расписания и размещения вычислений, в параллельную MPI-программу, учитывающую оптимальное размещение данных [13].
В первой части приводится обзор основных понятий модели многогранников, во второй части следует описание разработанного метода для организации информационного обмена между процессами. В третьей части приводится пример распараллеливания программы LU-разложения и сравнение быстродействия с последовательным вариантом программы.
1. Базовые понятия модели многогранников
Модель многогранников — модель последовательных и параллельных вычислений, рассматривающая класс линейных программ [16]. Эти программы удовлетворяют следующим ограничениям: • единственный тип исполнительного оператора — оператор присваивания, правая часть которого является арифметическим выражением;
• все повторяющиеся операции описываются только с помощью циклов DO языка FORTRAN (либо эквивалентными циклами for языка С); структура вложенности циклов может быть произвольной; шаги изменения параметров циклов всегда равны +1;
• допускается использование условных и безусловных операторов перехода, передающих управление вниз по тексту; не допускаются побочные выходы из циклов;
• все индексные выражения переменных, границы изменения параметров циклов и условия передачи управления задаются неоднородными формами, линейными по совокупности параметров циклов и внешних переменных программы; все коэффициенты линейных форм являются целыми числами;
• внешние переменные программы всегда целочисленные; конкретные значения внешних переменных известны только во время работы программы.
Обобщенный граф зависимостей — это ориентированный муль-тиграф, каждая вершина которого представляет множество соответственных операций (динамических экземпляров одной и той же инструкции). Каждая операция принадлежит только одной вершине. Ребро графа представляет временное ограничение на две операции, соответствующие начальной и конечной вершине (принцип причинности для информационно зависимых операций и и v. и ^ v ^ 9{v) > в{и), где в — логическое время). В обобщенном графе зависимостей могут быть петли и циклы. Каждая вершина помечается описанием соответствующих операций, а каждое ребро — описанием соответствующих отношений зависимости.
Каждой вершине X соответствует ее домен — многогранник Dx на множестве Qpx, где рх — размерность ее итерационного пространства (количество циклов в программе, включающих X). Каждая операция представляется как {i,z; X}, где i G Dx — целочисленный вектор индекса итерации, z — целочисленный вектор внешних переменных программы. Количество внешних переменных обозначим qz.
Каждому ребру е, исходящему из вершины а{е) = X в S{e) = Y, ставится в соответствие многогранник Re на множестве Qpx +PY такой, что условие причинности должно быть наложено на операции {i, z \ X}
i
и {j,z; Y} тогда и только тогда, когда составной вектор
е Де.
Формально обобщенный граф зависимостей представляется четверкой ( V; Е; V; К), где V — множество вершин, Е — множество ребер, V — отображение из множества вершин V во множество соответствующих доменов, К — отображение из множества ребер Е во множество соответствующих многогранников зависимостей.
Пусть /ид — индексные функции ячейки памяти, к которой обращаются конфликтующие операции, тогда ре называют глубиной зависимости:
е Re = f(x) = д(у) Л (х[1..ре] = у[1..ре]) Л (х[ре + 1] < у[ре + 1]).
X
У.
Тем самым ¿-мерное (! > 1) расписание для обобщенного графа зависимостей есть функция в: И ^ такая, что Уе € Е,х € €
^й(е)
е Re ^ 9((y,z;ó(e))) >¡ex 9((x,z;a(e))).
X
Назначение процедуры анализа потока данных [5] — упрощение представления Де. Для каждой зависимости е имеем многогранник Ре и аффинное преобразование ке такое, что:
е Re = (х = he(y) Л у е Ре).
Множество операций F(t) = {и е Q|9(и) = t} называется фронтом расписания на t. Программа с синхронным параллелизмом может быть сконструирована следующим образом:
1 do t = 0; L
2 exchange data
3 pardo F(t)
4 barrier
5 end do
Здесь L = max (в(и)) — задержка расписания.
Размещение для обобщенного графа зависимостей есть функция я: Q ^ No, которая ставит в соответствие операции номер виртуального процессора, на котором она будет исполняться. По аналогии вводится понятие размещения для массивов данных. Обозначим (да, z; Аа) доступ к массиву Аа с аффинной индексной функцией ga(i), i е Dx в некоторой позиции а инструкции X. Тогда r¡((ga,z;Aa)) — номер виртуального процессора, на котором располагается элемент Аа[9a(i)\, i е Dx. В дальнейшем будем обозначать ра — размерность
массива А, И а — множество допустимых индексов (прямоугольный параллелепипед в ZPА).
Одномерное аффинное размещение для инструкции X есть функция вида пх ( г, = Ух • г + у'х • % + '^х, ^х € 1РХ, у'х € , ^ € Z, ? € .
Одномерное аффинное размещение для массива А есть функция вида ^л(д, %) = уа • д + у'а • г + у°А, у а € и'а, у'а € , у^ € Z, д € В а.
2. Генерация кода для систем с распределенной памятью
Рассматривается параллельная программа, полученная по методу [13]. Пространство виртуальных процессоров одномерное. Программа содержит I массивов Аь, к = 1,..., I, т инструкций Б^, г = 1,..., то, п обращений к памяти а^, ] = 1, ...,п.
На практике часто применяется равномерное распределение виртуальных процессоров между физическими. Пусть вычислительная система имеет Q физических процессоров, проиндексированных переменной г = 0,1,...,^ — 1. Каждый физический процессор г обрабатывает отрезок пространства виртуальных процессоров 1(г), ...,и(г):
1(г + 1) = и(г) + 1, Ь < 1(г) < и(г) < и,
l(r) = L + г
U - L + Q
Q
L = min^ min (nSi) min ('ПАк)),
г=1,...,т к=1,...,1
U = max( max (^Si), max ('ЦАк)).
i=1,...,m k=1,...,l
В этом случае не все Q физических процессоров могут быть нагружены, но количество виртуальных процессоров, сопоставленных самому нагруженному физическому процессору, является минимальным из возможных.
Информационный обмен между физическими процессорами обуславливается операциями удаленного чтения и удаленной записи, когда процессор с индексом R осуществляет доступ к элементам данных, расположенным на процессоре с индексом г: R > г для операций удаленного чтения, R < г для операций удаленной записи, поскольку построенные размещения вычислений и данных удовлетворяют свойству вперед направленных коммуникаций [9].
Будем строить программу с синхронным параллелизмом по следующей схеме:
1 do t = 0; L
2 for remote reads exchange data
3 pardo F(t)
4 barrier
5 for remote writes exchange data
6 end do
Перед выполнением фронта происходит пересылка данных для операций удаленного чтения, после выполнения фронта происходит пересылка данных, индуцированных операциями удаленной записи. Реализация параллелизма предполагается в рамках стандарта MPI c двухсторонней коммуникацией процессов (MPI_Send, MPI_Recv). Определим множество данных, которые будут участвовать в актах информационного обмена при условии, что разбиение пространства виртуальных процессоров будет выполняться по схеме равномерного распределения.
Пусть D's — домен инструкции S в распараллеленной программе, p's — его размерность, i's € D' — целочисленный вектор индекса
Ар)
итерации, v s — индекс цикла, итерирующего по пространству виртуальных процессоров.
Обозначим С — контекст [11] — многогранник внешних переменных программы, заданный рс ограничениями вида Ck ■ z + dk > 0, ck € Zq*, dk € Z, к = 1, ..,рс.
Пусть D's задан pD' ограничениями вида bs,k ■Уs+^s,k ■z+ds^k > 0, bs, k € ZP's, ¿s, k € Zq*, ds, k € Z, к = 1, ...,pD,s.
Определение 1. Мгновенным доменом инструкции S для физического процессора R назовем параметрически заданный многогранник D'l
s,R"
Г Ф) 1
гs
Ф'з)
< ^ < u(R),
€ D»r Jl(R) < '
{bs,k ■ i's + cs,k ■ z + ds,k > 0,k € KD .
Здесь = {к\к = 1,...,р^' Л ^ | Ь\,'к\ > 0} — множество
индексов ограничений, включающих хотя бы один из компонентов у(1) ! Х1 '
, 1 = Р +1,...,Рв■
s
Контекст Сд определяющий параметры задается сле-
дующей системой ограничений:
ск ■ г + ¿к > 0,к = 1, ...,рс, Ь < 1(К) < и(К) < и, ¿■в,!
Ъв,к ■ г'в + с3,к ■ г + > 0,к € КЯ".
р3
Здесь Кд = {к|к = 1,...,р^' Л ^ {^^к! =0} — множество ин-
3 1=р+1
дексов ограничении, не включающих ни один из компонентов ^, 1=р+1, р'3.
Пусть да(в', Пд к) — множество индексов всех элементов массива Аа, к которым осуществляется доступ в позиции а инструкции й
Г ^ р
физическим процессором К в момент времени в' = ■ ■ ■
г (р-1)
У в .
Индексы дАа элементов массива Аа, которые процессор К должен принять от процессора г перед выполнением фронта, в котором происходит удаленное чтение в позиции а инструкции й, удовлетворяют условиям
{г <К,
9Аа € да(в',В'' п),
Кг) < л((9Аа,г;Аа)) < и(г).
Индексы дАа элементов массива Аа, которые процессор К должен отправить процессору г перед выполнением фронта, в котором происходит удаленное чтение в позиции а инструкции й, удовлетворяют условиям
{г > К,
9Аа € 9а(0 ),
1(К) < Л((9Аа,{;Аа)) <и(К).
Индексы дАа элементов массива Аа, которые процессор К должен отправить процессору г после выполнения фронта, в котором происходит удаленная запись в позиции а инструкции й, удовлетворяют
условиям
{r>R,
дАа е да(e\D"tR),
Kr) < v((9Aa,z; Аа)) < u(r).
Индексы gAa элементов массива Аа, которые процессор R должен принять от процессора г после выполнения фронта, в котором происходит удаленная запись в позиции а инструкции S, удовлетворяют условиям
{г <R,
9Аа е ~да(в', D'gr),
l(R) < v((9Aa,z; Аа)) < u(R).
Определение 2. Множества QrJw r/s являются параметрически заданными многогранниками. Назовем их многогранниками коммуникаций. В первой части верхнего индекса г означает операцию удаленного чтения (read), w — операцию удаленной записи (write). Во второй части верхнего индекса г означает прием данных (receive), s — отправку (send).
Такие многогранники могут быть просканированы вложенностями циклов, для генерации которых подходит инструмент CLooG [11]. Код этих вложенностей можно использовать при формировании пакетов для осуществления информационного обмена между процессами в MPI-коммуникаторе.
Уточним шаг 2 параллельной программы:
// exchange data for remote reads for (int j = 1; j <= n; j ++) { if (а^ is read) {
for (int r = 0; r < R; r + +)
MPI_Recv(data for (дла. ,R,r) );
for (int r = R + 1; r<Q; r + +)
MPI_Send(data for Q1a-s(gAa. ,R,r));
}
}
Уточним шаг 5 параллельной программы:
// exchange data for remote writes for (int j = 1; j <= n; j ++) {
if (а^ is write) {
for (int г = 0; г < R; г + +)
MPI_Recv(data for Qvl-r (qA ,R,r));
aj aj
for (int г = R + 1; г < Q; г + +)
MPI_Send(data for Qv1-s(qa , R, г));
aj aj
}
}
Переменная R хранит значение собственного индекса физического процессора (ранг MPI-процесса). Переменная г используется для индексирования других физических процессоров (рангов других MPI-процессов).
3. Пример: LU-разложение
Рассмотрим алгоритм LU-разложения квадратной матрицы А.
for (int k = 0; k < N; k++) { for (int l = k + 1; l < N; l++)
A[l][k] /= A[k][k]; //Si for (int i = k + 1; i < N; i++) for (int j = k + 1; j < N; j++)
A[i][j] -= A[i][k] * A[k][j]; //S2
}
Применение методов [12] и [13] дает следующие аффинные преобразования: 6Si = 2к, 6S2 =2к +1, 's1 = I, 's2 = i, г/а = .
ClooG [11] генерирует следующую вложенность циклов для приведенных пространственно-временных преобразований:
#define ceild(n,d) ceil(((double)(n))/((double)(d)))
for (int c1=0; c1<=2*N-3; c1++) { // Parallel loop
for (int c2=ceild(c1+1,2); c2<=N-1; c2++) { if ((c1+1)%2==0) {
for (int c8=ceild(c1+1,2); c8<=N-1; c8++) //Si ri,wi г2 гз
A[c2][c8]-=A[c2][(c1-1)/2]*A[(c1-1)/2][c8];
}
if (c1%2==0) {
//S2 г4 , W2 г5
A[c2][c1/2]/=A[c1/2][c1/2];
}
}
}
В комментариях отмечено, что что цикл по с2 является параллельным (итерирует по пространству виртуальных процессоров), а также заново пронумерованы инструкции и позиции, в которых осуществляется доступ к памяти.
3.1. Анализ программы
Цикл по С2 содержит фронт операций. Выпишем многогранники коммуникаций:
Св1,н
:
N > 0,
Ь < 1(К) < и(К) < и,
С1 > 0, С1 < 2 N - 3, с1 = 2у + 1,
П''
ПБ1,П
1(К) < с2 < и(К), 2 св > С1 + 1,
св <N - 1;
9АГ
9АГ
0;
2
(С1 - 1)/2_
(С1 - 1)/2 Св
0,
1(К) < дА1 < и(К),
А
9п,и,1 ([ С1],В^1^) :Пд^^ >сх + 1 (2) '
< ^ - 1;
~ п ] ) 11(К) < <иК
9т2 ([С 1],П31,Н):< /2) 2
= %
(1)
= ъ,
Эт3([с 1],В'^Н) + 1,
/А!3 <N -
С
Ь < ( К) < и( К) < и, с1 > 0, с1 < 2N - 3, 1 = 2 ,
: 1(К) <с2< и(К);
> 0;
9АГ
С1/2
~ ([ ] п" ) I 1(К) < д(А1 < и(^
; Эт4([с 1],п32^): < ,2) 4
1 зА' =
9АГ
01/2 сл/2_
-41) =
; 9ть ([с 1],^): ^ ^ 1 = ^
1 '
''1 ,
2
9Аг3 =
5
В позиции гз находится операция удаленного чтения. Процессор, на котором расположена го-я строка матрицы, должен отправить ее фрагмент + 1 : N — 1] всем остальным процессорам с большим
индексом перед исполнением фронта:
г < К,
ОТгГ (9АГЧ ,я,г)
-41)
ЗАт 3 =
А > V + 1,
/а2! — 1,
1(г) < д{А13 < <г),
г > К, (1)
ЯГгГ(9АГз г) :
9а
¿2)
ЗАТ,
9А)з — 1,
= V,
> '0 + 1,
УКЩ < д{А1 <
В позиции г^ также находится операция удаленного чтения. Процессор, на котором расположен элемент матрицы А^]^], должен отправить его всем остальным процессорам с большим индексом перед исполнением фронта:
Ягг-г(дл ,К, г)
г < К,
(1)
9 а Г5 = V, <2)
Уа' = у,
А'5
1(г) < дА) < и(г),
г > К,
Ягг-(дА ,Я, г) :
(1) К ¿2)
,
9А'6 = V,
т < д(л1 < п(Я).
В остальных позициях нет операций удаленного доступа, и соответственные многогранники коммуникаций — пустые множества.
Следует отметить, что при четном с\ контекст С$ я является пустым, инструкция не выполняется, и для нее не нужно строить многогранники коммуникаций. Аналогично, при нечетном с\ контекст
С' R является пустым, инструкция S2 не выполняется, и для нее также не нужно строить многогранники коммуникаций.
Следующая MPI-программа осуществляет информационный обмен в соответствии с найденными многогранниками коммуникаций:
int numproc, id; MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numproc); MPI_Comm_rank(MPI_COMM_WORLD, &id);
int chunk_size = (N + numproc - 1) / numproc; int actual_chunk_size = (id == numproc - 1) ? N - (numproc - 1) * chunk_size : chunk_size;
size_t sz1 = sizeof(double*) * actual_chunk_size; size_t sz2 = sizeof(double) * N;
double** A = (double**) malloc(sz1); for (int row = 0; row < actual_chunk_size; row++) A[row] = (double*)(malloc(sz2));
for (int c1 = 0; c1 <= 2 * N - 3; c1++) { int row_idx; int row_length;
if ((c1 + 1) % 2 == 0) { row_idx = (c1-1)/2; row_length = N - row_idx;
}
if (c1 % 2 == 0) { row_idx = c1/2; row_length = 1;
}
double* row_ptr = NULL;
int owner_id = row_idx / chunk_size;
// send the line #row_idx owned by me to all the row_idx+1..N-1 // virtual processors or id+1..numproc mpi processes if (id == owner_id) {
row_ptr = A[row_idx % chunk_size];
for (int addressee = id + 1; addressee < numproc; addressee++)
MPI_Send(row_ptr + row_idx, row_length, MPI_DOUBLE, addressee, 0, MPI_COMM_WORLD);
}
else if (id > owner_id) { row_ptr = got_row; MPI_Status status;
MPI_Recv(row_ptr + row_idx, row_length, MPI_DOUBLE, owner_id, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
Количество узлов
Рис. 1. Ускорение от распараллеливания LU-разложения
}
MPI_Barrier(MPI_COMM_WORLD);
for (int c2 = max(id * chunk_size, ceild(c1 +1, 2)); c2 <= id * chunk_size + actual_chunk_size - 1; c2++) { if ((c1 + 1) % 2 == 0) {
for (int c8 = ceild(c1 +1, 2); c8 <= N - 1; c8++)
A[c2 % chunk_size][c8] -= A[c2 % chunk_size][(c1-1)/2]*row_ptr[c8];
}
if (c1 % 2 == 0) {
A[c2 % chunk_size][c1/2] /= row_ptr[c1/2];
}
}
MPI_Barrier(MPI_COMM_WORLD);
}
//...
3.2. Вычислительные эксперименты
Эксперименты проводились для квадратной матрицы порядка N = 2048 вещественных чисел двойной точности на узлах кластера РГАТУ [17]. Использовалась библиотека OpenMPI и единственный процессор на каждом узле. Индексы виртуальных процессоров равномерно распределены между физическими. На рис. 1 показана зависимость коэффициента ускорения вычислений от количества узлов. Программа показала приемлемую масштабируемость на пяти задействованных узлах — выигрыш от распараллеливания составил 2,75 раза.
Заключение
Метод организации информационного обмена между параллельными процессами, предложенный в статье, позволяет преобразовать
программу, сгенерированную инструментом CLooG на основе расписания и размещения вычислений, в параллельную MPI-программу для кластерных систем, учитывающую оптимальное размещение данных. Предполагается, что параллельное расписание найдено методом [12], а оптимизация размещения вычислений и данных произведена методом [13], обеспечивающим свойство вперед направленных коммуникаций. Это свойство гарантирует отсутствие тупиков (deadlocks) при выполнении информационного обмена для операций удаленного чтения и удаленной записи. Метод успешно применен для преобразования и запуска программы LU-разложения в MPI-среде с двухсторонней коммуникацией процессов.
В рассмотренном примере многогранники коммуникаций определяют данные, расположенные в непрерывном участке памяти, что позволяет непосредственно вызвать MPI_Send() и MPI_Recv() для обеспечения информационного обмена. В общем случае многогранники коммуникаций могут иметь более сложную форму и определять данные, занимающие несколько непрерывных областей памяти. Техники упаковки данных в информационные пакеты и последующей их распаковки являются предметом дальнейших исследований.
Список литературы
[1] Ch. Lengauer. "Loop parallelization in the polytope model", International Conference on Concurrency Theory CONCUR'93 (Hildesheim, Germany, August 23-26, 1993), Lecture Notes in Computer Science, vol. 715, Springer, Berlin-Heidelberg, 1993, pp. 398-416. t 4
[2] F. Irigoin, P. Jouvelot, R. Triolet. "Semantical interprocedural parallelization: An overview of the PIPS project", ACM International Conference on Supercomputing 25th Anniversary Volume (Munich, Germany, June 10-13, 2014), ACM, 2014, pp. 143-150. t 4
[3] M. Griebl, Ch. Lengauer. "The loop parallelizer LooPo", Proc. Sixth Workshop on Compilers for Parallel Computers, Konferenzen des Forschungszentrums Jülich, vol. 21, 1996, pp. 311-320. t 4
[4] U. Bondhugula, M. Baskaran, S. Krishnamoorthy, J. Ramanujam, A. Rountev, P. Sadayappan. "Automatic transformations for communication-minimized parallelization and locality optimization in the polyhedral model", International Conference on Compiler Construction CC 2008 (Budapest, Hungary, March 29-April 6, 2008), Lecture Notes in Computer Science, vol. 4959, Springer, Berlin-Heidelberg, 2008, pp. 132-146. t 4,5
[5] P. Feautrier. "Dataflow analysis of array and scalar references", International Journal of Parallel Programming, 20:1 (1991), pp. 23-53. t4,7
[6] P. Feautrier. "Some efficient solutions to the affine scheduling problem. I. One-dimensional time", International Journal of Parallel Programming, 21:5 (1992), pp. 313-347. t 4
[7] P. Feautrier. "Some efficient solutions to the affine scheduling problem. Part II. Multidimensional time", International Journal of Parallel Programming, 21:6 (1992), pp. 389-420. t 4
[8] P. Feautrier. "Toward automatic distribution", Parallel Processing Letters, 4:03 (1994), pp. 233-244. t 4
[9] M. Griebl. Automatic parallelization of loop programs for distributed memory architectures, Habilitation, Univ. Passau, 2004, 207 p., URL: http://www.infosun.fim.uni-passau.de/cl/publications/docs/Gri04.pdf t4,8
[10] V. Bandishti, I. Pananilath, U. Bondhugula. "Tiling stencil computations to maximize parallelism", Proceedings of the International Conference on High Performance Computing, Networking, Storage and Analysis, SC '12 (Salt Lake City, Utah, USA, November 10-16, 2012), IEEE Computer Society Press, 2012, 11 p. t 4
[11] C. Bastoul. "Code generation in the polyhedral model is easier than you think", Proceedings of the 13th International Conference on Parallel Architectures and Compilation Techniques, PACT'04 (Antibes Juan-les-Pins, France, 29 September-3 October 2004), IEEE Computer Society, 2004, pp. 7-16, URL: https://hal.archives-ouvertes.fr/hal-00017260 t 4,5,9,11,12
[12] А. С. Лебедев. «Пространственно-временные преобразования при распараллеливании линейных программ», Информационные технологии и вычислительные системы, 2015, №1, с. 19-32. t 4,5,12,17
[13] А. С. Лебедев. «Размещение данных при автоматическом распараллеливании линейных программ для систем с распределенной памятью», Вестник Рыбинской государственной авиационной технологической академии им. П. А. Соловьева, 2015, №3, с. 92-99. t 5,8,12,17
[14] D. Millot, A. Muller, Ch. Parrot, F. Silber-Chaussumier. "STEP: a distributed OpenMP for coarse-grain parallelism tool", IWOMP 2008 (West Lafayette, IN, USA, May 12-14, 2008), Lecture Notes in Computer Science, vol. 5004, 2008, pp. 83-99. t 5
[15] A. Saa-Garriga, D. Castells-Rufas, J. Carrabina. OMP2MPI: Automatic MPI code generation from OpenMP programs, 2015, URL: https://arxiv.org/abs/1502.02921 1 5
[16] В. В. Воеводин. Параллельные вычисления, БХВ-Петербург, СПб., 2004. t 5
[17] Кластер IBM РГАТУ, URL: http://kbit.rsatu.ru/ibmcluster/ t 16
Рекомендовал к публикации д.т.н. В. М. Хачумов
Пример ссылки на эту публикацию:
А. С.Лебедев. «Организацияинформационногообменамежду параллельными процессами при автоматическом распараллеливании линейных программ для кластерных систем с применением модели многогранников», Программные системы: теория и приложения, 2017, 8:4(35), с. 3-20. URL: http://psta.psiras.ru/read/psta2017_4_3-20.pdf
Об авторе:
e-mail:
Младший научный сотрудник ИСА ФИЦ ИУ РАН. Область научных интересов: параллельное программирование, автоматическое распараллеливание программ, вычислительная математика, распределенные приложения, трансляторы.
Артем Сергеевич Лебедев
Artem Lebedev. Organizing communication of parallel processes during automatic parallelization of loop nests with static control flow for cluster systems using polyhedral
Abstract. A method to organize communication of parallel processes is proposed for translation of CLooG output into parallel MPI program preserving optimal data placement. It is assumed that space-time mappings are affine and calculated using polyhedral model methods according to the principle of space and time data locality optimization. The notion of a communication polyhedron is introduced to define a data set participating in any information exchange within two-sided MPI communication scheme. Application of the method is illustrated with parallelization of LU-decomposition algorithm. (in Russian).
Key words and phrases: Automatic parallelization, polyhedral model, data locality, clusters,
intercommunications.
[1] Ch. Lengauer. "Loop parallelization in the polytope model", International Conference on Concurrency Theory CONCUR'93 (Hildesheim, Germany, August 23-26, 1993), Lecture Notes in Computer Science, vol. 715, Springer, Berlin-Heidelberg, 1993, pp. 398-416.
[2] F. Irigoin, P. Jouvelot, R. Triolet. "Semantical interprocedural parallelization: An overview of the PIPS project", ACM International Conference on Supercomputing 25th Anniversary Volume (Munich, Germany, June 10-13, 2014), ACM, 2014, pp. 143-150.
[3] M. Griebl, Ch. Lengauer. "The loop parallelizer LooPo", Proc. Sixth Workshop on Compilers for Parallel Computers, Konferenzen des Forschungszentrums Jülich, vol. 21, 1996, pp. 311-320.
[4] U. Bondhugula, M. Baskaran, S. Krishnamoorthy, J. Ramanujam, A. Rountev, P. Sadayappan. "Automatic transformations for communication-minimized parallelization and locality optimization in the polyhedral model", International Conference on Compiler Construction CC 2008 (Budapest, Hungary, March 29-April 6, 2008), Lecture Notes in Computer Science, vol. 4959, Springer, Berlin-Heidelberg, 2008, pp. 132-146.
© A. S. Lebedev, 2017
© Institute for Systems Analysis, FRC "Computer Science and Control" of RAS, 2017 © Program systems: Theory and Applications, 2017
DOI: 10.25209/2079-3316-2017-8-4-3-20
model.
References
[5] P. Feautrier. "Dataflow analysis of array and scalar references", International Journal of Parallel Programming, 20:1 (1991), pp. 23—53.
[6] P. Feautrier. "Some efficient solutions to the affine scheduling problem. I. One-dimensional time", International Journal of Parallel Programming, 21:5 (1992), pp. 313-347.
[7] P. Feautrier. "Some efficient solutions to the affine scheduling problem. Part II. Multidimensional time", International Journal of Parallel Programming, 21:6 (1992), pp. 389-420.
[8] P. Feautrier. "Toward automatic distribution", Parallel Processing Letters, 4:03 (1994), pp. 233-244.
[9] M. Griebl. Automatic parallelization of loop programs for distributed memory architectures, Habilitation, Univ. Passau, 2004, 207 p., URL: http: //www.infosun.flm.uni-passau.de/cl/publications/docs/Gri04.pdf
[10] V. Bandishti, I. Pananilath, U. Bondhugula. "Tiling stencil computations to maximize parallelism", Proceedings of the International Conference on High Performance Computing, Networking, Storage and Analysis, SC '12 (Salt Lake City, Utah, USA, November 10-16, 2012), IEEE Computer Society Press, 2012, 11 p.
[11] C. Bastoul. "Code generation in the polyhedral model is easier than you think", Proceedings of the 13th International, Conference on Parallel Architectures and Compilation Techniques, PACT'04 (Antibes Juan-les-Pins, France, 29 September-3 October 2004), IEEE Computer Society, 2004, pp. 7-16, URL: https://hal.archives-ouvertes.fr/hal-00017260
[12] A. S. Lebedev. "Space-time mappings for parallelization of affine programs", Informatsionnyye tekhnologii i vychislitel'nyye sistemy, 2015, no.1, pp. 19-32.
[13] A. S. Lebedev. "Construction of data placements for automatic parallelization of affine programs for distributed memory systems", Vestnik Rybinskoy gosudarstvennoy aviatsionnoy tekhnologicheskoy akademii im. P. A. Solov'yeva, 2015, no.3, pp. 92-99.
[14] D. Millot, A. Muller, Ch. Parrot, F. Silber-Chaussumier. "STEP: a distributed OpenMP for coarse-grain parallelism tool", IWOMP 2008 (West Lafayette, IN, USA, May 12-14, 2008), Lecture Notes in Computer Science, vol. 5004, 2008, pp. 83-99.
[15] A. Saa-Garriga, D. Castells-Rufas, J. Carrabina. OMP2MPI: Automatic MPI code generation from OpenMP programs, 2015, URL: https://arxiv.org/abs/1502.02921
[16] V. V. Voyevodin. Parallel computing, BKhV-Peterburg, SPb., 2004.
[17] Cluster IBM 1350, URL: http://kbit.rsatu.ru/ibmcluster/
Sample citation of this publication:
Artem Lebedev. "Organizing communication of parallel processes during automatic parallelization of loop nests with static control flow for cluster systems using polyhedral model", Program systems: Theory and applications, 2017, 8:4(35), pp. 3-20. (In Russian).
URL: http://psta.psiras.ru/read/psta2017_4_3- 20.pdf