Аннотация
Введение 4
1 Традиционные численные методы 6
1.1 Метод конечных разностей и метод конечных элементов 6
1.2 Альтернативный подход 7
1.3 Исторический обзор развития методов граничных элементов 8
2 НМГЭ для моделирования плоских течений Стокса 10
3 Задача о стационарном течении вязкой сжимаемой жидкости в канале
прямоугольной формы 14
3.1 Постановка задачи 14
3.2 Численный метод решения 16
4 Технологии решения СЛАУ 21
4.1 Библиотека Intel Math Kernel Library 21
4.2 Технология параллельного программирования OpenMP 22
5 Полученные показатели ускорения расчетов 26
Заключение 34
Список литературы 36
Приложение А Тестирование эффективности вычислений 37
Работа посвящена численному моделированию процессов течения вязкой жидкости в приближении ползущего течения непрямым методом граничных элементов с применением высокопроизводительных параллельных вычислений. С ростом производительности компьютерной техники, а именно, с появлением многопроцессорных систем, появляется возможность повышать сложность решаемых задач. Однако, чтобы эффективно задействовать весь потенциал современных многопроцессорных систем необходимо разделять объем вычислений на информационно независимые части и организовывать параллельное выполнение каждой на разных процессорах. При численном решении задач математической физики способ организации параллельных вычислений в первую очередь определяется характером задачи и особенностями метода решения. Так непрямой метод граничных элементов в силу своей специфики содержит достаточно большой ресурс параллелизма.
Наиболее широко используемые в настоящее время численные методы рассматривают дифференциальные уравнения непосредственно в той форме, в которой они были выведены, при помощи одного из двух подходов:
• при помощи аппроксимации дифференциальных операторов в уравнениях более простыми локализованными алгебраическими операторами, действующими в последовательностях узлов, находящихся в области;
• при помощи представления самой области элементами среды, не являющимися бесконечно малыми (т.е. конечными элементами), которые в совокупности аппроксимируют реальную систему.
В настоящее время численные методы часто используются совместно с технологией параллельного программирования.
Параллельное программирование - это парадигма программирования. Он включает в себя, с одной стороны, методы разделения компьютерной программы на отдельные части, которые могут выполняться одновременно, и, с другой стороны, методы синхронизации параллельных частей программы. В этом отличие от классического (или последовательного) программирования.
Одним из преимуществ параллельного программирования является, помимо возможности более быстрого выполнения программы (например, при использовании нескольких ядер процессора), возможность отображать типичное повседневное явление параллелизма непосредственно в программах, что приводит к более простому и понятному исходу. Недостатком является то, что поведение параллельных алгоритмов во время выполнения может быть более трудным для понимания, чем поведение эквивалентного последовательного алгоритма.
Проведен обзор средств параллельного программирования. В качестве примера использована задача о стационарном течении вязкой жидкости в плоском канале.
Выявлены основные ресурсоемкие элементы программы написанной на языке FORTRAN для современной системы программирования Intel® Visual Fortran Composer XE 2013. Повышено быстродействие программы за счет реализации параллельных вычислений. Для выявления основных ресурсоемких элементов программного кода использованы:
- непосредственный анализ времени работы всех основных элементов последовательного вычислительного алгоритма;
- модуль Intel ® VTune™ Amplifier, представляющий собой анализатор производительности приложений для поиска узких мест в алгоритме, из набора дополнительных инструментов Intel ® Parallel Studio XE 2013.
Для повышения быстродействия программы были использованы:
- Параллельная реализация модуля линейной алгебры LAPACK из библиотеки Intel Math Kernel Library, входящей в Intel® Visual Fortran Composer XE 2013, для решения СЛАУ;
- Технология OpenMP для распараллеливания итераций основных циклов формирования матрицы СЛАУ.
Вычисления произведены на суперкомпьютере СКИФ «Cyberia» Томского государственного университета. Результаты показаны на рисунке 10.
Применение параллельных вычислений в рассматриваемой задаче позволило добиться значительного ускорения проведения расчетов с использованием многоядерной архитектуры системы с общей памятью, не прибегая к принципиальному изменению программного кода.
Рассмотрены так же параллельные вычисления в языке Python, который, как известно, широко используется в научных исследованиях. Существует проблема GIL (Global Interpreter Lock), которая осложняет использование параллельных вычислений в этом языке. Отмечается, что эти ограничения можно обойти, в частности используя пакет multiprocessing. На прямом эксперименте показано, что использование этого пакета позволяет существенно увеличить скорость вычислений. Так что использование процессов и общей памяти достаточно просто позволяет обойти ограничения GIL.
1. Бураго Н. Г. Вычислительная механика / Н. Г. Бураго. - М. : Изд- во Моск. ун-та, 2012. - 271 с.
2. Высокопроизводительные вычисления на кластерах / сост.: Д. А. Беликов, И. В. Говязов, Е. А. Данилкин ; под ред. А. В. Старченко. - Томск : Изд-во Том. ун-та, 2008. - 198 с.
3. Гергель В. П. Современные языки и технологии параллельного программирования / В. П. Герегель. - М. : Изд-во Моск. ун-та, 2012. - 408 с.
4. Антонов А. С. Технологии параллельного программирования MPI и OpenMP / А. С. Антонов. - М. : Изд-во Моск. ун-та, 2012. - 344 с.
5. http: //docs.python. org/2/library/multiprocessing. html
6. https://bryceboe.com/2010/08/26/python-multiprocessing-and- keyboardinterrupt/
7. http://www.bryceboe.com/2011/01/28/the-python-multiprocessing- queue-and-large-objects/