首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭6核Intel Xeon中的超线程

关闭6核Intel Xeon中的超线程
EN

Stack Overflow用户
提问于 2010-10-04 11:41:58
回答 4查看 7.4K关注 0票数 6

我们得到了一个12核的MacPro来做蒙特卡罗计算。它的Intel Xeon处理器启用了超线程(HT),因此实际上应该有24个进程并行运行,以充分利用它们。然而,我们的calcs在12x100%上运行的效率比24x50%更高,因此我们尝试通过系统首选项中的Processor窗格关闭超线程,以获得更高的性能。你也可以通过

代码语言:javascript
复制
hwprefs -v cpu_ht=false

然后我们做了一些测试,下面是我们得到的结果:

  1. 12个并行任务同时运行w/或w/o HT,让我们感到失望。
  2. 如果HT关闭,24项并行任务丢失20% (不是我们所认为的-50% )。
  3. 当HT打开时,从24项任务切换到12项任务会降低20%的效率(同样令人惊讶)
  4. 当HT关闭时,从24切换到12并不会改变任何事情。

超线程似乎只是降低了我们计算的性能,没有办法避免它。我们用Fortran编写并用gfortran编译了calcs的程序。有什么方法可以让这款硬件更高效吗?

更新:-我们的蒙特卡罗计算(MCC)通常是按步骤进行的,以避免数据丢失,并由于其他原因(不总是能够避免这样的步骤)。在我们的例子中,每个步骤都包含了许多可变持续时间的模拟。由于每个步骤在多个并行任务之间被分割,所以它们的持续时间也是可变的。基本上,所有更快的任务都要等到最慢的时候才能完成。这一事实迫使我们采取更大的步骤,以较少的时间偏差,因为平均,所以处理器不会浪费他们的时间等待。这是我们拥有12*2.66 GHz而不是24*1.33 GHz的动机。如果可以关闭HT,那么我们将从24任务w/ HT切换到12任务w/o HT,从而获得大约10%的性能。然而,测试表明我们损失了20%。因此,我的结论是,计算效率低了30%。

对于测试,我使用了相当大的步骤,但通常步骤更短,因此效率更高。

还有一个原因-我们的一些计算需要3-5 GB的内存,所以您可能会看到,对于我们来说,有12个快速任务是多么经济。我们正在努力实现共享内存,但这将是一个长期的项目。因此,我们需要找出如何尽快使现有的硬件/软件。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-04 13:31:16

这与其说是一个回答,不如说是一个延伸的评论:

我不觉得你的观察令人惊讶。超线程是一种糟糕的并行化方法,它允许您在一个CPU上有2条待定指令管道。但它不提供额外的浮点或整数算术单位或更多寄存器;当一个管道无法给ALU (或现在称为ALU)提供数据时,另一个管道在一两个时钟周期内被激活。这与在没有超线程的CPU上的情况形成对比,在指令管道停止时,在CPU恢复到速度之前,必须用来自另一个进程的指令刷新和填充指令。

维基百科关于超线程的文章很好地解释了这一切。

如果您正在运行的负载中,管道停止是完全同步的,并且代表了程序组合的总执行时间的主要部分,那么您可以通过从一个非超线程处理器转到一个超线程处理器,将程序的速度提高一倍。

如果(这是一个很大的假设),您可以编写一个从未停止在指令管道中的程序,那么超线程将不会提供任何好处(在执行加速方面)。您所测量到的不是HT造成的加速(嗯,它是HT导致的加速,但实际上您并不希望那样),而是线程无法保持管道的运动。

你要做的实际上是减少因HT而导致的加速!或者,您必须通过保持管道填充来提高这12个进程(每个核心一个进程)的执行率。就我个人而言,当我在12个核心上优化程序的执行时,我会关闭超线程。

玩得开心。

票数 8
EN

Stack Overflow用户

发布于 2010-10-04 13:19:07

我有点难以理解你对基准的描述。

让我们将100%的工作定义为你通过12项任务完成的工作量。如果你能在同一时期内完成两倍的工作,我们就称之为200%。那么,你会在另外三个盒子里放多少数字呢?

编辑:与您的数字更新。

代码语言:javascript
复制
             without HT     with HT
12 tasks     100%           100%
24 tasks     100%           125%

因此,我的理解是,在禁用HT时,线程基本上是暂停的(例如当线程等待来自内存或磁盘的数据时),因此它们实际上不会在2.66 GHz上运行,但会稍微少一点。在启用超线程的情况下,CUP将切换任务,而不是暂停这些短暂的间隙,因此所使用的处理能力的总量会增加。

票数 2
EN

Stack Overflow用户

发布于 2010-10-04 11:58:07

那么,这就意味着在HT打开的情况下,从12项任务切换到24项任务可以提高20%的效率!很好的基准!

另一方面,如果您的程序是为了使每个线程只能在一个单独的任务上工作(而不是能够将单个任务拆分成较小的块并并发进行),那么为了减少每个任务的延迟(从开始到完成),您只需要将软件中的线程数量限制在12个。硬件HT开关可以保持在任何位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3854882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档