Windows – Disable Hyperthreading in the Windows 7 registry

hyper-threadingwindows 7windows-registry

Some bios's Do Not have the option to disable Hyperthreading of the CPU, it there a way to disable it in the Windows 7 Registry? Or a tool or software?

I know about msconfig boot tab (advanced options) and disabling processors there, not sure if it disables complete cores or hyperthreads, or how to tell.

32bit or 64bit Windows 7

EDIT:

Lets assume it is a dual core or more with hyperthreading.

In Device manager it shows 4 processors on my i5 Intel Processor, and you cannot disable them either, dang.

Best Answer

From the Intel Core Processor Datasheet, Volume 1, page 38:

Intel Hyper-Threading Technology

[...] This feature must be enabled using the BIOS and requires operating system support.

This is because hyperthreading is actual physical hardware on the CPU die, and thus can be enabled/disabled on a hardware level only.

If you know which application does not work well with hyperthreading, you can use a tool like StartAffinity if you have XP.

If you use Windows 7, there is a built in start command that can do this. Use the following command to launch a process with a particular processor affinity (again, the /AFFINITY argument was only added in Windows 7):

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

Where <mask> should be replaced with the hexadecimal mask for the processors you want to run (the processor mask is just a binary mask enabling/disabling that affinity, so 00000101 enables CPU0 and CPU2, and 00000010 enables only CPU1).

To calculate the hex value, you can either convert the binary mask, or take the sum of 2 to the power of the cores you want to run the program on (starting from 0), and convert that value to hexadecimal.

For example, if I have a four-core system, and only want the process to execute on CPU0 and CPU2, I would add 20 + 22 = 1 + 4 = 5. Convert 5 to hex, which is just 5, and set that as your <mask>. You could also just convert 00000101 to hex as well. If you don't know how to convert these bases, you can just use this conversion table.