当我测试模块的周期数时,每次测试的结果都大不相同。

时间:2019-04-25 03:18:09

标签: benchmarking intel avx2 avx512 rdtsc

当我测试模块的周期数时,每次测试的结果有很大不同吗?

1781344-->First test

1264558-->Second test

1388058-->Third test

use __rdtsc()记录周期,并使用AVX512内部函数。

有没有什么方法可以使每个测试的周期数基本一致?

1 个答案:

答案 0 :(得分:3)

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

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

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

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