Параллельные вычисления с использованием стандартов MPI, OpenMP, OpenACC

Санкт-Петербург, весна 2018

Описание

Данный курс включает в себя введение в параллельные вычисления, в том числе обзор современных архитектур и специфичных проблем, подходов и алгоритмов.

Рассмотрены 3 различных стандарта параллельных вычислений, позволяющих параллельные вычисления на 3х различных уровнях.

1) Уровень взаимодействия между узлами суперкомпьютера,

2) Уровень взаимодействия между ядрами одного CPU внутри одного узла,

3) Уровень ускорителя внутри одного узла.

Использование стандартов OpenMP и OpenACC позволяет задействовать параллельные вычисления на CPU и GPU при минимальных модификациях кода и временных затратах.

Сопровождается примерами на С и С++. Последнее занятие включает в себя пример организации совместной работы стандартов и описание зачетной задачи.

Подробный план лекций ищите в описании занятий.

Преподаватели

Список лекций

Лекция 1. Введение в параллельные вычисления

Как работать с большими объемами данных и вычислений? Масштабируемость. Закон Амдаля. Производительность (FLOPS), пропускная способность памяти Приложения, ограниченные вычислительными возможностями и пропускной способностью памяти. Частота процессора и частота памяти. Значение кэшей. Векторизация Наборы векторных инструкций Частота процессора и TDP. Примеры многоядерных систем: Intel CPU, Cell Broadband Engine, Cavium ThunderX

Лекция 2

Roofline модель оценки производительности.

Распределенная архитектура памяти.

Важность размещения данных в памяти.

Схема современного гибридного кластера с множеством сокетов, ядер и ускорителей.

Классификация Флинна.

Общая память и распределенная память.

Ошибки, специфичные для параллельных вычислений: deadlocks, memory races.

Потоки и процессы.

Синхронное и Асинхронное исполнение.

Критические секции, мьютексы и барьеры.

Сигналы, сообщения, события для коммуникации между процессами.

Наборы утилит: cpuinfo, meminfo, lscpi. Управление задачами на сервере с помощью SLURM.

Лекция 3

MPI. Распределение данных и работы.

Сообщения MPI

  • Доступ и адресация в MPI
  • Point-to-Point коммуникация
    • Синхронная передача
    • Асинхронная передача
    • Блокирующие операции
    • Неблокирующие операции
  • Коллективная коммуникация
    • Операции редукции
    • Барьеры

Лекция 4

MPI Forum.

MPI header файлы и формат MPI функций.

Инициализация MPI.

Запуск программ MPI.

Коммуникатор MPI_COMM_WORLD.

Дескрипторы объектов MPI.

MPI rank и communicator size.

Завершение работы с MPI.

Лекция 5

MPI сообщения с basic и derived типами.

MPI Basic datatypes.

Концепция point-to-point сообщений.

Отправка: MPI_Send, MPI_Ssend.

Получение: MPI_Recv.

Требования к Point-to-Point сообщениям.

MPI_Sendrecv, MPI_Sendrecv_replace.

Неблокирующие коммуникации.

Лекция 6

Коллективная коммуникация.

Boradcasting. MPI_Bcast.

Scattering. MPI_Scatter.

Gathering. MPI_Gather.

Операции глобальной редукции. MPI_Reduce.

Редукция на каджом ноде с MPI_Allreduce.

Сканирование с MPI_Scan и MPI_Exscan.

Пример.

Лекция 7

openMP.

Программная модель и модель исполнения.

Параллельные регионы: teams и threads.

Синтаксис.

Данные: private и shared переменные.

Переменные среды.

Директивы распределения работы.

Определение индексов.

Лекция 8

Атомарные операции и критические секции.

OpenMP tasks и sections.

Nesting и Binding.

Редукция.

Измерение времени.

Примеры.

Лекция 9

OpenACC.

Обзор производительности GPU в различных приложениях.

Краткое сравнение различных ускорителей.

Основные принципы для достижения высокой производительности.

Преимущества OpenACC.

Модель исполнения: gangs, workers, vectors.

Директивы: синтаксис в C и Fortran.

Директивы paralallel, kernels, loop.

Атрибуты данных.

Лекция 10

Логи компиляции, опции компиляции и профилирование.

Регионы данных: data, enter data, exit data.

Дополнительные конструкции управления данными: cache, update, declare.

Асинхронное исполнение - async и wait.

Атомарные операции.

Глобальные переменные.

OpenACC в С++.

Применение MPI, OpenMP и OpenACC в различных задачах. Стратегии совмещения.

Обзор заключительной задачи.