相关疑难解决方法(0)

CPU TSC获取操作,尤其是在多核多处理器环境中

在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在核心和处理器之间保持同步的方式.

c assembly multicore cpu-registers microprocessors

14
推荐指数
4
解决办法
7895
查看次数

gettimeofday()的单位是多少?

我有一个程序来计算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)

延迟测量为发布者和订阅者的时间戳差异.所以,我担心测量的延迟单位.是几秒钟还是几微秒?

c c++ gettimeofday

5
推荐指数
1
解决办法
1万
查看次数

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

**********************原创编辑**********************


我正在使用不同类型的时钟来获得LINUX系统的时间:

rdtsc,gettimeofday,clock_gettime

并且已经读过这样的各种线程:

我可以在Linux上获得最佳时序分辨率

如何获得linux gettimeofday()的微秒时间以及它的准确性是多少?

如何测量C中的时间间隔?

更快相当于gettimeofday

时间函数的粒度

为什么clock_gettime如此不稳定?

但我有点困惑:


粒度,分辨率,精度,准确度有什么区别?


粒度(或分辨率或精度)准确度不一样(如果我是对的......)

例如,在使用"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)我们可以改变它们(以任何方式)吗?

提前致谢


**********************编辑2号**********************

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

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/

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

感谢大家的回复!


c linux time

3
推荐指数
1
解决办法
8085
查看次数