0

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

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 秒,这意味着 sys时间大约是 10 秒长。

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

感谢您的任何建议!

4

1 回答 1

0

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

于 2012-12-03T19:00:19.207 回答