【问题标题】:Determining the CPU time required by C code using gcc? [closed]使用 gcc 确定 C 代码所需的 CPU 时间? [关闭]
【发布时间】:2011-12-31 15:45:05
【问题描述】:

我正在使用 gcc 编译器来编译 C 程序。如何测量 C 代码的特定部分或特定语句执行所需的确切 CPU 时间?

【问题讨论】:

标签: c gcc profiling


【解决方案1】:

如果粗略的计数器(~20ms 分辨率)是可以接受的,这是我的标准 hacro:

#include <ctime>
#define CLOCK_TICK(acc, ctr)  ctr = std::clock()
#define CLOCK_TOCK(acc, ctr)  acc += (std::clock() - ctr)
#define CLOCK_RESET(acc) acc = 0
#define CLOCK_REPORT(acc) (1000. * double(acc) / double(CLOCKS_PER_SEC))

static std::clock_t tacc, tctr;

用法:

CLOCK_TICK(tacc, tctr);
do_something_critical();
CLOCK_TOCK(tacc, tctr);

std::cout << "This took " << CLOCK_REPORT(tacc) << "ms.\n";

在 C++11 中,您可以使用 &lt;chrono&gt; 功能来获得更高分辨率的时钟。

【讨论】:

  • 麻烦的是,这会给你“墙”时间; OP 很可能需要 CPU 时间。这将需要与 GCC 的分析系统进行交互。
  • @jcsalomon:是的,我明白了。在 Linux 上,您可以尝试使用 getrusage(),它提供了您从 time 命令获得的分解信息。
  • @jcsalomon:在某些系统上(例如,MS VC++)clock 返回挂钟时间,但在正确实施时:“时钟函数返回实施对 处理器时间的最佳近似值 由程序使用 [...]”(第 7.23.2.1/3 节,强调添加)。
【解决方案2】:

您需要应用程序的执行配置文件。您需要在编译和链接时将-pg 选项传递给 GCC,然后通过 gprof 运行程序。请参阅 Brian J. Gough 的 GCC 简介 中的 this section,了解该过程的简短概述。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2016-06-25
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多