Интернет Университет Суперкомпьютерных технологий Использование OpenMP на кластере Учебный курс Параллельное программирование с OpenMP Бахтин В.А., кандидат.

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



Advertisements
Похожие презентации
Гибридная модель параллельного программирования DVM/OpenMP Бахтин В.А. ИПМ им.М.В.Келдыша РАН г. Москва, 5 февраля 2008 г.
Advertisements

В.А. Бахтин, М.С. Клинов, В.А. Крюков, Н.В. Поддерюгина, М.Н. Притула, Ю.Л. Сазанов Институт прикладной математики им. М.В. Келдыша.
МОЛОДЕЖНАЯ ШКОЛА « Суперкомпьютерные технологии в науке, промышленности и образовании» ННГУ им. Н.И. Лобачевского, Нижний Новгород, октября 2010.
Спецкурс «Параллельное программирование для высокопроизводительных вычислительных систем» Курс: «DVM-технология разработки параллельных программ для вычислительных.
Гибридная модель параллельного программирования DVM/OpenMP Бахтин В.А. ИПМ им.М.В.Келдыша РАН г. Москва, 20 марта 2008 г.
МГУ им. М.В. Ломоносова, Москва, 2011 г. Автоматизация разработки параллельных программ Бахтин Владимир Александрович Ассистент кафедры системного программированния.
Автоматизация разработки параллельных программ для современных высокопроизводительных ЭВМ В.А. Крюков Факультет ВМК МГУ, Институт прикладной математики.
МГУ им. М.В. Ломоносова, Москва, 21 октября 2011г. КОНСОРЦИУМ УНИВЕРСИТЕТОВ РОССИИ Курс: «Технология параллельного программирования OpenMP» Лабораторная.
1 Система автоматизации распараллеливания. Отображение на SMP-кластер. Автор: Картавец Евгений Олегович Научные руководители: д.ф.-м.н. Крюков Виктор Алексеевич.
Язык параллельного программирования HPF ( High Performance Fortran )
Средства мониторинга выполнения параллельных программ на кластере PARC высокопроизводительных компьютеров Удмуртского университета Исламов Г.Г., Сивков.
МГУ им. М.В. Ломоносова, Москва, 2010 г. Гибридные модели параллельного программирования MPI/OpenMP и DVM/OpenMP Бахтин Владимир Александрович Ассистент.
МГУ им. М.В. Ломоносова, Москва, 2011 г. Гибридная модель параллельного программирования MPI/OpenMP Бахтин Владимир Александрович Ассистент кафедры системного.
Интернет Университет Суперкомпьютерных технологий Конструкции для синхронизации нитей Учебный курс Параллельное программирование с OpenMP Бахтин В.А.,
Система автоматизации распараллеливания: DVM-эксперт Блюменберг Э.П. 528 Научный руководитель: профессор В.А. Крюков.
Интернет Университет Суперкомпьютерных технологий Основные понятия Учебный курс Параллельное программирование с OpenMP Бахтин В.А., кандидат физ.-мат.
Интернет Университет Суперкомпьютерных технологий Система поддержки выполнения OpenMP- программ. Переменные окружения, управляющие выполнением OpenMP-
Система автоматизации распараллеливания: DVM-эксперт Студент 528 группы Нгуен Минь Дык Научный руководитель: Профессор, д. ф.-м. н. Крюков Виктор Алексеевич.
МГУ им. М.В. Ломоносова, Москва, 2010 г. Гибридная модель параллельного программирования MPI/OpenMP Бахтин Владимир Александрович Ассистент кафедры системного.
Введение в программирование. Алфавит языка АлгоритмическийБейсикПаскаль 1) прописные и заглавные буквы русского алфавита; 2) 26 латинских строчных и 26.
Транксрипт:

Интернет Университет Суперкомпьютерных технологий Использование OpenMP на кластере Учебный курс Параллельное программирование с OpenMP Бахтин В.А., кандидат физ.-мат. наук, заведующий сектором, Институт прикладной математики им. М.В.Келдыша РАН

