具有较低sys时间的C ++计时方法

时间:2012-12-03 18:54:50

标签: c++ timing

我正在尝试让我的程序自定时,我知道两种方法

1)使用getrusage

truct rusage startu; struct rusage endu;
getrusage(RUSAGE_SELF, &startu); 

//Do computation here

getrusage(RUSAGE_SELF, &endu);
double start_sec = start.ru_utime.tv_sec + startu.ru_utime.tv_usec/1000000.0; 
double end_sec = endu.ru_utime.tv_sec + endu.ru_utime.tv_usec/1000000.0; 
double duration = end_sec - start_sec;

这将获取程序段的用户时间。

2)使用clock(),它获取处理器的执行时间

double start_sec = (double)clock()/CLOCKS_PER_SEC;

//Do computation here

double end_sec = (double)clock()/CLOCKS_PER_SEC;
double duration = end_sec - start_sec;

这将获取程序段的实时时间。

但是,这两种方法的系统时间都很长。用户时间也比没有这些时间的时间长。系统时间有时甚至会使用户时间翻倍。

例如,我正在做旅行商问题,对于用户和实时正常运行大约3秒的输入,这两个时间都使用户时间超过5秒,实时超过15秒,这意味着系统时间大约为10秒。

我希望知道是否有改进方法或其他库可以缩短系统时间和用户时间(如果可能)。如果我必须使用其他库,我需要用户时间计时和实时计时的库。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

我建议您仔细阅读time(7)手册页并考虑clock_gettime(2)系统调用。