В 2012 году в Издательстве Московского университета в серии "Суперкомпьютерное образование" выпущена книга:
Антонов А.С. Технологии параллельного программирования MPI и OpenMP: Учеб. пособие. Предисл.: В.А.Садовничий. - М.: Издательство Московского университета, 2012.-344 с.-(Серия "Суперкомпьютерное образование"). ISBN 978-5-211-06343-3.
Данное учебное пособие предназначено для освоения практического курса параллельного программирования с использованием технологий MPI и OpenMP. В настоящее время технология MPI является основным средством программирования для кластерных систем и компьютеров с распределенной памятью, а технология OpenMP – для компьютеров с общей памятью. Курс включает в себя описание большей части функциональности стандартов MPI-2.2 и OpenMP 3.1 с примерами их применения, а также практические сведения, которые могут потребоваться при написании реальных программ с использованием этих технологий параллельного программирования.
Учебное пособие может использоваться также в качестве справочника по рассматриваемым технологиям параллельного программирования, однако некоторые процедуры и детали описания соответствующих стандартов опускаются для простоты изложения и восприятия материала. Описание ведется с использованием технологий MPI и OpenMP в программах на языках программирования Си и Фортран. Приводятся примеры небольших законченных параллельных программ, тексты которых можно скачать со страницы в сети Интернет http://parallel.ru/tech/tech_dev/MPI+OpenMP/examples/. Для проверки примеров и получения результатов использовались суперкомпьютеры СКИФ МГУ «Чебышев» и «Ломоносов». В конце разделов приводятся контрольные вопросы и задания, которые можно использовать в процессе обучения.
Для студентов, аспирантов и научных сотрудников, чья деятельность связана с параллельными вычислениями.
Оглавление
- Предисловие
-
Глава 1. Технология параллельного программирования MPI
- 1.1. Введение
- 1.2. Основные понятия
- 1.3. Общие процедуры MPI
-
1.4. Передача и прием сообщений между отдельными процессами
- 1.4.1. Операции типа точка-точка
- 1.4.2. Передача и прием сообщений с блокировкой
- 1.4.3. Передача и прием сообщений без блокировки
- 1.4.4. Отложенные запросы на взаимодействие
- 1.4.5. Тупиковые ситуации (deadlock)
-
1.5. Коллективные взаимодействия процессов
- 1.5.1. Общие положения
- 1.5.2. Барьер
- 1.5.3. Коллективные операции пересылки данных
- 1.5.4. Глобальные операции
- 1.5.5. Пользовательские глобальные операции
-
1.6. Группы и коммуникаторы
- 1.6.1. Общие положения
- 1.6.2. Операции с группами процессов
- 1.6.3. Операции с коммуникаторами
- 1.6.4. Интеркоммуникаторы
- 1.6.5. Атрибуты
-
1.7. Виртуальные топологии
- 1.7.1. Общие положения
- 1.7.2. Декартова топология
- 1.7.3. Топология графа
-
1.8. Пересылка разнотипных данных
- 1.8.1. Общие положения
- 1.8.2. Производные типы данных
- 1.8.3. Упаковка данных
-
1.9. Объект info
- 1.9.1. Общие положения
- 1.9.2. Работа с объектом info
-
1.10. Динамическое управление процессами
- 1.10.1. Общие положения
- 1.10.2.Порождение процессов
- 1.10.3. Клиент-серверная связь
- 1.10.4. Удаление связи процессов
- 1.10.5. Связь через сокеты
-
1.11. Односторонние коммуникации
- 1.11.1. Общие положения
- 1.11.2. Работа с окном
- 1.11.3. Передача данных
- 1.11.4. Синхронизация
-
1.12. Внешние интерфейсы
- 1.12.1. Обобщенные запросы
- 1.12.2. Информация из статуса
- 1.12.3. Нити
-
1.13. Параллельный ввод/вывод
- 1.13.1. Определения
- 1.13.2. Работа с файлами
- 1.13.3. Доступ к данным
-
1.14. Обработка ошибок
- 1.14.1. Общие положения
- 1.14.2. Обработчики ошибок, связанные с коммуникаторами
- 1.14.3. Обработчики ошибок, связанные с окнами
- 1.14.4. Обработчики ошибок, связанные с файлами
- 1.14.5. Дополнительные процедуры
- 1.14.6. Коды и классы ошибок
- 1.14.7. Вызов обработчиков ошибок
-
Глава 2. Технология параллельного программирования OpenMP
- 2.1. Введение
-
2.2. Основные понятия
- 2.2.1. Компиляция программы
- 2.2.2. Модель параллельной программы
- 2.2.3. Директивы и процедуры
- 2.2.4. Выполнение программы
- 2.2.5. Замер времени
-
2.3. Параллельные и последовательные области
- 2.3.1. Директива parallel
- 2.3.2. Сокращенная запись
- 2.3.3. Переменные среды и вспомогательные процедуры
- 2.3.4. Директива single
- 2.3.5. Директива master
- 2.4. Модель данных
-
2.5. Распределение работы
- 2.5.1. Низкоуровневое распараллеливание
- 2.5.2. Параллельные циклы
- 2.5.3. Параллельные секции
- 2.5.4. Директива workshare
- 2.5.5. Задачи (tasks)
-
2.6. Синхронизация
- 2.6.1. Барьер
- 2.6.2. Директива ordered
- 2.6.3. Критические секции
- 2.6.4. Директива atomic
- 2.6.5. Замки́̀
- 2.6.6. Директива flush
- 2.7. Дополнительные переменные среды и процедуры
- 2.8. Использование OpenMP
-
Глава 3. Реализация параллельных алгоритмов
- 3.1. Введение
-
3.2. Простейшая вычислительная программа
- 3.2.1. Реализация на OpenMP
- 3.2.2. Реализация на MPI
-
3.3. Параллельная реализация вычислительно сложных задач на примере решения задачи перемножения плотных матриц
- 3.3.1. Постановка задачи
- 3.3.2. Последовательная реализация
- 3.3.3. Параллельная реализация
- 3.3.4. Реализация на OpenMP
-
3.3.5. Реализация на MPI
- 3.3.5.1. Распределение на одномерную решетку процессов (строчное или столбцовое)
- 3.3.5.2. Распределение на двумерную решетку процессов (строчно-столбцовое)
-
Литература