URSS.ru Магазин научной книги
Обложка Лукьяненко Д.В. Практика параллельного программирования с использованием MPI Обложка Лукьяненко Д.В. Практика параллельного программирования с использованием MPI
Id: 315144
999 р.

Практика параллельного программирования с использованием MPI

URSS. 2024. 330 с. ISBN 978-5-00237-034-4.
Белая офсетная бумага

Аннотация

Целью учебного курса является знакомство читателей с практикой параллельного программирования при реализации параллельных алгоритмов решения вычислительно ёмких научных задач. Особенности программной реализации изучаемых алгоритмов демонстрируются с использованием языка программирования Python и пакета mpi4py, который для организации взаимодействия различных вычислительных процессов позволяет использовать технологию передачи сообщений MPI.... (Подробнее)


Оглавление
top
Предисловие9
Лекция 1. Введение в основы MPI14
1.1. Последовательная реализация умножения матрицы на вектор16
1.2. Параллельный алгоритм умножения матрицы на вектор18
1.3. Программная реализация параллельного алгоритма умножения матрицы на вектор19
1.3.1. Модели и технологии параллельного программирования19
1.3.2. Основы MPI — простейшая тестовая программа19
1.3.3. Считывание из файла входных параметров и их распределение по различным процессам22
1.3.4. Знакомство с базовыми функциями передачи/приёма сообщений между отдельными процессами Send и Recv24
1.3.5. Знакомство с функцией коллективного взаимодействия процессов Bcast29
1.3.6. Считывание из файла матрицы и её распределение по различным процессам31
1.3.7. Считывание из файла вектора и распределение по различным процессам34
1.3.8. Параллельное умножение матрицы на вектор35
1.3.9. Сбор частей массива с разных процессов в единый массив37
1.3.10. Оптимизация сбора информации с помощью функции Probe38
1.3.11. Знакомство с функциями коллективного взаимодействия процессов Gather(v) и Scatter(v)41
1.4. Обобщение программы на случай использования произвольного числа процессов44
1.5. Возможные пути оптимизации программной реализации50
1.5.1. Упоминание о функциях передачи сообщений Bsend и Rsend51
Лекция 2. Введение в основы MPI. Продолжение53
2.1. Последовательная реализация вычисления скалярного произведения векторов53
2.2. Параллельный алгоритм вычисления скалярного произведения векторов55
2.3. Программная реализация параллельного алгоритма вычисления скалярного произведения векторов56
2.3.1. Знакомство с функциями коллективного взаимодействия процессов Reduce и Allreduce61
2.4. Параллельный алгоритм умножения транспонированной матрицы на вектор63
2.5. Программная реализация параллельного алгоритма умножения транспонированной матрицы на вектор64
2.5.1. Знакомство с дополнительными полезными функциями коллективного взаимодействия процессов68
2.5.2. Знакомство с функцией коллективного взаимодействия процессов Reduce_scatter68
2.5.3. Знакомство с функцией коллективного взаимодействия процессов Allgatherv68
2.6. Подведение промежуточных итогов69
Лекция 3. Параллельная реализация метода сопряжённых градиентов для решения СЛАУ70
3.1. Последовательная реализация метода сопряжённых градиентов71
3.2. Параллельная реализация метода сопряжённых градиентов74
3.2.1. Подготовка на процессах данных для вычислений74
3.2.2. Вычислительная часть81
3.2.3. Обсуждение преимуществ и недостатков предложенной программной реализации85
3.3. Упрощённая параллельная реализация метода сопряжённых градиентов87
3.3.1. Обсуждение преимуществ и недостатков предложенной программной реализации91
Лекция 4. Эффективность и масштабируемость параллельных программ93
4.1. Закон Амдала93
4.1.1. Теоретический анализ реализованных на предыдущей лекции параллельных алгоритмов95
4.2. Реальное ускорение программных реализаций параллельных алгоритмов, разобранных на предыдущей лекции98
4.2.1. Способы определения времени работы параллельных программ98
4.2.2. Характеристики используемой для тестирования параллельных программ многопроцессорной системы99
4.2.3. Результаты тестовых вычислений100
4.3. Эффективность и масштабируемость параллельных программ104
4.4. Пути повышения эффективности и масштабируемости107
Лекция 5. Операции с группами процессов и коммуникаторами109
5.1. Параллельный алгоритм умножения матрицы на вектор в случае двумерного деления матрицы на блоки110
5.2. Параллельный алгоритм умножения транспонированной матрицы на вектор в случае двумерного деления матрицы на блоки113
5.3. Группы и коммуникаторы115
5.3.1. Операции с группами процессов116
5.3.2. Операции с коммуникаторами118
5.4. Продвинутая параллельная реализация метода сопряжённых градиентов в случае двумерного деления матрицы системы на блоки122
5.4.1. Подготовка на процессах данных для вычислений123
5.4.2. Вычислительная часть140
5.5. Оценка эффективности и масштабируемости параллельной программы145
5.6. Обсуждение преимуществ и недостатков предложенной программной реализации147
Лекция 6. Виртуальные топологии149
6.1. Виртуальные топологии149
6.1.1. Знакомство с базовыми функциями по работе с декартовой топологией150
6.1.2. Знакомство с функциями передачи/приёма сообщений между отдельными процессами Sendrecv и Sendrecv_replace155
6.2. Параллельная реализация метода сопряжённых градиентов с использованием виртуальной топологии типа двумерного тора159
6.2.1. Подготовка на процессах данных для вычислений161
6.2.2. Вычислительная часть168
6.3. Оценка эффективности и масштабируемости параллельной программы173
6.4. Обсуждение преимуществ и недостатков предложенной программной реализации176
Лекция 7. Параллельный вариант метода прогонки для решения СЛАУ с трехдиагональной матрицей177
7.1. Последовательная реализация метода прогонки178
7.2. Параллельный вариант метода прогонки180
7.2.1. Теоретический анализ параллельного алгоритма185
7.3. Параллельная реализация метода прогонки186
7.3.1. Подготовка на процессах данных для вычислений187
7.3.2. Вычислительная часть190
Лекция 8. Подходы к распараллеливанию алгоритмов решения задач для уравнений в частных производных. Часть 1197
8.1. Последовательный алгоритм решения задачи для УрЧП, основанный на реализации явной схемы197
8.2. Программная реализация последовательного алгоритма решения200
8.3. Параллельный алгоритм решения, основанный на реализации явной схемы203
8.4. Программная реализация параллельного алгоритма решения205
8.5. Оценка эффективности и масштабируемости параллельной программы212
8.6. Обсуждение путей усовершенствования программной реализации214
Лекция 9. Подходы к распараллеливанию алгоритмов решения задач для уравнений в частных производных. Часть 2216
9.1. Последовательный алгоритм решения задачи для УрЧП, основанный на реализации неявной схемы216
9.2. Программная реализация последовательного алгоритма решения221
9.3. Параллельный алгоритм решения, основанный на реализации неявной схемы225
9.4. Программная реализация параллельного алгоритма решения229
9.5. Оценка эффективности и масштабируемости параллельной программы239
Лекция 10. Подходы к распараллеливанию алгоритмов решения задач для уравнений в частных производных. Часть 3242
10.1. Последовательный алгоритм решения задачи для двумерного по пространству УрЧП, основанный на реализации явной схемы242
10.2. Программная реализация последовательного алгоритма решения245
10.3. Параллельный алгоритм решения, основанный на реализации явной схемы249
10.4. Программная реализация параллельного алгоритма решения253
10.5. Оценка эффективности и масштабируемости параллельной программы265
10.6. Обсуждение путей усовершенствования программной реализации267
Лекция 11. Асинхронные операции270
11.1. Тупиковые ситуации и последовательный обмен сообщениями вместо одновременного270
11.2. Знакомство с функциями передачи/приёма сообщений между отдельными процессами без блокировки Isend и Irecv275
11.3. Пересылка сообщений на фоне вычислений280
11.4. Возможности стандарта MPI-3: операции коллективного взаимодействия процессов без блокировки285
Лекция 12. Отложенные запросы на взаимодействие286
12.1. Многократная пересылка одинаково структурированных данных286
12.2. Знакомство с функциями формирования отложенных запросов на взаимодействия Send_init и Recv_init289
12.3. Усовершенствование программных реализаций решения задач для уравнений в частных производных293
12.4. Усовершенствование одной из программных реализаций метода сопряжённых градиентов297
12.5. Возможности стандарта MPI-4: коллективные отложенные запросы на взаимодействие299
Лекция 13. Технологии гибридного параллельного программирования301
13.1. Типовые конфигурации современных вычислительных систем301
13.2. Тестовый пример305
13.3. Модификация примера с использованием технологии OpenMP306
13.4. Модификация примера с использованием технологии CUDA308
13.5. Оценка эффективности и масштабируемости предложенных программных реализаций311
Лекция 14. Основные причины плохой масштабируемости параллельных программ315
14.1. Причины плохой масштабируемости параллельных программ316
14.1.1. Точный порядок приёма данных316
14.1.2. Одновременная пересылка большого количества данных319
14.1.3. Разделение этапов счёта и пересылок321
14.1.4. Плохое соответствие топологии вычислений и сетевой топологии322
14.1.5. Недостаточная пропускная способность PCI для работы с GPU323
14.1.6. Неправильные системные настройки при запуске гибридных программ324
14.2. Итоговые общие рекомендации324
Литература326

Об авторе
top
photoЛукьяненко Дмитрий Витальевич
Кандидат физико-математических наук, доцент кафедры математики отделения прикладной математики физического факультета Московского государственного университета имени М. В. Ломоносова. Окончил физический факультет МГУ в 2007 г. (специальность — «физика», специализация — «математическая физика»). В 2011 г. защитил кандидатскую диссертацию по специальности «Математическое моделирование, численные методы и комплексы программ». Оставшись работать на кафедре математики, проводит активную научную и преподавательскую деятельность. Специалист в области разработки численных методов решения обратных и некорректно поставленных задач с использованием суперкомпьютерных технологий.