************************原文编辑************************
我正在使用不同类型的时钟来获取 Linux 系统上的时间:
rdtsc, gettimeofday, clock_gettime
并且已经阅读了诸如此类的各种问题:
但我有点困惑:
粒度、分辨率、精度和准确度之间有什么区别?
粒度(或分辨率或精度)和准确性不是一回事(如果我是对的......)
例如,在使用“clock_gettime”时,我得到的精度是 10 毫秒:
struct timespec res;
clock_getres(CLOCK_REALTIME, &res):
并且粒度(定义为每秒滴答声)为 100 Hz(或 10 ms),正如我在执行时得到的:
long ticks_per_sec = sysconf(_SC_CLK_TCK);
如上面的代码所示,精度以纳秒为单位:
struct timespec gettime_now;
clock_gettime(CLOCK_REALTIME, &gettime_now);
time_difference = gettime_now.tv_nsec - start_time;
在下面的链接中,我看到这是 Linux 对粒度的全局定义,最好不要更改它:
http://wwwagss.informatik.uni-kl.de/Projekte/Squirrel/da/node5.html#fig:clock:hw
所以我的问题是如果上面的评论是正确的,而且:
a) 我们可以看到 rdtsc 和 gettimeofday 的粒度是多少(通过命令)?
b)我们可以改变它们(以任何方式)吗?
************************编辑编号 2************************
我已经测试了一些新时钟,我想分享信息:
a) 在下面的页面中,David Terei做了一个很好的程序来比较各种时钟及其性能:
https://github.com/dterei/Scraps/tree/master/c/time
b)我还按照 Raxman 的建议测试了omp_get_wtime,我发现了 nsec 的精度,但并不比“clock_gettime(就像他们在本网站上所做的那样)更好:
http://msdn.microsoft.com/en-us/library/t3282fe5.aspx
我认为这是一个面向 Windows 的时间函数。
与使用 CLOCK_REALTIME 相比,使用 CLOCK_MONOTONIC的clock_gettime给出了更好的结果。这很正常,因为第一个分别计算PROCESSING时间和另一个REAL TIME
c)我还发现了英特尔函数ippGetCpuClocks,但不是我没有测试过它,因为它必须先注册:
http://software.intel.com/en-us/articles/ipp-downloads-registration-and-licensing/
...或者您可以使用试用版