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