AMD64

AMD64
Logo

Die AMD64-Mikroarchitektur der AMD-K8-Generation (auch x86-64) ist AMDs Einstieg in den 64-Bit-Mikroprozessor-Markt. Intel verwendet die neuen 64-Bit-Befehle unter dem Namen Intel 64 (früher: EM64T) in seinen neueren x86-basierten Prozessoren.

Anders als die von Intel komplett 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. Zusätzlich steht nun ein 64-Bit-Modus zur Verfügung, der vor allem einen größeren Speicherbereich anzusprechen ermöglicht und teilweise auch Performance-Verbesserungen durch breitere und vor allem doppelt so viele Register mit sich bringt. Mit AMD64 leitete AMD daher einen sanften Übergang von 32- auf 64-Bit-Umgebungen ein.

Inhaltsverzeichnis

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.

Betriebssystem-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[1]). Von Microsoft ist seit April 2005 die Windows XP Professional x64 Edition für AMD64 verfügbar, die allerdings nur eine Zwischenlösung war, bis Windows Vista Januar 2007 auf den Markt kam. Die x64-Edition von Windows XP wurde von Microsoft 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. Allerdings ist es möglich, diese Version mit MUI-(Multi User Interface)-Packs zu „übersetzen“.

Mac OS X unterstützt die x64-Architektur seit Beginn der Umstellung seiner Plattform vom Power PC zu Intel-Prozessoren im Jahr 2006.

Auch die drei wichtigsten BSD-Derivate unterstützen die AMD64-Architektur: FreeBSD, NetBSD sowie OpenBSD (seit Version 3.5).

Architektur

Alle Register haben bei AMD64 eine Breite von 64 Bit. 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 außerdem über je acht zusätzliche Integer- und SSE-Register, die im 32-Bit-Modus aus Kompatibilitätsgründen nicht verfügbar sind.

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

Allgemeine Register (je 64 Bit)
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
64-Bit-Media-/Gleitkommaregister
Name Bedeutung
MMX0/FPR0 … MMX7/FPR7 MMX-Register 0 … 7
128-Bit-Mediaregister
Name Bedeutung
XMM0 … XMM7 SSE-Register 0 … 7
XMM8 … XMM15 SSE-Register 8 … 15
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. Der Zugriff auf die 64-Bit-Register erfolgt über neu eingeführte Befehlspräfixe. Hierfür werden Opcodes verwendet, welche im 32-Bit-Modus bereits für andere Befehle stehen. Aus diesem Grund sind die 64-Bit-Register – anders als die 32-Bit-Präfixe, die auch im 16-Bit-Modus zur Verfügung stehen – nur im 64-Bit-Modus verfügbar.

Für Gleitkommaoperationen ist zwar aus Kompatibilitätsgründen eine x87-FPU auf dem Prozessor vorhanden. Der Hersteller empfiehlt jedoch, für Gleitkommaberechnungen generell nur noch die performantere und problemärmere SSE-Einheit zu benutzen. Problematisch ist hierbei allerdings, dass die SSE-Einheit bis heute keine transzendenten Funktionen (Sinus, Cosinus, Arcustangens, Logarithmus) beherrscht; diese müssen weiterhin über die x87-FPU berechnet oder per Software emuliert werden. Außerdem beherrscht die SSE-Einheit nur 64-Bit-Gleitkommaarithmetik, während die x87-FPU-Einheit intern mit 80-Bit-Gleitkommaarithmetik arbeitet.

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 eines neuen SYSCALL-Maschinenbefehls Rechnung. Obwohl man theoretisch auch im 64-Bit-Modus wie bisher über Interrupts oder den SYSENTER-Befehl einen Systemaufruf durchführen 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 Speichergrößengrenzen der x86-Prozessoren:

  • ab 8086: Gesamt-AdressraumMiB, linearer Adressraum 64 KiB
  • ab 80286: Gesamt-Adressraum 16 MiB, linearer Adressraum 64 KiB
  • ab 80386: Gesamt-Adressraum 4 GiB, linearer Adressraum 4 GiB
  • (80386SX: die oberen 8 Adressleitungen sind nicht aus dem Chip herausgeführt, damit ist der nutzbare Adressraum 16 MiB groß)
  • ab Pentium Pro/AMD Athlon: Gesamt-Adressraum 64 GiB, linearer Adressraum 4 GiB

