Какую информацию собирает 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#Optimize-Options
PS. Информация о LTO также на этой странице.
"что каждый программист должен знать о памяти" Ульриха Дреппера https://people.freebsd.org / ~lstewart / статьи / cpumemory.pdf http://www.akkadia.org/drepper/cpumemory.pdf
В разделе 7.4
- компиляция с --profile-generate генерирует .файл gcno для каждого объектного файла. (тот же файл, который используется для отчетов покрытия gcov)
- затем вы должны провести несколько тестов, во время выполнения он записывает данные в .gcda файлы
- перекомпилировать с --profile-use: он будет собирать данные покрытия и выводить, если ветвь вероятна (__builtin_expect( .. , 1) или маловероятно (__builtin_expect( .. , 0)
результат должен работать быстрее, так как он должен быть лучше при предварительной выборке кода в кэш инструкций процессора.