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