Information Technology Reference
In-Depth Information
cherte Folgeadresse D für den nächsten Zugriff auf den Trace-Cache zu verwenden
ist (markiert mit e).
Bemerkung. Bei der hier gewählten Struktur sind die Folgeadressen einer Basisblockfolge im
Trace-Cache gespeichert. Alternativ kann jedoch auch eine separate sog. Trace-Cache-Zeilen-Vor-
hersageeinheit (trace cache line predictor) verwendet werden, die u.a. auch die Aufgabe der Mehr-
fach-Sprungvorhersageeinheit übernimmt. Entsprechende Realisierungen sind z.B. in [146]
beschrieben. Sie unterscheiden sich von den hier vorgestellten Strukturen nur in der Sichtweise auf
das Problem.
Erzeugen eines Eintrags im Trace-Cache
Bei erstmaliger Ausführung einer Basisblockfolge, z.B. A-B-C, wird jeweils mit
den Startadressen auf den Befehlscache bzw. -speicher zugegriffen (in Bild 3.43 mit
f markiert) und die gelesenen Basisblöcke in derselben Weise verarbeitet, als wäre
kein Trace-Cache vorhanden. Zusätzlich werden die Basisblöcke jedoch einer sog.
Fill-Unit zugeführt, die sie in einem Puffer zwischenspeichert (g), bis darin entwe-
der kein weiterer Basisblock aufgenommen werden kann, die maximale Anzahl an
speicherbaren Basisblöcken erreicht ist oder man eine andere Abbruchbedingung,
wie z.B. einen indirekten Sprungbefehl, erkennt. In allen Fällen wird der Pufferin-
halt in den Trace-Cache übertragen und der Puffer in Vorbereitung zur Aufnahme
weiterer Basisblockfolgen geleert.
Ob ein Basisblock, der nicht mehr vollständig an die Fill-Unit übertragen werden
kann, eine neue Basisblockfolge eröffnet oder in zwei Teile zerlegt wird, von denen
der erste den verbleibenden Platz des Puffers ausfüllt (das sog. trace packing [138]),
ist implementierungsabhängig (wobei ein Basisblock, der größer ist, als in einer
Trace-Cache-Zeile gespeichert werden kann, natürlich immer unterteilt werden
muss). Es ist aber durchaus sinnvoll, nur vollständige Basisblöcke zu speichern und
den auftretenden Verschnitt zu tolerieren. So belegt die Schleife in Bild 3.44a in
einem Trace-Cache, der pro Zeile 16 Befehle aufnehmen kann, z.B. drei Einträge,
wenn Basisblöcke als unteilbare Einheiten (Bild 3.44b), jedoch acht Einträge, wenn
sie über zwei Einträge verteilt gespeichert werden (Bild 3.44c).
Das enge Packen von Basisblockfolgen hat dennoch Vorteile, da sich die Anzahl der
durchschnittlich pro Trace-Cache-Zeile gelesenen Befehle auf diese Weise vergrö-
ßern lässt. So können bei einer Speicherung der Basisblockfolgen entsprechend Bild
3.44b innerhalb der Schleife lediglich 12,7 Befehle und bei einer Speicherung ent-
sprechend Bild 3.44c 15,2 Befehle pro Takt gelesen und ausgeführt werden. Dieser
Effekt ist umso ausgeprägter, je größer die Basisblöcke im Mittel sind. Deshalb ist
die gepackte Speicherung von Basisblockfolgen vor allem in Kombination mit Ver-
fahren von Bedeutung, durch die sich die Anzahl der Befehle innerhalb eines
gespeicherten Basisblocks effektiv vergrößern lässt, wie z.B. durch die später noch
zu beschreibende Branch-Promotion [138].
Die Auswahl einer Trace-Cache-Zeile zur Speicherung einer neu zu ladenden Basis-
blockfolge geschieht in ähnlicher Weise wie in einem herkömmlichen Befehlscache,
z.B. indem die Zeile innerhalb des selektierten Satzes ersetzt wird, auf die die
längste Zeit nicht mehr zugegriffen wurde. Falls man für den Tag-Vergleich , wie in
 
Search WWH ::




Custom Search