Doping für CPUs — Möglichkeiten der Leistungssteigerung
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.