Skip to content

Latest commit

 

History

History
38 lines (29 loc) · 3.08 KB

01.CompilersAndToolchain.md

File metadata and controls

38 lines (29 loc) · 3.08 KB

Системные методы оптимизации

(векторизация)
(оптимизация высокого уровня)
(Межпроцедурная оптимизация)
(Ведомая профилм оптимизация)
(Выводы для разработчика)

Цель: оптимизация по занимаемому месту или производительности (уменьшение размера может привести к увеличению производительности за счёт попадания в кэш).

Кэш -- сверх Оперативно Запоминающее Устройство (сОЗУ)

Принцип фон Неймана: CPU работает только с его памятью.
Кэш делится на кэш данных и кэш команд.
Intel i3/i5/i7/i9 в первую очередь различаются по размеру кэша.
Символ (в исходном коде) -- ф-ция, переменная, какой-то ресурс, доступный в исходном коде.
Обращение в оперативную память обходится дорого (пример с фиолетовыми фломастерами, memory wall problem).

Оптимизация высокого уровня

Символьная информация (debug information) -- информация о связи исходного кода с машинным кодом. Удобно для отладки и профилирования.

Уровни оптимизации:

  • /Od (/O0) отключение любой оптимизации, нужно для отладки
  • /O1 любые методы оптимизации, но без увеличения кодовой базы (inlining при явных вызовах)
  • /O2 долгое время был стандартом де-факто (/Os оптимизация по месту, применимо для встраиваемых систем). Предвыборка, спекулятивные вычисления, не агрессивыне методы.
  • /O3 увеличивает время компиляции, оптимизирует циклы, но может замедлить относительно O2. Оптимизации для иерархии памяти.
  • /fast псевдоним, зависимый от платформы и компилятора
  • -g для генерации символов

Оптимизация под типы приложений -> размер
Процессорные оптимизации -> использование расширенных инструкций, которые есть в CPU
Дополнительные оптимизации -> оптимизация на уровне типов данных

ДЗ

  • Создание инструментальной платформы
  • Профессиональная работа в менеджере окон
  • работа в текстовом редакторе vim