-
Die
vorliegende Erfindung betrifft ein System und ein Verfahren zum
Abrufen von nichtangrenzenden Befehlen in einem Datenverarbeitungssystem.
-
Superskalarprozessoren
bedienen sich aggressiver Techniken zur parallelen Verwendung von Befehlen.
In Spitzenzeiten stößt die Befehlszuteilung und
-ausgabe auf breiten Datenpfaden an ihre oberen Grenzen. Um ein
Befehlsfenster zur Erkennung parallel laufender Befehle zu betreiben,
werden große
Ausgabepuffer verwendet, und eine große Gruppe von physischen Registern
liefert die Ziele für
alle von dem Fenster ausgegebenen laufenden Befehle. Um die gleichzeitige
Ausführung
von Befehlen zu ermöglichen,
besteht die Befehlsausführungseinheit aus
vielen parallelen Funktionseinheiten. Die Abrufeinheit prüft spekulativ über mehrere
vorangehende Verzweigungen hinweg, um dem Fenster einen ununterbrochenen
Befehlsstrom zuzuleiten.
-
Die
Entwicklung von Superskalarprozessoren geht dahin, den Umfang dieser
Verfahren zu erweitern: breitere Zuteilungs-/Ausgabepfade, größere Fenster,
mehr physische Register, mehr Funktionseinheiten und weiter reichende
Verzweigungsprüfung.
Zur Unterstützung
dieser Entwicklung müssen alle
Teile des Prozessors ausgewogen sein, da der Nutzen von aggressiven
Verfahren durch jeden Engpass verringert wird.
-
Die
Leistungsfähigkeit
beim Abrufen von Befehlen hängt
von mehreren Faktoren ab. Die Trefferrate von Befehls-Cachespeichern und
die Genauigkeit der Verzweigungsvorhersage sind lange Zeit als wichtige
Probleme der Abrufleistung angesehen worden und sind daher sehr
gut untersucht.
-
Befehle,
die während
eines bestimmten Zyklus abgerufen werden sollen, befinden sich wegen Verzweigungen
und Sprüngen
möglicherweise
nicht in angrenzenden Speicherbereichen. Daher werden entsprechende
Pfade und eine Logik benötigt,
um nichtangrenzende Basisblöcke
abzurufen und sie in die Pipelines zu senden. Es reicht also nicht
aus, dass die Befehle im Cachespeicher vorliegen, sondern man muss
auch parallel auf sie zugreifen können.
-
Moderne
Mikroprozessoren verwenden routinemäßig Verzweigungsprotokolltabellen
und Verzweigungszieladress-Cachespeicher,
um vorangehende Verzweigungsbefehle besser abrufen zu können. Durch
Verzweigungsprotokolltabellen und andere Vorhersagemechanismen ist
ein Prozessor in der Lage, Befehle über einen Verzweigungsbefehl
hinaus abzurufen, bevor das Ergebnis der Verzweigung bekannt ist.
Verzweigungszieladress-Cachespeicher ermöglichen einem Prozessor, Befehle über eine Verzweigung
hinaus spekulativ abzurufen, bevor die Zieladresse der Verzweigung
berechnet worden ist. Diese beiden Verfahren verwenden ein Laufzeitprotokoll
zur spekulativen Vorhersage, welche Befehle abgerufen werden sollen,
und vermeiden „tote" Taktzyklen, die
normalerweise verloren gegangen wären. Aber auch mittels dieser
Verfahren können
moderne Mikroprozessoren während
eines Taktzyklus nur angrenzende Befehle abrufen.
-
Je
aggressiver Superskalarprozessoren vorgehen und je mehr Befehle
sie pro Taktzyklus ausführen
wollen, desto mehr Befehle müssen
sie pro Taktzyklus abrufen können.
Häufige
Verzweigungsbefehle können
die effektive Abrufbandbreite eines Prozessors stark einschränken. Statistisch
gesehen ist jeder vierte Befehl ein Verzweigungsbefehl und mehr als
die Hälfte
dieser Verzweigungen wird ausgeführt. Ein
Prozessor mit einer großen
Verzweigungsbandbreite, beispielsweise 8 angrenzende Befehle pro Taktzyklus,
könnte
bis zur Hälfte
der durch ihn abgerufenen Befehle und damit bis zur Hälfte der
Zeit vergeuden.
-
Hochleistungsrechner
mit Superskalarprozessoren sind von Hause aus in einen Befehlsabrufmechanismus
und einen Befehlsausführungsmechanismus
eingeteilt. Der Abruf- und der Ausführungsmechanismus sind durch
(einen) Befehlsausgabepuffer, zum Beispiel Warteschlangen, Reservierungsstationen
usw. voneinander getrennt. Gemäß den ihm
zugewiesenen Aufgaben fungiert der Befehlsabrufmechanismus als „Hersteller", der Befehle abruft, decodiert
und im Puffer ablegt. Der Befehlsausführungsmechanismus hingegen
fungiert als „Verbraucher", der aus dem Puffer
Befehle abruft und entsprechend Datenabhängigkeiten und Quelleneinschränkungen
ausführt.
Steuerungsabhängigkeiten
(Verzweigungen und Sprünge)
bieten einen Rückkopplungsmechanismus
zwischen Hersteller und Verbraucher.
-
Frühere konstruktive
Lösungen
verwenden einen herkömmlichen
Befehls-Cachespeicher, in dem eine statische Form des Programms
enthalten ist, mit dem gearbeitet wird. Während jedes Taktzyklus müssen aus
dem Befehls-Cachespeicher Befehle von nichtangrenzenden Speicherplätzen abgerufen und
zu der vorhergesagten dynamischen Folge zusammengesetzt werden.
Bei diesem Ansatz treten die folgenden Probleme auf:
Bevor
mit dem Abrufen begonnen wird, müssen
Zeiger auf alle nichtangrenzenden Befehlsblöcke erzeugt werden. Das bedeutet
gewissermaßen
einen Umweg über
eine Art Verzweigungszieltabelle (Verzweigungszielpuffer, Verzweigungsadress-Cachespeicher
usw.), die in eine zusätzliche
Warteschlangenstufe vor dem Befehls-Cachespeicher umgesetzt wird.
-
Der
Befehls-Cachespeicher muss gleichzeitig den Zugriff auf mehrere
nichtangrenzende Cachespeicherleitungen unterstützen. Dadurch benötigt der Cachespeicher
mehrere Anschlüsse:
wenn diese mehreren Anschlüsse
durch Verschachtelung realisiert werden, kann es zu Gruppenkonflikten
kommen.
-
Nach
dem Abrufen der nichtangrenzenden Befehle aus dem Cachespeicher
müssen
diese zu der dynamischen Sequenz zusammengesetzt werden. Befehle
müssen
verschoben und ausgerichtet werden, damit der Decoder sie als angrenzend
erkennt. Dies führt
aller Wahrscheinlichkeit nach zu einer zusätzlichen Warteschlangenstufe
nach dem Befehls-Cachespeicher.
-
Eine
Trace-Cachespeicher-Lösung
vermeidet diese Probleme, indem die dynamischen Sequenzen selbst
zwischengespeichert werden, die der Decoder erkennen soll. Wenn
die vorhergesagte dynamische Sequenz im Trace-Cachespeicher vorliegt, muss
sie nicht erst neu aus der statischen Darstellung des Befehls-Cachespeichers erzeugt
werden. Insbesondere werden dabei zum Abrufen nichtangrenzender
Befehle keine zusätzlichen
Stufen vor oder nach dem Befehls-Cachespeicher benötigt. Die Stufen
existieren zwar, aber nicht auf dem kritischen Pfad der abrufenden
Einheit, sondern auf der Eingangsseite des Trace-Cachespeichers. Diese Lösung wird
durch redundante Befehlsspeicherbereiche erkauft: ein und dieselben
Befehle müssen
sowohl im primären
Cachespeicher als auch im Trace-Cachespeicher
gespeichert sein, wobei es auch zwischen Leitungen im Trace-Cachespeicher
zur Redundanz kommen kann. Demzufolge werden bei dem Ansatz mit
einem Trace-Cachespeicher Befehle entsprechend einem sehr wahrscheinlichen
Pfad zu einer Gruppe zusammengefasst. Dann werden sie zusammen im
Trace-Cachespeicher
gespeichert. Dieses System erfordert zum Zusammenstellen und Zwischenspeichern
der Befehlsfolgen einen komplexen Mechanismus.
-
Demzufolge
besteht ein Bedarf an einem Verfahren zur Erhöhung des Gesamtdurchsatzes
eines Superskalarprozessors. Ganz besonders werden ein System und
ein verfahren zum erfolgreichen Abrufen nichtangrenzender Befehle
in einem solchen Prozessor benötigt.
-
In
der US-Patentschrift 4 719 570 werden Befehlsstromnummern und -markierungen
beschrieben, die anzeigen, dass eine Abrufanforderung einem Vorabzugriff
eines Befehls nach einer bedingten Verzweigung entspricht. Es werden
zwei Befehlsspeicher eingerichtet, von denen der eine einer Zieladresse
einer Verzweigung und der andere einem Hauptbefehlsstrom zugewiesen
wird.
-
Gemäß einem
ersten Aspekt wird in einem Datenverarbeitungssystem, das n Befehle
während eines
einzigen Taktzyklus ausführen
kann, eine Vorrichtung zum Abrufen nichtangrenzender Befehlsblöcke bereitgestellt,
wobei das System Folgendes umfasst: ein Befehls-Cachespeichermittel
(106) zum Bereitstellen einer ersten Vielzahl von n Befehlen (606),
die einen Verzweigungsbefehl enthalten; ein Verzweigungslogikmittel
(116) zum Empfangen der ersten Vielzahl von n Befehlen
(606) zum Bereitstellen von Verzweigungsprotokollinformationen über die erste
Vielzahl von n Befehlen (606) und zum Ausgeben der ersten
Vielzahl von n Befehlen auf n Befehlsleitungen (118); gekennzeichnet
durch ein Hilfs-Cachespeichermittel (417) zum Empfangen
einer zweiten Vielzahl von Befehlen (608), die das Ziel
der Verzweigungsbefehle darstellen; und ein Mittel zum Multiplexen
(425) der Ausgabewerte des Befehls-Cachespeichers (106)
mit den Ausgabewerten des Hilfs-Cachespeichermittels (417)
auf den n Befehlsleitungen (118), wenn die Verzweigungsprotokollinformationen
eine Verzweigung vorhersagen; wobei die Vielzahl von Befehlen aus
dem Hilfs-Cachespeichermittel
(417) einen Teil der n Befehle aus dem Befehls-Cachespeichermittel
(106) so überschreibt, dass
dem Datenverarbeitungssystem während
eines Taktzyklus zwei nichtangrenzende Blöcke von n Befehlen auf n Befehlsleitungen
zugeleitet werden.
-
Gemäß einem
zweiten Aspekt wird in einem Datenverarbeitungssystem, das n Befehle
während eines
Taktzyklus ausführen
kann, ein Verfahren zum Abrufen nichtangrenzender Befehlsblöcke bereitgestellt,
wobei das Verfahren Folgendes umfasst: Bereitstellen (502)
einer ersten Vielzahl von n Befehlen (606), die einen Verzweigungsbefehl
enthalten; Empfangen (508/510) der ersten Vielzahl
von n Befehlen (606), welche Verzweigungsprotokollinformationen über die
erste Vielzahl von Befehlen (606) und zum Ausgeben der ersten
Vielzahl von n Befehlen auf n Befehlsleitungen (118) liefern;
gekennzeichnet durch das Empfangen (506) einer zweiten
Vielzahl von Befehlen (608), welche das Ziel des Verzweigungsbefehls
darstellen; und Multiplexen (508) der ersten Vielzahl von
Befehlen (606) mit der zweiten Vielzahl von Befehlen (608)
auf den n Befehlsleitungen (118), wenn die Verzweigungsprotokollinformationen
die Verzweigung vorhersagen; wobei Befehle der zweiten Vielzahl
(608) einen Teil der ersten Vielzahl von n Befehlen (606)
so überschreiben,
dass dem Datenverarbeitungssystem während eines Taktzyklus zwei nichtangrenzende
Blöcke
von n Befehlen auf n Befehlsleitungen zugeleitet werden.
-
Die
oben beschriebene vorliegende Erfindung ermöglicht einem Prozessor die
Verwendung von Verzweigungsprotokollinformationen und eines Hilfs-Cachespeichers, um
während
eines einzigen Taktzyklus mehrere nichtangrenzende Gruppen von Befehlen
abzurufen. Außerdem
ermöglicht
das Verfahren das Abrufen nichtangrenzender Befehle, ohne dass während eines
Taktzyklus mehrere Stufen einer verschachtelten Verzweigungsvorhersagelogik
geprüft
werden müssen.
-
Im
Folgenden wird als Beispiel eine Ausführungsart der Erfindung unter
Bezug auf die beiliegenden Zeichnungen beschrieben, in denen:
-
1 ein
Blockschaltbild eines Superskalarprozessors ist;
-
2A ein
Blockschaltbild eines herkömmlichen
Mechanismus innerhalb eines Prozessors zum Abrufen nichtangrenzender
Befehle ist;
-
2B eine
Darstellung einer Speicherposition des Befehls-Cachespeichers und des Verzweigungszieladress-Cachespeichers
ist;
-
3 ein
Flussdiagramm eines Verzweigungsvorhersage-Algorithmus für den herkömmlichen Mechanismus von 2 ist;
-
4 ein
Blockschaltbild eines Mechanismus innerhalb eines Prozessors zum
Abrufen nichtangrenzender Befehle während eines einzigen Taktzyklus
gemäß der Ausführungsart
der vorliegenden Erfindung ist;
-
5 ein
Flussdiagramm des Verzweigungsvorhersage-Algorithmus für den Mechanismus zum Abrufen
nichtangrenzender Befehle von 5 ist; und
-
6 eine
Tabelle ist, die den Befehlsfluss zeigt, wenn der Verzweigungsvorhersage-Algorithmus
von 5 verwendet wird.
-
1 ist
ein Blockschaltbild eines Superskalarprozessors 10. Die
Figur zeigt, dass der Superskalarprozessor 10 wie üblich einen
mit einer Busschnittstelleneinheit (Bus Interface Unit, BIU) 12 verbundenen
Systembus 11 beinhaltet. Die BIU 12 steuert die Datenübertragung
zwischen dem Prozessor 10 und dem Systembus 11.
Die BIU 12 ist mit einem Befehls-Cachespeicher 14 und
einem Daten-Cachespeicher 16 des Prozessors 10 verbunden.
Der Befehls-Cachespeicher 14 gibt Befehle an eine Abfolgesteuereinheit 18 aus.
Als Reaktion auf solche Befehle aus dem Befehls-Cachespeicher 14 gibt
die Abfolgesteuereinheit 18 selektiv Befehle an andere
Ausführungsschaltungen
des Prozessors 10 aus.
-
Außer der
Abfolgesteuereinheit 18, in der als Ausführungseinheiten
eine Zuteilungseinheit 46 und eine Durchführungseinheit 48 enthalten
sind, beinhalten die Ausführungsschaltungen
des Prozessors 10 bei der bevorzugten Ausführungsart
mehrere Ausführungseinheiten,
d.h. eine Verzweigungseinheit 20, eine Festkommaeinheit
A (FXUA) 22, eine Festkommaeinheit B (FXUB), eine Komplexfestkommaeinheit (CFXU) 26,
eine Lade-Speichereinheit (LSU) 28 und eine Fließkommaeinheit
(FPU) 30. In die FXUA 22, die FXUB 24,
die CFXU 26 und die LSU 28 werden die Quellenoperanddaten
aus den Universalarchitekturregistern (GPR) 32 und den
Festkomma-Umbenennungspuffern 34 eingegeben.
Außerdem
wird in die FXUA 22 und die FXUB 24 ein „Übertragsbit" aus dem Übertragsbitregister
(Carry Bit, CA) 42 eingegeben. Die FXUA 22, die
FXUB 24, die CFXU 26 und die LSU 28 geben
die Ergebnisse (Zieloperanddaten) ihrer Operationen zur Speicherung
an ausgewählten Speicherplätzen in
den Festkommaumbenennungspuffern 34 aus. Ferner werden
Quellenoperanddaten und Zieloperanddaten aus speziellen Registern (Special
Purpose Register, SPR) 40 in die CFXU 26 eingegeben
und von dieser wiederum in die Register eingegeben.
-
In
die FPU 30 werden aus den Fließkomma-Architekturregistern
(Floating Point architectural Register, FPR) 36 und den
Fließkomma-Umbenennungspuffern 38 ihre
Quellenoperanddaten eingegeben. Die FPU 30 gibt die Ergebnisse
(Zieloperanddaten) ihrer Operation zur Speicherung an ausgewählten Speicherplätzen in
den Festkomma-Umbenennungspuffern 34 aus.
-
Prozesse
-
Der
Prozessor 10 wird üblicherweise
durch eine große
Anzahl von Ablaufsteuereinheiten (state machines) realisiert, welche
relativ unabhängige
Prozesse steuern. Der Prozessor lässt sich als komplexer paralleler
Algorithmus darstellen, in welchem gleichzeitig mehrere Prozesse
ablaufen.
-
Befehlsabruf
-
Dieser
Prozess liefert einen kontinuierlichen Befehlsstrom aus dem Befehls-Cachespeicher
und verwendet als Abrufvorhersagemechanismus den Verzweigungszieladress-Cachespeicher (Branch Target
Address Cache, BTAC).
-
Verzweigungsvorhersage
-
Dieser
Prozess ermittelt Verzweigungen und sagt sie voraus und prüft, ob die
entsprechenden Befehle abgerufen wurden, aktualisiert Informationen und
stellt Informationen über
spekulativ ermittelte Verzweigungen in eine Verzweigungswarteschlange ein.
-
Verzweigungsauflösung
-
Dieser
Prozess prüft,
ob die Vorhersage mit dem tatsächlichen
Verzweigungsergebnis übereinstimmt
und nimmt bei einer falschen Vorhersage Korrekturen vor.
-
Verzweigungsausführung
-
Dieser
Prozess schreibt Informationen für ausgeführte Verzweigungen
in die BHT und entfernt die entsprechenden Einträge aus der Verzweigungswarteschlange.
-
Die
vorliegende Erfindung betrifft allgemein den Abrufzyklus und die
Fähigkeit
zum Abrufen nichtangrenzender Befehle. 2A zeigt
im System 100 die Hardwaremechanismen für das herkömmliche Verfahren zum Abrufen
von Befehlsgruppen. Bei dieser Ausführungsart sind acht Befehle
dargestellt, die gleichzeitig abgerufen werden. Darüber hinaus
wird die vorliegende Erfindung unter Bezug auf Befehle mit einer
Länge von
vier Byte erörtert.
Dem Fachmann ist jedoch klar, dass gleichzeitig eine beliebige Anzahl
von Befehlen abgerufen werden kann, die eine beliebige Länge haben
können,
und dass sowohl die Anzahl als auch die Länge im Geltungsbereich der
vorliegenden Erfindung liegen.
-
In 2A wird
ein Abrufadresssignal 102 in eine Verzweigungsprotokolltabelle
(Branch History Table, BHT) 104, einen Befehls-Cachespeicher 106, einen
Verzweigungszieladress-Cachespeicher (Branch
Target Address Cache, BTAC) 108, ein Verzeichnis für den Befehls-Cachespeicher
(INST Dir) 110 und einen +32-Zähler 111 geschrieben.
Zum besseren Verständnis
der Funktion des oben dargelegten Mechanismus, insbesondere des
Befehls-Cachespeichers 106, wird im Folgenden ein Eintrag
im herkömmlichen
Befehls-Cachespeicher beschrieben.
-
2B zeigt
eine einfache Anordnung für den
von einer Befehlsabrufeinheit benötigten Eintrag 200 für einen
Befehl für
den Befehls-Cachespeicher und den BTAC (dieser Eintrag kann auch
andere, für die
vorliegende Erörterung
unwesentliche, Informationen enthalten). 2B zeigt
eine Abrufinformation 201, die eine Musteradressmarkierung 202,
einen Nachfolgerindex 204 und Indexeinträge 206 des
Verzweigungsblocks für
eine Codefolge unter der Annahme eines direkt adressierten 64-KByte-Cachespeichers
und der gezeigten Befehlsadressen. Im vorliegenden Beispiel umfasst
der Eintrag des Cachespeichers vier Befehle 208, 210, 212 und 214. Der
Eintrag enthält
auch eine Information für
den Befehlsabruf. Die Abrufinformation enthält zwei (nicht gezeigte) zusätzliche
Felder, die von der Befehlsabrufeinheit genutzt werden.
-
Das
Feld Nachfolgerindex 204 gibt sowohl den Cachespeicherblock,
der laut Vorhersage als nächster
abgerufen werden soll, als auch den Befehl innerhalb dieses nächsten Blocks
an, der laut Vorhersage als erster ausgeführt werden soll. Das Feld Nachfolgerindex 204 gibt
keine vollständige
Befehlsadresse an, ist jedoch groß genug, um jeden Befehl innerhalb
des Cachespeichers auszuwählen.
Zum Beispiel erfordert ein direkt adressierter 64-KByte-Cachespeicher
einen 14-Bit-Nachfolgerindex, wenn alle Befehle 32 Bit lang sind
(12 Bits zum Adressieren des Cachespeicherblocks und 2 Bits zum
Adressieren des Befehls im Block, wenn der Block 4 Worte groß ist).
-
Bei
einer bevorzugten Ausführungsart
zeigt das Feld Verzweigungsblockindex 206 die Lage eines
Verzweigungspunktes innerhalb des entsprechenden Befehlsblocks an.
Die Vorhersage für
Befehle jenseits des Verzweigungspunktes lautet, dass sie nicht
ausgeführt
werden sollen.
-
Die
BHT 104 in 2A empfängt auch ein BHT-Aktualisierungssignal
und gibt ein Lesesignal aus. Das Lesesignal von der BHT 104 wird
in die Verzweigungslogik 116 gelesen. Der Befehls-Cachespeicher 106 empfängt ein
Schreibsignal von einer externen Quelle, zum Beispiel von einem
L2-Cachespeicher. Der Befehls-Cachespeicher 106 gibt acht Befehle
(Befehlsgruppe 0) an die Verzweigungslogik 116 aus. Ein
Signal Adresse 0 wird direkt in die Verzweigungslogik 116 gelesen.
Die Verzweigungslogik 116 sendet ein Signal Adresse überschreiben
zum Multiplexer 120. Der Multiplexer 120 empfängt auch Signale 32 vom
Zähler 111 und
das Ausgangssignal vom BTAC 108. Ein Signal Adresse 1 wird
vom BTAC 108 zur Verzweigungslogik 116 gesendet.
Das Befehlsverzeichnis 110 liefert ein Treffersignal zur
Verzweigungslogik 116. Die Verzweigungslogik 116 empfängt auch
das Signal Verzweigungsergebnis, liefert die Verzweigungsinformation
zu einer Verzweigungswarteschlange 1 216, gibt eine BTAC-Adresse 128 aus
und liefert gültige
Befehle 124. Ein solcher Mechanismus ist in der Lage, während jedes
Taktzyklus acht angrenzende Befehle abzurufen, kann jedoch nur Befehle
bis zur ersten vorhergesagten ausgeführten Verzweigung in der Gruppe
nutzen. In der folgenden Erörterung
in Verbindung mit den beiliegenden Figuren wird dies ausführlich erläutert.
-
Gemäß der obigen
Beschreibung gibt es beim Abrufen von Befehlsgruppen mehrere Prozesse.
Die vorliegende Erfindung betrifft eine Verbesserung des Verzweigungsvorhersage-Algorithmus und eine
entsprechende Änderung
des herkömmlichen Abrufmechanismus
von 2A.
-
Zur
besseren Veranschaulichung der mit dem Abrufen nichtangrenzender
Befehle verbundenen Probleme bei den herkömmlichen Mechanismen von 2A siehe 3.
-
3 ist
ein Flussdiagramm eines Verzweigungsvorhersage-Algorithmus für den herkömmlichen Mechanismus von 2A.
Zuerst wird in den 2A und 3 in Schritt 302 ermittelt,
ob sich im Befehls-Cachespeicher gültige Befehle befinden.
-
Wenn
im Befehls-Cachespeicher keine gültigen
Befehle zu finden sind, werden in Schritt 304 alle abgerufenen
Befehle für
ungültig
erklärt
und die Fehlerbehandlungsroutine gestartet. Wenn jedoch im Befehls-Cachespeicher
gültige
Befehle gefunden werden, werden in Schritt 306 die Verzweigungen
ermittelt, die Zieladressen berechnet und mittels der Verzweigungslogik 116 und
der Verzweigungsprotokolltabellen 104 als ausgeführt oder
nicht ausgeführt
vorhergesagt. Anschließend
wird in Schritt 308 ermittelt, ob es in der Befehlsgruppe
0 (der ersten Befehlsgruppe) eine vorhergesagte ausgeführte Verzweigung
gibt. Wenn es eine vorhergesagte ausgeführte Verzweigung gibt, werden
in Schritt 310 alle nachfolgenden Befehle storniert. Dann
wird in Schritt 312 ermittelt, ob die Adresse 1 (Adresse
der zweiten Befehlsgruppe) vom BTAC 108 gleich dem Ziel
0 des Befehlsverzeichnisses ist. Wenn die Antwort JA lautet, werden
in Schritt 314 die Verzweigungsadressen gespeichert und
Vorhersageinformationen für
alle Verzweigungen in die Verzweigungswarteschlange 126 gelesen.
Wenn die Adresse 1 jedoch nicht gleich dem Ziel 0 ist, werden in
Schritt 316 die während
des nächsten
Taktzyklus abgerufenen Befehle storniert und die überschriebene
Adresse gleich dem Ziel 0 gesetzt. Anschließend wird die BTAC-Adresse
in Schritt 318 so aktualisiert, dass sie gleich dem Ziel
0 ist, und in Schritt 314 werden die Verzweigungsadressen
und die Vorhersageinformationen in der Verzweigungswarteschlange
gespeichert. Wenn in Schritt 308 hingegen keine vorhergesagten
ausgeführten
Verzweigungen in Gruppe 0 gefunden werden, wird ermittelt, ob die
Adresse 1 gleich der Adresse 0 plus 32 ist. Lautet die Antwort hingegen
NEIN, werden in Schritt 322 alle während des nächsten Taktzyklus abgerufenen
Befehlsgruppen storniert und die überschriebene Adresse gleich
der Adresse 0 + 32 gesetzt. Anschließend wird in Schritt 324 die BTAC- Adresse auf ungültig gesetzt,
und der Prozess springt zurück
zu Schritt 314.
-
Mit
Hilfe dieses Algorithmus von 3 können nichtangrenzende
Befehle nicht während
eines Taktzyklus abgerufen werden. Wenn bei diesem Vorhersagealgorithmus
ein Verzweigungsbefehl gefunden wird, können immer nur die Befehle
bis zur Verzweigung verwendet werden. Es gibt jedoch wie oben erwähnt Mechanismen
wie beispielsweise den Trace-Cachespeicher usw., mit deren Hilfe
nichtangrenzende Befehle während
eines Taktzyklus abgerufen werden können, jedoch nehmen dabei die Komplexität und die
Aufwendungen des Systems zu.
-
Die
vorliegende Erfindung löst
dieses Problem durch Bereitstellung eines Hilfs-Cachespeichers und
eines Überschreibverfahrens,
welches den Hilfs-Cachespeicher zum Abrufen nichtangrenzender Befehle
während
eines einzigen Taktzyklus nutzt.
-
Bei
der vorliegenden Ausführungsart
erfordert dieses Verfahren drei wesentliche Hardwaremechanismen:
- (1) einen Standard-Befehls-Cachespeicher (oder eine
andere Speicherquelle),
- (2) einen Verzweigungszieladress-Cachespeicher, und
- (3) einen Hilfs-Cachespeicher.
-
Ein
Standard-Befehls-Cachespeicher und ein Verzweigungszieladress-Cachespeicher
sind in den meisten Mikroprozessoren gebräuchlich und können für dieses
Verfahren ohne Änderung
eingesetzt werden. Der Hilfs-Cachespeicher ist ein neuer Hardwaremechanismus,
der mehrere Einträge
mit einem oder mehreren Befehlen und eine zugehörige Adresse enthält. Der
Hilfs-Cachespeicher kann einen sehr hohen Zuordnungsgrad aufweisen
und im Verhältnis
zum Haupt-Befehls-Cachespeicher relativ klein sein.
-
Die
vorliegende Ausführungsart
funktioniert allgemein wie folgt:
- 1. Wenn ein
Verzweigungsbefehl in einer ersten Befehlsgruppe (aufgrund des Verzweigungsprotokolls
oder anderer Informationen) mit hoher Wahrscheinlichkeit als ausgeführt gilt
und vom Hilfs-Cachespeicher keine Befehle geliefert wurden, wird
der Abrufindex verwendet, um die Zieladresse der Verzweigung und
einen oder mehrere Befehle unter dieser Adresse in den Hilfs-Cachespeicher
zu lesen. Außerdem
wird bei Bedarf eine geeignete sequenzielle Adresse (z.B. Verzweigungsziel
plus 16 Bytes) in den BTAC gelesen.
- 2. Wenn dies nicht der Fall ist und ein Verzweigungsbefehl in
einer zweiten Befehlsgruppe mit hoher Wahrscheinlichkeit als ausgeführt gilt,
wird der Abrufindex dazu verwendet, die Zieladresse der Verzweigung
in den BTAC zu lesen.
- 3. Wenn dies nicht der Fall ist und es in keiner Befehlsgruppe
Verzweigungsbefehle gibt, wird der Abrufindex dazu verwendet, den
BTAC zu löschen
und als Standardwert eine geeignete sequenzielle Adresse einzutragen.
-
Die
folgende Erörterung
in Verbindung mit den beiliegenden Figuren dient der ausführlichen
Beschreibung der Merkmale und der Arbeitsweise der vorliegenden
Ausführungsart.
-
4 ist
ein Blockschaltbild eines Mechanismus 400 gemäß der vorliegenden
Erfindung innerhalb eines Prozessors zum Abrufen nichtangrenzender
Befehle während
eines Taktzyklus. Die Elemente des Mechanismus 400 sind
vielen der Elemente im Mechanismus 100 gleich. Diese gleichen
Elemente werden durch dieselben Bezugsnummern bezeichnet. Gemäß dem oben
Gesagten besteht der Hauptunterschied in dem zusätzlichen Hilfs-Cachespeicher 415 und
seinem Verzeichnis 417.
-
Außerdem sind
die Befehlsgruppen 0 und 1 zu sehen sowie vier Multiplexer 425,
die das Überschreiben
der Befehle aus dem Hilfs-Cachespeicher 417 in der Befehlsgruppe
1 aus dem Befehls-Cachespeicher 106' ausgehend von den von der BHT 104' und der Verzweigungslogik 116' abgeleiteten
Verzweigungsprotokollinformation ermöglichen. Desgleichen überschreibt
das Hilfsverzeichnis mit seiner Adresse das Signal Adresse 1 des
+16-Zählers 321 ausgehend
von der Verzweigungsprotokollinformation. Außerdem liefert der FTAC 419 anstelle
des vom BTAC 108' von 2A gelieferten
Signals Adresse 1 ein Signal Adresse 2. Demzufolge können nun
wie oben erwähnt
durch den zusätzlichen
Hilfs-Cachespeicher 415 und die Verwendung des Hilfs-Cachespeichers
und des Hilfsverzeichnisses 417 Informationen gesammelt
werden, um nun nichtangrenzende Befehle abrufen zu können. Im
Folgenden wird dieses Merkmal unter Bezug auf 5 ausführlicher
beschrieben.
-
5 ist
ein Flussdiagramm des Verzweigungsvorhersage-Algorithmus für den Abrufmechanismus für nichtangrenzende
Befehle von 4. Gemäß 4 und 5 wird
in Schritt 502 zuerst ermittelt, ob im Befehls-Cachespeicher 106' gültige Befehle
gespeichert sind. Wenn im Befehls-Cachespeicher 106' keine gültigen Befehle
gefunden wurden, werden alle Befehle storniert und eine Fehlerbehandlungsroutine
gestartet. Wenn hingegen im Befehls-Cachespeicher 106' gültige Befehle
gibt, wird anschließend
in Schritt 506 ermittelt, ob es im Hilfs-Cachespeicher 417 gültige Befehle
gibt. Wenn im Hilfs-Cachespeicher 417 gültige Befehle
gefunden wurden, werden die Befehle aus dem Hilfs-Cachespeicher 417 in
Schritt 508 der Befehlsgruppe aus dem Befehls-Cachespeicher 106' überschrieben. Wenn
hingegen keine gültigen
Befehle im Hilfs-Cachespeicher
gefunden wurden, werden in Schritt 510 alle Befehle aus
dem Befehls-Cachespeicher aufbewahrt.
-
Nach
Schritt 508 bzw. 510 werden in Schritt 512 auf
herkömmliche
Weise mit Hilfe der Verzweigungslogik 106' und der BHT 104' die nächsten Verzweigungen
ermittelt, die Zieladressen berechnet und die Ausführung oder
Nichtausführung
der Verzweigungsbefehle vorhergesagt. Anschließend wird in Schritt 514 ermittelt,
ob es in der Befehlsgruppe 0 eine vorhergesagte ausgeführte Verzweigung
gibt. Wenn es in der Befehlsgruppe 0 eine vorhergesagte ausgeführte Verzweigung
gibt, werden in Schritt 516 die nachfolgenden Befehle storniert.
-
Als
Nächstes
wird in Schritt 518 ermittelt, ob die Adresse 1 gleich
der Zieladresse 0 der Verzweigung ist. Wenn die Antwort JA lautet,
wird in Schritt 520 ermittelt, ob es in der Befehlsgruppe
1 oder in der nächsten
Befehlsgruppe eine vorhergesagte ausgeführte Verzweigung gibt. Wenn
die Antwort hierauf JA lautet, werden in Schritt 522 die
nachfolgenden Befehle in der Befehlsgruppe 1 storniert. Dann wird
in Schritt 524 ermittelt, ob die Adresse 2 gleich der Zieladresse
1 der Verzweigung ist. Wenn die Antwort hierauf JA lautet, speichert
die Verzweigungswarteschlange in Schritt 526 die Verzweigungsadressen und
die Vorhersageinformationen für
alle Verzweigungen. Wenn die Antwort jedoch NEIN lautet, wird in
Schritt 528 die Gruppe des nächsten Taktzyklus storniert
und die Überschreibadresse
gleich der Zieladresse 1 gesetzt. Anschließend wird in Schritt 530 die
FTAC-Adresse so aktualisiert, dass sie den Wert der Zieladresse
1 einnimmt, und zum Schritt 526 zurückgesprungen.
-
Wenn
die Adresse 1 in Schritt 518 nicht gleich der Zieladresse
0 ist, werden in Schritt 521 alle Befehle in der Gruppe
1 und den Gruppen des nächsten
Taktzyklus storniert, die Überschreibadresse gleich
der Zieladresse 0 gesetzt und die Speicherung der nächsten Gruppe
im Hilfs-Cachespeicher vorbereitet. Anschließend wird in Schritt 523 die
Hilfsadresse gleich der Zieladresse 0 und die FTAC-Adresse gleich
der Zieladresse 0 + 16 gesetzt.
-
Wenn
in Schritt 520 hingegen keine vorhergesagte ausgeführte Verzweigung
in der Gruppe 1 gefunden wird, wird in Schritt 532 ermittelt,
ob die Adresse 2 gleich der Adresse 1 plus 16 ist. Wenn die Antwort
hierauf JA lautet, springt der Prozess zurück zu Schritt 526.
Wenn die Antwort hingegen NEIN lautet, werden in Schritt 534 alle
Gruppen des nächsten Taktzyklus
storniert und die Überschreibadresse gleich
der Adresse 1 + 16 gesetzt. Anschließend wird in Schritt 536 die
FTAC-Adresse gleich der Adresse 1 + 16 gesetzt, und der Prozess
springt zurück
zu Schritt 526.
-
Wenn
in Schritt 514 keine vorhergesagten ausgeführten Verzweigungen
in der Gruppe 0 gefunden werden, wird ermittelt, ob die Adresse
1 gleich der Adresse 0 + 16 ist. Wenn die Adresse 1 gleich der Adresse
0 + 16 ist, springt der Prozess zurück zu Schritt 520 und
arbeitet die Schritte dieser Entscheidungskette ab. Wenn die Antwort
hingegen NEIN lautet, ist die Adresse 1 nicht gleich der Adresse
0 + 16, worauf in Schritt 540 alle Befehle in der Gruppe
1 und den Gruppen des nächsten
Taktzyklus storniert werden und die Überschreibadresse gleich der
Adresse 0 + 16 gesetzt wird. Anschließend wird in Schritt 542 die
Hilfsadresse auf und die FTAC-Adresse auf ungültig gesetzt. Dann springt
der Prozess zurück
zu Schritt 526. Durch diesen Verzweigungsvorhersageprozess
ist das System somit in der Lage, Verzweigungsprotokollinformationen
derart zu sammeln, dass der Überschreibbefehl
des Hilfs-Cachespeichers nichtangrenzende Befehle erfolgreich abrufen kann.
Im Folgenden wird in Verbindung mit 6 die Funktionsweise
anhand eines konkreten Beispiels ausführlich beschrieben.
-
6 ist
ein Beispiel 600, dass den Befehlsfluss bei Verwendung
des Verzweigungsvorhersage-Algorithmus von 5 veranschaulicht.
Das in 6 gezeigte Beispiel 600 stellt eine Reihe
von Abrufschritten 602 für ein Programmsegment 604 in
aufeinander folgenden Taktzyklen gemäß der vorliegenden Erfindung
dar. Dabei ist zu beachten, dass alle Adressen im Hexadezimalformat
(Basis 16) dargestellt sind. Sterne im Beispiel 600 zeigen
abgerufene Befehle im Befehlsstrom an, die storniert wurden.
-
Aus 6 ist
zu ersehen, dass das Programmsegment eine Vielzahl von Basisblöcken 606, 608, 610 und 612 umfasst.
Jeder der Basisblöcke 606 bis 612 beginnt
mit einem Ladebefehl und endet mit einem Verzweigungsbefehl. Die
Basisblöcke
werden in Verbindung mit der vorliegenden Erfindung dazu verwendet,
nichtangrenzende Befehle während eines
Taktzyklus abzurufen.
-
Durch
die Nutzung des Verzweigungsvorhersage-Algorithmus von 5 in
Verbindung mit den Hardwaremechanismen von 4 zum Sammeln von
Verzweigungsprotokollinformationen ist es möglich, nichtangrenzende Befehle
von 6 während eines
Taktzyklus abzurufen.
-
Das
Verfahren zum Abrufen von Befehlen während eines Taktzyklus wird
durch die 4, 5 und 6 veranschaulicht.
Im Zyklus 000 werden acht Befehle bereitgestellt. Es wird davon
ausgegangen, dass sich im Hilfs-Cachespeicher 417 zu Anfang
keine Befehle befinden, sodass zu diesem Zeitpunkt in Schritt 502 ungültige Befehle
im Befehls-Cachespeicher gefunden werden, dann wird in Schritt 506 ermittelt,
ob sich im Hilfs-Cachespeicher gültige Befehle
befinden, was zur Antwort NEIN führt.
In diesem Fall werden dann alle Befehle aus dem Befehls-Cachespeicher
zurückgehalten.
Zu diesem Zeitpunkt werden in Schritt 512 die Verzweigungen ermittelt,
die Zieladressen berechnet und als ausgeführt oder nicht ausgeführt vorhergesagt.
Es ist bekannt, dass sich das Ziel für die Verzweigung in der ersten
Befehlsgruppe unter der Adresse 0x100 befindet. Dann wird ermittelt,
ob sich in der Gruppe 0 eine vorhergesagte ausgeführte Verzweigung
befindet, und die Antwort lautet JA. Das entspricht dem dritten Befehl
unter der Adresse 0x000. Durch den Verzweigungsvorhersageprozess
wird der Befehl unter der Adresse 0x000 in den Hilfs-Cachespeicher
gelesen und die Adresse im Hilfs-Verzeichnis gespeichert. Durch
den Verzweigungsvorhersageprozess wird ferner in Schritt 530 die
Adresse 110 im BTAC 108 gespeichert.
-
Dann
wird im Taktzyklus 003 der nächste
Basisblock 608 zum Laden der Befehle unter der Zieladresse
0x100 verwendet. Der letzte Befehl im Basisblock 608 ist
eine Verzweigung zur Adresse 200. Dann werden wie zuvor erwähnt die
Adresse 100 abgerufen und für
diese entsprechende Informationen im Hilfs-Cachespeicher, im Hilfs-Verzeichnis
und im BTAC gesammelt. Dementsprechend werden während der Taktzyklen 003 bis
007 Informationen gesammelt und während des einen Taktzyklus
008 zwei nichtangrenzende Befehle (0x000 und 0x100) abgerufen.
-
Dieser
Verzweigungsvorhersageprozess wird mit den Basisblöcken 610 und 612 wiederholt, wobei
während
der Taktzyklen 020 bis 024 nichtangrenzende Befehle abgerufen werden.
Das Beispiel zeigt, dass zuerst ausreichend Verzweigungsprotokollinformationen
gesammelt werden müssen
und anschließend
während
eines Taktzyklus nichtangrenzende Befehle abgerufen werden können. Dieser Prozess
kann wiederholt werden, insbesondere in solchen Fällen, in
denen Befehle wiederholt vorkommen, sodass die meisten nichtangrenzenden
Befehle während
eines Taktzyklus abgerufen werden können. Dies wird durch die Verwendung
des Hilfs-Cachespeichers und der Universalverzweigungslogik in Verbindung
mit den Verzweigungsprotokolltabellen erreicht, während der
Verzweigungsvorhersageprozess gemäß der vorliegenden Erfindung
ausgeführt wird.
-
Es
sind auch andere Verfahren wie beispielsweise Trace-Cachespeicher und
mehrstufige Verzweigungsvorhersageroutinen vorgeschlagen worden,
damit ein Prozessor nichtangrenzende Befehle während eines Taktzyklus abrufen
kann. Das oben beschriebene Verfahren mit Hilfs-Cachespeicher und Überschreiben
von Befehlen ist jedoch einfacher als andere Verfahren und genauso
wirksam.