Categories: MacSoftwareWorkspace

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.

Page: 1 2 3 4 5 6 7

ZDNet.de Redaktion

Recent Posts

Cloudflare: Weltweiter Internettraffic wächst 2024 um 17,2 Prozent

Das Wachstum konzentriert sich wie im Vorjahr auf das zweite Halbjahr. Google dominiert bei den…

2 Wochen ago

Adobe stopft kritische Löcher in Reader und Acrobat

Sie ermöglichen eine Remotecodeausführung. Angreifbar sind Acrobat DC, 2024 und 2020 sowie Reader DC und…

2 Wochen ago

Dezember-Patchday: Microsoft schließt Zero-Day-Lücke

Die öffentlich bekannte und bereits ausgenutzte Schwachstelle erlaubt eine Rechteausweitung. Betroffen sind alle unterstützten Versionen…

2 Wochen ago

Quantencomputer: Google meldet Durchbruch bei Fehlerkorrektur

Der neue Quantenchip Willow löst eine Herausforderung, an der seit 30 Jahren gearbeitet wird. Google…

2 Wochen ago

OpenAI veröffentlicht KI-Video-Tool Sora

Es erstellt kurze Videoclips aus Textaufforderungen. Sora steht ab sofort Abonnenten von ChatGPT Plus und…

2 Wochen ago

KI-Modell „Made in Germany“

Telekom bietet als erstes Unternehmen kommerzielles Angebot mit Teuken-7B von OpenGPT-X.

2 Wochen ago