-
Die
vorliegende Erfindung betrifft das Gebiet der Mikroprozessoren.
Insbesondere betrifft die vorliegende Erfindung die Verzweigungsvorhersage
bei Mikroprozessoren.
-
Computerprogramme
enthalten üblicherweise
eine große
Anzahl von Verzweigungsbefehlen, die bei ihrer Ausführung verursachen
können,
daß Befehle
in einer von der im Programmspeicher angegebenen Reihenfolge abweichenden
Reihenfolge ausgeführt
werden. Wenn ein Verzweigungsbefehl ausgeführt wird, geht die Ausführung entweder
mit dem nächsten
sequentiellen Befehl aus dem Speicher weiter oder die Ausführung springt
zu einem von einer Verzweigungszieladresse spezifizierten Befehl. Man
spricht davon, daß eine
von dem Verzweigungsbefehl spezifizierte Verzweigung "genommen" wird, wenn die Ausführung zu
dem von der Verzweigungszieladresse spezifizierten Befehl springt,
und davon, daß sie "nicht genommen" wird, wenn die Ausführung mit
dem nächsten
sequentiellen Befehl aus dem Speicher fortgesetzt wird.
-
Verzweigungsbefehle
sind entweder unbedingte oder bedingte Verzweigungsbefehle. Eine
unbedingte Verzweigung wird bei jeder Ausführung des Befehls genommen.
Ein bedingter Verzweigungsbefehl wird genommen oder nicht genommen,
je nach der Auflösung
einer Bedingung, welche normalerweise ein Ergebnis einer logischen
Anweisung ist. Die Befehle, die nach einer bedingten Verzweigung
auszuführen
sind, sind solange nicht mit Gewißheit bekannt, bis die Bedingung,
von der die Verzweigung abhängt,
aufgelöst
wird. Mikroprozessoren gemäß dem Stand
der Technik warten jedoch nicht, bis die Bedingung aufgelöst wird,
sondern führen
eine Verzweigungsvorhersage aus, wobei der Mikroprozessor versucht
zu erraten, ob die Verzweigung genommen wird oder nicht, so daß die der
Verzweigung nachfolgenden Befehle abgerufen und spekulativ ausgeführt werden
können.
Wenn vorhergesagt wird, daß eine
Verzweigung nicht genommen wird, ruft der Mikroprozessor den nächsten sequentiellen
Befehl nach der Verzweigung aus dem Speicher ab und führt ihn
spekulativ aus. Wenn vorhergesagt wird, daß die Verzweigung genommen
wird, ruft der Mikroprozessor den Befehl an der vorhergesagten Verzweigungszieladresse
ab. Die der Verzweigungsvorhersage nachfolgenden Befehle, die ausgeführt werden,
sind "spekulativ", da der Mikroprozessor
noch nicht weiß,
ob die Vorhersage richtig ist oder nicht. Dementsprechend können alle
von den spekulativen Befehlen veranlaßten auszuführenden Operationen nicht vollständig abgeschlossen
werden. Wenn eine Speicher-Schreiboperation
beispielsweise spekulativ ausgeführt
wird, kann die Schreiboperation solange nicht an ein Speichersystem
gesendet werden, bis alle vorherigen Verzweigungsbedingungen erfolgreich
ausgeführt
wurden. Ansonsten kann ein Befehl in einem falsch vorhergesagten
Pfad dazu führen, daß der Inhalt
des Speichers fehlerhaft wird.
-
Wenn
schließlich
bestimmt wird, daß die
Verzweigungsvorhersage richtig war, werden die spekulativ ausgeführten Befehle
verabschiedet oder auf andere Weise festgeschrieben. Bei dem Beispiel
einer Speicher-Schreiboperation wird die Verabschiedung dadurch
ausgeführt,
daß die
Schreiboperation an das Speichersystem gesendet wird. Wenn sich schließlich herausstellt,
daß die
Verzweigungsvorhersage unrichtig war, dann werden alle spekulativ ausgeführten Befehle,
die der falsch vorhergesagten Verzweigung nachfolgen, üblicherweise
aus dem System gelöscht
(flushed). Bei dem Beispiel mit der Speicher-Schreiboperation wird
die Schreiboperation nicht an das Speichersystem gesendet, sondern
statt dessen verworfen.
-
Zur
Beschleunigung einer Verzweigungsvorhersage enthalten einige bekannte
Mikroprozessoren eine Verzweigungsvorhersagetabelle (branch prediction
table-BPT), die eine Cache-Speicherung der zuletzt vorhergesagten
Verzweigungen zusammen mit zugehörigen
Vorhersageinformationen ermöglicht, beispielsweise
mit einer Vorgeschichte (history) vorheriger Ausführungen,
die auch als dynamische Vorgeschichte bekannt ist, und/oder Vorhersagen
für diese
Verzweigung und deren Erfolg.
-
Aus
IBM Technical Disclosure Bulletin, IBM Corp., NY, US, Vol 37, No.
7, 1. Juli 1994, Seiten 109 bis 113 ist ein Verzweigungs-Vorhersage
Mechanismus mit Vorhersagetabellen bekannt. Der Verzweigungs-Vorhersage
Mechanismus kombiniert verschiedene Arten der Verzweigungs-Vorhersagen
in einem gemeinsamen Mechanismus und wendet diese bedingungsabhängig an.
-
Die
US 5,848,269 beschreibt
eine Verzweigungs-Vorhersage-Einrichtung
mit einem Vorhersage-Informationspuffer
und einem Verzweigungs-Vorhersage Mechanismus. Die Verzweigungs-Vorhersage
für eine
Verzweigungs-Anweisung erfolgt zur gleichen Zeit wie das Abholen
einer der Verzweigungs-Anweisung vorhergehenden Anweisung.
-
Aus
der
EP 0 544 026 A1 ist
eine Einrichtung zur Verzweigungs-Vorhersage bei nach dem Pipeline-Prinzip
betriebenen Verarbeitungseinheiten bekannt. Für jeden Verzweigungsbefehl
werden allen möglichen
Kombinationen einer Anzahl von vorhergehenden Verzweigungsbefehlen
Verzweigungsentscheidungen zugeordnet und zusammen mit einer aktuellen
Historie gespeichert.
-
Zusätzlich zu
einem dynamischen Verzweigungsprotokoll können Vorhersagemechanismen
zur Unterstützung
der Verzweigungsvorhersage außerdem
Kompilierer-Hinweise verwenden. Die Kompilierer-Hinweise werden
normalerweise dadurch bestimmt, daß Programmprofile definiert
werden, wobei dies dadurch geschieht, daß man ein Programm mit verschiedenen
Sätzen
von Testdaten ablaufen läßt. Aus
der Definition von Profilen für
einen Kompilierer weiß man
möglicherweise,
ob eine Verzweigung wahrscheinlich genommen wird oder nicht und
mit wie hoher Wahrscheinlichkeit die Verzweigung genommen wird oder
nicht. Diese Informationen können
in einen Befehl hineinko diert werden. Um diese Informationen von
dem Befehl herauszufinden, muß der
Befehl aus dem Befehlscache gelesen und dekodiert werden. Das Problem
besteht darin, daß ein
Befehl in der Pipeline später
dekodiert wird. Daher sind die in dem Befehl kodierten Informationen
erst einige Stufen später
in der Pipeline verfügbar.
-
Aufgabe
der Erfindung ist es, eine verbesserte Verzweigungs-Vorhersage zur
Verfügung
zu stellen. Die Aufgabe wird erfindungsgemäß gelöst durch einen Mikroprozessor
mit einer Verzweigungsvorhersagetabelle, deren Einträge jeweils
ein Vorhersagefeld und ein Vorgeschichteregister enthalten, wobei das
Vorhersagefeld anzeigt, ob eine Verzweigung als zu nehmend oder
nicht zu nehmend vorhergesagt ist. Das Vorgeschichteregister speichert
Vorgeschichteinformationen, die die Vorgeschichte vorangegangener
Ausführungen
des zugehörigen
Verzweigungsbefehls charakterisieren. Der Mikroprozessor enthält ferner
ein Compilerhinweis-Register, das wenigstens ein erstes Feld aufweist,
welches anzeigt, ob eine Verzweigung durch den Compiler als eine
Verzweigung charakterisiert ist, welche statisch vorhergesagt ist,
das heißt
als mit einer hohen Wahrscheinlichkeit zu nehmend oder nicht zu
nehmend vorhergesagt ist. Das Vorhersagefeld und das Vorgeschichteregister eines
zu aktualisierenden Eintrags der Verzweigungsvorhersagetabelle sind
mit den Eingängen
einer Vorhersageaktualisierungslogik gekoppelt, wobei in Abhängigkeit
vom Inhalt des ersten Feldes des Compiler-Hinweisregisters die Ausgangssignale
der Vorhersageaktualisierungslogik selektiv mit dem Vorhersagefeld
und dem Vorgeschichteregister gekoppelt werden, um eine Aktualisierung
des Vorhersagefelds und des Vorgeschichteregisters durch die Ausgangssignale
nur dann zu ermöglichen,
wenn keine statische Vorhersage durch den Inhalt des ersten Feldes
angezeigt ist.
-
Die
Aufgabe wird außerdem
durch ein Verfahren mit den Merkmalen des Anspruchs 15 gelöst.
-
Die
Merkmale, Aspekte und Vorteile der vorliegenden Erfindung werden
anhand der folgenden detaillierten Beschreibung, der beigefügten Ansprüche und
der zugehörigen
Zeichnungen deutlicher, in denen:
-
1 ein
Blockschaltbild zeigt, das ein vereinfachtes Ausführungsbeispiel
eines Mikroprozessors gemäß der vorliegenden
Erfindung zeigt;
-
2 zeigt
ein Blockschaltbild, das eine Verzweigungsvorhersagetabelle mit
einem entsprechenden Eintrag und andere Strukturen der Verzweigungsvorhersagetabelle
gemäß einem
Ausführungsbeispiel
der vorliegenden Erfindung;
-
3 zeigt
ein Ablaufdiagramm im Zusammenhang mit einem Ausführungsbeispiel
eines Verfahrens zum Zuweisen einer Verzweigung gemäß der vorliegenden
Erfindung.
-
Ein
Ausführungsbeispiel
der vorliegenden Erfindung enthält
einen Mikroprozessor. Der Mikroprozessor hat eine Verzweigungsvorhersagetabelle (BPT),
die wenigstens einen Verzweigungseintrag enthält. Der wenigstens eine Verzweigungseintrag enthält ein Vorhersagefeld,
um anzuzeigen, ob eine Verzweigung als genommen vorhergesagt wird
oder nicht. Der wenigstens eine Verzweigungseintrag enthält ferner
ein Vorgeschichteregister zur Speicherung von Vorgeschichteinformationen.
Die BPT enthält
ferner eine Vorhersageaktualisierungslogik, die das Vorhersagefeld
und das Vorgeschichteregister aktualisiert, außer wenn auf eine Verzweigung
als statisch sehr wahrscheinlich vorhergesagt hingewiesen wird.
-
Der
Mikroprozessor enthält
ferner ein Kompilierer-Hinweisregister, das ein erstes Feld hat,
welches im aktiven Zustand anzeigt, daß eine Verzweigung statisch
sehr wahrscheinlich vorhergesagt ist. Das Kompilierer-Hinweisregister
enthält
ferner ein zweites Feld, das im aktiven Zustand anzeigt, ob eine Verzweigung
als genommen vorhergesagt wurde. Der wenigstens eine Eintrag enthält ferner
ein Feld (im folgenden bezeichnet als "sehr wahrscheinlich vorhergesagtes/unbedingtes" (strongly predicted/unconditional-SP/U)- Feld). Das SP/U-Feld
wird als Ergebnis gesetzt, wenn herausgefunden wurde, daß eine unbedingte
Verzweigung vorliegt und ebenfalls wenn herausgefunden wurde, daß eine in
den Verzweigungseintrag eingefügte
bedingte Verzweigung sehr wahrscheinlich vorhergesagte Kompilierer-Hinweise
aufweist. Das SP/U-Feld zeigt im aktiven Zustand an, daß die Verzweigung
entweder sehr wahrscheinlich vorhergesagt wurde oder es sich um
eine unbedingte Verzweigung handelt.
-
Das
Vorhersagefeld ist mit dem zweiten Feld des Kompilierer-Hinweisregisters
gekoppelt und mit der Vorhersageaktualisierungslogik. Das Vorhersagefeld
kann Informationen empfangen, die angeben, ob eine Verzweigung als
genommen vorhergesagt wird, und zwar entweder von dem Kompilierer-Hinweis oder von
einem dynamischen Verzweigungsvorhersager bzw. -prädiktor,
der die Vorhersageaktualisierungslogik verwendet. Wenn das SP/U-Feld
aktiv ist, ist es so konfiguriert, daß es eine Aktualisierung des
Vorgeschichteregisters oder sowohl des Vorgeschichteregisters als
auch des Vorhersagefeldes verhindert. Folglich wird der dynamische
Prädiktor
infolge der Aktivierung des SP/U-Feldes daran gehindert, die Kompilierer-Vorhersage
zu ändern
oder sowohl die Kompilierer-Vorhersage als auch die Vorgeschichteinformationen
zu ändern.
-
Es
hat sich gezeigt, daß fehlerhafte
Vorhersagen allgemein verringert werden, wenn Kompilierer-Hinweise
verwendet werden. Das Ausführungsbeispiel
des Mikroprozessors gemäß der vorliegenden
Erfindung ermöglicht
dem Kompilierer-Hinweisregister, welches angibt, ob eine Verzweigung
sehr wahrscheinlich bzw. mit hoher Wahrscheinlichkeit vorhergesagt
wird, den auf dem Chip implementierten dynamischen Vorhersagealgorithmus
außer
Kraft zu setzen, wenn der Kompilierer sich bei dem Ergebnis einer
Verzweigung ziemlich sicher ist – d.h. bei sehr wahrscheinlich
vorhergesagten Verzweigungen. Bei Verwendung eines Zuweisungsalgorithmus,
der auf der obigen Beschreibung und dem SP/U-Feld in der BPT basiert,
kann die Vorhersagegenauigkeit verbessert werden. Durch Speiche rung
von Kompilierer-Vorhersageinformationen in der BPT werden diese
Informationen außerdem
wesentlich früher
verfügbar
als sonst nach der Dekodierung der Verzweigungsbefehls, da es länger dauert,
bis der Befehl dekodiert wird. Daher kann mit dem Ausführungsbeispiel
des erfindungsgemäßen Mikroprozessors
bestimmt werden, ob die chipeigene dynamische Vorhersage verwendet
werden soll oder ob sie durch die statischen Kompilierer-Hinweise
außer
Kraft gesetzt werden soll, bevor der Befehl dekodiert wird.
-
1 zeigt
ein vereinfachtes Ausführungsbeispiel
des erfindungsgemäßen Mikroprozessors 100 als
Blockschaltbild. Der Mikroprozessor 100 enthält mehrere
Pipelinestufen, von denen die Pipelinestufen 102, 104 und 106 dargestellt
sind. Die Pipelinestufe 102, die auch Befehlszeigererzeugungspipelinestufe
genannt wird, erzeugt den Befehlszeiger, der auf einen Befehl im
Befehlscache 108 zeigt. In der nächsten Pipelinestufe 104,
der Abrufstufe, wird ein Befehl auf der Basis des in der vorherigen
Pipelinestufe erzeugten Befehlszeigers aus dem Befehlscache 108 abgerufen.
In der nächsten
Pipelinestufe, der Rotierpipelinestufe 106 wird ein Befehl
abgerufen und dekodiert. Ohne die erfindungsgemäße Einrichtung und das erfindungsgemäße Verfahren
ist ein Kompilierer-Vorhersagehinweis
erst nach Dekodierung eines Befehls in der Rotierpipelinestufe 106 verfügbar. Bei
dem Ausführungsbeispiel
des erfindungsgemäßen Mikroprozessors
kann der Kompilierer-Vorhersagehinweis in der Abrufpipelinestufe 104 zur Verfügung gestellt
werden, wenn die Verzweigung zuvor gesehen wurde und in der Verzweigungsvorhersagetabelle
(BPT) 140 zugeordnet wurde.
-
Die
BPT 140 sorgt für
eine Cache-Speicherung der zuletzt vorhergesagten Verzweigungen
zusammen mit entsprechenden Vorhersageinformationen, beispielsweise
einer kurzen Vorgeschichte von vorherigen Ausführungen und/oder Vorhersagen
für diese
Verzweigung und deren Erfolg. Beispielsweise kann ein Verzweigungseintrag
der BPT 140 ein (nicht dargestelltes) Vorhersagefeld enthalten,
welches anzeigt, ob eine Ver zweigung genommen werden soll oder nicht.
Zusätzlich
enthält
ein Verzweigungseintrag der BPT ein Verzweigungstypfeld, welches
anzeigt, ob eine Verzweigung ein Aufruf bzw. CALL, eine Rücksprung-
bzw. Rückkehrverzweigung
bzw. ein RETURN, eine reguläre
Verzweigung usw. ist. Der Mikroprozessor 100 weist einen
Befehlszeigergenerator (instruction pointer generator-IPG) 103 auf,
der einen Befehlszeiger (instruction pointer-IP) erzeugt. Der IP
spezifiziert der BPT 140 und dem Befehle speichernden Befehlscache
(instruction cache-IC) 108 einen neuen Befehl. Bei vielen
Ausführungsformen
von Mikroprozessoren mit Pipeline-Architektur kann auf die BPT 140 mit
Hilfe eines Tag-Wertes zugegriffen werden, der in dem Befehlszeiger
zur Verfügung
gestellt wird und Tag-Werten entspricht, die von dem IC 108 zur
Kennzeichnung seiner Cache-Zeilen verwendet werden.
-
Zusätzlich zur
Bereitstellung des Befehlszeigers für die BPT 140 und
den IC 108, stellt der IPG 103 den Befehlszeiger
einem Zieladreß-Cache
(Target Address Cache-TAC) 110 zur Verfügung. Der TAC 110 enthält Adressen
von Zielbefehlen, wo eine Verzweigung genommen werden kann, wenn
die BPT vorhersagt, daß eine
Verzweigung genommen wird. Wenn bestimmt wird, daß eine Verzweigung
genommen werden soll, steuert der TAC 110 eine Adresse,
d.h. eine Zieladresse, eines Zielbefehls an den IPG 103.
Die von dem TAC 110 zu dem IPG 103 gesteuerte
Adresse wird dekodiert und dann als regulärer Befehlszeiger zum Abrufen
eines zugehörigen
Zielbefehls vom IC 108 verwendet. Auf diese Weise beginnt
eine Abrufeinheit, die den IC 108 enthalten kann, erneut
mit dem Abrufen von Befehlen von der neuen Zieladresse. Bei einem
Ausführungsbeispiel
der vorliegenden Erfindung können
die BPT 140 und der TAC 110 in einer Einheit kombiniert
sein, wobei jeder Verzweigungseintrag der BPT außerdem eine Zieladresse der
Verzweigung enthält.
-
Der
Mikroprozessor 100 enthält
ferner eine Vorhersageschaltung 112, einen Rücksprung-
bzw. Rückkehrstapelpuffer
(return stack buffer-RSB) 124 und eine Auswahleinrichtung 120,
die mit dem TAC 110, dem RSB 123 und der Vorhersageschaltung 112 gekoppelt
ist. Die Vorhersageschaltung 112 weist einen Eingangsport
auf, der mit dem TAC 110 derart gekoppelt ist, daß er von
diesem ein TREFFER/FEHLVERSUCH-Signal (HIT/MISS signal) empfangen
kann. Ein zweiter Eingangsport der Vorhersageschaltung 112 ist
derart mit der BPT 140 gekoppelt, daß er von dieser Informationen
darüber empfangen
kann, ob eine Verzweigung genommen wird oder nicht. Diese Informationen
werden in dem Vorhersagefeld eines oben beschriebenen BPT-Eintrags
gespeichert. Die Vorhersageschaltung 112 weist ferner einen
dritten Eingangsport auf, der derart mit der BPT 140 gekoppelt
ist, daß er
von der BPT 140 Informationen darüber empfangen kann, ob es in der
BPT 140 einen Treffer oder einen Fehlversuch gibt. Ferner
weist die Schaltung 112 einen vierten Eingangsport auf,
der derart mit der BPT 140 gekoppelt ist, daß er Informationen über den
Typ der Verzweigung von der BPT 140 empfangen kann. Der
Typ einer Verzweigung gibt an, ob eine Verzweigung von RÜCKSPRUNG- bzw. RETURN-Typ
oder von einem anderen Typ als vom RÜCKSPRUNG-Typ ist, beispielsweise
vom AUFRUF- bzw. CALL-Typ oder vom regulären Typ.
-
Die
Vorhersageschaltung 112 erzeugt auf der Basis der an ihren
Eingangsports empfangenen Informationen ein Steuer(auswahl)signal
für die
Auswahleinrichtung 120. Die Auswahleinrichtung 120 wählt in Abhängigkeit
von dem logischen Zustand dieses Signals eine der Zieladressen aus,
die von dem TAC 110 und dem RSB 124 zur Verfügung gestellt
werden. Beispielsweise gibt es einen Verzweigungstreffer in der
BPT 140 und dem TAC 110, und die Verzweigung wird
als genommen vorhergesagt und ist nicht vom RÜCKSPRUNG-Typ. Die Vorhersageschaltung 112 erzeugt
ein Auswahlsignal für
die Auswahleinrichtung 120, das zur Auswahl der Zieladresse
vom TAC 110 führt.
Die Auswahleinrichtung 120 stellt die Zieladresse einem
der Eingangsports der Auswahleinrichtung 150 des IPG 103 zur
Verfügung.
-
Die
Auswahleinrichtung 150 weist einen weiteren Eingangsport
auf, der mit einem Inkrementor bzw. Aufwärtszähler 152 gekoppelt
ist, der den Befehlszähler
um einen vorgegebenen Wert, beispielsweise um "1",
inkrementiert. Der inkrementierte Zeiger wird zur Verwendung als
neuer Befehlszeiger in den Fällen
zur Auswahleinrichtung 150 zurückgekoppelt, in denen das Abrufen
des nächsten
sequentiellen Befehls gewünscht
wird. Außerdem
hat die Auswahleinrichtung 150 zwei Eingangsports zum Empfang
der Signale AUSNAHME (EXEPTION)/UNTERBRECHUNG (TRAP) und FEHLERHAFTE
VERZWEIGUNGSVORHERSAGE (BRANCH MISPREDICTION-BMISP).
-
Die
Auswahleinrichtung 150 weist ferner mehrere Auswahleingangsports
auf, die mehrere Auswahlsignale empfangen. Eines dieser Ausgangssignale
ist das genommen/nicht genommen(taken/not taken-T/N)-Signal vom
BPT 140. Weitere Signale sind ein Gültige-Ausnahme-Signal (GÜLTIGE AUSNAHME
bzw. VALID EXCEPTION) und ein Gültige-Verzweigungsfehlvorhersage-Signal (GÜLTIGE BMISP
bzw. VALID BMISP), die von Pipelinestufen empfangen werden, welche
weiter hinten in der Pipeline "angeordnet" sind. Die Auswahleinrichtung 150 kann
so konfiguriert sein, daß sie
bei den an sie angelegten Befehlsadreßsignalen gemäß einem
Schema Prioritäten
setzt, wobei (1) eine erste Priorität einem AUSNAHME/UNTERBRECHUNG-Befehlsadreßesignal
verliehen wird, das von einem Back-end des Mikroprozessors ausgegeben
wird; (2) eine zweite Priorität
einem Verzweigungsfehlvorhersage(BMISP)-Befehlsadreßsignal
verliehen wird, das ebenfalls von dem Back-end des Mikroprozessors ausgegeben
wird; (3) eine dritte Priorität
einem Zielbefehlsadreßsignal
verliehen wird, das von der Auswahleinrichtung 120 an die
Auswahleinrichtung 150 ausgegeben wird; und (4) eine vierte
Priorität
dem von dem Inkrementor 152 erzeugten inkrementierten Befehlszeigersignal
verliehen wird. Gemäß diesem Prioritätenschema
wählt die
Auswahleinrichtung 150 an einem Ausgangsport die von der
Auswahleinrichtung 120 empfangene Zieladresse aus, wenn
die Auswahlsi gnale GÜLTIGE
BSIMP und GÜLTIGE AUSNAHME
nicht aktiv sind und die Verzweigung als genommen vorhergesagt wird.
-
Ein
Vorhersagealgorithmus steuert die Vorhersage in folgender Weise.
Wenn die BPT 140 einen Fehlversuch und der TAC 110 einen
Treffer anzeigt, wird eine Verzweigung als genommen vorhersagt und
von der Auswahleinrichtung 120 wird die Zieladresse vom
TAC 110 ausgewählt
und an den Befehlszeigergenerator 103 geliefert. Wenn es
sowohl einen BPT-Fehlversuch als auch einen TAC-Fehlversuch gibt,
dann wird bestimmt, daß es
keinen Verzweigungseintrag gibt. Der Befehlszeigergenerator 103 inkrementiert
den aktuellen Zeiger und leitet den inkrementierten aktuellen Zeiger
an die Auswahleinrichtung 150 zurück. Wenn es in der BPT einen
Treffer und in dem TAC einen Fehlversuch gibt und die BPT anzeigt,
daß der
Befehl vom RÜCKSPRUNG-Typ
ist, steuert die Vorhersageschaltung 112 die Auswahleinrichtung 120 mit
einem Auswahlsignal an, daß zur
Auswahl einer entsprechenden Rücksprungadresse
von dem RSB 124 führt.
Wenn es jedoch sowohl in der BPT 140 als auch in der TAC 110 einen
Treffer gibt, und die Verzweigung als genommen vorhergesagt wird,
veranlaßt
die Vorhersageschaltung 112, daß die Zieladresse von dem TAC von
der Auswahleinrichtung 120 ausgewählt wird.
-
Sofern
es sowohl in der BPT 140 als auch in der TAC 110 einen
Treffer gibt, die Verzweigung jedoch als nicht genommen vorhergesagt
wird, fährt der
Mikroprozessor damit fort, daß er
den nächsten sequentiellen
Befehl in dem Cache 108 abruft, indem er einen neuen Zeiger
auf der Basis des inkrementierten vorherigen Zeigers erzeugt. Wenn
es in der BPT 140 einen Treffer gibt, jedoch einen Fehlversuch in
dem TAC 110 und der Befehl vom regulären Typ ist, kann die Zieladresse
aus dem Befehl berechnet werden, nachdem der Befehl dekodiert wurde.
-
Bei
dem hier beschriebenen Ausführungsbeispiel
des erfindungsgemäßen Mikroprozessors
ist der Kompilierer so konfiguriert, daß er die "Kompilierer-Hinweise" als 2-Bit-Vorhersageinformationen in einen
Befehl hinein kodiert. Die zur Kodierung von Kompilierer-Hinweisen
vorgesehenen zwei Bits werden entsprechend der Wahrscheinlichkeit
gesetzt, daß eine
Verzweigung genommen wird oder nicht. Die zwei Bits kodieren vier
verschiedene Möglichkeiten
der Verzweigungsvorhersage: Wahrscheinlich nicht genommen, wahrscheinlich
genommen, sehr wahrscheinlich nicht genommen und sehr wahrscheinlich
genommen. In der folgenden Beschreibung werden die sehr wahrscheinlich
genommenen und sehr wahrscheinlich nicht genommenen Verzweigungen "statisch genommene" bzw. "statisch nicht genommene" Verzweigungen genannt,
da die Verzweigung bei Verwendung des von dem Kompilierer zur Verfügung gestellten
statischen Hinweises besser vorhergesagt wird. Die wahrscheinlich
genommenen und wahrscheinlich nicht genommenen Verzweigungen werden "dynamisch genommene" bzw. "dynamisch nicht genommene" Verzweigungen genannt,
da die Verzweigung bei Verwendung eines dynamischen Prädiktors
vorhergesagt wird. In der folgenden Beschreibung sind die Begriffe "statisch" und "sehr wahrscheinlich" und "dynamisch" und "wahrscheinlich" austauschbar.
-
Der
Kompilierer bestimmt eine "Genommen-Rate", in dem er Programmprofile
definiert, wobei ein Programm mit Sätzen von Testdaten abläuft und
die Verzweigungsergebnisstatistik erfaßt wird. Die "Genommen-Rate" kann zwischen 0
% und 100 % liegen. Wenn die "Genommen-Rate" zwischen 0 und einem
bestimmten Prozentsatz "X" liegt, beispielsweise
ca. 10 %, ist es sehr wahrscheinlich, daß die Verzweigung "nicht genommen" wird und die beiden
Bits können
die Vorhersage als "statisch
nicht genommen" codieren.
Wenn die "Genommen-Rate" zwischen ca. 10
% und einem bestimmten Prozentsatz "Y" liegt,
beispielsweise ca. 50 %, ist die Vorhersage wahrscheinlich "dynamisch nicht genommen". Wenn die "Genommen-Rate" zwischen ca. 50
% und einem bestimmten Prozentsatz "Z" liegt,
beispielsweise ca. 90 %, ist die Vorhersage wahrscheinlich "dynamisch genommen". Wenn die "Genommen-Rate" zwischen "Z" und 100 % liegt, ist die Vorhersage sehr
wahrscheinlich "statisch
genommen".
-
Die
Prozentzahlen X, Y und Z werden auf der Basis eines Vergleichs mit
der Genauigkeit des in dem Mikroprozessor implementierten dynamischen Verzweigungsprädiktors
erstellt. Beispielsweise hat die Vorhersage eines dynamischen Verzweigungsprädiktors üblicherweise
eine Genauigkeit von 90 %. Hat der Kompilierer eine höhere Genauigkeit
als 90 %, kann der Kompilierer-Hinweis anstelle des dynamischen
Prädiktors
verwendet werden. Wenn eine Verzweigung sehr wahrscheinlich "genommen" wird, können die
beiden kodierten Bits daher verwendet werden, um das außer Kraft
zu setzen, was der dynamische BPT-Prädiktor anzeigt, da der Kompilierer sehr
zuversichtlich ist, daß eine
Verzweigung genommen wird.
-
Wenn
eine "statisch nicht
genommene" Verzweigung
auftritt, gibt es üblicherweise
keine Änderung
des Befehlsflusses. Daher ist es nicht erforderlich, diese Verzweigung
in der BPT zwischenzuspeichern. wenn die in einem Befehl kodierten
Informationen angeben, daß es
eine Vorhersage wahrscheinlich genommen oder wahrscheinlich nicht
genommen gibt, ist der Kompilierer nicht sehr sicher, ob die Verzweigung
genommen werden soll oder nicht. In diesem Fall wird die BPT 140 zur
dynamischen Vorhersage des Verhaltens von Verzweigungen verwendet. Die
dynamische Vorhersage verwendet die History bzw. die Vorgeschichte
einer Verzweigung, die in der BPT aufgezeichnet ist, um das Ergebnis
der anstehenden Verzweigungen vorherzusagen. Wenn der Mikroprozessor,
in dem das hier beschriebene Ausführungsbeispiel der vorliegenden
Erfindung implementiert ist, eine BPT-Vorhersage aufweist – d.h., eine
dynamische Vorhersage verfügbar
ist, kann er die BPT-Vorhersage verwenden, um zu bestimmen, ob eine
Verzweigung genommen werden soll oder nicht. Wenn die BPT-Vorhersage
nicht verfügbar
ist oder der Mikroprozessor die BPT-Vorhersage außer Kraft setzen will, kann
der Mikroprozessor das genommen/nicht-genommen-Feld des 2-Bit-Kompilierer-Hinweises
verwenden, um zu bestimmen, ob eine Verzweigung genommen werden
soll oder nicht. Bei einem Ausführungsbeispiel
der vorliegenden Erfindung sind die zwei kodierten Bits Teil eines
41-Bit-Befehls und werden von dem Kompilierer in den Befehl geschrieben,
jedoch ist der Schutzbereich der vorliegende Erfindung nicht auf
41-Bit-Befehle beschränkt. Die
Länge eines
Befehls ist derart, daß in
jedem Befehl wenigstens zwei Bits zur Kodierung von Kompilierer-Hinweisen
vorgesehen sind.
-
Im
Allgemeinen sind in der BPT gespeicherte Verzweigungen solche Verzweigungen,
die wahrscheinlich Befehlsflußänderungen
verursachen. Üblicherweise
werden diese Verzweigungen sowohl in der BPT als auch in dem TAC
zwischengespeichert. Gemäß einem
in diesem Abschnitt später
beschriebenen Zuweisungsprozeß werden
Verzweigungen, für
die es in der BPT einen Fehlversuch gab, standardmäßig als
nicht genommen vorhergesagt, bis die Kompilierer-Vorhersagehinweise
von der Dekodierung der Befehle verfügbar sind. Anders als "statisch nicht genommene" Verzweigungsbefehle
werden "dynamisch
nicht genommene" Verzweigungsbefehle
zu einem Zeitpunkt wahrscheinlicher genommen. Daher werden Informationen,
die "dynamisch genommene" oder "dynamisch nicht genommene" Verzweigungen betreffen,
in die BPT gespeichert.
-
Für eine reguläre bedingte
Verzweigung kann man die Zieladresse in den TAC einfügen, ohne sie
in die BPT einzufügen.
Bei einer sehr wahrscheinlich genommenen Verzweigung, beispielsweise
einer "statisch
genommenen" Verzweigung,
ist es solange unbedeutend, ob die Vorgeschichte der Verzweigung in
der BPT ist oder nicht, solange die Zieladresse in dem TAC ist,
da die Vorgeschichte dieser Verzweigung von der Vorhersage nicht
verwendet wird. Wenn eine Adresse in dem TAC einen Treffer erzielt, jedoch
in der BPT zu einem Fehlversuch führt, wird bei einem Ausführungsbeispiel
des erfindungsgemäßen Mikroprozessors
die Verzweigung automatisch als genommen vorhergesagt unter Verwendung
der Zieladresse von dem Treffer-TAC-Eintrag. AUFRUF- und RÜCKSPRUNG-Befehle
mit "statisch genommen"-Hinweisen werden
jedoch in die BPT geschrieben, da diese beiden Verzweigungsarten
den Rücksprungstapelpuffer
(RSB) 124 beeinflussen können. Daher kön nen AUFRUF-
und RÜCKSPRUNG-Informationen
in die BPT 140 geschrieben werden, so daß die BPT 140 den
AUFRUF/RÜCKSPRUNG-Typ zur Verfügung stellen
kann, bevor Verzweigungen dekodiert werden.
-
2 zeigt
eine Darstellung einer Verzweigungsvorhersagetabelle (BPT) 200.
Für jeden
Verzweigungsbefehl hat die BPT 200 einen Verzweigungseintrag 260.
Der Verzweigungseintrag 260 hat verschiedene Felder, u.a.
ein Gültig-Bit-Feld 240,
ein sehr wahrscheinlich vorhergesagt/unbedingt(strongly predicted/unconditional-SP/U)-Feld 242,
ein Vorhersagefeld 244, ein Verzweigungstypfeld (AUFRUF/RÜCKSPRUNG/REGULÄR) 261 und
ein Vorgeschichteregister bzw. Protokollregister 246. Bei
einem Ausführungsbeispiel
haben das SP/U-Feld und das Vorhersagefeld 242 bzw. 244 jeweils
ein Bit, während
das Vorgeschichteregister 246 4 Bits enthält. Man
beachte, daß die
Größe der obigen
Felder nicht auf eine spezielle Anzahl von Bits beschränkt ist,
sondern die Felder mit verschiedenen Anzahlen von Bits implementiert
werden können.
Im folgenden werden das SP/U-Feld und das Vorhersagefeld 242 und 244 als "SP/U-Bit 242" und "Vorhersagebit 244" bezeichnet. Das
Gültig-Bit 240 zeigt
an, ob die Verzweigung in dem Eintrag 260 gültig ist
oder nicht. Das SP/U-Bit 242 zeigt an, ob die Verzweigung
eine bedingte oder eine unbedingte Verzweigung ist, oder ob die
Verzweigung eine sehr wahrscheinlich vorhergesagte Verzweigung ist.
Zu den regulären
bedingten Verzweigungen gehören
Verzweigungen vom Nicht-Rücksprung-Typ
und vom Nicht-Aufruf-Typ. Üblicherweise
kann sich die Vorhersage für
eine bedingte Verzweigung in Abhängigkeit
von der Ausführungsvorgeschichte
zeitlich ändern.
-
Das
Vorhersagebit 244 und das Vorgeschichteregister 246 sind
mit einer Vorhersageaktualisierungslogikschaltung 248 gekoppelt.
Die Vorhersageaktualisierungslogikschaltung 248 ist mit einer
Mustervorgeschichtetabelle 250 gekoppelt. Die Vorhersageaktualisierungslogikschaltung 248 kann einen
zweistufigen Vorhersagealgorithmus implementieren, beispielsweise
den "Tse-Yu Yeh
Two-level prediction algorithm".
Weitere Informationen zu diesem Algorithmus finden sich in "T-Y Yeh und Y.N.
Patt "Alternative
Implementations of Two-Level Adaptive Branch Prediction", Proceedings des
19th International Symposium on Computer
Architecture, Seiten 124-134, Mai, 1992.
-
Üblicherweise
werden das Vorhersagebit 244 und das Vorgeschichteregister 246 von
der Vorhersageaktualisierungslogikschaltung 248 aktualisiert.
Bei einer unbedingten Verzweigung oder bei statisch genommenen und
statisch nicht genommenen Verzweigungen verändert sich die Vorhersage jedoch
zeitlich nicht – die
Vorhersage bleibt entweder genommen oder nicht genommen. Um eine
Veränderung
der Vorhersage in diesen Fällen
zu vermeiden, ist das SP/U-Bit 242 so konfiguriert, daß es das
Vorhersagebit 244 und das Vorgeschichteregister 246 daran
hindert, von der Vorhersageaktualisierungslogikschaltung 248 aktualisiert
zu werden.
-
Das
SP/U-Bit 242 ist über
einen Inverter 262 mit Tristate-Puffern 270 und 272 gekoppelt,
die Schreiboperationen an das Vorhersagebit 244 bzw. das
Vorgeschichteregister 246 weiterleiten. Wenn das SP/U-Bit 242 gesetzt
ist, wird die Vorhersageaktualisierungslogikschaltung 248 daran
gehindert, das Vorhersagebit 244 und das Vorgeschichteregister 246 zu
aktualisieren, da die Tristate-Puffer 270 und 272 hochohmig
gemacht (tristated) werden. Der Inverter 262 invertiert
das logische Signal vom SP/U-Bit 242 und erzeugt eine logische "0" für
die Freigabeports der Tristate-Puffer 270 und 272.
Sobald das SP/U-Bit 242 gesetzt ist, wird von dem zweiten
Feld (T/N) 280 des Computerhinweisregisters 247 in
das Vorhersagebit des Vorhersagefeldes 244 geschrieben.
Wenn das SP/U-Bit 242 jedoch auf "0" entaktiviert
wurde, erlauben die Tristate-Puffer 270 und 272 die
Aktualisierung des Vorhersagebits 244 und des Vorgeschichteregisters 246 mit
dem oben erwähnten
zwei Stufen Vorhersagealgorithmus entsprechenden Informationen von
der Vorhersageaktualisierungsschaltung 248.
-
Bei
dem Ausführungsbeispiel
des erfindungsgemäßen Mikroprozessors
wird das Vorgeschichteregister auf "1111" gesetzt,
wenn eine Verzweigung "statisch
genommen" wird.
Wenn alle Bits des Vorgeschichteregisters auf "1" gesetzt
sind, wird eine Verzweigung als genommen vorhergesagt. In der Mustervorgeschichtetabelle 250 ist
der "1111" entsprechende Eintrag 290 fest
verdrahtet mit "1", so daß eine Verzweigung
immer als genommen vorhergesagt wird, wenn der Inhalt des Vorgeschichteregisters "1111" ist. Dies zeigt
an, daß eine
Verzweigung während
der ganzen Zeit genommen wird. Wenn eine Verzweigung "statisch nicht genommen" wird, ist das Vorgeschichteregister
auf "0000" gesetzt. Bei der Mustervorgeschichtetabelle
ist der dem "0000"-Eintrag entsprechende
Eintrag 292 festverdrahtet auf "0",
um immer "nicht
genommen" vorherzusagen, wenn
der Inhalt des Vorgeschichteregisters "0000" ist.
Bei Festverdrahtung der Einträge "0000" und "1111" mit "0" bzw. "1", ändert sich
die Vorhersage nicht; anders ist es bei Situationen, in denen die
Einträge
in der Mustervorgeschichtetabelle 250 von der Ausführungsvorgeschichte
lernen und ihre Vorhersage entsprechend modifizieren.
-
Für "statisch genommene" Verzweigungen ist
das SP/U-Bit 242 daher gesetzt, und das Vorgeschichteregister behält solange
seinen Anfangswert "1111", solange es die
Verzweigung in der BPT noch gibt. Bei "statisch nicht genommenen" Verzweigungen wird
das SP/U-Bit 242 gesetzt, und das Vorgeschichteregister
behält
den Anfangswert von "0000". Wenn der Kompilierer-Hinweis
anzeigt, daß es
eine "dynamisch
genommene" oder
eine "dynamisch
nicht genommene" Vorhersage
gibt, wird das SP/U-Bit 242 gelöscht. Es wird die reguläre dynamische
Vorhersage verwendet, wobei das das Vorhersagebit 242 und das
Verzweigungsprotokollregister 246 von der Vorhersageaktualisierung 248 aktualisiert
werden.
-
3 zeigt
ein Ablaufdiagramm im Zusammenhang mit einem Prozeß zum Zuordnen
einer Verzweigung gemäß einem
Ausführungsbeispiel
der vorliegenden Erfindung. Der Prozeß be ginnt mit dem Block 301,
auf den der Entscheidungsblock 302 folgt. Bei dem Entscheidungsblock 302 wird
aus den Kompilierer-Hinweisen bestimmt, d.h. aus den beiden kodierten
Bits, ob eine Verzweigung statisch ist. Wenn die Verzweigung nicht
statisch, sondern dynamisch ist, geht der Prozeß mit dem Block 304 weiter.
Beim Block 304 werden die BPT und der TAC aktualisiert. Beim
Aktualisieren wird üblicherweise
u.a. eine Zieladresse in den TAC geschrieben, welche zuletzt verwendet
wurde und es werden Verzweigungsinformationen in die BPT geschrieben.
Das SP/U-Bit 242 wird auf "0" gesetzt,
um der Vorhersageaktualisierungslogikschaltung eine Aktualisierung
des Vorgeschichte- bzw. Protokollregisters und des Vorhersagebits
zu ermöglichen.
Von diesem Zeitpunkt an wird die dynamische Vorhersage verwendet.
Wenn die Verzweigung als genommen vorhergesagt wird, wird das Vorgeschichteregister
auf 1111 (oder auf ein anderes Muster, welches wahrscheinlich eine
genommene Vorhersage erzielt) initialisiert. Wenn die Verzweigung
als nicht genommen vorhergesagt wird, wird das Vorgeschichteregister
auf 0000 initialisiert (oder auf ein anderes Muster, welches wahrscheinlich
eine nicht genommene Vorhersage erzielt).
-
Wenn
beim Entscheidungsblock 302 jedoch bestimmt wird, daß die Verzweigung
statisch ist, geht der Prozeß vom
Entscheidungsblock 302 zum Entscheidungsblock 306 weiter,
in welchem bestimmt wird, ob die Verzweigung "genommen" wird oder "nicht genommen" wird. Wenn die Verzweigung "nicht genommen" wird, d.h. wenn
die Verzweigung "statisch
nicht genommen" wird,
geht der Prozeß mit dem
Block 308 weiter. Es wird keine Zuordnung in der BPT ausgeführt. Wenn
auf eine Verzweigung als sehr wahrscheinlich nicht genommen hingewiesen wird,
werden die Informationen der Verzweigung nicht in die Vorhersagetabelle
aufgenommen, da die Standardverzweigungsvorhersage bereits "nicht genommen" lautet. Wenn die
Verzweigung jedoch genommen wird, geht der Prozeß mit dem Entscheidungsblock 310 weiter,
bei dem bestimmt wird, ob die Verzweigung vom "AUFRUF"-Typ oder vom "RÜCKSPRUNG"-Typ ist.
-
Wenn
die Verzweigung weder vom AUFRUF-Typ noch vom RÜCKSPRUNG-Typ ist, geht der Prozeß mit dem
Block 311 weiter, bei dem der TAC aktualisiert wird. Der
Grund hierfür
ist, daß man
keinen Platz in der BPT zur Speicherung der Vorgeschichte vergeuden
sollte, wenn eine Verzweigung sehr wahrscheinlich genommen wird,
wie in dem Fall einer "statisch
genommenen" Verzweigung.
-
Wenn
die Verzweigung vom AUFRUF-Typ oder vom RÜCKSPRUNG-Typ ist, geht der Prozeß mit dem
Entscheidungsblock 313 weiter, bei dem bestimmt wird, ob
die Verzweigung vom AUFRUF-Typ ist.
Wenn die Verzweigung vom AUFRUF-Typ ist, geht der Prozeß mit dem
Block 312 weiter, bei dem sowohl die BPT als auch der TAC
aktualisiert werden. Die Vorgeschichte- bzw. Protokollregisterinformationen
werden auf "1111" aktualisiert, und
das SP/U-Bit 242 wird auf 1 gesetzt. Die BPT wird aktualisiert,
damit den Verzweigungstyp beispielsweise AUFRUF, RÜCKSPRUNG
oder regulär
betreffende Informationen aufgezeichnet werden. Die Verzweigungstypinformationen
werden zur Aktualisierung anderer Verzweigungsvorhersagestrukturen
verwendet. Beispielsweise kann der Rücksprungstapelpuffer (RSB) nach
der Vorhersage mit dem "Typ" der Informationen
aktualisiert werden. Nach einem "AUFRUF" wird die Rücksprungadresse
in den RSB eingegeben. Nach einem "RÜCKSPRUNG" werden die obersten Informationen
aus dem Stapel herausgeholt.
-
Wenn
bei dem Entscheidungsblock 313 jedoch bestimmt wird, daß der Block
vom RÜCKSPRUNG-Typ
ist, geht der Prozeß mit
dem Block 314 weiter, bei dem bis auf eine Ausnahme die
gleichen Aktionen wie beim Block 312 ausgeführt werden.
Der TAC wird nicht aktualisiert, da RÜCKSPRUNG-Adressen mit Hilfe
des RSB statt mit dem TAC vorhergesagt werden.