Адаптация комплекса программ M2DGD для работы на МВС с использованием среды параллельного программирования OST Павлухин Павел Научный руководитель: Меньшов И. С.
построить параллельный алгоритм для программного комплекса M2DGD, эквивалентный работе последовательного, с целью эффективного использования всех доступных процессоров в МВС; разработать вычислительный объект в соответствии с топологией расчетных блоков для вычислительного модуля M2DGD; реализовать параллельную работу построенных вычислительных объектов в OST; установить программный продукт на МВС; провести тестовые верификационные расчеты; провести расчеты конкретных прикладных задач с оценкой эффективности предложенного подхода; Цели работы:
MPI vs. OST синхронизация вычислений полностью ложится на плечи прикл программиста; все межпроцессные связи полностью организует прикл программист; модель процессов; удаленное обращение к соседям – через рассылку сообщений: MPI_Isend(data,Numb,MPI_DOUB LE, IND,0,MPI_COMM_WORLD, &sendreq) предоставляет автоматический механизм синхронизации вычислений: self.point.time+=1 self.setXYZT() автоматическое назначение ссылок на соседей по заданной топологии; объектная модель; удаленное обращение к соседям – как локальный вызов: self.neigbour.somefun(x)
M2DGD: LU-SGS Сложность распараллеливания M2DGD: дискретная модель, в конечном счете, неявная и сводится к решению большой разреженной СЛАУ которая решается методом LU-SGS (Lower-Upper Symmetric Gauss-Seidel) - приближенной факторизацией матрицы и решению двух систем с нижней и верхней треуг. матрицей, которые решаются в 2 прохода: forward: backward:
M2DGD Последовательный расчетный цикл : do is=1,NSTEP do it=1,MAXITER call omega(dt) call slope(1) call predicval(2) call forward(dt,dtpseudo) call backward(dt,dtpseudo) call updateiter end do call updatetime lstep=lstep+1 time=time+dt end do
ПАРАЛЛЕЛИЗАЦИЯ M2DGD
Декомпозиция расчетной области: Распределение по классам black & white – шахматный порядок
Невозможность стандартного обхода для LU-SGS Обход: 1 … N Если I > J,то блок 1 Если I < J,то блок 2 I J CPU 2CPU 1
time = 1 omega: setXYZT(1) setXYZT(2)
time = 2 slope,predicval: setXYZT(2) flag == 1 setXYZT(3) ?
time = 4 forward: setXYZT(4) white setXYZT(5) black ? flag == 1 white ? flag == 1
time = 5 backward: setXYZT(5) whiteblack ? flag == 1
time = 5 updateiter,updatetime: setXYZT()
эквивалентный однопоточный обход для forward: black white
Постановка прикладной задачи коническое тело, мгновенно помещенное в сверхзвуковой поток:
Параллельный и последовательный счет 450x135, 500 steps 450x135, 5000 steps 1 CPU 16 CPUs 1 CPU 16 CPUs
Результаты счета, оценка эффективности
450x135 ячеек, 16 ядер, 5000 шагов
Что сделано: разработан алгоритм параллельного счета, учитывающий «последовательную» природу исходного алгоритма; определена постановка прикладной задачи в терминах системы OST; написана реализация этого алгоритма в системе OST на языках C/Python; на МВС(RSC4) посчитана задача о коническом теле, мгновенно помещенном в однородный сверхзвуковой поток газа(М=1.6), на ее примере исследована эффективность алгоритма, выполняющегося в среде OST и C++/MPI;
M2DGD M2DGD – последовательный комплекс программ для решения 2D нестационарных задач газовой динамики в областях сложной формы. Его основные характеристики: - применим как к структурированным, так и неструктурированным сеткам, - второй порядок точности по времени и пространству, - высокая надежность: абсолютно устойчив по отношению к выбору шага по времени. В основе M2DGD: - дискретизация по пространству методом конечного объема (finite volume method), - кусочно-линейное восполнение сеточных функций в счетных ячейках (для достижения второго порядка), - метод С. К. Годунова вычисления потоков на гранях ячеек, - явно-неяная абсолютно устойчивая схема интегрирования по времени