在Linux世界中,要获得纳秒精度定时器/时钟提示,可以使用:
#include <sys/time.h>
int foo()
{
timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
//--snip--
}
Run Code Online (Sandbox Code Playgroud)
这个答案提出了asm一种用RDTSC指令直接查询cpu时钟的方法.
在多核,多处理器架构中,这个时钟滴答/定时器值如何在多个内核/处理器之间同步?我的理解是,在固有的围栏中完成了.这种理解是否正确?
你能否提出一些可以详细解释这个问题的文件?我对Intel Nehalem和Sandy Bridge微体系结构感兴趣.
编辑
将进程限制为单个核心或cpu不是一种选择,因为该进程非常庞大(就消耗的资源而言)并且希望最佳地利用包含所有核心和处理器的机器中的所有资源.
编辑
感谢您确认TSC在核心和处理器之间同步.但我最初的问题是这种同步是如何完成的?它是否带有某种围栏?你知道任何公共文件吗?
结论
感谢所有输入:以下是此讨论的结论:TSC在初始化时使用在多处理器/多核系统中的核心和处理器之间发生的RESET进行同步.之后,每个Core都是独立的.TSC与锁相环保持不变,这将使频率变化正常化,从而使给定Core内的时钟变化正常化,这就是TSC在核心和处理器之间保持同步的方式.
我有一个程序来计算pub-sub模型中对象的延迟.我已将以下函数用于时间戳:
uint64_t GetTimeStamp() {
struct timeval tv;
gettimeofday(&tv,NULL);
return tv.tv_sec*(uint64_t)1000000+tv.tv_usec;
}
Run Code Online (Sandbox Code Playgroud)
延迟测量为发布者和订阅者的时间戳差异.所以,我担心测量的延迟单位.是几秒钟还是几微秒?
我正在使用不同类型的时钟来获得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/
...或者您可以使用试用版
感谢大家的回复!