现在,我正在尝试确定一种方法来衡量特定函数的时间(类似于pthread_create)。当然,现在,这些类型的功能都经过了极大的优化,以尽可能少地占用时间;事实上,我的计时器在用户空间中使用gettimeofday以微秒为单位的计量器无法充分测量任何东西。
通常,如果我可以搞乱内核,我会使用像get_cycles这样的东西来测量原始周期数作为性能指标。但是,我还没有找到在用户空间中执行此操作的方法。有没有办法使用get_cycles(或等效的)或其他更高精度的计时器,我可以在用户空间中使用它来测量极快的功能?
答案 0 :(得分:6)
使用RDTSC(如果您使用的是x86)或clock_gettime
unsigned long long cycleCount() {
asm ("rdtsc");
}
答案 1 :(得分:4)
clock_gettime
允许您从线程开始,进程开始或时期获得纳秒精确的时间。
答案 2 :(得分:2)
你是否尝试过花费时间来执行你的功能,比如10000次并取平均值?这样可以省去寻找更准确的计时功能的麻烦。
话虽如此,这个答案:Is gettimeofday() guaranteed to be of microsecond resolution?似乎表明使用的函数比gettimeofday()
更好。
答案 3 :(得分:1)
我的linux手册页告诉我
遵守
SVr4,4.3BSD。 POSIX.1-2001描述 gettimeofday()但不是 settimeofday()强制。 POSIX.1-2008标志 gettimeofday()已过时, 推荐使用 而不是clock_gettime(2)。