Читается в осеннем семестре на первом курсе магистратуры МФТИ и ВШЭ.
Преподаватель: д.ф.-м.н. Аветисян Арутюн Ишханович, Монаков Александр Владимирович
В курсе рассматриваются элементы архитектуры высокопроизводительных процессоров и их поддержка со стороны оптимизирующих компиляторов. Основной целью курса является разбор уровней паралеллизма вычислений в архитектуре и способов их учёта в компиляторах и библиотеках для достижения хорошей эффективности вычислений. На занятиях разбираются примеры программ, демонстрирующие основные приёмы анализа производительности и оптимизации кода.
Рассматриваемые темы:
- Параллелизм в пределах одного процессорного ядра и контекста выполнения: архитектурные возможности и компиляторные подходы к повышению параллелизма на уровне команд.
- SIMD-расширения: поддержка в ОС и компиляторах, доступные возможности использования (ассемблер, расширения языка, автовекторизация).
- Вычисления с плавающей точкой. Принципы IEEE-754. Ограничения и возможности компиляторной трансляции.
- Организация кеш-памяти. Автоматический и явный префетчинг. Cache-aware и cache-oblivious алгоритмы. Инструмент pahole.
- Поддержка согласованности кешей на многоядерных процессорах. Эффект false sharing.
- Низкоуровневые средства взаимодействия параллельных потоков: атомарные операции, futex. Поддержка атомарных операций в языке Си.
- OpenMP. Основные принципы (fork-join параллелизм на общей памяти, аннотации кода в виде прагм). Компиляторная трансляция OpenMP-конструкций.
- Профилирование программ: через инструментирование кода, на модельном процессоре (Cachegrind, Callgrind). Профилирование с помощью аппаратных счетчиков.