大家,我正在运行 gprof 来检查两个不同优化级别(-g -pg 与 -O3 -pg)下的执行时间百分比。
所以我得到的结果是,一个函数在 O3 中占用了 68% 的 ex-time,但在 -g 版本中只占用了 9%。
我不知道如何找出其背后的原因。我正在考虑在编译之前比较两个版本文件,但我不确定 cmd 是否这样做。
有没有其他方法可以找出这个执行时间差异的原因。
使用优化标志时,必须小心解释 gprof/分析结果。使用 -O3 进行编译确实可以改变代码的结构,因此 gprof 无法判断在哪里花费了多少时间。
特别是,启用更高优化级别的函数内联会使您的某些函数将完全被内联代码替换,因此它们看起来根本不需要任何时间。然后,在这些子函数中花费的时间将归因于调用它们的父函数,因此看起来在给定父函数中花费的时间实际上增加了。
我找不到这方面真正好的参考。这是一个老例子:
http://gcc.gnu.org/ml/gcc/1998-04/msg00591.html
话虽如此,我预计在使用 -O3 运行 gprof 时会出现这种奇怪的行为。我总是仅使用 -O1 优化进行分析,以尽量减少此类影响。