【问题标题】:What information does GCC Profile Guided Optimization (PGO) collect and which optimizations use it?GCC Profile Guided Optimization (PGO) 收集哪些信息以及哪些优化使用它?
【发布时间】:2012-12-02 14:36:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ gcc pgo lto


    【解决方案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】:

    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))

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

    【讨论】:

    • 在我的情况下,用于生成配置文件的相同(完全确定性,计算量大)程序在使用此配置文件后变得更慢(与没有任何配置文件的编译相比)。所以不要期望在每种​​情况下都能神奇地提高性能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多