在多核戴尔 PC 上禁用超线程

在多核戴尔 PC 上禁用超线程

我有一台运行 Windows 7 Professional 的戴尔台式机。我认为处理器是英特尔酷睿i7-2600

最近,一位专门研究 Linux 集群的计算机专家在查看我的台式电脑时,随口说我的机器有 8 个线程。他说这意味着这台机器有 4 个核心:每个核心 2 个线程。我之前不知道这台机器有多个核心。

现在我知道该机器显然有四个核心,我希望能够同时运行三个模型,每个核心上一个模型。

有人建议我“关闭超线程”,这样我“就可以使用每个型号的整个核心”。否则,他写道“它以一半的速度运行”。

我使用 R 程序运行了许多模型,帮助我的计算机专家指出,我的一个 R 脚本文件显示一条消息,称它正在使用 8 个线程中的 7 个。那么,考虑到 R 文件每个核心使用 2 个线程,其中 3 个核心,关闭超线程可能不会提高我的计算速度?

如果关闭超线程会增加 R 脚本的计算速度,我该怎么做?

我在网上搜索了一下,发现这个论坛上有关于这个主题的讨论:

http://answers.microsoft.com/en-us/windows/forum/windows_7-performance/disable-hyperthreading-when-windows-7-already/80dd6c15-76b7-4534-b691-3e3a37ffad75

该论坛上有一条令我担忧的评论是:

“对于那些想要关闭 HT 的人来说,最大的问题是许多计算机制造商(惠普、戴尔)不允许购买其计算机的人使用 BIOS 选项来关闭 HT。而且由于 Windows 会查看 BIOS 中的 HT 设置来确定是否处理 HT,因此这种情况会卡在低档位,无法加速。”

由于我的电脑是戴尔的,所以可能无法关闭超线程。

我还在超级用户上发现了这个帖子:

在 Windows 7 注册表中禁用超线程

那里有一个答案似乎特别有用,但很复杂,涉及十六进制,而且问题中的计算机是 HP。我不知道这是否重要。

这里似乎还有不少有关超线程的其他帖子,但在我读过的帖子中,上面的那个最符合我的情况。

如果这个问题重复了,我很抱歉。如果我需要提供更多信息或澄清我的疑虑,我很乐意这样做。

答案1

为什么 BIOS 中没有选项?

我认为戴尔及其同伙之所以不经常添加禁用该功能的选项,是因为这通常不是一个好主意。一般来说,它会使您的计算机变慢(或者从另一个角度来看,它会使竞争对手的计算机相对变快)。

话虽如此,让我们看一些假想的例子:

HT 起什么作用?

1 核,无超线程

  • 1 个 CPU 受限进程正在运行,并且可以以最大速度运行。我们称这个速度为 1,或 100%
  • 正在运行 2 个 CPU 密集型进程。CPU 必须在两者之间切换。两个进程的有效速度大约减半。(两个速度的总和仍然等于第一个示例。)
  • 正在运行 3 个 CPU 密集型进程。CPU 必须在这三个进程之间切换。两个进程的有效速度大约是三分之一。(两个速度的总和仍然相同(3 x 0.33 = 1)。

2 核,无超线程

  • 1 CPU 绑定进程*0正在运行,并且可以以该核心的最大速度运行。(速度 100%)(另一个核心处于空闲状态)。
  • 正在运行 2 个 CPU 密集型进程。两个进程均能以其核心的最大速度运行。(速度 200%)
  • 正在运行 3 个 CPU 密集型进程。通常,您会以大约 2/3 的效率运行 3 个任务。(速度之和仍为“2”。大致为 2,因为您会因额外开销和缓存未命中而损失一些)。(速度为 200%,或者可能是 190%)

现在具有超线程的内核。它们充当两个内核,但不是两个完整的内核。英特尔对超线程的定义随着时间的推移发生了一些变化,但通常归结为这一点。CPU 从内存中获取数据并进行计算。如果它不需要内存总线,那么 CPU 的第二部分可以执行有限的工作。由于并非所有硬件都是重复的,因此您无法获得两个完整的内核。但是,使用有限的额外硬件(10%?),您平均可以获得 30% 的速度。*1

1 个核心,其中 - 1 个 CPU 密集型进程正在运行,可以以最大速度运行。(100%)- 2 个 CPU 密集型进程正在运行。CPU 必须在两者之间切换。但是它有一些额外的硬件。网络速度将快 30% 左右(例如单核速度为 133%)

ETC。

关于HT的介绍就这么多。

这些虚构的 % 是真实的吗?

不,首先你会因为开销而失去效率。(一个 CPU 上的 10 个任务的运行速度不会比没有上下文切换且所有数据都缓存的单个任务慢)。

其次,我完全忽略了涡轮增压,因为这会使解释变得复杂。

我的朋友到底想说什么?

让我们像这样查看您的 4 核 8 线程 CPU:
核心 1,CPU 1(实际)
核心 1,CPU 2(带 HT)
核心 2,CPU 3(实际)
核心 2,CPU 4(带 HT)
核心 3,CPU 5(实际)
核心 3,CPU 6(带 HT)
核心 4,CPU 7(实际)
核心 4,CPU 8(带 HT)

如果我运行两个任务,我不希望它们都运行在 CPU1 和 CPU2 上(因为它们共享一个实际核心),最终结果接近可能速度的一半。这可能是你朋友的意思。

虽然确实如此,但我认为您不必担心。Windows 调度程序足够智能,可以首先将进程分配给 CPU 1、3、5、7,然后再分配给 2、4、6、8。



*0 CPU 受限进程是受 CPU 限制的进程。如果进程正在等待磁盘 IO,而 CPU 处于空闲状态,那么您将得到完全不同的结果。

*1请谨慎看待这些数字。它们并不精确。它们会因 CPU 代数甚至 CPU 型号的不同而有所差异。它们会因程序的不同而有所差异。英特尔所谓的超线程自早期 CPU 代数以来已经发生了变化。但它们确实给出了一个粗略的概念。

相关内容