【问题标题】:Time Sampling Problems with gprofgprof 的时间采样问题
【发布时间】:2011-04-05 22:02:58
【问题描述】:

我正在尝试使用 gprof 分析一些使用 g++ 编译的 c++ 代码,包括选项 -pg。但是,尽管程序在我的计算机上运行需要 10-15 分钟(CPU 已用尽),但 gprof 生成的表的 %时间、累积秒数和自身秒数列完全是 0.00 秒!调用列包含正确的数据,例如对基本函数的超过 150,000 次调用。以下是收集的数据示例:

  %   cumulative   self              self     total           

 time   seconds   seconds    calls  Ts/call  Ts/call  name

  0.00      0.00     0.00   156012     0.00     0.00  perm::operator[](int) const

  0.00      0.00     0.00   153476     0.00     0.00  perm::perm(void)

该程序不使用字符串,唯一的#include是iostream(仅用于输出最终答案),因此它不会因为字符串查找和比较或其他类似的慢速外部函数而变慢,如this question中所建议:unable to accumulate time using gprof - the gnu profiler

程序本身退出正常,我没有理由相信配置文件数据没有正确写入(如这里建议的那样:gprof reports no time accumulated

由于这一切都是在 Windows 7 中完成的,因此不能尝试使用 Shark 或 Valgrind。

是否有原因记录每个函数花费了 0.00 秒?

【问题讨论】:

  • 您可以发布指向整个输出文件的链接吗?只是这两个函数还是每个函数都显示零时间?

标签: c++ windows profiling gprof


【解决方案1】:

gprof 不计算任何阻塞时间,例如 I/O 或其他内容。此外,在任何在子函数中完成所有工作的例程中,“自我时间”通常都非常小,例如,如果您主要使用 DLL 中的库,而 gprof 看不到它。 Check this answer.

【讨论】:

  • 阻塞时间也不会导致 CPU 被最大化(根据 OP)。
  • @Mark:对,这就是我添加第二句话的原因。
猜你喜欢
  • 2016-10-03
  • 1970-01-01
  • 2021-12-25
  • 2020-03-09
  • 2020-03-05
  • 2016-11-06
  • 1970-01-01
  • 2017-01-28
  • 2013-03-27
相关资源
最近更新 更多