【问题标题】:Is RDTSC() accurate if "SpeedStep Technology" is turned off on a Intel CPU?如果在 Intel CPU 上关闭“SpeedStep 技术”,RDTSC() 是否准确?
【发布时间】:2013-11-12 00:49:52
【问题描述】:

寻找最准确的时间戳。

看起来 CPU 周期计数器可以提供:使用unsigned __int64 __rdtsc();

如果我能够关闭动态 CPU 速度选项,英特尔芯片上的“SpeedStep 技术”(我假设来自 BIOS?):

  • rdtsc() 是否会准确测量两次之间经过的时间? 活动?

  • cpu 时钟速度是多少?是否正是广告中所说的 CPU 速度(即 2.4 GHz CPU - 每秒使用 2,400,000,000 除 CPU 时钟计数值以获得实际时间)?

【问题讨论】:

  • 如果您使用的是 Windows,我会改用 QueryPerformanceCounterQueryPerformanceFrequency
  • @retired-ninja:我这样做是因为 QueryPerformanceCounter() 给了我 10 微秒的延迟……尽管我可以减去该值,但我对它的任何计数器都不满意使用...

标签: c++ c windows


【解决方案1】:

rdtsc() 是否可以准确测量两个事件之间经过的时间?

不,一般不会。如果您将代码限制为在单个处理器/内核上运行,则可能会有一些机会,但如果不这样做,不同处理器/内核的计数器之间的差异可能会导致错误的结果。

cpu 时钟速度是多少?是否正是宣传的 CPU 速度(即 2.4 GHz CPU - 每秒使用 2,400,000,000 来除 CPU 时钟计数值以获得实际时间)?

大多数机器允许用户在 BIOS 设置中调整时钟速度。根据您的代码运行的环境,您可能可以访问主板的 1.024 MHz 时钟,无论 CPU 时钟速度如何,该时钟都是恒定的。如果你能读懂它,这可以为你确定时间戳计数器上的速率提供坚实的基础。

【讨论】:

    猜你喜欢
    • 2013-09-11
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多