• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
Бакалавриат 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 module
    0.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). — Режим доступа: для авториз. пользователей.

Авторы

  • Фисенко Анна Сергеевна