GCC配置文件引导优化(PGO)收集哪些信息以及哪些优化使用它?

时间:2012-12-14 15:10:26

标签: c++ gcc pgo lto

启用-fprofile-generate时GCC会收集哪些信息,哪些优化确实使用了收集的信息(设置-fprofile-use标志时)?

我需要在这里引用。我已经搜索了一段时间,但没有找到任何记录。

有关链接时优化(LTO)的信息将是一个加分! = d

2 个答案:

答案 0 :(得分:36)

-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的信息也在该页面上。

答案 1 :(得分:12)

"每个程序员应该了解的内存"作者:Ulrich Drepper 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)

结果应该运行得更快,因为它应该更好地将代码预取到处理器指令缓存中。