Ansätze der Optimierung per
Hardware (Fortsetzung)
Simultaneous Multi-Threading
(Fortsetzung)
Microcode ROM
Im Microcode ROM liegen bereits decodierte Instruktionen vor, deren Decodierung
aufgrund ihrer Komplexität (zur Erinnerung: CISC = Complex Instruction
Set Computer) den Prozessor unnötig lange aufhalten würde. Das Microcode
ROM ist also nichts weiter, als eine Tabelle mit allen komplexen Einträgen,
auf die bei Bedarf zurückgegriffen wird.
Wie beim L1 Trace Cache auch, gibt es hier zwei unabhängig voneinander
operierende Zeiger, pro logischen Prozessor einen. Die Einträge sind geteilt,
bei gleichzeitigen Zugriffen wird auch hier taktweise abwechselnd zugegriffen.
ITLB
Der ITLB (Instruction Translation Lookaside Buffer, schneller Pufferspeicher
für Instruktionen) kommt ins Spiel, wenn eine Instruktion benötigt
wird die sich nicht im L1 Trace Cache befindet. Der ITLB empfängt die Anweisung
vom Trace Cache bestimmte Daten zu liefern und setzt den Instruction Pointer
auf die physikalisch anzuspringende Adresse.
Jeder logische Prozessor verfügt hier über einen eigenen, unabhängigen
ITLB inkl. aller benötigten Zeiger, sowie einen eigenen 64 Byte Streaming
Puffer, aus dem die Daten anschließend in den L1 Trace Cache geschrieben
werden.
Sprungvorhersage
Die Sprungvorhersage ist geteilt, ein Teil wurde verdoppelt, ein anderer muss
gemeinsam benutzt werden. Der Return Stack Puffer wurde aufgrund seiner geringen
Transistorenzahl verdoppelt, sowie der Tatsache, dass Rücksprungvorhersagen
deutlich effektiver und effizienter sind, wenn sie für jeden logischen
Prozessor separat verfügbar sind.
Das große Global History
Array hingegen muss gemeinsam genutzt werden, die einzelnen Einträge verfügen
jedoch über eine eindeutige CPU-ID und verursachen somit keinerlei Konflikte.
Diesen Artikel bookmarken oder senden an ...