使用gcc确定C代码所需的CPU时间?

使用gcc确定C代码所需的CPU时间?,c,gcc,profiling,C,Gcc,Profiling,我正在使用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 #defin

我正在使用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;
#包括
#定义时钟刻度(acc,ctr)ctr=std::CLOCK()
#定义时钟时钟时钟(acc,ctr)acc+=(标准::时钟()-ctr)
#定义时钟重置(acc)acc=0
#定义时钟报告(acc)(1000.*双倍(acc)/双倍(每秒时钟))
静态标准:时钟tacc,tctr;
用法:

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

std::cout << "This took " << CLOCK_REPORT(tacc) << "ms.\n";
时钟滴答声(tacc、tctr);
做一些批评的事;
时钟时钟(tacc、tctr);

std::cout您需要应用程序的执行配置文件。编译和链接时,需要将
-pg
选项传递给GCC,然后通过gprof运行程序。在Brian J.Gough的《GCC简介》中,可以看到该过程的简短概述。

谷歌“GCC时间代码”重复的麻烦是,这会给你“墙”时间;OP可能需要CPU时间。这将需要与GCC的分析系统接口。@jcsalomon:好的,我明白了。在Linux上,您可以尝试使用
getrusage()
,它提供了从
time
命令中得到的分解。@jcsalomon:在某些系统上(例如MS VC++)
clock
返回墙时间,但在正确实现时:“时钟函数返回程序使用的处理器时间的实现最佳近似值[…]”(第7.23.2.1/3节,重点补充)。