【发布时间】:2014-12-22 09:48:57
【问题描述】:
我正在使用 GCC 的 -finline-limit=<i>N</i> 编译器选项。我正在编译我的代码并对其进行分析以检查 CPU 周期的减少。当我增加 N 时,理想情况下,随着更大的函数内联,我应该看到循环数减少。但我看到 CPU 周期增加了。为什么会这样?
【问题讨论】:
标签: c performance inline-functions
我正在使用 GCC 的 -finline-limit=<i>N</i> 编译器选项。我正在编译我的代码并对其进行分析以检查 CPU 周期的减少。当我增加 N 时,理想情况下,随着更大的函数内联,我应该看到循环数减少。但我看到 CPU 周期增加了。为什么会这样?
【问题讨论】:
标签: c performance inline-functions
gcc 中有多个用于内联的参数(--param)。 finline-limit 使用其中的一些。
你可以在这里找到参数:
gcc optimize-options(搜索 max-inline-insns-single)
您可以从源代码中获取有关 GCC 内联启发式的一些信息: ipa-inline-analysis.c(置顶评论)
注意:通过内联减少函数调用、分支等并不总能减少 CPU 周期。将 finline-limit 设置为较大的数字会使事情变得更糟。在函数上使用__attribute__ ((flatten)) 可以产生更好的结果。根据您的指令集和编译器版本,所有优化参数都会产生不同的结果。
【讨论】: