关闭6核Intel Xeon中的超线程技术

6

我们购买了一台12核的MacPro来进行蒙特卡罗计算。它的Intel Xeon处理器启用了超线程(HT),因此实际上应该有24个进程并行运行,以使它们完全被利用。然而,我们的计算更有效地在12x100%上运行,而不是在24x50%上运行,因此我们尝试通过系统偏好设置中的处理器面板关闭超线程,以获得更高的性能。人们也可以通过以下方式关闭HT:

hwprefs -v cpu_ht=false

然后我们进行了一些测试,以下是我们得到的结果:
  1. 12个并行任务在启用或禁用HT时同时运行,这让我们感到失望。
  2. 如果关闭HT,则24个并行任务会损失20%(而不是我们之前认为的50%)。
  3. 当启用HT时,从24个任务切换到12个任务会导致效率降低20%(这也很令人惊讶)。
  4. 如果关闭HT,则从24个任务切换到12个任务不会有任何变化。
看来超线程只会降低我们计算的性能,没有办法避免。我们用于计算的程序是用Fortran编写并使用gfortran编译的。有没有办法利用这个硬件使其更有效率?
更新:我们的蒙特卡洛计算(MCC)通常分步进行,以避免数据丢失和其他原因(无法始终避免此类步骤)。在我们的情况下,每个步骤由许多持续时间可变的模拟组成。由于每个步骤被分配给多个并行任务,它们的持续时间也是可变的。基本上,所有更快的任务都必须等待最慢的任务完成。这个事实迫使我们采取更大的步骤,它们以平均值结束,因此处理器不会浪费时间等待。这就是我们选择12 * 2.66 GHz而不是24 * 1.33 GHz的动机。如果可能关闭HT,则从启用HT的24个任务切换到禁用HT的12个任务将获得约+ 10%的性能。然而,测试表明我们损失了20%。因此,我的结论是计算效率低下了30%。
我在测试中使用了相当大的步骤,但通常步骤较短,因此效率进一步降低。
还有一个原因-我们的某些计算需要3-5 GB的内存,因此您可能可以看出拥有12个快速任务对我们来说有多经济。我们正在努力实现共享内存,但这将是一个漫长的项目。因此,我们需要找出如何使现有的硬件/软件尽可能快。

http://forums.macrumors.com/archive/index.php/t-733238.html - rwong
通常可以在BIOS设置中关闭此选项,但我不熟悉Mac电脑,因此可能不适用。 - Brian Rasmussen
2
你的问题有些奇怪...你似乎从HyperThreading中获益,但你想要禁用它?你说你的计算使用12//比24更有效率,但你的测试结果似乎并非如此。那么你为什么想要禁用HT呢? - jv42
@jv42,我想以这样的方式禁用它,使得12个任务至少与启用24个超线程的速度一样快。因此,如果没有这样的可能性,那么我肯定不想禁用超线程。我的动机在更新的问题中。 - Andrei Fokau
1
你从哪里得到激活HT会使CPU时钟速度减半的信息?我认为在Xeon处理器上,它根本不会改变CPU速度。从我所看到的情况来看,除了极少数特殊情况外,HT几乎总是有助于性能表现的。 - jv42
显示剩余2条评论
4个回答

8
这更像是一条延伸的评论而不是答案:
我并不觉得你的观察结果有多惊人。超线程是一种贫民版的并行处理方法,它允许你在一个CPU上拥有2个挂起指令流水线。但它并没有提供额外的浮点或整数算术单元或更多的寄存器;当一个流水线无法为ALU(或现在称之为其他名称的东西)提供数据时,另一个流水线会在1到2个时钟周期内被激活。这与没有超线程的CPU情况形成对比,在没有超线程的CPU上,当指令流水线停滞时,必须将其清空并重新填充来自另一个进程的指令,然后CPU才能恢复速度。 Wikipedia关于超线程的文章 很好地解释了所有这些。
如果你正在运行的负载中,流水线停滞完全同步,并且代表程序混合总执行时间的主要部分,则通过从未启用超线程的处理器升级到启用超线程的处理器,可能会使程序的速度翻倍。
如果您能编写一个永远不会在指令流水线中停滞的程序,那么超线程将无法提供任何加速执行方面的好处。您测量到的不是由于超线程而导致的加速(嗯,它确实是由于超线程而加速了,但您实际上并不想要这个)而是您的线程无法保持流水线运转。
您需要做的是实际上减少由于超线程而导致的加速!或者说,您需要通过保持流水线填充来增加12个进程(每个核心一个)的执行速率。就我个人而言,我会在优化程序在12个核心上的执行时关闭超线程。
祝您玩得开心。

2

我对你所描述的基准测试有些困难理解。

我们将第一列定义为完成12项任务且开启ht的工作量的100%。如果您能在相同的时间内完成两倍的工作量,那么我们将其称为200%。那么其他三个框中应填入哪些数字呢?

编辑:已使用您提供的数字进行更新。

             without HT     with HT
12 tasks     100%           100%
24 tasks     100%           125%

所以,我的理解是如果HT(超线程)被禁用,当您的线程基本上暂停时(例如,当它们正在等待从内存或磁盘中获取数据时),会有时间间隙,因此它们实际上并不以2.66 GHz的速度运行,而是略低。启用超线程后,CPU会在这些短暂的间隙中切换任务,因此正在使用的处理能力总量会增加。


你的表格是一个很好的想法。12+HT=100%, 24+HT=125%, 24-HT=100%。我希望得到的是12-HT=125-140%,而不是100%。但这似乎是不可能的。 - Andrei Fokau

1

这意味着开启超线程后,从12个任务切换到24个任务可以提高20%的效率!好的基准测试!

另一方面,如果您的程序是这样编写的,即每个线程只能处理一个单独的任务(而不是能够将单个任务分成较小的块并同时进行处理),那么为了减少每个任务的延迟(从开始到完成),您只需要在软件中限制线程数为12。硬件超线程开关可以保持任何位置。


0

查看此帖子,了解在Xcode工具中启用/禁用超线程(以及活动CPU数量)的应用程序。该设置不会在睡眠或重新启动后保留:http://www.logicprohelp.com/forum/viewtopic.php?f=5&t=88835

(您运行Instruments应用程序,取消初始屏幕,然后更改CPU首选项)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接