Москва, 2009 г. Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А. 2 из 26 Содержание Технология Intel Cluster OpenMP Гибридная модель параллельного программирования MPI/OpenMP Гибридная модель параллельного программирования DVM/OpenMP

Москва, 2009 г. 3 из 26 Технология Intel Cluster OpenMP В 2006 году в Intel® компиляторах версии 9.1 появилась поддержка Cluster OpenMP. Технология Cluster OpenMP поддерживает выполнение OpenMP программ на нескольких вычислительных узлах, объединенных сетью. Базируется на программной реализации DSM (Thread Marks software by Rice University). Для компилятора Intel® C++: icc -cluster-openmp options source-file icc -cluster-openmp-profile options source-file Для компилятора Intel® Fortran: ifort -cluster-openmp options source-file ifort -cluster-openmp-profile options source-file kmp_cluster.ini --hostlist=home,remote --process_threads=2 Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Москва, 2009 г. 4 из 26 Преимущества Intel Cluster OpenMP Упрощает распределение последовательного или OpenMP кода по узлам. Позволяет использовать одну и ту же программу для последовательных, многоядерных и кластерных систем. Требует совсем незначительного изменения кода программы, что упрощает отладку. Позволяет слегка измененной OpenMP-программе выполняться на большем числе процессоров без вложений в аппаратную составляющую SMP. Представляет собой альтернативу MPI, которая может быть быстрее освоена и применена. Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Москва, 2009 г. 5 из 26 Преимущества Intel Cluster OpenMP Переносимость и гибкость упрощает и снижает стоимость разработки приложений. Тип вычислительной системы Аппаратная составляющая расходов Программная составляющая расходов Большие SMP системы с общей памятью и OpenMP Кластерные системы с распределенной памятью и MPI Кластерные системы с распределенной памятью и Cluster OpenMP Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

001 Модель памяти в OpenMP Москва, 2009 г. 6 из 26 Нить 001 Нить 001 Нить Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

