计算一个庞大的c ++程序的运行时间

时间:2010-11-12 21:45:28

标签: c++ performance long-running-processes

建议的估算时间的方法是使用clock()函数,然后将cpu周期的计数除以周期/秒。

我的问题是我尝试运行的程序需要花费很多时间(以小时为单位)。这意味着clock()函数(返回long int)返回一个垃圾值(因为max long int对此不够大)

任何建议(除了估计内部循环的时间并添加它们之外)?

long t1 = clock();
function();
long t2=clock();

time = ((double)t2 - t1) / CLOCKS_PER_SEC

7 个答案:

答案 0 :(得分:5)

如果你在Linux / Unix下运行它,你可以说:

time my_process

答案 1 :(得分:3)

从百分比误差的角度考虑问题。

如果您的程序需要数小时才能运行(假设4小时......或14,400秒),则1/2%错误为72秒,或稍微超过一分钟。

换句话说,要获得1/2的百分之一的准确答案,您只需要到最近的分钟。假设手持式秒表可以在一秒钟内,甚至1/10秒内,你的错误将会非常小。

我的观点是,您只需使用秒计时器或手持式秒表即可准确测量您的程序。

答案 2 :(得分:1)

如果程序长时间运行,则亚秒级精度可能不是特别重要。在这种情况下,为什么不拨打time()

答案 3 :(得分:0)

Boost timers效果很好。

  

计时器库提供一个用于测量已用时间的计时器类,一个用于报告已用时间的progress_timer类,以及一个用于显示目标进度指示的progress_display类。

答案 4 :(得分:0)

函数gettimeofday()

#include <sys/time.h>

int gettimeofday(struct timeval *tv, NULL);

函数gettimeofday()和settimeofday()可以获得时间。 tv参数是struct timeval(如中所述):

struct timeval {
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};

time_t至少为32位,因此可以存储数小时。

答案 5 :(得分:0)

如果精度(由queryPerformanceTimer等win调用给出)并不重要,我会使用getTimeofTheDay方法(由@osgx建议)。

答案 6 :(得分:0)

#include <time.h>
int main()
{

clock_t t1,t2;
t1=clock();
//write your code here

t2=clock();
float runningTime ((float)t2-(float)t1);
//runningTime contains the time
return 0;

}