Какую информацию собирает GCC Profile Guided Optimization (PGO) и какие ее оптимизации используют?
Какую информацию собирает GCC, когда я включаю -fprofile-generate
, и какая оптимизация фактически использует собранную информацию (при установке флага -fprofile-use
)?
Мне нужны цитаты здесь. Я искал какое-то время, но не нашел ничего документированного.
Информация о оптимизации времени соединения (LTO) была бы плюсом!= D
Ответы
Ответ 1
-fprofile-generate
включает -fprofile-arcs
, -fprofile-values
и -fvpt
.
-fprofile-use
включает -fbranch-probabilities
, -fvpt
, -funroll-loops
, -fpeel-loops
и -ftracer
Источник: http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Optimize-Options.html#Optimize-Options
PS. Информация о LTO также находится на этой странице.
Ответ 2
"Что каждый программист должен знать о памяти" Ульриха Дреппера
https://people.freebsd.org/~lstewart/articles/cpumemory.pdf
http://www.akkadia.org/drepper/cpumemory.pdf
В разделе 7.4
- компиляция с -profile-generate генерирует файл .gcno для каждого объектного файла. (тот же файл, который используется для отчетов о покрытии gcov).
- тогда вы должны выполнить несколько тестов, во время выполнения он записывает данные о покрытии в файлы .gcda.
- перекомпилируйте с использованием -profile-use: он соберет данные покрытия и сделает вывод, если ветка вероятна (__builtin_expect (.., 1) или маловероятно (__builtin_expect (.., 0)
Результат должен работать быстрее, так как это должно быть лучше при предварительной загрузке кода в кеш процессора.