Symmetric Multiprocessing Frequently Asked Questions
Published on 2004-03-08 19:04:15

What is Symmetric Multiprocessing (SMP)?

Symmetric Multiprocessing, or SMP, is the term used to describe a computer system that is equipped with more than one processor, and also equipped with an operating system capable of distributing load evenly over those processors.

Are there any other kinds of Multiprocessing?
Yes. There is Asymmetric Multiprocessing. Asymmetric systems dedicate individual processors to specific tasks. For example, one processor may be dedicated to disk operations, another to video operations, and the rest to standard processor tasks. These systems don't have the flexibility to assign processes to the least-loaded CPU, unlike an SMP system. No mainstream OS supports Asymmetric Multiprocessing.

What operating systems support SMP?

Microsoft Operating Systems:

Windows NT:
3.1 Through 4.0 Workstation supports up to two processors.
3.1 Through 4.0 Server supports up to four processors.
4.0 Server Enterprise Edition supports up to eight processors.

Windows 2000:
Professional supports up to two processors.
Server supports up to four processors.
Advanced Server supports up to eight processors.
Data Center supports up to 32 processors.

Windows XP:
Home supports only one processor. (Not verified.)
Professional supports up to two processors.

Linux, BSD, and other Unixes:

Linux:
All current distributions (2.4x Kernel) of Linux support SMP in excess of 32 processors. 2.2x supports up to 16 processors.
BSD:
BSD currently supports up to four processors. However, there is a serious development effort to improve SMP support under FreeBSD.
Solaris:
Solaris 8.0 supports up to 128 processors.
Unix:
There are too many flavors and variables to answer this accurately. Suffice it to say that virtually every Unix supports SMP.

Other Operating Systems:

BeOS:
BeOS 5.0 supports up to eight processors.

OS/2:
OS/2 Warp 4.0 supports up to 64 processors.

What about Windows /98/ME?
These operating systems will work fine on a multiprocessor system, but they can only "see" one processor; any processor past the first will sit idle and cannot be used by any program running under those OS'es, even if the program is SMP-capable. However, you can safely dual boot between Win9x and NT, or any other SMP-capable OS.

Will every program under an SMP-Aware OS use more than one processor?

No. In order for a program to use multiple processors, it has to be multithreaded. Due to the programming model used by the BeOS, any application running under Be will scale across multiple processors.

What is multithreading?
Programs break up the tasks they need to do into threads. By far, the majority of applications are written to be single-threaded. This means that the program executes in a linear fashion, and will only use one CPU. A multithreaded application is written in a way that lets it execute any tasks that it can in parallel across multiple processors. Writing a multithreaded program takes more time and skill than writing a single-threaded program because there are additional considerations such as thread scheduling that has to happen. Scheduling is what keeps the threads in synch, and makes sure that everything happens in order. That John Carmack was able to optimize Quake 3 Arena for multiple processors is a testimonial to his programming skills.

What programs that I use are multithreaded?
Well, at this point the only game that will use multiple processors is Quake 3 Arena. (It's a safe assumption that Return to Castle Wolfenstien will, as it is based on the Q3 Team Arena engine.) As more people buy multiprocessor systems, there may be more games available that use multithreading. On the high end of the scale, we have 3D rendering programs and CAD/CAM programs that are SMP-enabled. Adobe's fine suite of digital image and video manipulation tools use multiple processors, and use them well. L0phtcrack, the NT password cracker uses multiple processors. The RC5 challenge software is an excellent example of multithreaded software. In general, the majority of multithreaded programs will be high-end business software, especially engineering, financial, and design applications.
Why would I want a multiprocessor system if not many apps support SMP?
An SMP-capable Operating System will distribute load as evenly as possible across multiple processors. This makes multitasking very efficient. Way back when I was running a dual P-Pro 200 system overclocked to 233, I played an MP3, burnt a CD, and played Quake 2 all at once without any of those programs hiccupping. On my dual Xeon today, I can encode MP3's, watch videos, burn a CD, and play Quake 3. (The dual monitors help.)

In addition to performance benefits, there are reliability benefits as well. How many times have you had an application crash and hang your system because it's utilizing 100% of your processor? Well, with an SMP system, only once processor would be maxed out, leaving you another processor to close down the errant application. If you like to multitask, you'll find SMP is your new best friend.

What's involved in building a multiprocessor system?
Not much more than a single processor system, except spending twice as much on processors. :) When this FAQ was authored, there were three big players in the SMP motherboard market. Today, there are probably close to a dozen reputable manufacturers. For some specific recommendations, check out our hardware reviews.

Once you've picked your motherboard and processors, you'll need to make sure you have a beefy power supply, preferably 300 Watts or greater. While not required, it's also good to add a little more RAM for that second processor. 512MB is a great amount of RAM for a dual-proc system. Of course, with RAM prices as cheap as they are, 1GB isn't bad either.

If you're going to run Linux, you'll need to make sure to choose the SMP kernel. If you're going to run NT/2000/XP, those operating systems should automatically detect the second processor.

What kind of CPU's do I need for a multiprocessor system?
When this FAQ was first authored, you didn't have too many choices. Today, you can use any of the following processors for SMP:

Intel Processors:

Pentium Pro: (4-Way Glueless)
Pentium II: (2-Way Glueless)
Pentium III: (2-Way Glueless)
Pentium Xeon: (II, III, and IV) (8-Way Glueless)
Celeron I: (2-Way Glueless) (Not officially supported by Intel. Due to the popularity of the Abit BP6 motherboard, Intel disabled SMP in the Celeron II.)

AMD Processors:

AMD Athlon MP: (2-Way Glueless)
Socketed Athlons: (2-Way Glueless) (AMD only supports the Athlon MP for SMP applications. Some socketed Athlons will work, but compatibility isn't guaranteed.)
Duron: (2-Way Glueless) (Again, unsupported by AMD.)

What is Glueless SMP? Glueless refers to a processors ability to communicate with other processors without special "glue" to tie them all together. Using special bridges and other circuitry, a vendor can offer virtually any SMP configuration they want. I personally had a six-way Pentium Pro system, and you can buy 32 and 64 processor Xeon systems from several high-end system vendors. As far as I know, the largest number of processors ever used in one system (excluding clustering) was 9,000, in a Pentium Pro 200/1MB Cache system for Sandia Labs.

What about stepping and cache sizes?
There is a myth that in order to run multiple CPU's, they need to be the same stepping and cache size. This is not true. According to Intel, you must have the same family of processor, and that's it. In fact, according to Intel, you can even mix MHz! They say that if you clock the processors to the clock speed of the slower CPU, you'll be fine. Mixing cache sizes is also OK by Intel, as long as you're not mixing 1MB or higher cache chips. You're best off if you have the same speed and cache processors, but if you have to try an SMP system you can use whatever is available.