Bei AMD64 ist die Breite einer virtuellen Adresse 48 Bit. Das heißt, ein Task kann 256 TiB adressieren. Während die bei der Einführung von AMD64 üblichen AMD-Prozessoren der Generation K8 noch 40 Adresspins besaßen, und damit physisch nur 1 TiB Speicher adressieren konnten, hat die aktuelle Prozessoren-Generation K10 die vollen 48 Adresspins, womit nun auch physisch 256  TiB Speicher adressierbar ist.

Registererweiterung

Die Verdoppelung der Registerzahl des allgemeinen Rechenwerks ist im Befehlssatz unabhängig vom 64-Bit-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, so dass rechenintensive Programme davon profitieren.

Gleichzeitig wurde mit AMD64 eine neue Aufrufkonvention[2] für Programmfunktionen (ABI) eingeführt. Bei dieser Aufrufkonvention werden Funktionsparameter nicht mehr überwiegend über den Programmstack transferiert, wie bei den klassischen x86-32 Aufrufkonventionen, sondern in der Regel in Registern übergeben. Dieses registerorientierte ABI, welche bei anderen Prozessorfamilien (wie PowerPC) schon länger üblich ist, wurde durch die Registererweiterung möglich und kann zu einer Beschleunigung rechenintensiver Programme führen.

Betriebsmodi

Es lassen sich zwei grundsätzliche Betriebsmodi unterscheiden:

  • Legacy Mode: Hierunter fallen alle „alten“ Betriebsmodi der x86-Architektur, also Real Mode, Protected Mode und System Management Mode.
  • Long Mode: Dieser Betriebsmodus besteht aus zwei Submodi:
    • 64-Bit Mode: Der „echte“ 64 Bit Mode für 64-bittige Anwendungen auf einem 64-Bit-Betriebssystem.
    • Compatibility Mode: Dieser Mode dient dazu, 32-bittige Anwendungen auch auf einem 64-Bit-Betriebssystem ausführen zu können. Die Anwendung „sieht“ dabei eine Umgebung, die dem Protected Mode zu entsprechen scheint. In Wahrheit werden aber dennoch Mechanismen der AMD64-Architektur benutzt, wie etwa eine vierstufige Seitentabellen-Hierarchie. Ebenso werden 16-Bit-Protected-Mode-Programme im Compatibility Mode unterstützt, nicht jedoch Real-Mode-Programme, die im Legacy Mode in einer Virtual-8086-Mode-Umgebung ausgeführt werden. Der Compatibility Mode muss explizit vom Betriebssystem unterstützt werden und kann dann für ein einzelnes Codesegment aktiviert werden.

Beim Systemstart befindet sich ein AMD64-Prozessor zunächst im Real Mode. Daher ist es ohne Probleme möglich, ein altes Betriebssystem auszuführen: Dieses würde den Long Mode respektive 64-Bit Mode niemals aktivieren (da es von dessen Existenz nichts weiß), die CPU liefe also maximal im Legacy Protected Mode. Ein 64-Bit-Betriebssystem schaltet den Prozessor während des Bootvorgangs zunächst in den klassischen Protected Mode, danach dann in den 64-Bit Long Mode.

Intel 64 – AMD64 aus dem Hause Intel

