我正在使用谷歌的 perftools ( http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html ) 进行 CPU 分析——这是一个很棒的工具,帮助我对我的应用程序进行了大量的 CPU 时间改进。
不幸的是,我已经到了这样的地步,代码仍然有点慢,当使用 g++ 的 -O3 优化级别编译时,我所知道的是特定函数慢,但不知道它的哪些方面慢。
如果我删除 -O3 标志,则程序的未优化部分会超过此函数,并且我无法清楚地了解函数的实际运行缓慢的部分。如果我保留 -O3 标志,那么函数的慢部分将被内联,我无法确定函数的哪些部分是慢的。
有什么建议吗?感谢您的帮助!
最佳答案
对于这样的事情,我一直使用“老派”的方式来做:
在测量当前时间(或 cputime)的各个点语句中插入您要测量的例程。然后简单地打印或记录它们之间的差异,你就会知道每一段代码花了多长时间。从那里您可以找出大部分时间在吃什么,然后进入并在该部分中获得细粒度的时间,直到您知道问题是什么以及如何解决它。
如果函数调用的开销不是问题,您还可以使用 -fno-inline-small-functions -fno-inline-functions -fno-inline-functions-called- 强制关闭内联once -fno-inline
(我不确定这些开关如何相互作用,但我认为它们是独立的)。然后,您可以使用普通的分析器查看调用图分析器,看看哪些函数调用占用了多少时间。
关于C++ 分析/优化 : How to get better profiling granularity in an optimized function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/730773/