AMD64

Mikroarchitektur der AMD-K8-Generation für 64-Bit-Mikroprozessoren, die auf herkömmlichen 32-Bit-Prozessoren aufbaut und daher uneingeschränkt zu 32-Bit- und sogar 16-Bit-Software abwärtskompatibel ist
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 21. Oktober 2006 um 02:26 Uhr durch Lofote (Diskussion | Beiträge) (Maximaler Arbeitsspeicher). Sie kann sich erheblich von der aktuellen Version unterscheiden.

AMDs AMD64-Mikroarchitektur für die K8-CPUs ist AMDs Einstieg in den 64-Bit Mikroprozessor-Markt. Früher war sie auch bekannt als x86-64. Intel verwendet die neuen 64-Bit Befehle dagegen unter dem Namen Intel 64 in seinen neueren x86-basierten Prozessoren.

Anders als die von Intel von Grund auf neuentwickelte 64-Bit-Architektur IA-64, die mit der heute in PCs meistverwendeten IA-32-Architektur nur wenig gemeinsam hat, wählte AMD einen weit weniger radikalen Ansatz: Der Chip ist ein vollwertiger 32-Bit-Prozessor, dessen Register im 64-bit-Modus verbreitert werden. Er ist dadurch uneingeschränkt zu heutiger 32-bit- und sogar alter 16-bit-Software abwärtskompatibel.

x86-64

Während der Entwicklung nannte AMD die Architektur noch x86-64, kurz vor der Markteinführung der Prozessoren änderte AMD allerdings die Bezeichnung in AMD64. Neuerdings wird das Kürzel x64 von Microsoft und einigen Fachpublikationen für dieses erweiterte Programmiermodell verwendet.

Software-Unterstützung

Das erste Betriebssystem, das eine funktionierende Unterstützung für den 64-Bit-Modus der AMD64-Prozessoren bot, war Linux (Offizielle Einführung in den Linux-Kern 1. März 2002 Damalige Meldung im Heise Newsticker). Von Microsoft ist seit April 2005 die Windows XP Professional x64 Edition für AMD64 verfügbar, die allerdings nur eine Zwischenlösung ist, bis Windows Vista auf den Markt kommt. Die x64-Edition wird von Microsoft derzeit nur sehr zurückhaltend als OEM- und Systembuilder-Version vermarktet, um den Supportaufwand in Grenzen zu halten und die zukünftigen Vista-Verkäufe nicht zu gefährden. Es gibt keine Home-Variante, keine Schachtel-Version für den Einzelhandel und keine vollständige Lokalisierung für Sprachen außer Englisch.

Auch die drei wichtigsten BSD-Derivate unterstützen die AMD64-Architektur: FreeBSD, NetBSD sowie OpenBSD (seit Version 3.5). Der neueste BSD-Abkömmling DragonFly BSD arbeitet derzeit (September 2005) noch an der Portierung nach AMD64.

Architektonisches

AMD64 ist konzeptionell ein 64-bit Aufsatz auf die QuantiSpeed-Architektur des AMD Athlon XP. Der interne Aufbau ist sehr ähnlich.

Alle Register sind bei AMD64 64 Bit lang; wenn der Prozessor im 32-bit-Kompatibilitätsmodus läuft, werden die obersten 32 Bit jedes Registers auf 0 gesetzt. Im 64-bit-Modus verfügt der Prozessor über je 8 zusätzliche Integer- und SSE-Register, die im 32-bit-Modus brach liegen müssen.

Die AMD64-Architektur besitzt folgende Anwendungsregister (die in normalen Anwendungsprogrammen zur Verfügung stehen):

colspan=2 Vorlage:Highlight1 | Allgemeine Register (je 64bit)
Name (ursprüngliche) Bedeutung
RAX Akkumulator
RBX Base Register
RCX Counter
RDX Data Register
RBP Base-Pointer
RSI Source-Index
RDI Destination-Index
RSP Stack-Pointer
R8...R15 Register 8 bis 15
colspan=2 Vorlage:Highlight1 | 64bit Media-/Fließkommaregister
Name Bedeutung
MMX0/FPR0 ... MMX7/FPR7 MMX-Register 0 ... 7
colspan=2 Vorlage:Highlight1 | 128bit Mediaregister
Name Bedeutung
XMM0 ... XMM7 SSE-Register 0 ... 7
XMM8 ... XMM15 SSE-Register 8 ... 15
colspan=2 Vorlage:Highlight1 | Sonstige Register
Name Bedeutung
RFLAGS 64-bit Flagregister (Statusregister)
RIP 64-bit Instruction Pointer (Befehlszeiger)


Die orange hinterlegten Register R8...R15 und XMM8...XMM15 stehen ausschließlich im 64-Bit-Modus zur Verfügung. Die Register RAX...RSP, sowie RFLAGS und RIP sind im 32-Bit-Modus nur 32 Bit groß und heißen dort EAX...ESP, EFLAGS und EIP, wie schon beim 80386.