Da AMD zwischenzeitlich viele namhafte OEM-Hersteller ins AMD64-Boot holen konnte und außerdem zur Zeit der massive Umstieg auf 64 Bit in Desktop- und Workstation-Rechnern läuft, gehen derzeit fast alle Beobachter davon aus, dass AMD64 in Zukunft die bedeutendste 64-Bit-Architektur werden wird. Das 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. Das 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 64 Bit statt 32 Bit breit. Ihre Speicherung verbraucht daher im RAM und in den Caches doppelt soviel Platz und bei Bewegungen zwischen RAM und CPU müssen somit doppelt so viele Bytes bewegt werden. Auch manche andere Datentypen (long, long double) beanspruchen im 64-Bit-Modus mehr Platz. Sichtbar wird dieses in den erzeugten Programmdateien, die im Vergleich zum 32-Bit-Programm etwa 25 bis 30 Prozent größer sind. Dies kann die Ausführungsgeschwindigkeit der Programme spürbar herabsetzen. Allerdings wurde im 64-Bit-Modus eine IP-relative Adressierung, mit vorzeichenbehafteten 32-Bit-Offsets, eingeführt. Damit wird eine Zunahme der Befehlslänge verhindert.
Neutral – Vektoroperation
Die SSE-Einheit übernimmt den weitaus größten Teil der Berechnungen für Multimedia und Mathematik, sowohl für Gleitkommawerte als auch für ganzzahlige gepackte Zahlen mit mehreren Werten, darunter vor allem Vektoren und Matrizen. Die Erweiterung der ALU-Register auf 64 Bit tangiert diese Einheit gar nicht, da die SSE-Register schon immer 128 Bit breit waren, so dass SSE-Berechnungen unverändert ablaufen. Die nachfolgend genannte Verdoppelung der Registerzahl betrifft jedoch auch die SSE-Mediaregister.
Vorteil – mehr Speicher pro Prozess
Die Grenze von 2 (bzw. 4) GiB adressierbarem Hauptspeicher pro Prozess ("linearer Adressraum") von der klassischen i386-Architektur entfällt.
Vorteil – Registeranzahl
Zusätzlich zur 64-Bit-Aufweitung weist die AMD64-Architektur eine doppelte Zahl an allgemeinen Registern auf. Das ist vorteilhaft bei vielen Zwischenwerten in einer Prozedur, die 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 bis 30 Prozent[3] Geschwindigkeitsvorteil bei 64-Bit-Programmen an. Zusätzlich ist eine neue Funktionsaufruf-Konvention eingeführt worden, die die zusätzlichen Register zur Übergabe von Funktionsparametern vorschreibt. Diese Art der Parameterübergabe ist deutlich schneller als die herkömmliche Parameterübergabe auf dem Stapelspeicher.
Vorteil – Adressbreite
Wenn Datenmengen im Gigabyte-Bereich verarbeitet werden, entfallen aufwändige Zugriffsberechnungen mit 32-Bit-Differenzen zu Basisadressen. Insbesondere beherrschen alle Betriebssysteme das Einblenden von Dateien auf der Festplatte in den Hauptspeicher (virtual file mapping): Statt stückweiser Abarbeitung kann nun im Prinzip die gesamte Festplatte für den Direktzugriff in einem Stück eingeblendet werden. Hilfsfunktionen mit Dateizeigern entfallen komplett und degenerieren zu einfachen ALU-Operationen.
Vorteil – Vektoreinheiten
Sollen 32-Bit-Programme auch auf älteren Prozessoren laufen, können diese Programme keine SSE-Einheit voraussetzen und werden meistens ohne SSE-Unterstützung kompiliert. Alle AMD64-fähigen Prozessoren verfügen hingegen mindestens über SSE2, das somit bei 64-Bit-Software immer zur Verfügung steht.
Vorteil – 64-Bit-Register für Integerarithmetik
Anwendungen, die auf Integerarithmetik angewiesen sind, profitieren sehr davon, dass Multiplikationen mit ganzen Zahlen größer als 32 Bit erheblich schneller verarbeitet werden. Beispielsweise wird für die Verarbeitung von 64 Bit Ganzzahlen auf 32 Bit Systemen etwa eine um das 2,5 Fache erhöhte Rechenzeit benötigt [4]. Dies trifft zum Beispiel auf Kryptographie und Audio- beziehungsweise Videoencoding zu.

