C++ 分析/优化 : How to get better profiling granularity in an optimized function

标签 c++ optimization profiler

我正在使用谷歌的 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/

相关文章:

java - 使用 YourKit 分析应用程序,仍然无法识别 CPU 占用

java - 将多个方法包装成一个的函数式方法

c++ - 许多情况下的开关优化保证任何情况下均等的访问时间? ( C++ )

visual-studio - "Optimize Code"选项在 Visual Studio 中的真正作用是什么?

android - 以编程方式停止 Android(DDMS) Profiler

c++ - Win32 : How to create a bordless popup window

c++ - 插入排序问题?

c++ - 除了 Visual Studio 之外,还有其他用于制作 C/C++ 桌面应用程序的程序吗?

c# - Windows 8 备份/恢复应用程序

visual-studio - 无法启动 Visual Studio Profiler