gprof 适合分析长时间运行的程序吗?为啥或者为啥不?

Posted

技术标签:

【中文标题】gprof 适合分析长时间运行的程序吗?为啥或者为啥不?【英文标题】:Is gprof suitable for analysis of long running programs? Why or why not?gprof 适合分析长时间运行的程序吗?为什么或者为什么不? 【发布时间】:2017-11-11 16:42:17 【问题描述】:

我知道 gprof 在打印平面配置文件之前存在一定的样本计数频率。根据样本计数的频率,我的判断是程序运行时间更长,为分析收集的样本更多,因此数据更好。但我不确定这是否属实,以及长时间运行的程序是否适合在 gprof 上进行分析。

任何输入都会非常有帮助。

【问题讨论】:

当你说“分析”时,gprof 告诉你的是,你可以做的事情并不多,这对程序员来说可能是个好消息—— 好消息。 Here's why, and how to do it better. 我不关心程序的速度,只关心长时间运行的程序的 gprof 结果的准确性 【参考方案1】:

真的,gprof 有优势(在任何平台上都可用) 然而,缺点使他不适合更复杂的程序。 1)仪表增加了函数调用开销 2)无法在共享库中配置代码 3)仅配置主线程 4)不提供有关缓存未命中的信息 5) 不给出 flops/s 6)不分析循环 等等

【讨论】:

【参考方案2】:

到目前为止,对我来说最合乎逻辑的答案是:

如果程序运行时间很长并且我们只对分析感兴趣,那么 grpof 似乎是一个合适的选择 工具,因为 gprof 依赖于样本收集的频率,默认情况下为 100 Hz。如果 gprof 的运行时间非常短,如果在这么短的时间内它调用了很多函数,那么 分析的样本量很可能非常小,因此分析的样本 功能不可靠。否则,分析的检测开销会增加 程序的运行时间和总执行时间可能无法反映程序的实际运行时间 应用程序,可以通过调用提供的适当时间函数来简单地测量 操作系统内核。

【讨论】:

以上是关于gprof 适合分析长时间运行的程序吗?为啥或者为啥不?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这段代码运行得这么慢?

与 Java 和 Python 相比,为啥每次使用 Cmake 运行 C++ 程序都需要这么长时间?

Linux c++ 性能分析工具gprof

为啥使用 gprof 会阻止程序的执行?

为啥 train_test_split 需要很长时间才能运行?

ByteBuffer.wrap(byte[]) 会导致长时间运行的应用程序内存泄漏吗?