48

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

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

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

4

2 回答 2

45

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

于 2012-12-14T15:22:48.527 回答
19

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)

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

于 2015-12-20T10:14:03.627 回答