superPrac2 (mpi openmp, mpi cuda) (Практикум)
Описание файла
Файл "superPrac2 (mpi+openmp, mpi+cuda)" внутри архива находится в следующих папках: Практикум, 2016 Практикум (Дирихле, Пуассон), дз 2. 2-й и 3-й поток. Решение (avasite). PDF-файл из архива "Практикум", который расположен в категории "". Всё это находится в предмете "суперкомпьютерное моделирование и технологии" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
Василенко Анатолий, 621 группа (3-й поток)Исходный код: [https://github.com/phonexicum/DHP-PE-RA-FDM]2 ветви:1. master – mpi+openmp – 2-е задание суперпрактикума2. mpi-cuda – 3-е задание практикумаНомер варианта: (2-й в списке группы) 2 mod 18 + 18* (2 mod 2) = 2Первый набор функций, равномерная сетка, максимум норма.Оглавление:1.Сборка проекта .............................................................................................................................................. 12.Математическая постановка задания .......................................................................................................... 23.Инфограф .......................................................................................................................................................
34.Распределение задач между процессами .................................................................................................... 55.Основные особенности при использовании технологий параллелизации .............................................. 66.5.1.Использование MPI ............................................................................................................................... 65.2.Распределение задач между ядрами (OpenMP) ..................................................................................
65.3.Использование технологии CUDA....................................................................................................... 6Результаты тестирования на суперкомпьютерах .......................................................................................
86.1.Численные результаты .......................................................................................................................... 86.2.Выводы из численных результатов .................................................................................................... 107.Точное решение диф. уравнения ............................................................................................................... 138.Графическое изображение функции, погрешности вычислений ...........................................................
138.1. Графическое изображение точного аналитического решения и вычисленного решениядифференциального уравнения ..................................................................................................................... 139.8.2.Графическое изображение абсолютной погрешности ..................................................................... 148.3.Графическое изображение относительной погрешности ................................................................ 148.4.Графическое изображение скорости сходимости. ............................................................................
15Профилирование и анализ работы с графическим ускорителем ............................................................ 171. Сборка проектаЕсть Makefile,lmount или jmount – подмонтируют в папку mount файловую систему нужного суперкомпьютера.make upload – скопирует все нужные файлы (все .cpp, .h, .cu) в подмонтированную файловую систему.На суперкомпьютере тем же make-файлом можно скомпилировать программуmake lcompile или make jcompile или make jcompile-ompВ коде есть некоторое количество комментариев, но ещё там все имена – user-friendly.Немного об особенностях используемых технологий (особенно cuda) можно прочитать ниже в параграфе«Основные особенности при использовании технологий параллелизации».12.
Математическая постановка заданияВсе необходимые математические формулы приведены в постановке задачи, выданной студентам.Можно выписать основные математические формулы с учётом моего варианта задания:23. ИнфографКартинка ниже наглядно показывает зависимости между данными с учётом их распределения междупроцессами, при вычислении k-й итерации алгоритма.1. Красным выделены начальные состояния и проверка критерия останова2. Чёрным выделены функции, используемые не только на своём текущем шаге, но и используемыедля следующей итерации3.
Зелёным цветом пронумерован некоторый порядок вычисления операций4. При вычислении скалярных произведений и критерия останова необходимо агрегировать данныесо всех процессов.5. После вычисления коэффициентов \tao и \alpha необходимо их разослать между всеми процессами6. При вычислении delta функций, необходимо пересылать данные между соседними процессами,для вычисления пятиточечной аппроксимации3Картинка ниже показывает граф вычисления 1-й итерации алгоритма:Нетрудно видеть, что 1-я итерация может быть легко сведена к k-й итерации, если исключить вычисление4, 5, 6 операций, а в качестве \alpha взять “1”.Основные операции которые необходимо уметь вычислять:1.
Вычислить скалярное произведение.2. Вычислить 5-ти точечную аппроксимацию.3. Разослать коэффициент между всеми процессами.4. Вычислить значение некоторой функции в точке, при этом вычисление в данной точке основанона данных, уже имеющихся у процесса.5. Проверить критерий останова.44. Распределение задач между процессамиОбласть рассчётов разбивается на прямоугольники. Каждому прямоугольнику сопоставляется процесс,который будет его рассчитывать. И в случае необходимости запрашивать и предоставлять соседямданные (а также возможно агрегирующему процессу)Разделение происходит следующим образом:1. Выбирается, разбиение по количеству процессов по вертикали и горизонтали (например, есливсего дано 512 процессов, то по горизонтали можно выделить 16, а по вертикали – 32 процесса)(соотношение между процессами не должно превышать 2:1, чтобы результирующая область,сопоставленная с каждым из процессов, имела соотношение не более 2:1)2.
вычисляется сколько клеток приходится на заданное количество процессов, в случае если нацелоне делится, то остаток распределяется равномерно (по 1-му элементу на каждого) междупоследними процессами (это возможно т.к. остаток всегда меньше делителя)Картинка ниже наглядно показывает пример при распределении 1000 столбцов между соответствующими32 процессами:Аналогичное разбиение применяется и по вертикали.Данная картинка сделана для наглядности и для частного случая, в программе – разбиение происходитполностью автоматически в зависимости от заданного числа процессов по вертикали и горизонтали, атакже в зависимости от размера сетки.55. Основные особенности при использовании технологий параллелизации5.1.Использование MPIВ момент инициализации вычислений, все участвующие процессы объединяются в свой отдельныйкоммуникатор, в рамках которого происходят операции send/recv и broadcast (MPI_Reduce) операции.Соседние процессы многократно пересылают друг другу массивы данных (значения граничныхэлементов области).
Для это используются асинхронные send/recv.Для подсчёта нормы (максимального элемента среди множества других элементов), изначально процессвычисляет значения максимального элемента для своей области, после чего используется MPI_Reduce.Аналогично для подсчёта общей суммы в составе скалярного произведения, также используетсяMPI_Reduce.5.2.Распределение задач между ядрами (OpenMP)В рамках вычислений часто необходимо производить независимые операции для каждого узла сетки.Возможность распараллеливания между нитями присутствует в следующих операциях:1.
Вычисление скалярного произведения (aggregate sum)2. Вычисление 5-ти точечной аппроксимацииa. вычисление новой функции дельта, на основе функции данной ранее во внутренних точках,что позволяет вычислять значение каждой ячейки независимо)b. распределённые между нитями различные независимые участки кода (подготовка данныхк отправке посредством MPI другим процессам, и обработка принятых данных)3. Вычисление критерия останова (нахождение нормы (в моём случае – нахождение максимума измножества чисел))4.
Вычисление функций r, g, p – т.к. каждый раз вычисление каждой ячейки – это независимаяоперация.Основные используемые возможности openmp: распараллеливание циклов (#pragma omp for) и разбиениенезависимых вычислительных задач на секции между несколькими нитями.Также используется reduce для агрегации результата между нитями, однако на BlueGene работает reduceдля сложения, и не работает для находения max (по-видимому не поддерживается компилятором intel –«mpixlcxx_r»), поэтому для вычисления глобального максимума пришлось задействовать критическуюсекцию.Согласно заданию – каждый mpi процесс запускался отдельно на 4-х ядреном процессоре и разбивал себяна 3 openmp нити.5.3.Использование технологии CUDAНа Ломоносове (с видеокартой Tesla X2070) поддерживаются следующие технологии: MemoryMapping иUAC.
(полный перечень ТТХ можно посмотреть в README git-репозитория).Все массивы данных, используемые для вычислений изначально создаются в памяти графической карты,после чего все вычисления над ними производятся лишь через вычислительные ядра.Основные типы вычислительных ядер:1.