64-Bit-Applikationen auf der Intel-Architektur: Wann sind sie wirklich schneller?

Die 32-Bit-x86-Architektur besitzt acht 32-Bit-General-Purpose-Register (GPR) und acht 128-Bit-XMM-Register, die mit den SIMD-Befehlssätzen SSE bis SSE4 verwendet werden. Letztere kann man sowohl für Floating-Point- als auch für Integer-Arithmetik nutzen. Die GPRs können für Integer-Arithmetik und als Pointer auf Speicheradressen dienen. Von den acht GPR sind die Register ESP und EBP weitgehend festgelegt, und zwar für den Stack sowie als Zeiger auf lokale Daten einer Funktion.

Drei weitere Register, ECX, EDI und ESI, sind für Speicherverschiebe- oder Speichervergleichsbefehle vorgesehen. Damit reduzieren sich die völlig frei verfügbaren GPR-Register auf die drei Register EAX, EBX und EDX. Obwohl die acht XMM-Register in der Lage sind, mittels SSE2-Befehlen 64-Bit-Integer-Arithmetik auszuführen, werden dafür, wie bei den RISC-Prozessoren im 32-Bit-Modus, zwei 32-Bit-GPR-Register verwendet, da dies schnelleren Code erzeugt.

Durch die geringe Anzahl der verfügbaren GPR-Register muss deren Inhalt häufig im Speicher mittel PUSH- und POP-Befehlen zwischengespeichert werden. Dies belastet mindestens den L1-Daten-Cache. Auch beim Aufruf von Funktionen müssen die Argumente im 32-Modus mittels PUSH und POP auf den Stack gelegt werden. Viele Compiler bieten zwar die __fastcall-Option, bei der die beiden ersten Argumente in den Registern ECX und EDX übergeben werden und der Rückgabewert ins EAX-Register geschrieben wird, jedoch führt dies wieder zu PUSH- und POP-Befehlen an anderen Stellen im Code.

In der x64-Architektur kommen acht zusätzliche GPR-Register hinzu, die AMD der Einfachheit halber R8 bis R15 genannt hat. Dies führt zu einer ganzen Reihe von Performance-Vorteilen bei x64-Code. Da alle Register jetzt 64 Bit breit sind, kann auch 64-Bit-Integer-Arithmetik mit einem einzigen Register durchgeführt werden. Insbesondere das Multiplizieren und Dividieren wird schneller.

Durch die höhere Anzahl der Register können Argumente für Funktionen jetzt größtenteils in Registern übergeben werden. Zum einen wird der L1-Cache entlastet. Zum anderen können Argumente in Registern direkt für Rechenoperationen verwendet werden. Anders als bei RISC-Prozessoren lassen sich auch im 64-Bit-Modus nur 8, 16, oder 32 Bits eines Registers verwenden. Benötigt man eine Integer-Zahl nur in 32 Bit, so wird der Cache auch nur mit 32 Bits belastet.

Themenseiten: Mac, Plattform, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

1 Kommentar zu 64-Bit-Applikationen auf der Intel-Architektur: Wann sind sie wirklich schneller?

Kommentar hinzufügen
  • Am 18. Januar 2008 um 18:51 von Stefan Frings

    32 Bit bringt mehr Probleme als Vorteile
    Auf dem Heimischen PC habe ich den Praxisvergleich über etwa 1 Jahr Dauer durchgeführt, und zwar unter Windows und Linux, mit einem AMD64 Single-Core Rechner und einem Intel Dual-Core.

    Grundsätzlich sind mir keine wesentlichen Leistungsunterschiede aufgefallen, außer in einem Fall: Hat der Rechner nur 512 MB Hauptspeicher, 64 Bit Betriebssystem und soll dann noch mit Netbeans ein Java Servlet editieren, compilieren und ausführen, dann werden die Unterschiede deutlich. Den im 64 Bit Fall hat man dann praktisch keinen Disk-Cache mehr und dann läuft Netbeans ganz erheblich langsamer, als im 32 bit Fall.

    Der Umsteigt von 32 auf 64 Bit brachte mir im Wesentlichen keine Vorteile, sondern zwang mich zu einem Memory Upgrade. Und das unabhängig vom CPU Hersteller, Single oder Dual Core und auch unabhängig vom Betriebssytsem.

    Darüber hinaus funktionieren einige Programme nicht auf 64 Bit Systemen, sowie einige Gerätetreiber stehen nicht als 64 Bit zur Verfügung.

    Mein nagelneuer Notebook mit Santa-Rosa Architektur läuft jetzt wieder mit 32 Bit. Das ist auf jeden Fall unkomplizierter und man braucht weniger RAM.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *