Решение задачи Дирихле для уравнения Пуассона методом Гаусса/Зейделя на языке параллельного программирования т++

УДК 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

5 for

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

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: var@pereslavl.ru

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

e-mail: val@pereslavl.ru

Герман Анатольевич Матвеев

Ведущий инженер-исследователь ИЦМС ИПС им. А.К. Айламазяна РАН. Один из разработчиков системы OpenTS. Принимал участие в суперкомпьютерных проектах Союзного государства России и Беларуси

e-mail: gera@prime.botik.ru

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