Enabling
Multiprocessor Support in Windows XP
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:

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".

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.
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.