Методика распараллеливания программ в модели DVM Институт прикладной математики им. М.В.Келдыша РАН

Презентация:



Advertisements
Похожие презентации
Модель параллелизма по данным и управлению. DVM Эта модель (1993 г.), положенная в основу языков параллельного программирования Фортран-DVM и Си- DVM,
Advertisements

Большая вычислительная задача Математическая модель (система УРЧП) в подпространстве R 3 t Дискретизация УРЧП - система линейных и нелинейных уравнений.
Fortan OpenMP/DVM - язык параллельного программирования для кластеров В.А. Бахтин, Н.А. Коновалов, В.А. Крюков, Н.В. Поддерюгина Институт прикладной математики.
Система автоматизации распараллеливания: DVM-эксперт Блюменберг Э.П. 528 Научный руководитель: профессор В.А. Крюков.
Гибридная модель параллельного программирования DVM/OpenMP Бахтин В.А. ИПМ им.М.В.Келдыша РАН г. Москва, 20 марта 2008 г.
Система автоматизации распараллеливания: DVM-эксперт Студент 528 группы Нгуен Минь Дык Научный руководитель: Профессор, д. ф.-м. н. Крюков Виктор Алексеевич.
П РЕОБРАЗОВАНИЕ ПРОГРАММ НА ЯЗЫКЕ C-DVM В ПРОГРАММЫ ДЛЯ КЛАСТЕРОВ выполнила: студентка 527 группы Коваленко Алина Игоревна научный руководитель: профессор,
1 Система автоматизации распараллеливания. Отображение на SMP-кластер. Автор: Картавец Евгений Олегович Научные руководители: д.ф.-м.н. Крюков Виктор Алексеевич.
Система автоматизации распараллеливания: отображение на мультипроцессор Выполнил: студент 528 группы Лойко Михаил Юрьевич Научный руководитель: профессор,
Стадник Е. Г. ФПМИ НГТУ Руководитель: Городничев М.А., м.н.с. ИВМ и МГ СО РАН.
OpenMP. Различие между тредами и процессами ПроцессыТреды.
Многопоточное программирование в OpenMP Киреев Сергей ИВМиМГ.
МАССИВЫ 4 Определение 4 Описание 4 Обращение к элементам массива 4 Связь массивов с указателями 4 Примеры программ.
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Томский политехнический университет.
МГУ им. М.В. Ломоносова, Москва, 21 октября 2011г. КОНСОРЦИУМ УНИВЕРСИТЕТОВ РОССИИ Курс: «Технология параллельного программирования OpenMP» Лабораторная.
Министерство образования Республики Беларусь Белорусский государственный университет Управляющие структуры языков программирования.
АЛГОРИТМЫ НА МАТРИЦАХ. МАССИВЫ В ПРОГРАММЕ ОПИСАНИЕ ОБРАЩЕНИЕ К ЭЛЕМЕНТУ МАССИВА тип имя[размер_1]…[размер_N] СИ имя[индекс_1]…[индекс_N] СИ индекс_i.
Лекция 3 по дисциплине «Программные средства математических расчетов» тема: «Операторы циклов и работа с массивами в С++» гр. 8Е31 Мамонова Татьяна Егоровна.
Отладка эффективности OpenMP- программ. Параллельное программирование с OpenMP Бахтин Владимир Александрович Ассистент кафедры системного программированния.
Транксрипт:

Методика распараллеливания программ в модели DVM Институт прикладной математики им. М.В.Келдыша РАН

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

Средства программирования C-DVM = Язык Си + специальные макросы Fortran-DVM = Язык Фортран + специальные комментарии Специальные комментарии и макросы являются высокоуровневыми спецификациями параллелизма в терминах последовательной программы Отсутствуют низкоуровневые передачи данных и синхронизации Последовательный стиль программирования Спецификации параллелизма «невидимы» для стандартных компиляторов Существует только один экземпляр программы для последовательного и параллельного счета

Компилятор C-DVM Компилятор Fortran-DVM Система поддержки параллельного выполнения (Lib-DVM) DVM-отладчик Анализатор производительности DVM-программ Предсказатель производительности DVM-программ Состав DVM-системы

Правило собственных вычислений: OWN(A[i]) - процессор, на который распределен A[i] A[i] = expr Оператор всегда выполняется на процессоре OWN(A[i]) Локализация данных: Операнды expr распределены на процессор OWN(A[i])

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

Выполнение программы Модель: одна программа - множество потоков данных На всех процессорах - одна и та же программа Проба: свой - чужой оператор по правилу собственных вычислений