Für Fließkommaoperationen ist zwar aus Kompatibilitätsgründen eine x87-FPU auf dem Prozessor vorhanden, der Hersteller empfiehlt jedoch, für Fließkommaberechnungen generell nur noch die performantere und problemfreiere SSE-Einheit zu benutzen. Problematisch ist hierbei allerdings, dass die SSE-Einheit bis heute keine transzendentalen Funktionen (Sinus, Cosinus, Arcustangens, Logarithmus) beherrscht; diese müssen weiterhin über die x87-FPU berechnet oder per Software emuliert werden.

Da im 64-Bit-Modus keine Speichersegmentierung mehr unterstützt wird, können Systemaufrufe stark beschleunigt werden, da keine Segmentierungsinformationen mehr gespeichert und wiederhergestellt werden müssen. AMD trug dem durch Einführung einer neuen SYSCALL-Instruktion Rechnung. Obwohl man theoretisch auch im 64-Bit-Modus wie bisher über Interrupts oder die SYSENTER-Instruktion einen Systemaufruf einleiten könnte, ist SYSCALL schneller.

Maximaler Arbeitsspeicher

Einer der Hauptgründe, AMD64 der x86-Architektur vorzuziehen, ist die Möglichkeit, mehr Arbeitsspeicher zu verwenden. Übersteigt der installierte Arbeitsspeicher den maximalen Adressraum einer CPU, dann bleibt der Arbeitsspeicher, der jenseits des Adressraums liegt, ungenutzt. Die Adressgrenzen der x86-Prozessoren:

  • Ohne PAE 4 GiB für alle Tasks und Betriebssystem zusammen.
  • 2 GiB (im Sonderfall 3 GiB) pro Task (ohne und mit PAE, Angabe bezieht sich auf Windows, die 3GiB-Variante auf Windows mit /3GB-Switch in der BOOT.INI)
  • Mit PAE 64 GiB für alle Tasks und Betriebssystem zusammen. (Beschränkt durch den 36-Bit breiten physischen Adressbus).

Bei AMD64 ist die Breite einer virtuellen Adresse 48 Bit, das heißt ein Task kann 256 TiB adressieren. Die AMD64-Prozessoren haben zur Zeit 40 Adresspins, physisch können sie also 1 TiB Speicher adressieren. Die physische Adressgrenze beträgt somit 1 TiB pro Task und für alle Tasks zusammen. Spätere Prozessoren können über mehr Adresspins einen größeren ansteuerbaren Arbeitsspeicher bieten, ohne dass Veränderungen an Betriebssystem oder gar Programmen notwendig wären.

Registererweiterung

Die Verdoppelung der Registerzahl des allgemeinen Rechenwerks ist im Befehlssatz unabhängig vom 64bit-Transfer vorhanden. Die Implementierung der AMD64 Erweiterung in den CPUs beinhaltet diese Erweiterung jedoch immer. Moderne Compiler können so häufiger Zwischenwerte von Berechnungen in CPU-Registern ablegen statt in den Hauptspeicher auszulagern. Komplexe Berechnungen werden dadurch beschleunigt, sodass rechenintensive Programme davon profitieren.

Gleichzeitig wurde mit AMD64 eine neue Aufrufkonvention für Programmprozeduren (ABI) eingeführt, bei dem Parameter nicht mehr regelmäßig über den Programmstack laufen wie in den klassischen x86 Betriebsmodi, sondern in der Regel in Registern übergeben werden. Dieses registerorientierte ABI ist bei anderen Prozessorfamilien (wie PowerPC) schon länger üblich, und kann zu einer Beschleunigung rechenintensiver Programme führen.

Betriebsmodi

Ein AMD64-Prozessor kann sich in einem von "zweieinhalb" Betriebsmodi befinden:

  • Legacy-Mode – Wenn der Prozessor beim Start einen 32-bit-Kernel vorfindet, deaktiviert er seine 64-bit-Features und verhält sich prinzipiell wie ein Athlon XP
  • Long Mode – Dies ist der vollwertige 64-bit-Modus, in den er schaltet, wenn ein 64-bit-Kernel läuft.
  • Compatibility Mode – Hierbei handelt es sich um einen Untermodus des Long Mode, in den der Prozessor temporär schaltet, wenn auf einem 64-bit-System ein 32-bit-Programm ausgeführt werden soll. Einem solchen Programm präsentiert sich der Prozessor ebenfalls wie ein Athlon XP.

Intel 64 – AMD64 aus dem Hause Intel