001 Модель памяти в OpenMP Москва, 2009 г. 7 из 26 Нить Нить 1 static int i = 0; … = i + 1; i = i + 1; i = 0 i = 1 … = i + 2; // ? #pragma omp flush (i) i = 1 Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Консистентность памяти в OpenMP Москва, 2009 г. 8 из 26 Корректная последовательность работы нитей с переменной: Нить0 записывает значение переменной - write(var) Нить0 выполняет операцию синхронизации – flush (var) Нить1 выполняет операцию синхронизации – flush (var) Нить1 читает значение переменной – read (var) 1: A = : flush(A) Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Директива SHARABLE Москва, 2009 г. 9 из 26 #pragma intel omp sharable ( variable [, variable …] ) – для Си и Си++ !dir$ omp sharable ( variable [, variable …] ) - для Фортрана определяют переменные, которые должны быть помещены в Distributed Virtual Shared Memory В компиляторе существуют опции, которые позволяют изменить класс переменных, не изменяя текст программы: [-no]-clomp-sharable-argexprs [-no]-clomp-sharable-commons [-no]-clomp-sharable-localsaves [-no]-clomp-sharable-modvars Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Москва, 2009 г. 10 из 26 Использование Intel Cluster OpenMP malloc (…) -> kmp_sharable_malloc (…) #include foo * fp = new foo (10); foo * fp = new kmp_sharable foo (10); std::vector * vp = new std::vector ; std::vector > * vp = new kmp_sharable std::vector >; Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Работа с SHARABLE- переменными Москва, 2009 г. 11 из 26 Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Москва, 2009 г. 12 из 26 Использование Intel Cluster OpenMP Целесообразно: если программа дает хорошее ускорение при использовании технологии OpenMP: Speedup = Time(1thread)/Time (n threads) = ~n еcли программа требует малой синхронизации данные в программе хорошо локализованы Наиболее целесообразно для задач (RMS - recognition, mining, and synthesis): Обработка больших массивов данных Рендеринг в графике Поиск Распознавание образов Выделение последовательностей в генетике Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Москва, 2009 г. 13 из 26 Использование Intel Cluster OpenMP 1. a particle-simulation code 2. a magneto-hydro-dynamics code 3. a computational fluid dynamics code 4. a structure-simulation code 5. a graph-processing code 6. a linear solver code 7. an x-ray crystallography code Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Москва, 2009 г. 14 из 26 Гибридная модель параллельного программирования MPI/OpenMP Данные Core Данные Вычисления Core … Узел 0 OpenMP Core Данные Вычисления Core … Узел N OpenMP Вычисления MPI Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Москва, 2009 г. 15 из 26 Алгоритм Якоби на языке Fortran 77 PROGRAM JAC_F77 PARAMETER (L=8, ITMAX=20) REAL A(L,L), B(L,L) PRINT *, '********** TEST_JACOBI **********' DO IT = 1, ITMAX DO J = 2, L-1 DO I = 2, L-1 A(I, J) = B(I, J) ENDDO DO J = 2, L-1 DO I = 2, L-1 B(I, J) = (A(I-1, J) + A(I, J-1) + * A(I+1, J) + A(I, J+1)) / 4 ENDDO END Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Москва, 2009 г. 16 из 26 Алгоритм Якоби на языке Fortran OpenMP PROGRAM JAC_F77 PARAMETER (L=8, ITMAX=20) REAL A(L,L), B(L,L) PRINT *, '********** TEST_JACOBI **********' !$OMP PARALLEL SHARED (A,B) PRIVATE(I,J,IT) DO IT = 1, ITMAX !$OMP DO DO J = 2, L-1 DO I = 2, L-1 A(I, J) = B(I, J) ENDDO !$OMP DO DO J = 2, L-1 DO I = 2, L-1 B(I, J) = (A(I-1, J) + A(I, J-1) + * A(I+1, J) + A(I, J+1)) / 4 ENDDO !$OMP END PARALLEL END Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

Distribution of array A [8][8]

Алгоритм Якоби в модели MPI/OpenMP PROGRAM JAC_MPI_OpenMP include 'mpif.h' integer me, nprocs PARAMETER (L=8, ITMAX=20, LC=2, LR=2) REAL A(0:L/LR+1,0:L/LC+1), B(L/LR,L/LC) integer dim(2), coords(2) logical isper(2) integer status(MPI_STATUS_SIZE,4), req(8), newcomm integer srow,lrow,nrow,scol,lcol,ncol,up,pdown,pleft,pright dim(1) = LR dim(2) = LC isper(1) =.false. isper(2) =.false. reor =.true. call MPI_Init( ierr ) call MPI_Comm_rank( mpi_comm_world, me, ierr ) call MPI_Comm_size( mpi_comm_world, nprocs, ierr) call MPI_Cart_create(mpi_comm_world,2,dim,isper,.true., newcomm, ierr) Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А. Москва, 2009 г. 18 из 26

call MPI_Cart_shift(newcomm,0,1,pup,pdown, ierr) call MPI_Cart_shift(newcomm,1,1,pleft,pright, ierr) call MPI_Comm_rank (newcomm, me, ierr) call MPI_Cart_coords(newcomm,me,2,coords, ierr) C rows of matrix I have to process srow = (coords(1) * L) / dim(1) lrow = (((coords(1) + 1) * L) / dim(1))-1 nrow = lrow - srow + 1 C colomns of matrix I have to process scol = (coords(2) * L) / dim(2) lcol = (((coords(2) + 1) * L) / dim(2))-1 ncol = lcol - scol + 1 call MPI_Type_vector(ncol,1,nrow+2,MPI_DOUBLE_PRECISION, * vectype, ierr) call MPI_Type_commit(vectype, ierr) IF (me.eq. 0) PRINT *, '***** TEST_JACOBI *******' C$OMP PARALLEL SHARED (A,B)PRIVATE(I,J,IT) DO IT = 1, ITMAX C$OMP DO DO J = 1, ncol DO I = 1, nrow A(I, J) = B(I, J) ENDDO

