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

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

有些 BIOS 没有禁用 CPU 超线程的选项,有没有办法在 Windows 7 注册表中禁用它?或者有工具或软件?

我知道 msconfig 启动选项卡(高级选项)和在那里禁用处理器,不确定它是否禁用完整的核心或超线程,或者如何判断。

32位或64位Windows 7

编辑:

我们假设它是双核或者具有超线程的。

在设备管理器中,我的 i5 Intel 处理器上显示有 4 个处理器,而且你也无法禁用它们,真是的。

答案1

来自英特尔酷睿处理器数据表,第 1 卷,第 38 页:

英特尔超线程技术

[...] 此功能必须使用 BIOS 启用,并且需要操作系统支持。

这是因为超线程是 CPU 芯片上的实际物理硬件,因此可以启用/禁用在硬件层面上仅有的

如果你知道哪个应用程序不能很好地支持超线程,你可以使用类似的工具启动亲和力如果你有 XP。

如果您使用 Windows 7,则有一个内置start命令可以执行此操作。使用以下命令启动具有特定处理器亲和性的进程(再次,该/AFFINITY参数仅在 Windows 7 中添加):

start /AFFINITY <mask> "C:\yourprogram.exe" 

其中<mask>应该替换为您要运行的处理器的十六进制掩码(处理器掩码只是启用/禁用该亲和性的二进制掩码,因此 00000101 启用 CPU0 和 CPU2,而 00000010 仅启用 CPU1)。

要计算十六进制值,你可以转换二进制掩码,或者将 2 的总和设为您想要在其上运行程序的核心的幂(从 0 开始),然后将该值转换为十六进制。

例如,如果我有一个四核系统,并且只希望进程在 CPU0 和 CPU2 上执行,我会添加 2 0 + 2 2 = 1 + 4 = 5。将 5 转换为十六进制,也就是 5,并将其设置为您的<mask>。您也可以将 00000101 转换为十六进制。如果您不知道如何转换这些基数,您可以使用此转换表

答案2

禁用超线程是 BIOS 独有的事情。

我假设您想禁用超线程,因为您的应用程序未针对此功能进行优化,并且性能可能会降低?

从 CPU 编号来看,物理核心是奇数 - 因此在双核 HT 系统中,核心 1 和 3 将是“真正的”CPU。如果您在 msconfig 中选择了 2 个核心,则 CPU 1 和 2 将被启用,因此您将拥有一个处于活动状态的物理和逻辑 (HT) CPU - 如果您遇到与 HT 相关的软件问题,这将对您没有好处。

答案3

在 Windows 中,最简单的方法是更改​​ explorer.exe 的亲和性,因为从该进程启动的每个进程都将继承亲和性掩码。这还远远不够完美,但至少每个会话只需执行一次。

相关内容