Da AMD zwischenzeitlich viele namhafte OEM-Hersteller ins AMD64-Boot holen konnte und außerdem in nicht allzu ferner Zeit der langsame Umstieg auf 64 Bit in Desktop- und Workstation-Rechnern ansteht, gehen derzeit fast alle Beobachter davon aus, dass AMD64 in Zukunft die bedeutendste 64-Bit-Architektur werden wird. Dies hat inzwischen auch Hauptkonkurrent Intel anerkannt und Prozessoren mit Intel 64 (früher auch EM64T, Extended Memory 64 Technology, auch bekannt als IA-32e) im Angebot. Dies geschah hauptsächlich, da Intels hauseigene IA-64-Architektur für den Desktop-Einsatz zu teuer ist und überdies noch immer mit einigen konzeptionellen Schwierigkeiten kämpft, zum anderen hatte aber auch Microsoft signalisiert, nur eine 64-Bit-Erweiterung in Windows unterstützen zu wollen. Die Wahl fiel wegen der früheren Verfügbarkeit auf die AMD-Erweiterung.

Nutzen der 64-Bit-Erweiterung

Nachteil - Speicherverbrauch
Alle Adresswerte sind 64bit statt 32bit breit, deren Speicherung verbraucht daher doppelt soviel Platz, bei Bewegungen zwischen RAM und CPU müssen somit doppelt soviel Bytes bewegt werden, und verbrauchen auch in den Caches doppelt soviel Platz. Auch manche andere Objekte werden bei der Neuübersetzung von herkömmlichen x86 Code von 32bit auf 64bit im x86-64 Modell erweitert - sichtbar wird dieses in den erzeugten Programmdateien, die typisch 25%-30% größer sind.
Neutral - Fließkommaoperation
Die SSE-Einheit übernimmt den weitaus größten Teil der Berechnungen für Multimedia und Mathematik, sowohl für Fließkommawerte als auch für ganzzahlige gepackte Zahlen mit mehreren Werten, darunter vor allem Vektoren und Matrizen. Die Erweiterung der ALU-Register auf 64bit tangiert diese Einheit gar nicht, da sie schon immer 128bit breit waren, sodass Berechnungen gleich ablaufen. Die nachfolgend genannte Verdoppelung der Registerzahl betrifft jedoch auch die SSE-Mediaregister.
Vorteil - Registeranzahl
Unabhängig von der 64bit-Aufweitung weist die AMD64 eine doppelte Zahl an allgemeinen Register auf. Das ist vorteilhaft bei vielen Zwischenwerten in einer Prozedur, nicht mehr zeitweise auf den Aufrufstapel im Hauptspeicher ausgelagert werden müssen. Da die althergebrachten acht Register schon immer knapp waren, setzt man hier 25%-30% Geschwindigkeitsvorteil auch bei normalen Programmen an. Zusätzlich ermöglicht es die Verwendung von Registern zur Übergaben von Parameter an Unterprogramme, sodass komplexe Berechnungen mit vielen Hilfsfunktionen hier weniger ausgebremst werden als bei der Parameterübergaben über den Stapel.
Vorteil - Adressbreite
Wenn Datenmengen im Gigabyte-Bereich verarbeitet werden, so entfallen kostspielige Zugriffsberechnungen mit 32bit Differenzen zu Basisadressen. Insbesondere beherrschen alle Betriebssysteme das File-Mapping, das virtuelle Einblenden von Dateien auf der Festplatte in den Hauptspeicher - statt stückweiser Abarbeitung kann nun faktisch die gesamte Festplatte für den Direktzugriff in einem Stück eingeblendet werden. Hilfsfunktionen mit Dateizeigern entfallen komplett und degenerieren zu einfachen ALU-Operationen.

Der letztgenannte Vorteil betrifft vor allem Datenbanken und die Videobearbeitung, die von der Aufweitung von Adressen auf 64bit erheblich profitiert. Bei den meisten Desktopprogrammen wird dies kaum gebraucht, und der verbliebene Vorteil zusammen mit den Vorteilen der Registerzahl wird durch die speicherintensivere Verarbeitung weitgehend aufgebraucht. Die SSE-Einheit bestimmt weitgehend die Abarbeitung von Spielen und mathematischen Programmen - soweit sie komplexe Teilberechnungen auf wenigen Speicherobjekten beinhalten, profitieren diese stärker von den Vorteilen. Das betrifft vor allem Bereiche der 3D-Modellierung.

Grundsätzlich ist der Nutzen stark spezifisch für jede Anwendung und welche Algorithmen dort eingesetzt werden: viele alte Programme haben 32bit-optimierte Algorithmen verwendet, die erst nach Anpassung durch Programmierer von der 64bit-Erweiterung profitieren. Das betrifft sowohl mathematische Hilfsfunktionen (auch Multimedia und Spiele) als auch die Speicherverwaltung. Viele Programme aus dem Unix-Bereich haben hierbei einen Vorsprung, da dort 64bit Architekturen schon lange üblich sind.

Siehe auch