当我测试模块的周期数时,每次测试的结果有很大不同吗?
1781344-->First test
1264558-->Second test
1388058-->Third test
我use __rdtsc()
记录周期,并使用AVX512内部函数。
有没有什么方法可以使每个测试的周期数基本一致?
答案 0 :(得分:3)
完全保证一致的RDTSC计数是不切实际的。例如您必须禁用中断以及诸如禁用Turbo之类的常用功能,以便CPU在闲置后以恒定速度运行。
(请注意,现代CPU上的RDTSC计数的是参考周期,而不是实际的核心时钟周期。Get CPU cycle count?)
在第一次定时测试之前,您必须预热缓存+分支预测+所有内容,并使CPU达到最大时钟速度。如果您要分别对测试进行计时,那么将第一个计时设置为“冷”状态实际上很有用。
在实践中,人们不会禁用中断,而只是假设在测试运行期间发生了中断或某些情况,就忽略了异常值。无论如何,您都不能禁用SMM或NMI。