在linux中计算时间:粒度和精度

时间:2013-05-24 16:55:37

标签: c linux time

**********************原始编辑********************** < / H2>

我正在使用不同类型的时钟来获取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

Granularity in time function

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,&amp; 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)我们可以(以任何方式)改变它们吗?

提前致谢


**********************编辑no2 ********************** < / H2>

大家好,我测试过一些新时钟,我想分享一下信息:

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/

...或者您可以使用试用版

感谢大家的回复!!!


1 个答案:

答案 0 :(得分:14)

  • 精确度是信息量,即您报告的有效位数。 (例如,我是2米,1.8米,1.83米,1.8322米高。所有这些测量都是准确的,但越来越精确。)

  • 准确性是报告的信息与事实之间的关系。 (例如“我身高1.70米”比“1.8米”更准确,但实际上并不准确。)

  • 粒度分辨率是计时器可以测量的最小时间间隔。例如,如果你有1毫秒的粒度,那么用纳秒精度报告结果几乎没有意义,因为它不可能精确到那个精度水平。

在Linux上,粒度越来越大的可用计时器是:

    来自clock()
  • <time.h>(20分钟或10毫秒分辨率?)

  • 来自Posix的{li>

    gettimeofday() <sys/time.h>(微秒)

    Posix上的
  • clock_gettime()(纳秒?)

在C ++中,<chrono>标题围绕此提供了一定量的抽象,std::high_resolution_clock尝试为您提供最佳时钟。