【问题标题】:C++ main only uses ~20% time says gprofC++ main 只使用约 20% 的时间说 gprof
【发布时间】:2010-07-05 14:50:51
【问题描述】:

我尝试使用 gprof 分析我的 C++ 程序。程序本身运行了大约 53 秒,所以我不明白为什么它说,main 只运行了大约 8.29 秒。对此有何解释?

摘录如下:

index % time    self  children    called     name
                                                 <spontaneous>
[2]     20.5    0.00    8.29                 main [2]
                0.00    8.28       1/1           MPQS::start(std::basic_ofstream<char, std::char_traits<char> >&) [3]
                0.00    0.01       1/1           MPQS::MPQS(NTL::ZZ, long) [36]
                0.00    0.00       1/1           MPQS::~MPQS() [78]
-----------------------------------------------
                0.00    8.28       1/1           main [2]
[3]     20.5    0.00    8.28       1         MPQS::start(std::basic_ofstream<char, std::char_traits<char> >&) [3]
                7.15    1.08     801/801         MPQS::sieve() [4]
                0.00    0.04     801/801         MPQS::find_smooth_vals() [23]
                0.01    0.00       1/1           MPQS::try_solutions(NTL::mat_GF2&) [35]
                0.00    0.00     801/801         MPQS::compute_coeffecients() [59]
-----------------------------------------------
                7.15    1.08     801/801         MPQS::start(std::basic_ofstream<char, std::char_traits<char> >&) [3]
[4]     20.4    7.15    1.08     801         MPQS::sieve() [4]
                1.08    0.00     801/801         MPQS::find_candidates() [9]

【问题讨论】:

  • 它是测量挂钟时间还是实际累积的进程使用的 CPU 时间?
  • 您是否尝试过通过 unix time 命令运行您的代码?这将向您显示挂钟时间与用户空间时间(您的代码)与内核时间。您希望您的代码受 IO 限制还是 CPU 限制?
  • @Rup:“MPQS”几乎可以肯定代表“多重多项式二次筛”,一种用于分解大数的算法。我希望它会大量受 CPU 限制。
  • @Jerry Coffin:确实,MPQS 是多重多项式二次筛 :-)

标签: c++ gprof


【解决方案1】:

您是否将结果打印到控制台? gprof 不计算阻塞时间。 See this.

【讨论】:

  • 我使用 NTL C++ 库提供的 GetTime() 函数按程序计时。它测量进程在 CPU 上运行的时间。它说大约53秒。我一开始就输入了程序,但是我使用 GetTime() 的手动计时直到在那之后才开始。 53 秒与我在计算机上查看时钟所观察到的非常吻合。我还没有尝试使用 time 命令运行它,我该怎么做?我不知道我是否希望它受 CPU 限制或 IO 限制。
  • 啊,所以 gprof 当然会计入我花在程序输入上的时间!这就是为什么它说 main 实际上只运行了这么短的时间。我将尝试将我的输入硬编码到程序中并查看结果!
猜你喜欢
  • 2015-01-17
  • 1970-01-01
  • 2021-11-18
  • 2016-09-18
  • 2013-08-29
  • 2011-04-05
  • 2019-10-04
  • 2018-07-28
  • 1970-01-01
相关资源
最近更新 更多