В 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. Распределение на двумерную решетку процессов (строчно-столбцовое)
  • Литература