Гибридная модель параллельного программирования DVM/OpenMP Бахтин В.А. ИПМ им.М.В.Келдыша РАН г. Москва, 5 февраля 2008 г.
2 В.Бахтин Содержание Тенденции развития суперкомпьютеров и кластеров => MPI/OpenMP DVM/OpenMP – гибридная модель программирования высокого уровня Компиляция Fortran DVM/OpenMP программ Использование языка Fortran DVM/OpenMP для программирования реальных приложений
3 В.Бахтин Тенденции развития суперкомпьютеров и кластеров Темпы уменьшения латентности памяти гораздо ниже темпов ускорения процессоров + прогресс в технологии изготовления кристаллов => CMT (Chip MultiThreading) Опережающий рост потребления энергии при росте тактовой частоты + прогресс в технологии изготовления кристаллов => CMP (Chip MultiProcessing, многоядерность) И то и другое требует более глубокого распараллеливания для эффективного использования аппаратуры => OpenMP в узлах
4 В.Бахтин Достоинства использования OpenMP вместо MPI Возможность инкрементального распараллеливания Упрощение программирования и эффективность на нерегулярных вычислениях, проводимых над общими данными Ликвидация или сокращение дублирования данных в адресных пространствах MPI- процессов
5 В.Бахтин Преимущества OpenMP для многоядерных процессоров Объемы оперативной памяти и кэш памяти, приходящиеся в среднем на одно ядро, будут сокращаться – отсюда преимущество нитей OpenMP перед процессами MPI Ядра используют общую Кэш-память, что требуется учитывать при оптимизации программы
6 В.Бахтин Причины использования гибридного подхода MPI/OpenMP OpenMP рассчитан на мультипроцессоры и DSM-системы (системы с распределенной памятью, на которых смоделирована общая память) и не ориентирован на кластеры (Интеловская разработка OpenMP для кластеров не показала своей перспективности) На DSM-системах большого размера (64 и выше), например SGI Altix, эффективность OpenMP-программ невысока (распределение данных и привязка вычислений к данным)
7 В.Бахтин Гибридный подход MPI/OpenMP Данные Core Данные Вычисления Core … Узел 0 OpenMP Core Данные Вычисления Core … Узел N OpenMP MPI
8 В.Бахтин Достоинства использования OpenMP совместно с MPI Упрощение программирования в том случае, когда в программе есть два уровня параллелизма – параллелизм между подзадачами и параллелизм внутри подзадачи (многоблочные методы). Улучшение балансировки на многоблочных задачах при меньшей трудоемкости реализации еще одного уровня параллелизма
Алгоритм Якоби на языке 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
PROGRAM JAC_OpenMP PARAMETER (L=8, ITMAX=20) REAL A(L,L), B(L,L) PRINT *, '********** TEST_JACOBI **********' !$OMP PARALLEL SHARED (A,B) 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 !$OMPEND PARALLEL END
Distribution of array A [8][8]
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) C arrays A and B with block distribution 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. 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 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) 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 программисту надо знать и уметь использовать две разные модели параллелизма и разные инструментальные средства
16 В.Бахтин DVM/OpenMP – гибридная модель программирования высокого уровня Данные Core Данные Вычисления Core … Узел 0 OpenMP Core Данные Вычисления Core … Узел N OpenMP DVM
17 В.Бахтин DVM/OpenMP – гибридная модель программирования высокого уровня В модели DVM/OpenMP можно описать следующие уровни параллелизма программы: Параллелизм распределенных задач, позволяющий отобразить параллельно выполняющиеся задачи на непересекающиеся многомерные секции узлов. Параллелизм распределенных многомерных циклов, витки которых распределяются между узлами многомерной секции. Параллелизм конструкций разделения работы OpenMP (циклы и секции). Эти конструкции могут быть в произвольном порядке вложены друг в друга.
18 В.Бахтин Преимущества OpenMP/DVM Близость моделей OpenMP и DVM, что упрощает их совместное использование Получение гибких программ, способных настраиваться на неоднородность узлов SMP- кластера Возможность использования параллельной программы как последовательной, как OpenMP- программы, как DVM-программы, и как 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) PRINT *, '********** TEST_JACOBI **********' C$OMP PARALLEL SHARED(A,B) 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
20 В.Бахтин Компиляция DVM/OpenMP программ Fortran DVM/OpenMP программа Fortran DVM/OpenMP компилятор Fortran DVM компилятор Fortran + обращения к LibDVM (MPI) Fortran OpenMP + обращения к LibDVM (MPI) Штатный Fortran компилятор
21 В.Бахтин Компилятор Fortran DVM/OpenMP Генерирует обращения к библиотеке LibDVM внутри монопольных секций Корректирует OpenMP-директивы в программе (добавляются клаузы и директивы для служебных переменных) Заменяет глобальные границы массивов на границы их локальных частей (в циклах с зависимостью) Инструментирует OpenMP-директивы для функциональной отладки и отладки эффективности
22 В.Бахтин BT3D Навье-Стокс, метод переменных направлений LU 3D Навье-Стокс, метод верхней релаксации SP3D Навье-Стокс, Beam-Warning approximate factorization CONVD Уравнение переноса в диффузионном приближении для расчета солнечной конвекции DF3D6T Диффузионная нестационарная задача на гексагональной сетке Распараллеливание тестов NASA и реальных задач
DVM Тест SP-MZ (класс A) на IBM eServer pSeries 690 Regatta MPI
Тест LU-MZ (класс A) на IBM eServer pSeries 690 Regatta DVMMPI
Тест BT-MZ (класс A) на IBM eServer pSeries 690 Regatta зоны от 13 x 13 x 16 и до 58 x 58 x 16 DVMMPI
26 В.Бахтин Расчет солнечной конвекции (задача С.Д. Устюгова) Считает трехмерную динамику и уравнение переноса в диффузионном приближении для расчета солнечной конвекции. 2-х процессорный сервер Intel Xeon Dual Core 3.2 GHz (128x128x64)
27 В.Бахтин Расчет солнечной конвекции (задача С.Д. Устюгова) При запуске DVM- программы на 225 процессорах используются 4 ядра (по памяти). DVM/OpenMP- программа позволяет использовать все ресурсы на узле. 1000x1000x проц (57 узлов) проц x 2 нити (57 узлов) проц x 8 нитей (57 узлов) МВС-50K (МСЦ РАН) В задаче используется около 50 массивов размерности NX=1000, NY=1000, NZ=168; порядка 60-ти циклов, в 12-ти из которых, есть регулярная зависимость по данным.
28 В.Бахтин Автоматизация создания программ в модели DVM/OpenMP Два направления автоматизации автоматизированное (с участием пользователя) преобразование последовательных программ в параллельные программы в модели DVM/OpenMP дисциплина написания на языках последовательного программирования таких программ, которые могут быть автоматически (без участия пользователя) преобразованы в параллельные программы в модели DVM/OpenMP