gpt4 book ai didi

macos - 关闭 6 核 Intel Xeon 中的超线程

转载 作者:行者123 更新时间:2023-12-02 19:42:16 33 4
gpt4 key购买 nike

我们有一台 12 核 MacPro 来进行一些蒙特卡罗计算。其 Intel Xeon 处理器启用了超线程 (HT),因此实际上应该有 24 个进程并行运行才能充分利用它们。然而,我们的计算在 12x100% 上运行比在 24x50% 上运行效率更高,因此我们尝试通过系统首选项中的“处理器” Pane 关闭超线程,以获得更高的性能。还可以通过以下方式关闭 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,那么通过从 24 个带 HT 的任务切换到 12 个不带 HT 的任务,我们可以获得大约 +10% 的性能。然而,测试表明我们损失了 20%。所以我的结论是计算效率低了30%。

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

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

最佳答案

这更像是一个扩展评论,而不是一个答案:

我并不觉得你的观察结果非常令人惊讶。超线程是一种穷人的并行化方法,它允许您在一个 CPU 上拥有 2 个待处理指令的管道。但它不提供额外的浮点或整数运算单元或更多寄存器;当一个管道无法为 ALU(或现在所谓的任何名称)提供数据时,另一个管道会在一两个时钟周期内激活。这与没有超线程的 CPU 上的情况形成鲜明对比,在这种情况下,当指令管道停止时,必须在 CPU 恢复速度之前刷新并重新填充来自另一个进程的指令。

Wikipedia article on hyperthreading很好地解释了这一切。

如果您正在运行的负载中管道停顿完全同步,并且占程序组合总执行时间的主要部分,那么您可以通过从非超线程处理器转到超线程处理器来使程序速度加倍。

如果(这是一个很大的假设)您可以编写一个永远不会在指令管道中停滞的程序,那么超线程将不会提供任何好处(在执行加速方面)。您测量到的不是由于 HT 导致的加速(嗯,这是由于 HT 导致的加速,但您实际上并不想要这样),而是线程无法保持管道移动。

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

玩得开心。

关于macos - 关闭 6 核 Intel Xeon 中的超线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3854882/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com