64-bit CPU FAQ

To avoid having to answer any more questions on the new features the Athlon 64/Opteron and Intel Pentium 4 Prescot, I’ve made this little FAQ to help answer any questions anyone might have.

 
First is what CPUs have AMD64/EMT64 capability, and what other goodies go along with it.  Here’s the list:
  • K7: 32 bit Integer, 32 bit addressing
  • K8: 64 bit Integer, 48 bit logical addressing, 40 bit physical addressing, NX bit, PAE36 and PSE36 for 32 bit mode
  • P6: 32 bit Integer, 32 bit addressing, PAE36 and PSE36
  • Northwood: 32 bit Integer, 32 bit addressing, PAE36 and PSE36
  • Prescott: 32 bit Integer, 32 bit adddressing, PAE36 and PSE36
  • Prescott E0 stepping (Pentium 4 7xx series, Pentium 4 5xxF series, newer Xeons and Xeon MPs): 64 bit Integer, 48 bit logical addressing, 40 bit physical addressing, NX bit, automatic clock control for power savings (think Speedstep-ish), PAE36 and PSE36
  • Prescott E0 stepping (Pentium 4 4 5xxJ): 32 bit Integer, 32 bit adddressing, PAE36 and PSE36, NX bit, automatic clock control for power savings.

For the crib sheet to that, 64 bit Integer calculations are one of the things that make 64 bit CPUs so great – they can make 64 bit calculations in hardware rather than emulating it with a bunch of 32 bit calculations.  The address space is the logical address space the CPU can handle.  The AMD64 and EM64T CPUs do not have a full 64 bits of address space, as they won’t need it for a while.  They use 64 bit addresses and truncate them internally.  PSE36 and PAE36 are technologies that allow programs to use 36 bits (64 Gigabytes) of memory on a 32 bit CPU.  It’s been used by Intel for years now to extend the memory capability of its Xeon line, although it’s kind of ugly.  PSE36 is the technology that allows for 36 bits of virtual address space and PAE36 for 36 bits of physical address space.  A program may use one or both of these.  The 40 bit physical memory addressing means a maximum of 1 TB physical memory, coupled with 256 TB of logical address space (this includes virtual memory and allows for tons of large, contiguous blocks of unused address space).  Remember, a logical address does not necessarily need to match up with the same physical memory address.  The automatic clock control will be of overclocking interest, as it means the CPU will have a few unlocked multipliers.  By purchasing a 200(800) FSB Pentium 4 with this technology, one could turn down the multiplier and turn up the CPU speed by increasing the bus to 266(1066) FSB while still having all expansion busses running in sync.

Of course, you may be wondering about the availability of said processors.  All of them except the Prescott E0 are pretty available, and Prescott E0 availability should be ramping quickly within a few weeks of this writing, at which point hopefully the press hype will make this FAQ obsolete.


There are some common misconceptions about AMD64 and EM64T being true 64 bit CPUs.  Some say that only AMD64 is true 64 bit, while others argue that both are.  The correct answer is that neither of them are, at least not by a strict definition.  To be fully 64 bit, a CPU must meet a few criteria:
  • 64 bit Integer calculations in hardware.  Both K8 and Prescott E0 have this capability.
  • 72 bit IEEE Floating Point calculations in hardware.  Virtually all CPUs have this.
  • 64 bit virtual address space.  Neither K8 nor Prescott E0 have this capability.  They are capped at 48 bits as far as the programmer is concerned, although if or when they go to a full 64 bit address space there won’t need to be any rewriting or recompiling of the programs, they’ll just work.  This is done to save die space for now.  Basically what happens is the programmer writes the program using 64 bits but the CPU truncates two of the high bytes.

There are a few true 64 bit CPUs around, but for all intents and purposes the Intel and AMD CPUs are both 64 bit.  However, the arguement stems from their different approaches to this.  K8 extends 32 bit to 64 and allows use of more registers and more computation units, making it perform better in 64 bit than 32.  Prescott extnds its existing 32 bit capability to 64 bit in a more traditional manner, making 64 bit calculations run modestly slower than 32 bit.  Traditionally, all CPUs when going to 64 bit have used this method.  The third is used by the Itanium and Itanium only, which is a CPU that only has a 64 bit mode and must emulate 32 bit processing.

So now that we’ve gotten that out of the way, using the common definition you may ask what 64 bit CPUs are available.  There’s a lenghty list:

  • Intel Prescott core E0 stepping and higher F model (J model does not have 64 bit despite the same core stepping).
  • Intel Itanium processors
  • AMD K8 core
  • Sun UltraSPARC processors
  • Fujitsu SPARC64 processors
  • IBM POWER processors
  • IBM PPC970/Apple PPC G5 processors
  • DEC/Compaq/HP Alpha processors
  • HP PA-RISC processors
  • SGI MIPS processors

And there are many others, but those are the ones you’ll run across the most.

If you have any more questions, ask them in this thread that way we can keep all the 64 bit information together for easier consumption.

Edited to clarify the available address space (I looked it up for a difinitive answer)