(векторизация)
(оптимизация высокого уровня)
(Межпроцедурная оптимизация)
(Ведомая профилм оптимизация)
(Выводы для разработчика)
Цель: оптимизация по занимаемому месту или производительности (уменьшение размера может привести к увеличению производительности за счёт попадания в кэш).
Кэш -- сверх Оперативно Запоминающее Устройство (сОЗУ)
Принцип фон Неймана: CPU работает только с его памятью.
Кэш делится на кэш данных и кэш команд.
Intel i3/i5/i7/i9 в первую очередь различаются по размеру кэша.
Символ (в исходном коде) -- ф-ция, переменная, какой-то ресурс, доступный в исходном коде.
Обращение в оперативную память обходится дорого (пример с фиолетовыми фломастерами, memory wall problem).
Символьная информация (debug information) -- информация о связи исходного кода с машинным кодом. Удобно для отладки и профилирования.
Уровни оптимизации:
/Od
(/O0
) отключение любой оптимизации, нужно для отладки/O1
любые методы оптимизации, но без увеличения кодовой базы (inlining при явных вызовах)/O2
долгое время был стандартом де-факто (/Os
оптимизация по месту, применимо для встраиваемых систем). Предвыборка, спекулятивные вычисления, не агрессивыне методы./O3
увеличивает время компиляции, оптимизирует циклы, но может замедлить относительноO2
. Оптимизации для иерархии памяти./fast
псевдоним, зависимый от платформы и компилятора-g
для генерации символов
Оптимизация под типы приложений -> размер
Процессорные оптимизации -> использование расширенных инструкций, которые есть в CPU
Дополнительные оптимизации -> оптимизация на уровне типов данных
- Создание инструментальной платформы
- Профессиональная работа в менеджере окон
- работа в текстовом редакторе vim