Учебно-методические материалы к дисциплине
Образовательная программа: 09.03.01 Информатика и вычислительная техника
Расписание на 2023 г. (3 курс, весенний семестр)
- четверг, 9:00 - 10:35, практика, ауд. 2213
- четверг, 10:50 - 12:25, лекция, ауд. 1132
Материалы к лекциям
- Введение. Базовые способы оптимизации
- Профилирование программ
- Пример использования PAPI: papi_example.cpp
- Анализ производительности. Roofline Performance Model
- Возможности компиляторов по оптимизации программ
- Векторизация вычислений
- Ручная векторизация вычислений. Пример
- Эффективная работа с памятью
- Оценочное тестирование, моделирование производительности
- Оптимизация ветвлений и циклов
Практические задания
- Задание 1: написание программы, базовая оптимизация, анализ производительности
- Задание 2: векторизация программ
- Задание 3: оптимизация по памяти
- Задание 4: распараллеливание в потоках
Теоретические материалы
- Материалы по архитектуре
- Intel® 64 and IA-32 Architectures Software Developer's Manuals
- AMD Developer Guides, Manuals & ISA Documents
- Intel Intrinsics Guide (mirror), x86 Intrinsics Cheat Sheet, avx2_shuffle
- Agner Fog, The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers
- Agner Fog, Instruction tables: Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD and VIA CPUs
- Agner Fog, Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms
- Фрагмент на русском: Эффективность различных конструкций языка C++
- Фрагмент на русском: Способы оптимизации, реализованные в компиляторах
- Roofline Performance Model
- APEX - Application Performance Characterization Benchmarking
- Эффективное программирование современных микропроцессоров: учеб. пособие / В.П. Маркова, С.Е. Киреев, М.Б. Остапкевич, В.А. Перепелкин. – Новосибирск: Изд-во НГТУ, 2014 – 148 с.
Дополнительные материалы
Текст
- Ulrich Drepper, What every programmer should know about memory
- Part 1: Introduction. Commodity Hardware Today
- Part 2: CPU caches
- Part 3: Virtual memory
- Part 4: NUMA systems
- Part 5: What programmers can do - cache optimization
- Part 6: What programmers can do - multi-threaded optimizations
- Part 7: Memory performance tools
- Part 8: Future technologies
- Part 9: Appendices and bibliography
- Статьи по оптимизации на IT Hare
- A Performance-Based Comparison of C/C++ Compilers (colfaxresearch.com)
- "Clean" Code, Horrible Performance (перевод на русский)
- EVE - the Expressive Vector Engine
Видео
- QtCon 2016: Linux perf for Qt developers - Milian Wolff
- CppCon 2016: “Instruction Re-ordering Everywhere: The C++ 'As-If' Rule and the Role of Sequence"
- CppCon 2016: Timur Doumler “Want fast C++? Know your hardware!"
- CppCon 2017: Matt Godbolt “What Has My Compiler Done for Me Lately? Unbolting the Compiler's Lid”
- CppCon 2018: Nir Friedman “Understanding Optimizers: Helping the Compiler Help You”
- Strange Loop 2019: "Performance Matters" by Emery Berger
- The Basics of Profiling - Mathieu Ropert - CppCon 2021
- Branchless Programming in C++ - Fedor Pikus - CppCon 2021
- The Most Important Optimizations to Apply in Your C++ Programs - Jan Bielak - CppCon 2022
- C++ Algorithmic Complexity, Data Locality, Parallelism, Compiler Optimizations, & Some Concurrency - CppCon 2022
- What Do You Mean by "Cache Friendly"? - Björn Fahller - C++ on Sea 2022
- "Clean" Code, Horrible Performance
- Масштабируемая векторизация в RISC-V - Константин Владимиров - C++ Zero Cost Conf 2023
- Внутреннее устройство профилировщиков - Дмитрий Рябцев, YADRO - подкаст 15.02.2024
Вопросы к зачёту (2017, 2018, 2020, 2021, 2022)
Отметки о выполнении заданий (2023 г.)
Отметки о выполнении заданий (2022 г.)
Отметки о выполнении заданий (2021 г.)
Отметки о выполнении заданий (2020 г.)