当我测试模块的循环次数时,每次测试的结果都大不相同.



当我测试模块的循环数时,每个测试的结果都大不相同?

1781344-->First test
1264558-->Second test
1388058-->Third test

use __rdtsc()记录周期,并使用AVX512内在的。

有没有办法使每次测试的周期数基本一致?

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

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

而且您必须预热缓存 + 分支预测 + 所有内容,并在第一次计时测试之前让 CPU 达到最大时钟速度。 如果要单独对测试进行计时,则将第一个测试定为"冷"状态实际上很有用。

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

最新更新