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

Moa*_*oab 18 windows-registry windows-7 hyper-threading

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

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

32 位或 64 位 Windows 7

编辑:

让我们假设它是一个双核或更多的超线程。

在设备管理器中,它显示了我的 i5 英特尔处理器上的 4 个处理器,你也不能禁用它们,该死。

Bre*_*ugh 3

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

英特尔超线程技术

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

这是因为超线程是 CPU 芯片上的实际物理硬件,因此只能在硬件级别启用/禁用。

如果您知道哪个应用程序不能很好地支持超线程,并且您拥有 XP,则可以使用StartAffinity等工具。

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

start /AFFINITY <mask> "C:\yourprogram.exe" 
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • @Moab,这在技术上并不重要,只要您禁用所有其他核心即可。每组两个逻辑核心构成单个物理核心的线程处理程序。 (2认同)