Skip to content

Latest commit

 

History

History
42 lines (29 loc) · 3.66 KB

02.SystemOptimizationMethods.md

File metadata and controls

42 lines (29 loc) · 3.66 KB

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

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

Разворачивание циклов. Вместо итерирования по 1 шагу, можно сделать итерирование через 1, но на каждой итерации обрабатывать i-ую и i+1-ую операцию. В векторицации этот подход развернулся ещё больше.

Высокоуровневый оптимизатор (high level) часть компилятора, которая задействуется при достаточно высоком уровне оптимизации (3, 4). Ориентирован на максимальную скорость исполнения.

Межпроцедурная оптимизация (IPO)

Проводится на 2ух уровнях:

  1. На уровне компиляции исходных файлов в объектные (пример: встраивание ф-ций)
  2. На уровне связывания нескольких объектных файлов в исполняемый (пример: исключение функций; чтобы не включать всю стандартную библиотеку языка, происходит связывание только с используемыми участками кода)

Для GCC: -fipa-*** в межпроцедурном анализе много опций.

Ведомая профилем оптимизация (PGO)

На этапе компиляции мало данных, но если запустить, то можно собрать информацию в виде статистики.

Сборка разбивается на несколько этапов:

  1. Инструментальная компиляция, в итоге поражается файл который при выполнении будет записывать профиль своей работы. Важно запускать файл в тех условиях, когда производительность особо важна (репрезентативность и релевантность собранных данных).
  2. Запуск приложения и сбор профиля. Профиль это двоичный файл, содержимое которого определяет компилятор. Он содержит статистические данные по работе кода.
  3. Выполняем компиляцию и компоновку "с обратной связью", т.е. на вход подаются исходники и профиль.

PGO позволяет выявить ,блокирующую операцию загрузки данных и выполнить эту операцию спекулятивно (__builtin_prefetch). Если не угадать с типичными данными, подобная операция может приводить к тому, что полезные данные вытесняются из кэша бесполезными.

Ключи компилятора (gcc):

  • -fprofile-generate
  • -fprofile-use

Мутаторы -- инструмент кода для сбора статистики изнутри приложения.

Итог

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

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