Intel's Nehalem processor has several features aimed at better management of the processor cores. The Nehalem has four cores, each of which is capable of running two threads simultaneously, using a technology known as symmetrical multithreading (SMT). Depending on whether SMT is enabled, a processor can therefore run either four or eight threads.
SMT is generally configured in the BIOS and can be changed at boot time. Because SMT on the Nehalem processor shares some of the core's resources between threads, turning on SMT does not double processor performance or throughput. Whether your applications run better with SMT turned on or not needs to be determined with specific testing of your applications.
[ See the results of InfoWorld's multithreading tests of Windows 7, Vista, and Windows XP in "New multithreading in Windows 7: How much faster?" ]
For this discussion of how threads work, I'll limit myself to four cores running one thread each -- that is, with SMT disabled. Note that this is the configuration with which Nehalem PCs are generally shipped by vendors.
Intel's Nehalem architecture pays close attention to which cores are actively running code. When a core remains inactive for a determined period of time, the processor turns off the transistors that drive that core. This feature is designed primarily as an energy savings step. The processor can also increase the frequency of the active cores to enable increased performance. This option is known as Turbo Mode; on some systems, Turbo Mode needs to be specifically enabled.
For all this magic to happen, though, operating systems need to cooperate. The key is that a core must remain inactive long enough for the processor to shut off its transistors. This was difficult to achieve prior to Windows 7. Although applications create the threads, it's the operating system's task to schedule them for execution and to assign them to an execution pipeline, such as a core. Applications have no control over the scheduling, and they have limited control over which pipeline is used. Prior to Windows 7, the Windows kernel would schedule a thread to run on any available core without regard to where the thread had executed previously. (If no cores were available, the thread scheduler in Windows would choose one running thread to shut down and swap in the waiting thread. The decision about which thread to preempt is controlled by numerous factors.)








