【问题标题】:Exact behavior of the -finline-limit GCC compiler option-finline-limit GCC 编译器选项的确切行为
【发布时间】:2014-12-22 09:48:57
【问题描述】:

我正在使用 GCC 的 -finline-limit=<i>N</i> 编译器选项。我正在编译我的代码并对其进行分析以检查 CPU 周期的减少。当我增加 N 时,理想情况下,随着更大的函数内联,我应该看到循环数减少。但我看到 CPU 周期增加了。为什么会这样?

【问题讨论】:

    标签: c performance inline-functions


    【解决方案1】:

    gcc 中有多个用于内联的参数(--param)。 finline-limit 使用其中的一些。

    你可以在这里找到参数:

    gcc optimize-options(搜索 max-inline-insns-single)

    您可以从源代码中获取有关 GCC 内联启发式的一些信息: ipa-inline-analysis.c(置顶评论)

    注意:通过内联减少函数调用、分支等并不总能减少 CPU 周期。将 finline-limit 设置为较大的数字会使事情变得更糟。在函数上使用__attribute__ ((flatten)) 可以产生更好的结果。根据您的指令集和编译器版本,所有优化参数都会产生不同的结果。

    【讨论】:

    • 请让我知道是否存在内联实际上恶化循环的任何特定情况
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多