0

我在测试模块的循环数时,每次测试的结果都大不相同?</p>

1781344-->First test

1264558-->Second test

1388058-->Third test

use __rdtsc()记录周期,并使用AVX512内在。</p>

有什么方法可以使每次测试的循环数基本一致吗?

4

1 回答 1

3

完全保证一致的 RDTSC 计数是不切实际的。例如,您必须禁用中断以及通常的东西,如禁用涡轮,以便 CPU 在空闲后以恒定速度运行。

(请注意,现代 CPU 上的 RDTSC 计算参考周期,而不是实际的核心时钟周期。 获取 CPU 周期数?

在第一次定时测试之前,您必须预热缓存 + 分支预测 + 一切,并让 CPU 达到最大时钟速度。如果您分别对测试进行计时,则将第一个测试计时为“冷”状态实际上很有用。

在实践中,人们不会禁用中断,只是假设在测试运行期间发生了中断或某些事情而忽略了高异常值。无论如何,您都无法禁用 SMM 或 NMI。

于 2019-04-25T05:41:20.697 回答