C++ main 只使用约 20% 的时间说 gprof

Posted

技术标签:

【中文标题】C++ main 只使用约 20% 的时间说 gprof【英文标题】:C++ main only uses ~20% time says 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 是多重多项式二次筛 :-) 【参考方案1】:

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

【讨论】:

我使用 NTL C++ 库提供的 GetTime() 函数按程序计时。它测量进程在 CPU 上运行的时间。它说大约53秒。我一开始就输入了程序,但是我使用 GetTime() 的手动计时直到在那之后才开始。 53 秒与我在计算机上查看时钟所观察到的非常吻合。我还没有尝试使用 time 命令运行它,我该怎么做?我不知道我是否希望它受 CPU 限制或 IO 限制。 啊,所以 gprof 当然会计入我花在程序输入上的时间!这就是为什么它说 main 实际上只运行了这么短的时间。我将尝试将我的输入硬编码到程序中并查看结果!

以上是关于C++ main 只使用约 20% 的时间说 gprof的主要内容,如果未能解决你的问题,请参考以下文章

android camera intent 在某些手机上崩溃应用程序(约 20%)

C++ 套接字服务器 - 无法使 CPU 饱和

完美世界预告2021中期业绩:近三年游戏年复合增长约20%

2015级C++第2周实践项目

C++特征值/向量分解,只需要快速的前n个向量

C++ 的 main.cpp 中的结构声明问题