Der letztgenannte Vorteil betrifft vor allem Datenbanken und die Videobearbeitung, die von der Aufweitung von Adressen auf 64 Bit erheblich profitiert. 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 die eingesetzten Algorithmen: Viele alte Programme verwenden auf 32-Bit optimierte Algorithmen, die erst nach Anpassung durch Programmierer von der 64-Bit-Erweiterung profitieren können. 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 64-Bit-Architekturen schon lange üblich sind.

Einzelnachweise

  1. heise online - 64-Bit-Linux für AMDs Hammer offiziell
  2. Michael Matz, Jan Hubicka, Andreas Jaeger, and Mark Mitchell (13. Januar 2010): System V Application Binary Interface AMD64 Architecture Processor Supplement. Abgerufen am 27. September 2010.
  3. x86-64 Machine-Level Programming S. 5-6 "3.2 Assembly Code Example"
  4. Myth and facts about 64-bit Linux (engl.) Verschiedene Performancevergleiche von AMD64 und IA32, auf Seite 27 werden Ganzahlige Additionen auf 32 und 64 Bit Systemen verglichen

Weblinks


Wikimedia Foundation.

Игры ⚽ Нужно сделать НИР?
Synonyme:

Schlagen Sie auch in anderen Wörterbüchern nach:

  • AMD64 — (также x86 64/Intel64/EM64T/x64) 64 битная архитектура микропроцессора и соответствующий набор инструкций, разработанные компанией AMD. Это расширение архитектуры x86 с полной обратной совместимостью. Набор инструкций x86 64 в настоящее время… …   Википедия

  • AMD64 — AMD64, inicialmente conocida como x86 64, es una arquitectura basada en la extensión del conjunto de instrucciones x86 para manejar direcciones de 64 bits realizada por AMD. Además de una simple extensión contempla mejoras adicionales como… …   Enciclopedia Universal

  • AMD64 — est le nom de l architecture des premiers microprocesseurs 64 bits de la société Advanced Micro Devices. Son nom de code est Hammer (de l anglais marteau) remplaçant l appellation x86 64. Cette architecture est compatible avec le standard… …   Wikipédia en Français

  • AMD64 (informatique) — AMD64 AMD64 est le nom de l architecture des premiers microprocesseurs 64 bits de la société Advanced Micro Devices. Son nom de code est Hammer (de l anglais marteau) remplaçant l appellation x86 64. Cette architecture est compatible avec le …   Wikipédia en Français

  • Amd64 — …   Википедия

  • AMD64 — x64 (fachsprachlich); IA 32e (veraltet); Intel 64; x86 64 (fachsprachlich); EM64T (veraltet) …   Universal-Lexikon

  • AMD 64 — AMD64 AMD64 est le nom de l architecture des premiers microprocesseurs 64 bits de la société Advanced Micro Devices. Son nom de code est Hammer (de l anglais marteau) remplaçant l appellation x86 64. Cette architecture est compatible avec le …   Wikipédia en Français

  • X64 — AMD64 (также x86 64/Intel64/EM64T/x64) 64 битная архитектура микропроцессора и соответствующий набор инструкций, разработанные компанией AMD. Это расширение архитектуры x86 с полной обратной совместимостью. Набор инструкций x86 64 в настоящее… …   Википедия

  • X86-64 — is a superset of the x86 instruction set architecture. x86 64 processors can run existing 32 bit or 16 bit x86 programs at full speed, but also support new programs written with a 64 bit address space and other additional capabilities.The x86 64… …   Wikipedia

  • Aptosid — Basisdaten Entwickler Stefan Lippers Hollmann (slh); aptosid Team …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”