Научная статья на тему 'Автоматическое распараллеливание программ в процессе трансляции'

Автоматическое распараллеливание программ в процессе трансляции Текст научной статьи по специальности «Компьютерные и информационные науки»

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Лебедев Артем Сергеевич

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

Текст научной работы на тему «Автоматическое распараллеливание программ в процессе трансляции»

АВТОМАТИЧЕСКОЕ РАСПАРАЛЛЕЛИВАНИЕ ПРОГРАММ В ПРОЦЕССЕ ТРАНСЛЯЦИИ

Лебедев Артем Сергеевич

Рыбинский государственный авиационный технический университет имени П.А. Соловьева, Рыбинск

Современные вычислительные архитектуры обладают значительным параллелизмом, и его степень только увеличивается со временем. Наряду с традиционными универсальными многоядерными процессорами для высокопроизводительных вычислений используются так называемые ускорители - графические процессоры (GPU) и сопроцессоры Intel Xeon PHI. Программирование параллельных архитектур никогда не было тривиальной задачей, и с увеличением разнообразия аппаратных платформ эта задача усложняется. Сложившаяся ситуация требует развития инструментов программирования параллельных систем для повышения качества оптимизирующей трансляции кода и абстрагирования от целевой аппаратной платформы. Большинство вычислительно емких научных и инженерных приложений тратят значительную часть процессорного времени на вложенности циклов. Зачастую такие участки удовлетворяют критериям линейности программ. Модель многогранников [8] предоставляет развитый математический аппарат для осуществления анализа и трансформации таких программ с целью их распараллеливания и оптимизации локальности данных. Она широко используется в статической компиляции [1, 5-7]. Однако, существуют программы с сильной параметризацией, к которым модель многогранников не может быть применена непосредственно, так как не все параметры модели известны статически или выводимы во время компиляции.

В работе предложен подход JIT (Just-In-Time) компиляции для автоматического распараллеливания программ методами модели многогранников, направленный на достижение двух целей:

• расширить границы применимости модели многогранников в случае, когда не все параметры модели известны во время статической компиляции;

• достичь переносимости автоматически распараллеливаемого кода между параллельными архитектурами.

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

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

Автором выбрана среда Java Virtual Machine 1.7u60 [9] для разработки и интеграции распараллеливающего модуля. В качестве целевых параллельных архитектур рассматриваются графические ускорители с поддержкой OpenCL (NVIDIA и AMD), сопроцессор Intel Xeon Phi, универсальные многоядерные процессоры и кластерные системы на основе архитектуры x86.

На рисунке 1 проиллюстрировано положение распараллеливающего модуля в общем тракте трансляции байткода Java.

Java Bytecode ---*

^инструкцииJ ^оптимизаторы/ V МОдуЛ^ J Уинтерпретато^/

Рисунок 1. Распараллеливающий модуль в JIT-компиляции

Промежуточный код (Java IR) инструментируется различными вызовами в зависимости от целевой архитектуры:

• графический процессор - вызовы OpenCL С функций;

• системы с распределенной памятью - MPI-вызовы;

• многоядерный процессор - вызовы функций из библиотеки POSIX Threads;

• Intel Xeon Phi - вызовы динамической библиотеки, сформированной в результате кодогенерации (компилятор ICC - единственное на момент исследования средство, с помощью которого может быть получен машинный код для архитектуры Intel MIC). Поиск функции расписания осуществляется для

многомерного случая по алгоритму [3, с. 9]. Поиск функции размещения основывается на правиле «вычислитель -владелец» (значение принадлежит тому процессору, который его вычислил) и выполняется по алгоритму dependence-driven placements [4, с. 91]. Пусть имеет место зависимость по данным dX^Y между инструкциями X и

Y, где Rd- многогранник зависимости (n - вектор внешних параметров программы):

dX ^Y : <

(x,n,X) y,n, Y) : Rd

fx^

y

v n

>0

Для нахождения FCO-размещения формируется система ограничений вида:

Vx,y,n : Rd

y

v n

> 0

y

v n

-u

X

x

v n

> 0.

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

ограничение: индексы виртуальных процессоров двух операций X и У, ее определяющих, не отличаются больше,

С +1

чем на заданное положительное число р, = -

п : Rd

У

V п

> 0 ^ 0 <п

У

V п у

-п,

V п У

<pd

Такое ограничение позволяет управлять расстоянием использования данных в пространстве физических процессоров благодаря зафиксированному разбиению: N (V) — V mod MSC, где V - номер виртуального процессора, N - номер физического процессора (в терминах модели многогранников), N = mSC + sC + C - глобальный номер ядра, где ТП = 0...(М — 1) - номер узла, 5 = 0... (S — 1) - номер процессора внутри узла,

С = 0.. .(С — 1) - номер ядра процессора. М- количество узлов в кластере, доступных для проведения вычислений, S - количество процессоров в каждом узле, C - количество ядер в каждом процессоре.

В качестве тестовой программы для распараллеива-ния рассматривается LU-разложение квадратной матрицы A порядка N, линеаризованной по строкам: for (int k = 0; k < N; k++) { for (int l = k + 1; l < N; l++) A[l * N + k] /= A[k * N + k]; for (int i = k + 1; i < N; i++) for (int j = k + 1; j < N; j++)

A[i * N + j] -= A[i * N + k] * A[k * N + j];

}

Индексы массива A в программе не являются аффинными по отношению к внешним параметрам программы и индексам циклов, обрамляющих инструкции доступа. Модель многогранников может быть применена только во время исполнения приложения, когда значение N станет известным и выражения примут требуемый аффинный вид.

Испытания проводились на двух машинах с акселераторами, где ускорение оценивалось относительно одно-поточного исполнения программы на центральном процессоре:

• CPU Intel Xeon-E5 2690, 64Gb RAM, Intel Xeon Phi 3100 (оценка ускорения при выгрузке вычислений на сопроцессор);

• CPU Intel Core i7 920, 24Gb RAM, NVIDIA GeForce GTX480 (оценка ускорения при выгрузке вычислений на видеокарту и при многопоточном исполнении на центральном процессоре).

Также были проведены испытания на трех двухпроцессорных узлах кластера IBM РГАТУ [10], оценивалось ускорение от распараллеливания на 6 параллельных процессов относительно запуска вычислений в одном процессе.

Для всех экспериментов N=213, тип элементов матрицы - float. Диаграмма ускорения вычислений после распараллеливания приведена на рисунке 2.

Рисунок 2. Ускорение вычислений после распараллеливания

Алгоритм LU-разложения показал значительное ускорение при параллельном выполнении, оправдывая накладные расходы на распараллеливание. Подход JIT-компиляции позволяет применить анализ и трансформацию методами модели многогранников к нелинейным программам с сильной параметризацией (если они сводимы к линейным во время их выполнения при подстановке значений параметров модели), тем самым расширяя границы применимости модели многогранников и улучшая переносимость автоматически распараллеливаемого кода.

Список литературы:

1. Bondhugula U. et al. Automatic transformations for communication-minimized parallelization and locality optimization in the polyhedral model //Compiler Construction. - Springer Berlin Heidelberg, 2008. - С. 132-146.

2. Feautrier P. Some efficient solutions to the affine scheduling problem. I. One-dimensional time //International journal of parallel programming. - 1992.

- Т. 21. - №. 5. - С. 313-347.

3. Feautrier P. Some efficient solutions to the affine scheduling problem. Part II. Multidimensional time //International journal of parallel programming. - 1992.

- Т. 21. - №. 6. - С. 389-420.

4. Griebl M. Automatic parallelization of loop programs for distributed memory architectures. - Univ. Passau, 2004.

5. Griebl M., Lengauer C. The loop parallelizer LooPo //Proc. Sixth Workshop on Compilers for Parallel Computers. - Konferenzen des Forschungszentrums Jülich, 1996. - Т. 21. - С. 311-320.

6. Irigoin F., Jouvelot P., Triolet R. Semantical interprocedural parallelization: An overview of the PIPS project //Proceedings of the 5th international conference on Supercomputing. - ACM, 1991. - С. 244-251.

7. Lee S. I., Johnson T. A., Eigenmann R. Cetus-an extensible compiler infrastructure for source-to-source transformation //Languages and Compilers for Parallel Computing. - Springer Berlin Heidelberg, 2004. - С. 539-553.

8. Lengauer C. Loop parallelization in the polytope model //CONCUR'93. - Springer Berlin Heidelberg, 1993. -С. 398-416.

9. URL: http://download.java.net/openjdk/jdk7/ (дата обращения: 21.10.2014).

10. URL: http://kbit.rsatu.ru/ibmcluster (дата обращения: 21.10.2014).

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