Абстрактная схема распределения данных и витков параллельных циклов Объекты: P -индексное пространство массива виртуальных процессоров, определяется пользователем и задается при запуске программы A i -индексное пространство i-ого массива данных L j -индексное пространство j-ого параллельного цикла

Директивы распределения устанавливают соответствие между точками (элементами) индексных пространств: ALIGN: A i1 =>A i2 Каждой точке (элементу) A i2 ставится в соответствие подмножество точек (элементов) массива A i1 PARALLEL: L j =>A i Каждой точке (элементу) A i ставится в соответствие подмножество точек (витков цикла) L j DISTRIBUTE: A i =>P Каждой точке (виртуальному процессору) P ставится в соответствие подмножество точек (элементов) массива A i

Отображение последовательной программы Массив виртуальных процессоров Массивы Циклы Массив задач Физические процессоры PARALLEL ALIGN DISTRIBUTE MAP

Распределение данных DISTRIBUTE DVM( DISTRIBUTE f1…fk ) где fi= [ BLOCK ]- распределение равными блоками (распределенное измерение) [ ]- распределение целым измерением (локальное измерение) k- количество измерений массива P(m)- линейка виртуальных процессоров

Распределение данных DISTRIBUTE Примеры: DVM( DISTRIBUTE [ BLOCK ] ) float A[N]; DVM( DISTRIBUTE [ ] ) float A[N]; DVM( DISTRIBUTE [ BLOCK ] [ ] ) float B[N][N]; DVM( DISTRIBUTE [ ] [ BLOCK ] ) float B[N][N]; P(m1,m2) - массив виртуальных процессоров

Локализация данных ALIGN DVM( ALIGN a1…an WITH B b1…bm ) где ai - параметр i-го измерения выравниваемого массива А bj - параметр j-го измерения базового массива B n - количество измерений массива А m - количество измерений массива В ai = a[Idi] bj=[c*Idj +d] [ ] [ ] Idi, Idj - идентификаторы c, d - целочисленные константы

Локализация данных ALIGN Примеры: DVM( ALIGN [ i ] WITH B[ 2*i+1] ) float A[N]; DVM( ALIGN [ i ] [ j ] WITH C[ j ] [ i ] ) float D[N][N]; DVM( ALIGN [ i ] WITH C[ ] [ i ] ) float E[N]; DVM( ALIGN [ i ] [ ] WITH B[ i ] )float C[N][N];

Распределение витков цикла PARALLEL Макросы заголовков циклов: # define DO ( v, f, u, s ) for(v=f; v

Распределение витков цикла PARALLEL DVM( PARALLEL [ I1 ]… [ In ] ON A e1… em ) где Ij - индекс j-го заголовка параллельного цикла, n - количество заголовков цикла, m - количество измерений массива, A - идентификатор распределенного массива, ei = [a* Ik +b], a, b - целочисленные переменные

Распределение витков цикла PARALLEL Цикл не удовлетворяет требованиям массива витков цикла: Не тесно-гнездовой цикл FOR(i,N) { a=5.; FOR(j,N) {... } } Не прямоугольное индексное пространство FOR(i,N) DO(j,i,N,1) {... }

Распределение витков цикла PARALLEL Цикл не удовлетворяет требованиям массива витков цикла: Виток цикла на разных процессорах FOR(i,N) { D[2*i] =...; { D[2*i] =...; } D[2*i+1]= …; } FOR(i,N) {D[2*i+1]= …; } DVM( DISTRIBUTE [ BLOCK ] [ BLOCK ] ) float A[N+1][N+1], B[N][N]; FOR(i,N) FOR(j,N) { A[i+1][j+1] = …; B[i][j] = …; } DVM( ALIGN [ i ] [ j ] WITH A[i+1] [j+1] ) float B[N][N];

Общие (удаленные) данные Сравнение индексных выражений по распределенным измерениям левой и правой части оператора присваивания Выражение условного оператора - правая часть A[i] = (C[i] > D[i]) ? B[i] : 0.

Локализация данных DVM( DISTRIBUTE [ BLOCK ] ) float A[N]; DVM( ALIGN [ i ] WITH A[ i ] ) float B[N],C[N]; DVM( PARALLEL [ i ] ON A[ i ] ) FOR( i, N ) { A[i] = B[i] + C[i] ; }

Локализация с помощью TEMPLATE DVM( DISTRIBUTE [ BLOCK ] ; TEMPLATE [N+d1+d2] ) void *TABC; DVM( ALIGN [ i ] WITH TABC[ i ] ) float B[N]; DVM( ALIGN [ i ] WITH TABC[ i +d1] )float A[N]; DVM( ALIGN [ i ] WITH TABC[ i +d1+d2] )float C[N]; DVM( PARALLEL [ i ] ON A[ i ] ) FOR( i, N ) { A[i] = B[i-d1] + C[i+d2] ; }

