Enabling Multiprocessor Support in Windows XP

[NOTE: (04Aug2008) This page was copied from http://www.handaware.com/multiprocessor_XP.html. I found this information most helpful and would like to thank the original author who took the time to document it.]

WARNING: the information on this page is offered without any warranty and for use at your own risk.  Improperly modifying your system files may cause your system to be unable to boot.  The author is not responsible for any errors on this page. This page is offered as a courtesy to other users and conveys a process which is believed to work but is not officially sanctioned by Microsoft.

We cannot offer ANY further support for this process.  Please do not send any email asking for help with this.



So you bought a dual core CPU like the Intel Pentium D, Core 2 Duo or AMD Athlon 64 X2 and upgraded your system? Great idea, dual core dramatically improves system performance and responsiveness even for single-threaded applications like games! The kernel and drivers are no longer hogging time on your main CPU and you can expect a good improvement in all aspects of system performance. No more stuttering in your games, hanging while switching between applications - in short, best purchase you ever made for a computer (except maybe a widescreen LCD).

Windows XP Home definitely does support dual core CPUs, don't believe people who say otherwise!  However if you upgraded a single-processor (uniprocessor) installation of Windows XP, you need to make sure you are actually using two cores! There's an easy way to tell, hit alt-ctrl-del to bring up the task manager and click the performance tab. It should look like this, with two side-by side CPU usage graphs:

picture of windows task manager showing two cpu usage graphs

If you are still seeing a single CPU Usage History graph, you almost certainly are not using the second core on your CPU, even if it shows up in your device manager. This is because the "HAL" (Hardware Abstraction Layer) used by Windows is probably still set to Uniprocessor! This is set when Windows is installed.  

Make sure you have installed Windows XP Service Patch 2 first - this is essential. The next thing you should do to try to fix this is go to the Control Panel, and start the Device Manager from the Hardware tab of System Properties. Expand the Computer item. What you want to see there is something like  "ACPI Multiprocessor PC".  

Picture of device manager showing ACPI Multiprocessor PC in Computer section

However you may see "ACPI Uniprocessor PC". If that's the case, you are not using your second CPU core. Try to right click on the item and "Update driver". Pick "Install from a list or specific location" then "Don't search I will choose the driver to install".  Hopefully you will have the choice of an ACPI Multiprocessor PC. However you may not be offered that choice.

Important: if this did work, you will still want to install the "hotfix" from Microsoft for multiprocessor support, which fixes some critical bugs which make cause you not to get full  performance from your dual core. It's available on this page: http://support.microsoft.com/kb/896256 - install this after you get the ACPI Multiprocessor PC item to show up in the Device Manager.



If the control panel option didn't work,  you have a couple choices. You can use your Windows XP installation CD and make a fresh installation or repair your current one. This is the process Microsoft recommends, however this will clobber all your settings, device drivers, etc. and require you to download the service patches over again - in other words it will take hours and make a mess of your system. There is another way.

Again, first make sure you have upgraded to XP Service Patch 2 first!

To switch to Multiprocessor support need to modify some system files. There are three files involved in this in your Windows/system32 directory:

HAL.DLL
ntoskrnl.exe
ntkrnlpa.exe

The versions you need may be found in Windows/ServicePackFiles/i386:

halmacpi.dll
ntkrnlmp.exe
ntkrpamp.exe

The trick is replacing the current versions in Windows/System32. You cannot do this while Windows is running because it will just create a new ntoskrnl.exe if you delete it.  

WARNING: the following may cause your system to fail to boot. Do the following at your own risk!

Reboot the computer and go into "Safe Mode" (hit F8 while booting and a menu will come up). Once in Safe Mode, replace HAL.DLL with halmacpi.dll, ntoskrnl.exe with ntkrnlmp.exe, and ntkrnlpa.exe with ntkrpamp.exe. Reboot and verify that both CPUs are showing up in the Task Manager's CPU chart.

[NOTE-- Just some clarification here: Each file from Windows/ServicePackFiles/i386 must be copied over the file it replaces. ie.: copy halmacpi.dll HAL.DLL ; copy ntkrnlmp.exe ntoskrnl.exe ; copy ntkrpamp.exe ntkrnlpa.exe ]

Important: After you get Mutliprocessor working, you will still want to apply the hotfix mentioned above, which is available from
http://support.microsoft.com/kb/896256



Hope that worked for you. I spent a lot of frustrated time trying to figure out how to make this work and I hope this saves someone some trouble. Be very careful making these modifications to your system, but I think that is a lot easier than re-installing Windows.