我正在使用GCC的-finline-limit=N
编译器选项。我正在编译我的代码并对其进行分析,以检查 CPU 周期的减少。理想情况下,当我增加 N 时,随着更大的函数被内联,我应该看到周期数减少。但是我看到CPU周期的增加。为什么会这样?
在 gcc 中有多个用于内联的参数 (--param(。 Finline-limit 使用其中的一些参数。
您可以在此处找到参数:
GCC 优化选项(搜索 max-inline-insns-single(
您可以从源代码中获取有关GCC内联启发式的一些信息:IPA-inline-analysis.c (顶部的注释(
注意:通过内联减少函数调用、分支等并不总是减少 CPU 周期。将 finline 限制设置为大量可能会使情况变得更糟。对函数使用 __attribute__ ((flatten))
可以产生更好的结果。所有优化参数都可以根据您的指令集和编译器版本产生不同的结果。