Information Technology Reference
In-Depth Information
neuen Eintrags mehr Zeit in Anspruch nimmt als das Lesen der jeweils auszuführen-
den Befehle. So lässt sich der Befehlscache in Bild 3.43 als L2-Cache mit großer
Kapazität, jedoch langen Zugriffszeiten realisieren.
Des Weiteren können Aktionen, die normalerweise nach dem Lesen der Befehle
notwendig sind, nun vor dem Erzeugen eines neuen Trace-Cache-Eintrags ausge-
führt werden, um bei einem erfolgreichen Trace-Cache-Zugriff auf diese Weise Zeit
einzusparen. Zum Beispiel ist es möglich, die Befehle beim Übertragen aus dem
Befehlscache in die Fill-Unit vorzudecodieren und die Befehlsfolgen dabei ggf. zu
optimieren (in Bild 3.43 mit h markiert). So lassen sich Befehle variabler Breite in
Operationen konstanter Breite wandeln, unbedingte Sprungbefehle entfernen bzw.
durch nops ersetzen, das Register-Renaming für Variablen, auf die nur innerhalb der
erzeugten Basisblockfolge zugegriffen wird, vorziehen usw. [139].
Bei der bereits erwähnten Branch-Promotion wird durch Optimierung versucht, die
Anzahl der in einer Zeile des Trace-Caches gespeicherten Befehle zu erhöhen, und
zwar, indem Basisblöcke ggf. zusammengefasst werden [138]. Das Verfahren macht
sich zu nutze, dass viele bedingte Sprungbefehle zumeist nur verzweigen oder nur
nicht verzweigen und daher in ihrer Wirkung einem unbedingten Sprungbefehl oder
einem nop gleichkommen. Da sie sich gut statisch vorhersagen lassen, kann so die
Anzahl der vorhersagbaren Sprungbefehle und damit die Anzahl der Basisblöcke in
einer Basisblockfolge vergrößert werden. Realisieren lässt sich dies, indem zu allen
im Trace-Cache gespeicherten Sprungbefehlen die Anzahl aufeinander folgender
sich nicht verändernder Sprungentscheidungen gezählt und bei Überschreiten eines
Grenzwerts der entsprechende Sprungbefehl als statisch vorherzusagen gekenn-
zeichnet wird, und zwar entsprechend der wahrscheinlicheren Sprungrichtung.
Da auf diese Weise die Anzahl der dynamisch vorherzusagenden Sprungentschei-
dungen innerhalb der gespeicherten Basisblockfolge sinkt, kann dem Eintrag ein
zusätzlicher Basisblock hinzugefügt werden. Dies geschieht tatsächlich jedoch nur,
wenn die gespeicherte Basisblockfolge bis zu ihrem Ende ausgeführt wird. Ob
außerdem der als statisch vorherzusagende Sprungbefehl aus allen ihm zugeordne-
ten Einträgen der Mehrfach-Sprungvorhersageeinheit gelöscht wird oder nicht, ist
implementierungsabhängig. Gegebenenfalls sind kurzzeitig einige Fehlvorhersagen
zu tolerieren.
Bemerkung. Ein Trace-Cache ist z.B. im Pentium 4 von Intel realisiert [60, 199]. Er ist in acht
Wegen organisiert und nimmt bis zu 12K vordecodierte Mikrooperationen fester Breite auf. Die
meisten der variabel breiten Befehle des Programmiermodells IA-32 werden direkt durch einzelne
Mikrooperationen nachgebildet. Falls dies jedoch nicht möglich ist, wie für einige komplexe
Befehle, wird mit Hilfe eines Mikrocode-ROMs eine Mikrooperationsfolge generiert, die die Funk-
tion des jeweiligen Befehls emuliert. Hierbei ist im Trace-Cache trotzdem nur ein einzelner Eintrag
- eine Kennung der zu startenden Mikrooperationsfolge - gespeichert. Pro Takt lassen sich bis zu
drei Mikrooperationen aus dem Trace-Cache lesen.
3.2.5 Superspekulative Befehlsverarbeitung
In superskalaren Prozessoren wird ein Trace-Cache benötigt, um sequentiell
codierte Befehle über Verzweigungen hinweg zu parallelisieren und auf diese Weise
Search WWH ::




Custom Search