Учебные курсы программ повышения квалификации

Цель программы: дать представление о современном состоянии в области высокопроизводительных вычислений, осветить основные вопросы разработки параллельных программ, возникающие проблемы и подходы к их решению; рассмотреть разделы, актуальные для преподавателей и научных работников, ведущих занятия и исследовательскую работу в естественнонаучных областях.

Задачи программы:

  • дать представление об основных подходах к повышению производительности в современных вычислительных системах;
  • рассмотреть средства поддержки параллелизма в современных операционных системах;
  • рассмотреть вопросы оптимизации программ по скорости решения задачи; научить эффективно использовать особенности современных архитектур;
  • изучить основы параллельного программирования для многоядерных и кластерных систем, рассмотреть инструменты, поддерживающие процесс создания параллельных программ.

Специалист, прошедший обучение по программе, приобретет базовые знания по указанным разделам, а также практические навыки использования этих знаний при разработке параллельных программ.

Продолжительность программы: 72 академических часа (при необходимости объем может быть уменьшен за счет конкретных модулей).

Категория слушателей: профессорско-преподавательский состав вузов и научно-исследовательских институтов.

Документ об окончании программы: государственное удостоверение о краткосрочном повышении квалификации.

Содержание программы

Модуль 1. Параллелизм как основа архитектуры современных вычислительных систем

Объем: от 2 до 8 часов. Практика не предусмотрена.

Рассматриваются уровни параллелизма в современной вычислительных системах (от векторных команд в процессоре, до Грид и облачных вычислений). При наличии времени приводятся конкретные примеры процессоров/ускорителей/систем с точки зрения реализации различных аппаратных решений.

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

План модуля:

1.1. Классификация архитектур ВС.
1.2. Принципы конвейеризации.
1.3. Статическая конвейеризация.
1.4. Динамическое планирование.
1.5. Векторная обработка.
1.6. Модели многопоточных процессоров.
1.7. Многопроцессорные системы с общей шиной памяти.
1.8. Массивно-параллельные системы, кластерные системы.
1.9. Примеры дизайна многопроцессорных систем.
1.10. Взгляд в будущее.

Модуль 2. Операционные системы: аспекты параллелизма

Объем: от 6 до 16 часов. Соотношение лекции/практика – от 1:1 до 2:1.

Рассматриваются средства, которые современные операционные системы [7, 8] предоставляют для разработки параллельных программ: процессы, потоки, планирование ЦП, задача и механизмы синхронизации.

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

При наличии у слушателей достаточной квалификации модуль может быть пройден в режиме повторения.

План модуля:

2.1. Процессы, потоки, ресурсы.
Лабораторная работа: Создание командного интерпретатора.
2.2. Планирование ЦП.
2.3. Синхронизация. Тупики.
Лабораторная работа: Решение задачи «Читатели-писатели».
Лабораторная работа: Решение задачи «Производитель-потребитель».

Модуль 3. Оптимизация программного обеспечения

Объем: от 4 до 12 часов. Соотношение лекции/практика – от 1:1 до 2:1.

Рассматриваются виды оптимизации программного обеспечения: алгоритмическая, программная, компиляторная и др. с использованием только языка высокого уровня (ориентировано на C\C++ и Fortran). На практических примерах показывается, как учитывать особенности архитектуры для существенного повышения эффективности разрабатываемого кода, демонстрируется, что эффект от правильного применения техник оптимизации может достигать десятков раз.

План модуля:

3.1. Введение в оптимизацию программ. Роль оптимизации. Критерии оптимизации. Необходимость оптимизации. Виды оптимизации.
3.2. Анализ эффективности алгоритмов и алгоритмическая оптимизация.
Лабораторная работа: Вычисление чисел Фибоначчи.
3.3. Оптимизация структур данных.
3.4. Программная оптимизация. Основные приемы и техники оптимизации. Команды SIMD и их эффективное применение для расчетов. Использование оптимизирующих компиляторов.
Лабораторная работа: Использование оптимизирующего компилятора Intel C++ Compiler.
Лабораторная работа: Оптимизация по скорости в задаче матричного умножения.

