Бакалавриат
2025/2026



Анализ производительности и оптимизация кода
Статус:
Курс по выбору (Прикладная математика и информатика)
Кто читает:
Базовая кафедра Яндекс
Где читается:
Факультет компьютерных наук
Когда читается:
3-й курс, 1, 2 модуль
Охват аудитории:
для своего кампуса
Преподаватели:
Стёпкин Степан Максимович
Язык:
русский
Контактные часы:
56
Программа дисциплины
Аннотация
Если вам когда-то было интересно почему __builtin_prefetch не ускоряет ваш код, почему A[2000][2000] сильно быстрее A[2048][2048], то данный курс позволит вам собрать полную картину современного мира оптимизации производительности программ. Начнём с базы, глубоко поговорим про устройство современных CPU, что такое AST деревья и с чем их жарить. И даже будем писать код на выдуманном ассемблере, чтобы пройти симуляцию! Набор трехбуквенных сокращений, с которыми вы ознакомитесь пройдя курс: BTB, LSD, TLB, ILP, OOO, AST, PGO, LTO, ROB, IFB.
Цель освоения дисциплины
- Понимание архитектурных особенностей современных процессоров: Изучить устройство CPU (иерархия памяти, конвейеризация, суперскалярность, внеочередное исполнение, спекулятивные вычисления) и понять, как эти особенности влияют на выполнение программ.
- Освоение методов анализа производительности: Научиться использовать современные инструменты (профайлеры, симуляторы) для идентификации узких мест (bottlenecks) в программах на различных уровнях: от алгоритмического до аппаратного.
- Приобретение навыков низкоуровневой оптимизации: Освоить практические приемы оптимизации кода с учетом особенностей кэш-памяти, предсказания переходов, векторизации и других механизмов процессора.
- Изучение возможностей компилятора: Понять принципы работы компиляторов (на примере GCC/Clang), включая этапы генерации промежуточного представления (AST), и научиться использовать его расширенные возможности для оптимизации (PGO, LTO).
Планируемые результаты обучения
- Объяснять принципы работы современных CPU (кэш-память, конвейер, предсказание переходов, внеочередное исполнение) и их влияние на performance.
- Анализировать код и выявлять узкие места (bottlenecks) с помощью профайлеров (perf, vtune).
- Применять низкоуровневые оптимизации: эффективный обход массивов, работа с памятью, использование prefetch и SIMD.
- Использовать продвинутые возможности компилятора (PGO, LTO) для автоматической оптимизации.
- Оперировать ключевыми концепциями, описываемыми аббревиатурами (TLB, ILP, OOO, ROB, AST и др.).
Промежуточная аттестация
- 2025/2026 2nd module0.35 * Домашнее задание + 0.35 * Домашнее задание + 0.3 * Экзамен
Список литературы
Рекомендуемая основная литература
- Денисенко, М. В. Применение распределенных вычислительных систем и технологии cuda для моделирования физических процессов : учебно-методическое пособие / М. В. Денисенко, В. О. Муняев, А. М. Сатанин. — Нижний Новгород : ННГУ им. Н. И. Лобачевского, 2017. — 81 с. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/152811 (дата обращения: 00.00.0000). — Режим доступа: для авториз. пользователей.
- Программирование GPU при помощи Python и CUDA : исследуйте высокопроизводительные параллельные вычисления с помощью CUDA, Тоуманен, Б., 2020
Рекомендуемая дополнительная литература
- Технология CUDA в примерах : введение в программирование графических процессоров, Сандерс, Дж., 2011
- Технология программирования CUDA : учебное пособие / Д. Н. Тумаков, Д. Е. Чикрин, А. А. Егорчев, С. В. Голоусов. — Казань : КФУ, 2017. — 112 с. — ISBN 978-5-00019-913-8. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/130543 (дата обращения: 00.00.0000). — Режим доступа: для авториз. пользователей.