我有一个关于在Ubuntu 12.04上测量CPU时间的问题。
我想在某些循环中使用CPU时间作为停止条件。什么是最好的方式?
while(....)
{
//main part
// get CPUTIME
if(CPUTIME>= Given_Time)
{
break;
}
}
1)如果我不太关心时间的解决,我可以使用clock()
。
time_t begin=clock();
....
time_t end=clock();
CPUTIME=(double)(end-begin)/(double)(CLOCKS_PER_SEC);
然而,time_t
很多都会溢出,因为运行时间可能很长(超过一小时)。我该如何解决这个问题?
2)第二个选项是使用getrusage(int who, struct rusage *usage)
在循环中调用此函数是否花费太多?
3)第三种选择是使用int clock_gettime(clockid_t clk_id, struct timespect *tp)
到目前为止,这是我选择的最佳选择。
任何建议和意见都会有所帮助。
答案 0 :(得分:1)
根据循环的运行速度,您可能不希望每个循环调用检查函数。也许只需添加一个循环计数器并检查CPU时间,例如(i % 1000) == 0
。
回答你的问题:我个人使用clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...)
,因为librt
(此函数所在的库)专门用于此类任务。但是,没有理由不能使用其他两个;您可以通过检测值包装的时间并使用单独的计数器计算其包装的次数来轻松检测clock()
溢出。