Модуль 4. Введение в параллельное программирование

Объем: от 2 до 4 часов. Практика не предусмотрена.

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

Модуль 5. Параллельное программирование для систем с общей памятью на основе OpenMP

Объем: от 4 до 12 часов. Соотношение лекции/практика – 1:1.

Рассматривается стандарт OpenMP и его конкретные реализации в компиляторах компаний Microsoft и Intel. На примерах показывается применение основных возможностей технологии. Проводится сравнение OpenMP и многопоточных программ с точки зрения эффективности и затрат на написание.

План модуля:

5.1. OpenMP как стандарт параллельного программирования для систем с общей памятью. Принципы организации параллелизма. Составные части OpenMP. Директивы компилятора, функции run-time библиотеки.
Лабораторная работа: Параллельный «Hello world».
Лабораторная работа: Вычисление скалярного произведения векторов с «ручным» распределением работы.
5.2. Основные директивы OpenMP. Формат записи. Области видимости. Типы директив. Распределение вычислений между потоками. Управление областью видимости данных.
Лабораторная работа: Вычисление скалярного произведения векторов с распределением работы в цикле. Эксперименты с различными вариантами расписания (schedule). Замеры эффективности.
5.3. Синхронизация как задача параллельного программирования. Средства синхронизации в OpenMP. Библиотека функций OpenMP.
Лабораторная работа: Решение задачи матрично-векторного умножения. Реализация и сравнение различных схем распределения данных.

Модуль 6. Инструментальная поддержка параллельного программирования для систем с общей памятью

Объем: от 2 до 4 часов. Соотношение лекции/практика – 1:1.

Рассматриваются инструменты компании Intel: Intel Thread Checker, Intel Thread Profiler, позволяющие проводить отладку и оценивать эффективность параллельных программ, разработанных на OpenMP и/или потоках.

План модуля:

6.1. Отладка параллельных программ для систем с общей памятью. Инструменты отладки на примере Intel Thread Checker.
Лабораторная работа: Примеры на типичные ошибки в OpenMP программах: скалярное произведение, задача Дирихле, обедающие философы.
6.2. Профилирование параллельных программ для систем с общей памятью. Инструменты профилирования на примере Intel Thread Profiler.
Лабораторная работа: Распределение вычислительной нагрузки (вопросы оптимизации параллельной программы исследуются на примере приложения, осуществляющего поиск простых множителей массива чисел).
Лабораторная работа: Синхронизация и накладные расходы на поддержку многопоточности (вопросы оптимизации параллельной программы исследуются на примере приложения, имитирующего работу клиент-серверной системы).

Модуль 7. Параллельное программирование для систем с распределенной памятью (кластеров) на основе MPI.

Объем: от 8 до 16 часов. Соотношение лекции/практика – 1:1.

Рассматривается стандарт MPI и его конкретные реализации. Обсуждаются основные моменты MPI, необходимые для успешного старта в разработке параллельных программ для кластеров. В зависимости от наличия времени рассматриваются более сложные моменты: работа с типами данных, виртуальные топологии.

План модуля:

7.1. MPI как стандарт параллельного программирования для систем с распределенной памятью. Принципы организации параллелизма с использованием MPI. Состав MPI.
Лабораторная работа: Параллельный «Hello world».
Лабораторная работа: Вычисление скалярного произведения векторов с «ручным» распределением работы.
7.2. Режимы передачи данных. Группы процессов и коммуникаторы. Коллективные операции.
7.3. Операции синхронизации и измерения времени.
Лабораторная работа: Вычисление числа Пи.
Лабораторная работа: Параллельная сортировка.
7.4. Параллельные численные алгоритмы для решения типовых задач вычислительной математики