我正在尝试让我的程序自定时,我知道两种方法
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 秒长。
如果可能的话,我希望知道是否有改进方法或其他库能够缩短系统时间和用户时间。如果我必须使用其他库,我想要用户时间计时和实时计时的库。
感谢您的任何建议!