我正在使用JMH运行一个微基准,以评估不同Java算法实现的性能。然而,我观察到不一致的吞吐量,具体取决于天气,英特尔CPU涡轮增压促进是否正在运行。由于根据环境条件会激活涡轮增压,因此有时会激活某些基准测试,而不是针对其他测试。因此,某些结果仅仅是因为涡轮增压被激活而不是因为其效率更好。
。因此,我试图通过用@GroupThreads(threadsNumber)
注释所有测试和threadsNumber
等于可用处理器的数量来避免涡轮增压的影响执行。
这是一种正确的方法吗?是否有更可靠的替代方法可以避免涡轮增压的影响?
更新:根据@andreas答案,另一种方法是在BIOS或操作系统设置中关闭涡轮增压。但是,由于CPU时钟频率可能会改变,因此我认为这还不足以将其关闭,因为CPU速度变化也会影响基准测试。因此,也许保持它更可靠,迫使涡轮增压运行并将所有线程设置为基准。
哪一种是避免涡轮增压影响的更好方法?
以防止涡轮增压,将其关闭在BIOS或操作系统设置中。
Google disable turbo boost
如何取决于您的系统。
我将做分级的基准测试,这是我过去所做的。因此,您可以运行一个线程,然后一次添加一个线程,例如线程计数为1,2,3,4。使用线程池时要小心,但可以创建原始线程或标记线程池并"录制" long running&quot'在池中避免攀爬攀岩算法妨碍了(尽管在处理器计数下的线程计数都不应该发生 - 从理论上讲(。
(。我过去曾绘制过此图,以查看"尾巴"。随着处理器计数的增长,因为这使正在发生的事情更加准确。我还将混合您的基准测试以进行纯粹的算术单元工作,大型存储器工作和1/2级缓存工作。