为什么一个CPU核心运行速度比其他核心慢?

Edi*_*i H 8 benchmarking multicore affinity

我正在对一个大型科学应用程序进行基准测试,发现在相同输入的情况下它有时会慢10%.经过大量搜索,我发现只有在我的四核CPU核心#2(特别是运行在2.4 GHz的Intel Q6600)上运行时才会出现减速.该应用程序是单线程的,大部分时间都用在CPU密集型矩阵数学例程中.

现在我知道一个核心比其他核心慢,我可以通过将处理器亲和力设置为所有运行的相同核心来获得准确的基准测试结果.但是,我仍然想知道为什么一个核心更慢.

我尝试了几个简单的测试用例来确定CPU的缓慢部分,但测试用例运行的时间相同,即使在慢速核心#2上也是如此.只有复杂的应用程序显示减速.以下是我尝试过的测试用例:

问题:为什么一个CPU内核比其他内核慢,哪个CPU部分导致这种减速?

编辑:更多测试显示了一些Heisenbug行为.当我明确设置处理器亲和性时,我的应用程序不会减慢核心#2的速度.但是,如果它选择在没有明确设置处理器关联的情况下在核心#2上运行,那么应用程序运行速度会慢大约10%.这就解释了为什么我的简单测试用例没有显示相同的减速,因为它们都明确设置了处理器亲和性.因此,看起来有些进程喜欢在核心#2上生存,但如果设置了处理器亲和性,它就会失控.

结论:如果您需要在多核计算机上获得单线程程序的准确基准,请确保设置处理器关联.

Kek*_*koa 7

您可能有选择连接到同一处理器的应用程序(CPU Affinity).

操作系统通常喜欢在同一个处理器上运行,因为它们可以将所有数据缓存在同一个L1缓存上.如果您碰巧在您的操作系统执行大量工作的同一核心上运行您的进程,您可能会遇到CPU性能下降的影响.

听起来有些进程想要坚持使用相同的cpu.我怀疑这是硬件问题.

它不一定是你的操作系统正在做的工作,其他一些后台守护进程可能正在做它.