如何避免基准中英特尔涡轮增压的副作用



我正在使用JMH运行一个微基准,以评估不同Java算法实现的性能。然而,我观察到不一致的吞吐量,具体取决于天气,英特尔CPU涡轮增压促进是否正在运行。由于根据环境条件会激活涡轮增压,因此有时会激活某些基准测试,而不是针对其他测试。因此,某些结果仅仅是因为涡轮增压被激活而不是因为其效率更好。

因此,我试图通过用@GroupThreads(threadsNumber)注释所有测试和threadsNumber等于可用处理器的数量来避免涡轮增压的影响执行。

这是一种正确的方法吗?是否有更可靠的替代方法可以避免涡轮增压的影响?

更新:根据@andreas答案,另一种方法是在BIOS或操作系统设置中关闭涡轮增压。但是,由于CPU时钟频率可能会改变,因此我认为这还不足以将其关闭,因为CPU速度变化也会影响基准测试。因此,也许保持它更可靠,迫使涡轮增压运行并将所有线程设置为基准。

哪一种是避免涡轮增压影响的更好方法?

以防止涡轮增压,将其关闭在BIOS或操作系统设置中。

Google disable turbo boost如何取决于您的系统。

我将做分级的基准测试,这是我过去所做的。因此,您可以运行一个线程,然后一次添加一个线程,例如线程计数为1,2,3,4。使用线程池时要小心,但可以创建原始线程或标记线程池并"录制" long running&quot'在池中避免攀爬攀岩算法妨碍了(尽管在处理器计数下的线程计数都不应该发生 - 从理论上讲(。

(。

我过去曾绘制过此图,以查看"尾巴"。随着处理器计数的增长,因为这使正在发生的事情更加准确。我还将混合您的基准测试以进行纯粹的算术单元工作,大型存储器工作和1/2级缓存工作。

最新更新