Какую информацию собирает GCC Profile Guided Optimization (PGO) и какие оптимизации используют ее?
Какую информацию GCC собирает, когда я включаю -fprofile-generate
и какая оптимизация на самом деле использует собранную информацию (при настройке -fprofile-use
флаг)?
Мне нужны цитаты здесь. Я искал некоторое время, но не нашел ничего задокументированного.
Информация об оптимизации времени соединения (LTO) будет плюсом! =D
2 ответа
-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
PS. Информация о LTO также на этой странице.
"Что каждый программист должен знать о памяти" Ульриха Дреппера 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))
Результат должен работать быстрее, так как он должен быть лучше при предварительной загрузке кода в кэш инструкций процессора.