УДК 519.682.3
В. А. Роганов, В. И. Осипов, Г. А. Матвеев
Решение задачи Дирихле для уравнения Пуассона методом Гаусса-Зейделя на языке параллельного программирования ТН—h
Аннотация. В статье описывается реализация решения задачи Дирихле для уравнения Пуассона методом Гаусса-Зейделя на языке параллельного программирования T+—К
Ключевые слова и фразы: уравнения в частных производных, математическая физика, T+—+, OpenTS, MPI, параллельные вычисления, задача Пуассона, уравнение Пуассона, метод Гаусса-Зейделя.
Введение
Задача Дирихле для уравнения Пуассона является одной из классических задач математической физики. Для решения уравнений с частными производными как правило используются сеточные методы, Нередко с помощью компьютера в области определения строится сетка, и составляется разностное уравнение, в котором искомыми неизвестными являются значения функции в узлах сетки. Решение разностного уравнение также можно искать по-разному. На практике широко применяются итерационные методы. Вычислительная схема в этом случае описывает, как следующее состояние сетки зависит от предыдущего. В результате счета на компьютере получается приближенное решение уравнений с частными производными.
Бывают сложные модели, в которых строятся сетки с большим количеством узлов: десятки миллионов и даже больше. Актуальной задачей для таких моделей является распараллеливание вычислений с целью сокращения времени счета. При распараллеливании моделей с расчетными сетками обычно осуществляется декомпозиция
Работа выполнена в рамках проекта "Исследование и разработка методов решения ряда прикладных задач, использующих адаптивные алгоритмы" по программе фундаментальных исследований РАН I.5 на 2016 год "Проблемы создания высокопроизводительных распределенных и облачных систем и технологий. Интеллектуальные информационные технологии и системы". © В. А. Роглнов, В. И. Осипов, Г. А. Матвеев, 2016 © Институт программных систем имени А. К. Айламазяна РАН, 2016 © Программные системы: теория и приложения, 2016
расчетной области, то есть расчетная сетка делится на подобласти, которые распределяются между вычислительными узлами высокопроизводительных вычислительных комплексов. В процессе счета узлы комплекса обмениваются граничными значениями областей для сохранения корректности модели. Примеры с решением этой же задачи указанными сеточными методами описаны в [1-4].
OpenTS — одна из систем для параллельного программирования [5-9]. В ней используется язык программирования T++, который является синтаксическим расширением языка программирования C++. Язык ТН—Ъ отличается от СН—h наличием нескольких дополнительных ключевых слов, которые вставляются в описание некоторых функций или переменных. Для распараллеливания OpenTS использует библиотеку для параллельных вычислений MPI, но вызывать функции MPI внутри программы на T++ программисту при этом нет необходимости.
В настоящей статье описывается гибридная параллельная реализация задачи Дирихле для уравнения Пуассона на языке ТН—Ь, в которой функциональная модель вычислений OpenTS сочетается с традиционным подходом с обменом сообщениями. Это дает возможность построения адаптивных алгоритмов путем сочетания динамического (T++) и статического распараллеливания уже существующих MPI-программ. В качестве основы для реализации используется алгоритм распараллеливания, описанный в [10].
1. Постановка задачи
Дано уравнение Дм = ](х,у), где Д — оператор Лапласа, функция ] определена на квадрате В = [х,у | 0 > х > 1,0 > у > 1}, дИ — граница квадрата И, и(х, у) = д(х, у) при х,у € дБ, функции f и д заданы.
Требуется найти функцию и(х, у).
2. Решение. Последовательная версия
Разделим каждую сторону квадрата О на N +1 равных частей и проведем прямые параллельно сторонам квадрата. Получим прямоугольную сетку с шагом Н = . Пусть — значение функции и(х,у) на узле сетки с индексами г,] на итерации с номером к; г,]
изменяются от 0 до N +1. Согласно вычислительной схеме для метода Гаусса-Зейделя имеем:
и% = 0.25(ик-^ + и1;— + - и^ - к2).
Реализация метода на С++ при этом может выглядеть следующим образом [10] (приведен только основной цикл):
- С++
1 ао
2 {
3 max = 0;
4 for (int i=1;i<N+1; i++)
5 for (int j=1;j<N+1; j++)
6 {
7 double u0 = u[i][j];
u[i][j] = 0.25 * (u[i -1][j] + u[i + 1][j]
+ u[i][j -1] + u[i][j + 1] -h * h * f[i -1][j -1]); double d = fabs(u[i][j] -u0);
11 if (d > max)
12 max = d;
13 }
14 } while (max > eps); // eps---заданная точность .
3. Параллельные версии на MPI и T+—+
В параллельной реализации распараллеливание цикла производится с индексом i следующим образом. Пусть rank - номер вычислительного узла, 0 ^ rank < size, где size - количество вычислительных узлов. Распределим вычисление между узлами так, что на узле с номером rank переменная i изменялась от im[n до imax — 1, где
(N + 2) * (rank)/size, rank > 0,
1, rank = 0,
(N + 2) * (rank + 1)/size, rank < size — 1,
чN + 1, rank = size — 1.
Для сохранения целостности вычислений смежные вычислительные узлы обмениваются граничными значениями функции и в конце каждой итерации внешнего оператора цикла.
Обозначим через U^ значения Ui,j на вычислительном узле с номером г. Обмен граничными значениями функции и между узлами производится по формулам
Щ = , г = 0,...,size - 2, j = 0,...,N + 1;
fmaxj ¿minj' ' ' ' ' ' '
Щ = Ш-1 , r = 1,..., size - 1, j = 0,...,N +1.
'min -1j «max j1 11 1 J 11
В конце каждой итерации внешнего оператора цикла на каждом из узлов вычисляется невязка, потом находится ее максимальное значение. Если значение максимальной невязки меньше заданной точности вычисления eps, вычисления заканчиваются и значения функции и собираются на основном узле вычислительного комплекса.
Разница в реализациях задачи на T++ и MPI C++ состоит в следующем:
(1) программа на T++ использует лишь небольшое количество функций библиотеки MPI (MPI_Send, MPI_Receive и MPI_Allreduce);
(2) программа на T++ использует свой механизм распараллеливания задач, реализованный в ядре OpenTS;
(3) инициализация переменных в программе на T++ происходит так же, как и в последовательной версии, функция инициализации переменных вызывается на каждом вычислительном узле;
(4) после вычисления результаты собираются на основном вычислительном узле по-разному: программа на MPI C++ использует для сборки результатов функцию MPI_Gather, в то время как программа на T++ передает результаты с других узлов на основной узел через параметры T-функции;
(5) функции MPI вызываются в T++ немного по-другому: например, вызов в программе MPI
MPI_Send(u, n, MPI_DOUBLE, ...) будет выглядеть в программе на Т+—+ так:
MPI_Send(u, n*sizeof(double), MPI_BYTE) , ...). Это связано с некоторыми ограничениями используемого программного адаптера DMPI.
4. Результаты испытаний
Выполнялись сравнительные испытания параллельных реализаций решения задачи Дирихле для уравнения Пуассона методом Гаусса-Зейделя на Т+—+ и MPI C++. Испытания проводились на вычислительной системе, состоящей из 8-ми узлов с операционной системой Linux. Для испытаний использовалась расчетная сетка размером 1200 х 1200
s 5
X
Ф
а 4
о
ж
v э > 3
1
2
3
4
5
6
7
MPI C++ -T++
8
Количество узлов вычислительной системы
Рис. 1. Результаты испытаний параллельных реализаций решения задачи Дирихле
узлов. В процессе испытаний задача запускалась на разном количестве вычислительных узлов (от 1 до 8). Измерялось время работы программы. Результаты испытаний представлены на рис. 1. По горизонтальной оси отмечено количество вычиелительных узлов, по вертикальной — ускорение. Верхний график — это ускорение MPI-программы, нижний график — ускорение программы на Т+—Ъ
Время работы последовательной версии 43.8 сек. Время работы параллельных версий программы представлены в таблице 1. Проводилось также сравнение результатов вычисления параллельной и последовательной версии. Значения соответствующей невязки не превышают 0.002 для заданной точности eps = 0.0001.
Заключение
Из представленного графика видно, что программа на Т+—+ работает несколько медленнее программы MPI. Это объясняется тем, что в программе на Т+—+ результат счета, довольно объемная информация, в конце счета передается через параметры функции на основной узел, на что тратится больше времени по сравнению с программой на MPI, которая использует для этого функцию MPI_Gather.
Этот результат закономерен, так как MPI программа использует широкий набор оптимизированных операций, тогда как программа на Т+—Ъ использует ограниченный набор функций MPI.
Таблица 1. Время работы параллельных версий программы
Количество узлов 12345678
Времяработы программы 43.8 23.1 15.9 12.0 11.1 8.8 8.4 6.4 на C + + MPI в сек.
Времяработыпрограммы 45.9 25 17.8 13.3 12.8 10.7 10.6 10.2
на T+—+ в сек.
Ценность полученных результатов состоит в том, что опробованы программные приемы, позволившие эффективно совместить логику Т-системы и MPI. Первая хорошо распределяет и асинхронно работает с данными, второй — хорош для сложившихся конфигураций.
Существует много программ, написанных на MPI. Полученные результаты подтверждают, что можно использовать Т-систему для создания адаптивных вычислительных конфигураций на базе готовых MPI-кодов.
Список литературы
[1] R. J. Gonsalves. Partial Differential Equations in Physics, Computational Physics PHY 410-505, URL: http://www.physics.buffalo.edu/phy410-505/topic6/index.htmlt100
[2] V. P. Gergel. Introduction to Parallel Programming, CS338, section 12, University of Nizhni Novgorod Faculty of Computational Mathematics & Cybernetics, URL: http://www.hpcc.unn.ru/mskurs/ENG/DOC/pp12. pdf t 100
[3] C.W. Oosterlee, H. Bijl, H. X. Lin, S.W. de Leeuw, J. B. Perot, C. Vuik, P. Wesseling. Lecture Notes for course (ыЦЦбТи) "Computational Science and Engineering", URL: http://ta.twi.tudelft.nl/mf/users/oosterle/ oosterlee/boek.pdft100
[4] Th. Guilleta, R. Teyssiera. A Simple Multigrid Scheme for Solving the Poisson Equation with Arbitrary Domain Boundaries, arXiv: 1104.1703v [physics.comp-ph]. t 100
[5] С. М. Абрамов, В. А. Васенин, Е. Е. Мамчиц, В. А. Роганов, А. Ф. Слепухин. «Динамическое распараллеливание программ на базе параллельной редукции графов. Архитектура программного обеспечения новой версии T-системы», Научная сессия МИФИ-2001, Сборник научных трудов. Т. 2 (Москва, 22-26 января 2001 г.), с. 234.|100
[6] С. М. Абрамов, А. А. Кузнецов, В. А. Роганов. «Кроссплатформенная версия T-системы с открытой архитектурой», Вычислительные методы и программирование, 8:1(2) (2007), с. 175-180, URL: http://num-meth.srcc.msu.ru/zhurnal/tom_2007/v8r203.htmlt 100
[7] Система параллельного программирования OpenTS, URL: http: //www.opents.net/index.php/ru/ t 100
[8] С. М. Абрамов, И. М. Загоровский, М. Р. Коваленко, Г. А. Матвеев, В. А. Роганов. «Миграция от MPI к платформе OpenTS: эксперимент с приложениями PovRay и ALCMD», Международная конференция "Программные системы: теория и приложения". Т. 1 (Переславль-Залесский, октябрь 2006), Наука. Физматлит, М., с. 265-275. t100
[9] A. Moskovsky, V. Roganov, S. Abramov, A. Kuznetsov. "Variable Reassignment in the T++ Parallel Programming Language", Parallel Computing Technologies, Proceedings, 9th International Conference, PaCT 2007 (Pereslavl-Zalessky, Russia, September 2007), Lecture Notes in Computer Science, vol. 4671, ed. V. Malyshkin, Springer, Berlin etc., 2007, pp. 579-588. t 100
[10] М. Э. Абрамян. Параллельные методы решения краевых задач, основанные на технологиях OpenMP и MPI, 2015, URL: http: //edu.mmcs.sfedu.ru/mod/resource/view.php?id=2165 t 100,101
Рекомендовал к публикации д.ф.-м.н. С. В. Знаменский
Пример ссылки на эту публикацию:
В. А. Роганов, В. И. Осипов, Г. А. Матвеев. «Решение задачи Дирихле для уравнения Пуассона методом Гаусса-Зейделя на языке параллельного программирования ТН—Ъ», Программные системы: теория и приложения, 2016, 7:3(30), с. 99-107.
URL: http://psta.psiras.ru/read/psta2016_3_99-107.pdf
Об авторах:
Владимир Александрович Роганов
Научный сотрудник ИПС им. А.К. Айламазяна РАН. Разработчик современных версий T-системы, ведущий разработчик системы OpenTS. Принимал активное участие в суперкомпьютерных проектах Союзного государства России и Беларуси, в том числе в проектах «СКИФ» и «СКИФ-ГРИД» e-mail: [email protected]
Валерий Иванович Осипов К.ф.-м.н., научный сотрудник ИПС им. А.К. Айламазяна РАН. Один из разработчиков системы OpenTS. Принимал участие в суперкомпьютерных проектах Союзного государства России и Беларуси
e-mail: [email protected]
Герман Анатольевич Матвеев
Ведущий инженер-исследователь ИЦМС ИПС им. А.К. Айламазяна РАН. Один из разработчиков системы OpenTS. Принимал участие в суперкомпьютерных проектах Союзного государства России и Беларуси
e-mail: [email protected]
Vladimir Roganov, Valerii Osipov, German Matveev. Solving the 2D Poisson PDE by Gauss-Seidel method with parallel programming system OpenTS.
Abstract. The article describes Solving the 2D Poisson PDE by Gauss-Seidel method with parallel programming system OpenTS. (In Russian).
Key words and phrases: dynamic parallelization, T-system with an open architecture, OpenTS, T++ programming language, partial differential equations, pde, Poisson, Dirichlet, Gauss, Seidel.
© V. A. Roganov, V. I. Osipov, G. A. Matveev, 2016 © Ailamazyan Program System Institute of RAS, 2016 © Program systems: Theory and Applications, 2016
References
[1] R. J. Gonsalves. Partial Differential Equations in Physics, Computational Physics PHY 410-505, URL: http://www.physics.buffalo.edu/phy410-505/topic6/index.html
[2] V. P. Gergel. Introduction to Parallel Programming, CS338, section 12, University of Nizhni Novgorod Faculty of Computational Mathematics & Cybernetics, URL: http://www.hpcc.unn.ru/mskurs/ENG/DOC/pp12.pdf
[3] C. W. Oosterlee, H. Bijl, H. X. Lin, S. W. de Leeuw, J. B. Perot, C. Vuik, P. Wesseling. Lecture Notes for course (wi,41Jr5TU) "Computational Science and Engineering", URL: http://ta.twi.tudelft.nl/mf/users/oosterle/oosterlee/boek.pdf
[4] Th. Guilleta, R. Teyssiera. A Simple Multigrid Scheme for Solving the Poisson Equation with Arbitrary Domain Boundaries, arXiv: 1104.1703v [physics.comp-ph].
[5] S. M. Abramov, V. A. Vasenin, Ye. Ye. Mamchits, V. A. Roganov, A. F. Slepukhin. "Dinamicheskoye rasparallelivaniye programm na baze parallel'noy reduktsii grafov. Arkhitektura programmnogo obespecheniya novoy versii T-sistemy", Nauchnaya sessiya MIFI-2001, Sbornik nauchnykh trudov. V. 2 (Moskva, 22—26 yanvarya 2001 g.), pp. 234 (in Russian).
[6] S. M. Abramov, A. A. Kuznetsov, V. A. Roganov. "Krossplatformennaya versiya T-sistemy s otkrytoy arkhitekturoy", Vychislitel'nyye metody i programmirovaniye, 8:1(2) (2007), pp. 175—180 (in Russian), URL: http://num-meth.srcc.msu.ru/zhurnal/tom_2007/v8r203.html
[7] The OpenTS parallel programming system, URL: http://www.opents.net/index. php/en/
[8] S. M. Abramov, I. M. Zagorovskiy, M. R. Kovalenko, G. A. Matveyev, V. A. Roganov. "Migratsiya ot MPI k platforme OpenTS: eksperiment s prilozheniyami PovRay i ALCMD", Mezhdunarodnaya konferentsiya "Programmnyye sistemy: teoriya i prilozheniya". V. 1 (Pereslavl'-Zalesskiy, oktyabr' 2006), Nauka. Fizmatlit, M., pp. 265—275 (in Russian).
[9] A. Moskovsky, V. Roganov, S. Abramov, A. Kuznetsov. "Variable Reassignment in the TH—H Parallel Programming Language", Parallel Computing Technologies, Proceedings, 9th International Conference, PaCT 2007 (Pereslavl-Zalessky, Russia, September 2007), Lecture Notes in Computer Science, vol. 4671, ed. V. Malyshkin, Springer, Berlin etc., 2007, pp. 579-588.
[10] M. E. Abramyan. Parallel'nyye metody resheniya krayevykh zadach, osnovannyye na tekhnologiyakh OpenMP i MPI, 2015 (in Russian), URL: http://edu.mmcs.sfedu.ru/mod/resource/view.php?id=2165
Sample citation of this publication:
Vladimir Roganov, Valerii Osipov, German Matveev. "Solving the 2D Poisson PDE by Gauss-Seidel method with parallel programming system OpenTS", Program systems: theory and applications, 2016, 7:3(30), pp. 99-107. (In Russian). URL: http://psta.psiras.ru/read/psta2016_3_99-107.pdf