我正在使用谷歌的perftools (http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html)进行CPU性能分析-这是一个很棒的工具,它帮助我在应用程序上执行了大量的CPU时间改进。
不幸的是,我已经到了代码仍然有点慢的地步,当使用g++的-O3优化级别编译时,我所知道的只是一个特定的函数是慢的,而不是它的哪些方面是慢的。
如果我去掉了-O3标志,那么程序中未优化的部分就会覆盖这个函数,并且我不能清楚地了解函数中速度较慢的实际部分。如果我把-O3标志留在里面,那么函数的慢部分是内联的,我不能确定函数的哪些部分是慢的。
有什么建议吗?谢谢你的帮忙!
发布于 2009-04-08 21:19:28
如果您使用的是linux,请使用oprofile。如果你使用的是Windows操作系统,那就使用AMD的CodeAnalyst。
两者都将给出基于样本的配置文件,直到单个源代码行或汇编指令的级别,您应该可以毫不费力地识别函数中的“热点”。
发布于 2009-04-08 17:16:22
对于这样的事情,我总是使用“老式”的方法:
将测量当前时间(或cputime)的语句插入到要测量的各个点的例程中。然后,只需打印或记录它们之间的差异,您就会知道代码的每个部分花费了多长时间。从那里,您可以找出大部分时间都在吃什么,并在该部分中获得细粒度的计时,直到您知道问题是什么,以及如何修复它。
如果函数调用的开销不是问题所在,您还可以强制使用-fno-inline-small-functions -fno-inline-functions -fno-inline-functions-called-once -fno-inline关闭内联(我不是很确定这些开关是如何相互作用的,但我认为它们是独立的)。然后,您可以使用普通探查器查看调用图配置文件,并查看哪些函数调用占用了多少时间。
发布于 2009-04-10 18:35:01
我花了几十年的时间做性能调优。
人们喜欢他们的工具,但我对this method发誓。
https://stackoverflow.com/questions/730773
复制相似问题