我正在使用不同类型的时钟来获取LINUX系统的时间:
rdtsc,gettimeofday,clock_gettime
已经阅读过各种各样的主题:
What's the best timing resolution can i get on Linux
How is the microsecond time of linux gettimeofday() obtained and what is its accuracy?
How do I measure a time interval in C?
faster equivalent of gettimeofday
Why is clock_gettime so erratic?
但我有点困惑:
粒度(或分辨率或精度)和准确度不一样(如果我是对的......)
例如,在使用“clock_gettime”时,精度是10ms,因为我得到:
struct timespec res;
clock_getres( CLOCK_REALTIME, &res):
并且粒度(定义为每秒滴答数)是100Hz(或10ms),正如我在执行时得到的那样:
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)我们可以(以任何方式)改变它们吗?
提前致谢
大家好,我测试过一些新时钟,我想分享一下信息:
a)在下面的页面中, David Terei ,做了一个很好的程序来比较各种时钟及其性能:
https://github.com/dterei/Scraps/tree/master/c/time
b)我还测试了 omp_get_wtime 作为 Raxman ,我发现nsec的精度,但并不比“clock_gettime好” (正如他们在本网站上所做的那样):
http://msdn.microsoft.com/en-us/library/t3282fe5.aspx
我认为这是一个面向窗口的时间函数
使用CLOCK_MONOTONIC时使用 clock_gettime 比使用CLOCK_REALTIME时获得更好的结果。这是正常的,因为第一次计算 PROCESSING 时间而另一次实时
c)我发现了英特尔功能 ippGetCpuClocks ,但我没有测试它,因为必须首先注册:
http://software.intel.com/en-us/articles/ipp-downloads-registration-and-licensing/
...或者您可以使用试用版
感谢大家的回复!!!
答案 0 :(得分:14)
精确度是信息量,即您报告的有效位数。 (例如,我是2米,1.8米,1.83米,1.8322米高。所有这些测量都是准确的,但越来越精确。)
准确性是报告的信息与事实之间的关系。 (例如“我身高1.70米”比“1.8米”更准确,但实际上并不准确。)
粒度或分辨率是计时器可以测量的最小时间间隔。例如,如果你有1毫秒的粒度,那么用纳秒精度报告结果几乎没有意义,因为它不可能精确到那个精度水平。
在Linux上,粒度越来越大的可用计时器是:
clock()
的 <time.h>
(20分钟或10毫秒分辨率?)
gettimeofday()
<sys/time.h>
(微秒)
clock_gettime()
(纳秒?)
在C ++中,<chrono>
标题围绕此提供了一定量的抽象,std::high_resolution_clock
尝试为您提供最佳时钟。