Схема отображения ALIGN P1 P2P3 P4 TABC B d1 A d1+d2 C

Общие данные типа SHADOW DVM( DISTRIBUTE [ BLOCK ] ) float A[N]; DVM( ALIGN [ i ] WITH A[ i ]; SHADOW [d1:d2]) float B[N]; DVM( PARALLEL [ i ] ON A[ i ] ; SHADOW_RENEW B) DO( i,d1, N-d2-1,1 ) { A[i] = B[i-d1] + B[i+d2] ; }

Общие данные типа ACROSS DVM( DISTRIBUTE [ BLOCK ]; SHADOW [d1:d2]) float A[N]; DVM( PARALLEL [ i ] ON A[ i ] ; ACROSS A[d1:d2]) DO( i,d1, N-d2-1,1 ) { A[i] = A[i-d1] + A[i+d2] ; }

Общие данные типа REMOTE_ACCESS DVM( DISTRIBUTE [ BLOCK ] ) float A[N], C[2*N]; DVM( PARALLEL [ i ] ON A[ i ] ; REMOTE_ACCESS C[5] C[i+N] ) FOR( i, N ) { A[i] = C[5] + C[i+N] ; }

Общие данные типа REDUCTION DVM( DISTRIBUTE [ BLOCK ] ) float A[N]; DVM( PARALLEL [ i ] ON A[ i ] ; REDUCTION SUM (s) ) FOR( i, N ) { s = s + A[i] ; } DVM( DISTRIBUTE [ BLOCK ] ; TEMPLATE [N] ) void *TM; DVM( PARALLEL [ i ] ON TM[ i ] ; REDUCTION PRODUCT (sm) ) FOR( i, N ) { sm = sm * i ; }

Параллельный цикл Левая часть: распределенный массив, редукционная переменная, приватная переменная. Распределенный цикл => распределенное измерение Локальный цикл => локальное измерение

Программа JACOBI на C-DVM

Distribution of array A [8][8]

Программа SOR на C-DVM

Параллелизм по гиперплоскостям CDVM$ DISTRIBUTE A (BLOCK,BLOCK) j i t1 t2 t3

Конвейерный параллелизм CDVM$ DISTRIBUTE A (BLOCK,*) p0 p1 p2 j i t1 t2 t2t2 t3 t3t3 t3t3 t4t4 t4t4 t4t4 t5t5 t5t5 t5t5 t6t6 t6t6 t6t6 t7t7 t7t7 t7t7 t8t8 t8t8 t9t9

Оптимизация 1. Совмещение вычислений и доступа к общим данным 2. Избыточные вычисления вместо общих данных SHADOW 3. Асинхронное копирование вместо общих данных REMOTE

Спецификация обновления значений общих данных Перед циклом использования Между циклом вычислений и циклом использования Матрица цикл-массив ({use,def}) Порядок выполнения циклов (граф управления)

Совмещение вычислений и доступа к общим данным DVM(CREATE_SHADOW_GROUP grshad: A);... DVM(SHADOW_START grshad );... DVM(PARALLEL [ i ] [ j ] ON A[ i ] [ j ]; SHADOW_WAIT grshad ) DO(i,1,L-2,1) DO(j,1,L-2,1) B[i][j] = (A[i-1][j]+A[i+1][j]+A[i][j-1]+A[i][j+1])/4;

Избыточные вычисления DVM(PARALLEL [i] ON A[i]; SHADOW_COMPUTE) FOR(i,n) A[i] = i; DVM(PARALLEL [i] ON A[i] ) DO(i,1,n-2,1) C[i] = A[i-1] +A[i+1];

Асинхронное копирование секций массивов k = N/4 - 1; FOR (i, N-1) FOR (j, N-1) A[ i+k ] [ j+k ] = f( A[ 2*i ] [ 2*j ] ) ; 2N N N

DVM( DISTRIBUTE [ BLOCK ] [ BLOCK ] ) float A[2*N][2*N]; DVM( ALIGN [ i ] [ j ] WITH A[ i] [ j ] ) float B[2*N][2*N]; DVM( COPY_FLAG) void *flagS; k = N/4 - 1; DVM( PARALLEL [ i ] [ j ] ON B[2*i] [2*j] ) FOR (i, N-1) FOR (j, N-1) B[ 2*i ] [ 2*j ] = f( A[ 2*i ] [ 2*j ] ) ; DVM( COPY_START &flagS) FOR (i, N-1) FOR (j, N-1) A[ i+k ] [ j+k ] = B[ 2*i ] [ 2*j ] ; DVM( COPY_WAIT &flagS)