1 / 30

Расширение DVM-модели параллельного программирования для кластеров с гетерогенными узлами

Расширение DVM-модели параллельного программирования для кластеров с гетерогенными узлами. В.А. Бахтин , М.С. Клинов, В.А. Крюков, Н.В. Поддерюгина, М.Н. Притула, Ю.Л. Сазанов bakhtin@keldysh.ru Институт прикладной математики им. М.В. Келдыша РАН. План изложения.

lilka
Download Presentation

Расширение 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. Расширение DVM-моделипараллельного программированиядля кластеровс гетерогенными узлами В.А. Бахтин, М.С. Клинов, В.А. Крюков, Н.В. Поддерюгина, М.Н. Притула, Ю.Л. Сазанов bakhtin@keldysh.ru Институт прикладной математики им. М.В. Келдыша РАН

  2. План изложения • Тенденции развития архитектуры ЭВМ • Высокоуровневые модели программирования (HMPP, PGI_APM, OpenMP, DVM) • Цели расширения DVM-модели • Основные возможности DVMH • Эффективность выполнения DVMH-программ на GPU

  3. Гибридная вычислительная система K-100 … Node 1 Node 64

  4. Алгоритм Якоби на языке Fortran PROGRAM JACOB_SEQ PARAMETER (L=4096, ITMAX=100) 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 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 ENDDO ENDDO END

  5. Распределение массива

  6. Алгоритм Якоби в модели MPI PROGRAM JACOB_MPI include 'mpif.h' integer me, nprocs PARAMETER (L=4096, ITMAX=100, 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 integer pup,pdown,pleft,pright dim(1) = LR dim(2) = LC isper(1) = .false. isper(2) = .false. reor = .true.

  7. Алгоритм Якоби в модели MPI 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) 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

  8. Алгоритм Якоби в модели MPI 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 *******'   DO IT = 1, ITMAX DO J = 1, ncol DO I = 1, nrow A(I, J) = B(I, J) ENDDO ENDDO 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)

  9. Алгоритм Якоби в модели MPI 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) 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 ENDDO ENDDO call MPI_Finalize(ierr) END

  10. Алгоритм Якоби на языке Fortran Cuda PROGRAM JACOB_CUDA use cudafor use jac_cuda PARAMETER (L=4096, ITMAX=100) parameter (block_dim = 16) real, device, dimension(l, l) :: a, b type(dim3) :: grid, block PRINT *, '***** TEST_JACOBI *******’ grid = dim3(l / block_dim, l / block_dim, 1) block = dim3(block_dim, block_dim, 1) DO IT = 1, ITMAX call arr_copy<<<grid, block>>>(a, b, l) call arr_renew<<<grid, block>>>(a, b, l) ENDDO END

  11. Алгоритм Якоби на языке Fortran Cuda module jac_cuda contains attributes(global) subroutine arr_copy(a, b, k) real, device, dimension(k, k) :: a, b integer, value :: k integer i, j i = (blockIdx%x - 1) * blockDim%x + threadIdx%x j = (blockIdx%y - 1) * blockDim%y + threadIdx%y if (i.ne.1 .and. i.ne.k .and. j.ne.1 .and. j.ne.k) A(I, J) = B(I, J) end subroutine arr_copy attributes(global) subroutine arr_renew(a, b, k) real, device, dimension(k, k) :: a, b integer, value :: k integer i, j i = (blockIdx%x - 1) * blockDim%x + threadIdx%x j = (blockIdx%y - 1) * blockDim%y + threadIdx%y if (i.ne.1 .and. i.ne.k .and. j.ne.1 .and. j.ne.k) B(I,J) =(A( I-1,J)+A(I,J-1)+A(I+1,J)+ A(I,J+1))/4 end subroutine arr_renew end module jac_cuda

  12. Алгоритм Якоби в модели HMPP PROGRAM JACOBY_HMPP PARAMETER (L=4096, ITMAX=100) REAL A(L,L), B(L,L) PRINT *, '**********TEST_JACOBI**********‘ DO IT = 1, ITMAX !$HMPP jacoby callsite CALL JACOBY(A,B,L) ENDDO PRINT *, B END !$HMPP jacoby codelet, target = CUDA SUBROUTINE JACOBY(A,B,L) IMPLICIT NONE INTEGER, INTENT(IN) :: L REAL, INTENT(IN) :: A(L,L) REAL, INTENT(INOUT) :: B(L,L) INTEGER I,J DO J = 2, L-1 DO I = 2, L-1 A(I,J) = B(I,J) ENDDO 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 ENDDO END SUBROUTINE JACOBY

  13. Алгоритм Якоби в модели HMPP • 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 • ENDDO • !$hmpp jac endregionENDDO • !$hmpp jac delegatedstore, args[B] • !$hmpp jac release • PRINT *,BEND PROGRAM JACOBY_HMPP PARAMETER (L=4096, ITMAX=100) REAL A(L,L), B(L,L) !$hmpp jac allocate, args[A;B].size={L,L} !$hmpp jac advancedload, args[B] PRINT *, '********** TEST_JACOBI **********' DO IT = 1, ITMAX !$hmpp jac region, args[A;B].noupdate=true DO J = 2, L-1 DO I = 2, L-1 A(I, J) = B(I, J) ENDDO ENDDO

  14. Алгоритм Якоби в модели PGI_APM PROGRAM JACOBY_PGI_APM PARAMETER (L=4096, ITMAX=100) REAL A(L,L), B(L,L) PRINT *, '********** TEST_JACOBI **********' !$acc data region copyin(B), copyout(B), local(A) DO IT = 1, ITMAX !$acc region DO J = 2, L-1 DO I = 2, L-1 A(I,J) = B(I,J) ENDDO 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 ENDDO !$acc end region ENDDO !$acc end data region PRINT *, B END

  15. Принципы расширения DVM-модели Тенденции развития архитектуры ЭВМ: • появление ускорителей разных типов, эффективность которых может сильно различаться для разных программ или разных фрагментов программ • расширение возможностей встраивания в ЭВМ все большего числа ускорителей разных типов Учет этих тенденций требует от модели DVMH гибкости управления распределением вычислений и перемещением данных внутри узла

  16. Основные возможности DVMH • Определение вычислительных регионов (или просто регионов) - фрагментов программы, которые следует выполнять на том или ином ускорителе CDVM$ REGION[clause {, clause}] <region inner> CDVM$ END REGION Где <region inner>: • Параллельный DVM-цикл • Последовательная группа операторов • Контрольная секция

  17. Основные возможности DVMH • Выбор ускорителя TARGETS (target_name {, target_name}) где target_name это CUDA Количество и типы используемых каждым MPI-процессом ускорителей можно задать с помощью переменных окружения, а по умолчанию каждым процессом будут использованы все найденные поддерживаемые ускорители. • Указание возможности асинхронного исполнения региона ASYNC

  18. Основные возможности DVMH • Уточнение требуемых регионам данных и вида их использования (входные, выходные, локальные): IN(subarray_or_scalar {, subarray_or_scalar}) OUT(subarray_or_scalar {, subarray_or_scalar}) INOUT(subarray_or_scalar {, subarray_or_scalar}) LOCAL(subarray_or_scalar {, subarray_or_scalar}) INLOCAL(subarray_or_scalar{,subarray_or_scalar})

  19. Основные возможности DVMH • Управление перемещением данных между оперативной памятью ЦПУ и памятью ускорителей при выполнении на ЦПУ фрагмента программы, не включенного в какой-либо регион GET_ACTUAL[(subarray_or_scalar{,subarray_or_scalar})] делает все необходимые обновления для того, чтобы на хост-памяти были самые новые данные в указанном подмассиве или скаляре. ACTUAL[(subarray_or_scalar {, subarray_or_scalar})] объявляет тот факт, что указанный подмассив или скаляр самую новую версию имеет в хост-памяти. При этом пересекающиеся части всех других представителей указанных переменных автоматически устаревают и перед использованием будут (по необходимости) обновлены.

  20. Основные возможности DVMH • Параллельный DVM-цикл - важнейшая часть вычислительного региона. CDVM$ PARALLEL clause {, clause} <DVM-loop nest> Кроме клауз DVM-цикла могут быть также заданы: PRIVATE(array_or_scalar {, array_or_scalar}) Объявляет переменную приватной (локальной для каждого витка цикла). READONLY(array_or_scalar {, array_or_scalar}) Объявляет переменную, как константную для цикла. Изменения такой переменной запрещены. CUDA_BLOCK(X [, Y [, Z]]) Указание размера блока нитей для вычислителя CUDA.

  21. Алгоритм Якоби в модели DVMH PROGRAM JACOBY_DVMH PARAMETER (L=4096, ITMAX=100) REAL A(L,L), B(L,L) !DVM$ DISTRIBUTE ( BLOCK, BLOCK) :: A !DVM$ ALIGN B(I,J) WITH A(I,J) PRINT *, '********** TEST_JACOBI **********' DO IT = 1, ITMAX !DVM$ REGION !DVM$ PARALLEL (J,I) ON A(I, J) DO J = 2, L-1 DO I = 2, L-1 A(I, J) = B(I, J) ENDDO ENDDO !DVM$ PARALLEL (J,I) ON B(I, J), SHADOW_RENEW (A) 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 ENDDO !DVM$ END REGION ENDDO !DVM$ GET_ACTUAL(B) PRINT *,B END

  22. Основные достоинства DVMH • В качестве целевой архитектуры рассматривается кластер с гетерогенными узлами, а не отдельные узлы • Перемещение информации между памятью ЦПУ и памятью ускорителей производится, в основном, не по директивам в программе, а автоматически в соответствии со спецификациями использования данных в регионах. Это позволяет: • динамически решать, где выгоднее выполнять тот или иной регион • многократно выполнять регион для нахождения оптимального отображения вычислений на ГПУ • сравнивать результаты выполнения региона на ЦПУ и ГПУ с целью обнаружения расхождений в результатах выполнения

  23. Времена выполнения программы JACRED_DVMH на кластере K-100 (4096x4096 ITMAX=1000)

  24. Применение DVMH для приложений • На языке Fortran DVMH была реализована программа для решения задачи о течении несжимаемой жидкости или слабосжимаемого газа около прямоугольной выемки, в которой в качестве исходной математической модели используется гиперболический вариант квазигазодинамической системы • Были реализованы двумерный и трехмерный варианты программы - Каверна (496 строк в исх. программе) и Контейнер (855 строк)

  25. Ускорения CUDA- и DVMH-программыКаверна Давыдов А.А., Четверушкин Б.Н., Шильников Е.В. // Вычисл. матем. и матем. физ. 2010. Т.50. №12. С. 2275-2284

  26. Характеристики узлов МВС-Экспресс и К-100 • Вручную написанная CUDA-программазапускалась на кластере МВС-Экспресс: два 4-ядерных процессора AMD Opteron (2.6 ГГц) и два NVIDIA GeForce GTX 295 • DVMH-программа запускалась на кластере К-100: два 6-ядерных процессора Intel Xeon X5670 (2.93 ГГц) и 3 графических процессора NVIDIA Tesla C2050

  27. Ускорение программы Каверна (1600x1600) на разном числе ГПУ кластера K-100

  28. Ускорение программы Контейнер (120x120x120) на разном числе ГПУ кластера K-100

  29. Последовательная Фортран-программа Схема использования DVMH-модели FDVMH-компилятор САПФОР: анализ программы и прогноз эффективности ее параллельного выполнения Программа на PGI Fortran CUDA + Lib-DVMH (MPI+CUDA) Скорректированная исходная программа Компиляторы Fortran CUDA и C CUDA Входная программа для компилятора АРК-DVM Компилятор АРК-DVM Кластер с ГПУ FDVMH-программа

  30. Вопросы, замечания? СПАСИБО !

More Related