Читается в осеннем семестре на первом курсе магистратуры МФТИ и ВШЭ.

Преподаватель: д.ф.-м.н. Аветисян Арутюн Ишханович, Монаков Александр Владимирович

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

Рассматриваемые темы:

  1. Параллелизм в пределах одного процессорного ядра и контекста выполнения: архитектурные возможности и компиляторные подходы к повышению параллелизма на уровне команд.
  2. SIMD-расширения: поддержка в ОС и компиляторах, доступные возможности использования (ассемблер, расширения языка, автовекторизация).
  3. Вычисления с плавающей точкой. Принципы IEEE-754. Ограничения и возможности компиляторной трансляции.
  4. Организация кеш-памяти. Автоматический и явный префетчинг. Cache-aware и cache-oblivious алгоритмы. Инструмент pahole.
  5. Поддержка согласованности кешей на многоядерных процессорах. Эффект false sharing.
  6. Низкоуровневые средства взаимодействия параллельных потоков: атомарные операции, futex. Поддержка атомарных операций в языке Си.
  7. OpenMP. Основные принципы (fork-join параллелизм на общей памяти, аннотации кода в виде прагм). Компиляторная трансляция OpenMP-конструкций.
  8. Профилирование программ: через инструментирование кода, на модельном процессоре (Cachegrind, Callgrind). Профилирование с помощью аппаратных счетчиков.