c++ - 如果在 Intel CPU 上关闭 "SpeedStep Technology",RDTSC() 是否准确?

标签 c++ c windows

寻找最准确的时间戳。

CPU 周期计数器似乎可以提供:使用 unsigned __int64 __rdtsc();

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

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

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

最佳答案

Will rdtsc() be an accurate measure of elapsed time between two events?

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

What will be the cpu clock speed? Is it be exactly the advertised CPU speed (i.e. 2.4 GHz CPU - use 2,400,000,000 per second to divide the CPU clock count value for getting the actual time)?

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

关于c++ - 如果在 Intel CPU 上关闭 "SpeedStep Technology",RDTSC() 是否准确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19918927/

相关文章:

c - Xcode 4.5 字符未显示在控制台框中,使用 C 语言中的 scanf()

c - 在 Flex Lexer 中,为什么在加载新输入之前将最后一个字符移动到缓冲区的开头?

c++ - 为什么堆的数量总是1?

c++ - 如何使用 openFrameworks 开发音乐可视化工具

c++ - 使用 MODULEENTRY32 和 MODULEINFO,在单独的进程中扫描特定 INT 值的步骤是什么?

c - 这 3 行 C 代码本身做了什么,它们总共做了什么?

windows - xlsopen 在 Windows 10 Octave 4.0.3 中不起作用

windows - 运行进程的CPU负载

c++ - RAM 高效的 C++ 属性

c++ - Stroustrup 的 Can_Copy 模板如何工作?