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