1 / 12

Преобразование программ на языке C-DVM в программы для кластеров

Преобразование программ на языке C-DVM в программы для кластеров. выполнила: студентка 527 группы Коваленко Алина Игоревна научный руководитель: профессор, д. ф.-м. н. Крюков Виктор Алексеевич Москва, 2012. Возможности описания параллельного выполнения программы на языке C-DVM.

mandy
Download Presentation

Преобразование программ на языке C-DVM в программы для кластеров

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Преобразование программ на языке C-DVM в программы для кластеров выполнила: студентка 527 группы Коваленко Алина Игоревна научный руководитель: профессор, д. ф.-м. н. Крюков Виктор Алексеевич Москва, 2012

  2. Возможности описания параллельного выполнения программына языке C-DVM • распределение элементов массива между процессорами; • распределение витков цикла между процессорами; • спецификация параллельно выполняющихся секций программы (параллельных задач) и отображение их на процессоры; • организация эффективного доступа к удаленным (расположенным на других процессорах) данным; • организация эффективного выполнения редукционных операций - глобальных операций с расположенными на различных процессорах данными (например, суммирование или нахождение максимального или минимального значения).

  3. программанаязыке C-DVM компилятор C-DVM этап 1 программа на языке C с вызовами функций библиотеки Lib-DVM компилятор C + коммуникационная библиотека MPI этап 2 исполняемый модуль Компиляция программы на языке C-DVM

  4. Постановка задачи дипломной работы Создать компилятор C-DVM, который будет решать следующие задачи: • синтаксический и семантический анализ программы, генерация промежуточного представления; • преобразование прагм DVM в вызовы функций системы поддержки Lib-DVM; • генерация кода на языке C. Компилятор должен распознавать следующие конструкции: • описательные прагмы; • выполняемые прагмы. Должны быть заменены на вызовы соответствующих функций Lib-DVM; • неявные (т.е. не отмеченные явно DVM-прагмами): • создание и уничтожение распределенных массивов; • доступ к распределенным данным; • функции ввода-вывода; • инициализация и завершение параллельного выполнения.

  5. Инструментальные системы для создания компиляторов Инструментальные системы: • DMS; • LLVM; • Sage++; • ROSE. Критерии: • портируемость инструментальной системы; • доступность; • наличие поддержки; • front-end и back-end для программ на языке C.

  6. middle-end • дереворазбора исходный код • front-end ROSE • back-end ROSE целевой код • новоедереворазбора Архитектура инструментальной системы ROSE Система ROSE состоит из трёх основных частей: • front-end – лексический и синтаксический анализаторы, генерация внутреннего представления исходных кодов программы в виде AST; • middle-end – инструменты для анализа, оптимизации и трансформации дерева разбора программы; • back-end – генерация бинарных файлов или файлов на высокоуровневых целевых языках из внутреннего представления.

  7. дерево разбора • дерево разбора + информация из прагм и данные о массивах • дерево разбора + информация из прагм прагмы DVM этап 1 • анализатор прагм • анализатормассивов • преобразование неявных конструкций, замена описательных и выполняемых прагм • новое дерево разбора + информация из прагм этап 2 • добавление вызовов функций для описательных прагм этап 3 middle-end • новое дереворазбора Схема работы компилятора C-DVM

  8. Экспериментальное исследование. Текст программы на языке C-DVM Формат макросов Формат прагм #define DO(v,l,h,s) for(v=(l); v<=(h); v+=(s)) #define L 8 inti, j; DVM(DISTRIBUTE [BLOCK][BLOCK]) double A[L][L]; int main(int an, char **as) { printf(“SOR STARTED\n"); DVM(PARALLEL [i][j] ON A[i][j] ) DO(i, 0, L-1, 1) DO(j, 0, L-1, 1) { if(i==0 || j==0 || i==L-1 || j==L-1) A[i][j]=0.; else A[i][j]=1.+i+j; } return 0; } #define DO(v,l,h,s) for(v=(l); v<=(h); v+=(s)) #define L 8 inti, j; double A[L][L], B[L][L]; #pragmadvm distribute ([block][block] : A); int main(intargn, char **args) { printf(“SOR STARTED\n"); #pragmadvm parallel( [i][j] on A[i][j]) for (i = 0; i < L-1; i++) for (j = 0; j < L-1; j++) { if(i==0 || j==0 || i==L-1 || j==L-1) A[i][j]=0.; else A[i][j]=1.+i+j; }  return 0; } double A[L][L], B[L][L]; #pragmadvm distribute ([block][block] : A); DVM(DISTRIBUTE [BLOCK][BLOCK]) double A[L][L]; #pragmadvm parallel ([i][j] on A[i][j]) DVM(PARALLEL [i][j] ON A[i][j])

  9. Экспериментальное исследование. Выход компилятора C-DVM Существующий Реализованный #define L 8 static char _SOURCE_[]="jac1d.cdv"; #define MAIN_IS_HERE #include "cdvm_c.h” static char _SOURCE_[]="jac.c"; #define MAIN_IS_HERE #define L 8 #include "cdvm_c.h” #define DO(v,l,h,s) for(v=(l); v<=(h); v+=(s)) #define L 8 static char _SOURCE_[]=“sor1d.cdv"; #define MAIN_IS_HERE #include "cdvm_c.h“ long A [ 3 ] = { 0 } ; int main ( int an , char * * as ) { DVM_INIT ( 29 - 1 , an , as ) ; { {{ DVM_CREATE_TEMPLATE ( 23 , 0 , DVM_AMV , 2 , ( L , L ) ) ; DVM_MULTBLOCK ( 23 , DVM_AMV , 2 , ( 1 , 1 ) ) ; DVM_DISTRIBUTE ( 23 , DVM_AMV , 0 , 2 , ( 1 , 2 ) ) ; } DVM_MALLOC ( 23 , A , 2 , sizeof ( double ) , ( L , L ) , ( 1 , 1 ) , ( 1 , 1 ) , 3 ) ; DVM_ALIGN ( 23 , A , DVM_AMV , 2 , ( 1 , 2 ) , ( 1 , 1 ) , ( 0 , 0 ) ) ; } } dvm_void_printf ( “SOR STARTED\n" ) ; { DVM_PARALLEL ( 32 , 1 , 2 ) ; DVM_DO_ON ( 32 , 1 , 2 , ( 0 , 0 ) , ( 0 , 0 ) , ( L - 1 , L - 1 ) , ( 1 , 1 ) , A , 2 , ( 1 , 2 ) , ( 1 , 1 ) , ( 0 , 0 ) ) ; { DVM_DOPL ( 1 ) { DVM_FOR_1 ( 33 , 1 , i , 0 , DO ( i , 0 , L - 1 , 1 ) ) { DVM_FOR_1 ( 34 , 1 , j , 1 , DO ( j , 0 , L - 1 , 1 ) ) { ; { if ( i == 0 || j == 0 || i == L - 1 || j == L - 1 ) DVMda2 ( A , double , i , j ) = 0. ; else DVMda2 ( A , double , i , j ) = 1. + i + j ; } } } } } DVM_END_PARALLEL ( 32 , 1 ) ; } { DVM_RETURN ( 59 , 0 ) ; return 0 ; } } static char _SOURCE_[]=“sor1d.c"; #define MAIN_IS_HERE #define DO(v,l,h,s) for(v=(l); v<=(h); v+=(s)) #define L 8 #include "cdvm_c.h“ long A[3] = {0}; int main(intan,char **as) { DVM_INIT(28,an,as); { { { DVM_CREATE_TEMPLATE ( 23 , 0 , DVM_AMV , 2 , ( 8 , 8 )); DVM_MULTBLOCK (23 , DVM_AMV , 2 , ( 1 , 1 )); DVM_DISTRIBUTE(23,DVM_AMV,0,2, (1,2)); } DVM_MALLOC(23,A,2,sizeof(double ), (8,8), (1,1), (1,1),3); DVM_ALIGN(23,A,DVM_AMV,2, (1,2), (1,1), (0,0)); } } dvm_void_printf ( "SOR STARTED\n"); { DVM_PARALLEL(32,1,2); DVM_DO_ON ( 32 , 1 , 2 , ( 0 , 0 ) , ( 0 , 0 ) , ( ( 8 – 1 ) , ( 8 – 1 ) ) , ( 1 , 1 ) , A , 2 , ( 1 , 2 ) , ( 1 , 1 ) , ( 0 , 0 )); { DVM_DOPL(1) { DVM_FOR_1 ( 33 , 1 , i , 0 , DO ( i , 0 , ( 8 – 1 ) , 1 )) { DVM_FOR_1 (34 , 1 , j , 1 , DO ( j , 0 , ( 8 – 1 ) , 1)) { ; { if ((((i == 0) || (j == 0)) || (i == (8 - 1))) || (j == (8 - 1))) DVMda2(A,double,i,j) = 0.; else DVMda2(A,double,i,j) = ((1. + i) + j); } } } } } DVM_END_PARALLEL(32,1); } { DVM_RETURN(59,0); return 0;}} DVM_INIT(28,an,as); DVM_INIT ( 29 - 1 , an , as ) ; if ((((i == 0) || (j == 0)) || (i == (8 - 1))) || (j == (8 - 1))) DVMda2(A,double,i,j) = 0.; else DVMda2(A,double,i,j) = ((1. + i) + j); if (i== 0 || j == 0 || i == L - 1 || j == L - 1) DVMda2 ( A , double , i , j ) = 0. ; else DVMda2 ( A , double , i , j ) = 1. + i + j ;

  10. Результаты Разработан компилятор, выполняющий следующие задачи: • анализирует текст входной программы в соответствии с синтаксисом языка C-DVM; • преобразует исходный код во внутреннее представление в виде абстрактного дерева разбора; • преобразует дерево разбора в соответствии с моделью DVM; • генерирует из внутреннего представления код на языке C. Были разработаны: • алгоритмы лексического и синтаксического анализа прагм DVM; • структуры для хранения информации, полученной из прагм DVM, из описаний распределяемых и выравниваемых массивов и из заголовков распределяемых циклов; • алгоритмы семантического анализа распределения данных и вычислений.

  11. Спасибо за внимание

  12. программа на языке C-DVMc DVM-указаниями в формате макросов программа на языке C-DVMc DVM-указаниями в формате прагм существующий компилятор C-DVM новый компилятор C-DVM этап 1 программа на языке C с вызовами функций библиотеки Lib-DVM компилятор C + коммуникационная библиотека MPI этап 2 исполняемый модуль Параллельные программы для вычислительных кластеров .

More Related