CCopying shadow elements of array A from Cneighbouring nodes before loop execution C$OMP MASTER call MPI_Irecv(A(1,0),nrow,MPI_DOUBLE_PRECISION, * pleft, 1235, MPI_COMM_WORLD, req(1), ierr) call MPI_Isend(A(1,ncol),nrow,MPI_DOUBLE_PRECISION, * pright, 1235, MPI_COMM_WORLD,req(2), ierr) call MPI_Irecv(A(1,ncol+1),nrow,MPI_DOUBLE_PRECISION, * pright, 1236, MPI_COMM_WORLD, req(3), ierr) call MPI_Isend(A(1,1),nrow,MPI_DOUBLE_PRECISION, * pleft, 1236, MPI_COMM_WORLD,req(4), ierr) call MPI_Irecv(A(0,1),1,vectype, * pup, 1237, MPI_COMM_WORLD, req(5), ierr) call MPI_Isend(A(nrow,1),1,vectype, * pdown, 1237, MPI_COMM_WORLD,req(6), ierr) call MPI_Irecv(A(nrow+1,1),1,vectype, * pdown, 1238, MPI_COMM_WORLD, req(7), ierr) call MPI_Isend(A(1,1),1,vectype, * pup, 1238, MPI_COMM_WORLD,req(8), ierr) call MPI_Waitall(8,req,status, ierr) C$OMP END MASTER C$OMP BARRIER

C$OMP DO DO J = 2, ncol-1 DO I = 2, nrow-1 B(I, J) = (A( I-1, J ) + A( I, J-1 ) + * A( I+1, J) + A( I, J+1 )) / 4 ENDDO C$OMP END PARALLEL call MPI_Finalize(ierr) END программисту надо знать и уметь использовать две разные модели параллелизма и разные инструментальные средства

DVM/OpenMP – гибридная модель программирования высокого уровня Данные Core Данные Вычисления Core … Узел 0 OpenMP Core Данные Вычисления Core … Узел N OpenMP DVM Вычисления Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А. Москва, 2009 г. 22 из 26

Алгоритм Якоби в модели DVM/OpenMP PROGRAM JAC_OpenMP_DVM PARAMETER (L=8, ITMAX=20) REAL A(L,L), B(L,L) CDVM$ DISTRIBUTE ( BLOCK, BLOCK) :: A CDVM$ ALIGN B(I,J) WITH A(I,J) C$OMP PARALLEL SHARED(A,B) PRIVATE(I,J,IT) DO IT = 1, ITMAX CDVM$ PARALLEL (J,I) ON A(I, J) C$OMP DO DO J = 2, L-1 DO I = 2, L-1 A(I, J) = B(I, J) ENDDO CDVM$ PARALLEL (J,I) ON B(I, J), SHADOW_RENEW (A) C$OMP DO DO J = 2, L-1 DO I = 2, L-1 B(I, J) = (A(I-1, J) + A(I, J-1) + A(I+1, J) + A(I, J+1)) / 4 ENDDO C$OMP END PARALLEL END

24 из 26 Литература 1. Cluster OpenMP. User Manual Jay P. Hoeflinger. Extending OpenMP to Clusters Rolf Rabenseifner, Bettina Krammer. OpenMP on MPPs and clusters of SMP nodes using Intel ® Compilers with Cluster OpenMP penMP.pdf penMP.pdf 4. DVM-система. Москва, 2009 г. Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

25 из 26 Спасибо за внимание! Вопросы? Москва, 2009 г. Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.

26 из 26 Бахтин В.А., кандидат физ.-мат. наук, заведующий сектором, Институт прикладной математики им. М.В.Келдыша РАН Контакты Москва, 2009 г. Параллельное программирование с OpenMP: Использование OpenMP на кластере © Бахтин В.А.