【发布时间】:2011-12-31 15:45:05
【问题描述】:
我正在使用 gcc 编译器来编译 C 程序。如何测量 C 代码的特定部分或特定语句执行所需的确切 CPU 时间?
【问题讨论】:
-
google "gcc 时间码" result
我正在使用 gcc 编译器来编译 C 程序。如何测量 C 代码的特定部分或特定语句执行所需的确切 CPU 时间?
【问题讨论】:
如果粗略的计数器(~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 中,您可以使用 <chrono> 功能来获得更高分辨率的时钟。
【讨论】:
getrusage(),它提供了您从 time 命令获得的分解信息。
clock 返回挂钟时间,但在正确实施时:“时钟函数返回实施对 处理器时间的最佳近似值 由程序使用 [...]”(第 7.23.2.1/3 节,强调添加)。
您需要应用程序的执行配置文件。您需要在编译和链接时将-pg 选项传递给 GCC,然后通过 gprof 运行程序。请参阅 Brian J. Gough 的 GCC 简介 中的 this section,了解该过程的简短概述。
【讨论】: