我正在使用不同类型的时钟来获得LINUX系统的时间:
rdtsc,gettimeofday,clock_gettime
并且已经读过这样的各种线程:
如何获得linux gettimeofday()的微秒时间以及它的准确性是多少?
但我有点困惑:
粒度(或分辨率或精度)和准确度不一样(如果我是对的......)
例如,在使用"clock_gettime"时,精度为10ms,因为我得到:
struct timespec res;
clock_getres( CLOCK_REALTIME, &res):
Run Code Online (Sandbox Code Playgroud)
并且粒度(定义为每秒滴答数)是100Hz(或10ms),正如我在执行时获得的:
long ticks_per_sec = sysconf(_SC_CLK_TCK);
Run Code Online (Sandbox Code Playgroud)
准确度为纳秒,如上面的代码所示:
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所建议的,我发现了一个精密的纳秒,而不是真的比"clock_gettime更好(因为他们在这个网站做的):
http://msdn.microsoft.com/en-us/library/t3282fe5.aspx
我认为这是一个面向窗口的时间函数
使用CLOCK_MONOTONIC时clock_gettime比使用CLOCK_REALTIME时给出了更好的结果.那是正常的,因为首先计算处理时间和其他实时分别
c)我也发现了英特尔功能ippGetCpuClocks,但我没有测试它,因为它必须先注册:
http://software.intel.com/en-us/articles/ipp-downloads-registration-and-licensing/
...或者您可以使用试用版
感谢大家的回复!
Ker*_* SB 16
精确度是指信息量,即您报告的有效位数.(例如,我是2米,1.8米,1.83米,高1.8322米.所有这些测量都是准确的,但越来越精确.)
准确性是报告的信息与事实之间的关系.(例如"我身高1.70米"比"1.8米"更精确,但实际上并不准确.)
粒度或分辨率是计时器可以测量的最小时间间隔.例如,如果您具有1ms的粒度,那么以毫秒精度报告结果的点很少,因为它不可能精确到该精度水平.
在Linux上,粒度越来越大的可用定时器是:
clock()从<time.h>(20ms或10ms分辨率?)
gettimeofday()来自Posix <sys/time.h>(微秒)
clock_gettime() 在Posix上(纳秒?)
在C++中,<chrono>标题围绕此提供了一定量的抽象,并std::high_resolution_clock试图为您提供最佳的时钟.
| 归档时间: |
|
| 查看次数: |
8085 次 |
| 最近记录: |