• A
  • A
  • A
  • АБВ
  • АБВ
  • АБВ
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта

Бакалаврская программа «Прикладная математика и информатика»

15
Ноябрь

Анализ производительности и оптимизация кода

2026/2027
Учебный год
RUS
Обучение ведется на русском языке
5
Кредиты
Статус:
Курс по выбору
Когда читается:
4-й курс, 1, 2 модуль

Преподаватель

Программа дисциплины

Аннотация

Если вам когда-то было интересно почему __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.
  • Применять низкоуровневые оптимизации: эффективный обход массивов, работа с памятью, использование prefetch и SIMD.
  • Использовать продвинутые возможности компилятора (PGO, LTO) для автоматической оптимизации.
  • Оперировать ключевыми концепциями, описываемыми аббревиатурами (TLB, ILP, OOO, ROB, AST и др.).
Содержание учебной дисциплины

Содержание учебной дисциплины

  • CPU pipeline, branch prediction, BTB, ILP, OOO.
  • Virtual memory, TLB, VIPT, caches, prefetching, huge pages
  • Compiler optimizations, SIMD, PGO/LTO/BOLT
  • NUMA
  • Linux + networks
  • Allocators + overengineering
Элементы контроля

Элементы контроля

  • неблокирующий Домашнее задание
  • неблокирующий Контрольная работа
  • неблокирующий Экзамен
Промежуточная аттестация

Промежуточная аттестация

  • 2026/2027 2nd module
    0.3 * Экзамен + 0.1 * Контрольная работа + 0.6 * Домашнее задание
Список литературы

Список литературы

Рекомендуемая основная литература

  • Программирование GPU при помощи Python и CUDA - Тоуманнен Б. - Издательство "ДМК Пресс" - 978-5-97060-821-0 - 2020 - русский - https://e.lanbook.com/book/179469 - ЛАНЬ - 179469

Рекомендуемая дополнительная литература

  • Технология CUDA в примерах: введение в программирование графических процессоров - Сандерс Дж., Кэндрот Э. - Издательство "ДМК Пресс" - 978-5-94074-504-4 - 2011 - русский - https://e.lanbook.com/book/3029 - ЛАНЬ - 3029

Авторы

  • Стёпкин Степан Максимович