2011-11-17 50 views
-3

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

+0

google“gcc time code”[result](http://bytes.com/topic/c/answers/464044-gcc-time-h-problem) –

+1

http://stackoverflow.com/questions/的重复项5644730/c-measuring-computing-time –

回答

3

如果粗计数器(〜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>功能来获得更高分辨率的时钟。

+0

麻烦是,这会给你“墙”的时间; OP很可能需要CPU时间。这将需要与GCC的分析系统连接。 –

+0

@jcsalomon:对,我明白了。在Linux上,你可以试试'getrusage()',它提供了你从'time'命令得到的分解。 –

+1

@jcsalomon:在某些系统上(例如MS VC++),'clock'会返回挂钟时间,但是如果执行正确:“时钟函数返回实现对程序使用的**处理器 时间**的最佳近似值。 。“”(§7.23.2.1/ 3,强调增加)。 –

1

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