DE3851746T2 - Sprungvorhersage. - Google Patents

Sprungvorhersage.

Info

Publication number
DE3851746T2
DE3851746T2 DE3851746T DE3851746T DE3851746T2 DE 3851746 T2 DE3851746 T2 DE 3851746T2 DE 3851746 T DE3851746 T DE 3851746T DE 3851746 T DE3851746 T DE 3851746T DE 3851746 T2 DE3851746 T2 DE 3851746T2
Authority
DE
Germany
Prior art keywords
jump
instruction
prediction
instructions
branch
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE3851746T
Other languages
English (en)
Other versions
DE3851746D1 (de
Inventor
Steven Ernest Hodges
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Services Ltd
Original Assignee
Fujitsu Services Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Services Ltd filed Critical Fujitsu Services Ltd
Application granted granted Critical
Publication of DE3851746D1 publication Critical patent/DE3851746D1/de
Publication of DE3851746T2 publication Critical patent/DE3851746T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

  • Die Erfindung bezieht sich auf eine Einrichtung zum Vorhersagen des Resultats von Sprung- (Zweig-) befehlen. Insbesondere, aber nicht ausschließlich betrifft die Erfindung die Sprungvorhersage in einem im Pipeline-Betrieb arbeitenden Datenverarbeitungssystem.
  • In einem Datenverarbeitungssystem werden Befehle normalerweise sequentiell ausgeführt. Ein Sprungbefehl jedoch kann festlegen, daß ein Sprung aus dieser normalen Folge heraus vorgenommen werden soll. Der Sprungbefehl kann entweder nicht bedingt sein, was bedeutet, daß ein Sprung durchgeführt wird, wenn der Befehl ausgeführt wird, oder aber der Sprungbefehl kann bedingt sein, was bedeutet, daß ein Sprung nur dann vorgenommen wird, wenn ein bestimmter Zustand (z. B. der Inhalt eines Akkumulatorregisters ist größer als 0) erfüllt ist. Ein Sprungbefehl kann absolut sein, was bedeutet, daß ein Sprung auf eine bestimmte absolute Adresse durchgeführt wird. Andererseits kann der Sprungbefehl relativ sein, was bedeutet, daß ein Sprung auf eine Adresse vorgenommen wird, die um einen bestimmten Betrag von dem jeweiligen Befehl versetzt ist.
  • Im Falle eines im Pipelinebetrieb arbeitenden Prozessors stellen bedingte Sprungbefehle ein spezielles Problem dar. Im allgemeinen ist die tatsächliche Bedingung, von der der Sprung abhängt, solange nicht verfügbar, bis der Befehl sich dem Ende der Pipeline nähert. Wenn die Bedingung angibt, daß ein Sprung durchgeführt werden soll, werden alle späteren Befehle, die in der Pipeline angelaufen sind, ungültig und müssen gestrichen werden. Damit arbeitet das System ganz eindeutig langsamer.
  • Eine Möglichkeit, um dieses Problem zu reduzieren, ist darin zu sehen, daß versucht wird, das wahrscheinliche Resultat (Sprung/kein Sprung) des bedingten Sprungbefehls vorherzusagen, und den nächsten Befehl in die Pipeline auf der Basis dieser Vorhersage vorab abzurufen. Wenn die Vorhersagen korrekt sind, ist es nicht erforderlich, nachfolgende Befehle zu streichen, und auf diese Weise kann der Betrieb der Pipeline ohne Verzögerungen fortgesetzt werden.
  • Um die Resultate von Sprungbefehlen vorherzusagen, wird z. B. eine Tabelle aufgestellt, die die Resultate vorausgehender, ausgeführter Sprungbefehle an gegebenen Speicherstellen aufzeichnet. Wenn ein Sprungbefehl an einer dieser gegebenen Speicherstellen vorliegt, wird die Tabelle zugegriffen, um eine Vorhersage unter der Annahme zu erreichen, daß das Resultat das gleiche ist wie das letzte Mal, als der Befehl ausgeführt wurde. Ein solcher Vorhersagemechanismus ist in der US-PS 4477 872 beschrieben.
  • In COMPUTER, Band 17, Nr. 1, Januar 1984, LONO BEACH, USA, Seiten 6-22 beschreibt JKF Lee unter dem Titel "Branch prediction strategies and branch target buffer design" eine Sprungvorhersagetechnik, die auf einer Sprunghistorie basiert. Dieser Aufsatz beschreibt ferner altemative Sprungvorhersagetechniken, die auf internen Attributen der Sprungbefehle basieren, z. B. Operationscode (s. S. 13, linke Spalte) oder Sprungrichtung (S. 17, linke Spalte). Diese Techniken, die auf internen Attributen basieren, arbeiten jedoch nicht zufriedenstellend, da sie nur eine schlechte Vorhersagequalität haben.
  • Aufgabe vorliegender Erfindung ist es, eine verbesserte Einrichtung zur Vorhersage des Resultats von bedingten Sprungbefehlen zu schaffen.
  • Zusammenfassung der Erfindung
  • Gemäß der Erfindung wird, wie in den Ansprüchen 1 und 2 angegeben, bei einer Datenverarbeitungseinrichtung mit einer Vorrichtung zum Abrufen einer Serie von Befehlen einschließlich bedingter Sprungbefehle, einer Vorrichtung zum Ausführen von Serien von Befehlen, und einer Vorhersagevorrichtung zum Vorhersagen der Ergebnisse der Ausführung der bedingten Sprungbefehle auf der Basis einer gespeicherten Historie der vorausgehenden Ausführungen dieser Befehle vorgeschlagen, daß, wenn eine gespeicherte Historie für einen bestimmten bedingten Sprungbefehl nicht verfügbar ist, die Vorhersagevorrichtung das Ergebnis dieses Befehls auf der Basis eines internen Attributs dieses Befehls vorhersagt.
  • Kurze Beschreibung der Zeichnung
  • Eine Ausführungsform der Erfindung wird nachstehend anhand eines Ausführungsbeispieles in Verbindung mit den Zeichnungen erläutert.
  • Fig. 1 zeigt eine Gesamtansicht eines im Pipelinebetrieb arbeitenden Datenverarbeitungssystems einschließlich eines Befehlsdisponenten,
  • Fig. 2 zeigt den Befehlsdisponenten in detaillierterer Darstellung,
  • Fig. 3 zeigt eine Sprungvorhersageschaltung, die einen Teil des Befehlssdisponenten bildet.
  • Beschreibung einer Ausführungsform der Erfindung
  • Fig. 1 zeigt ein Pipelineverarbeitungssystem mit vier Pipelineeinheiten, nämlich einen Befehlsdisponenten 10, eine obere Pipelineeinheit 11, einen Datenslave 12 und eine untere Pipelineeinheit 13. Jede dieser Pipelineeinheiten selbst weist eine Unterpipeline auf, die aus einer Anzahl von Pipelinestufen besteht, welche miteinander in Serie geschaltet sind.
  • Der Disponent 10 ruft vorab eine Serie von Befehlen ab und führt sie der unteren Pipeline 11 zu. Normalerweise werden die Befehle sequentiell aus aufeinanderfolgenden Speicherstellen abgerufen. Im Falle bestimmter, bedingter Sprungbefehle macht der Disponent eine Vorhersage des wahrscheinlichen Resultats des Befehls und ruft den nächsten Befehl auf dieser Basis ab, wie nachstehend beschrieben wird.
  • Die obere Pipeline 11 nimmt Befehle aus dem Disponenten 10 auf und verarbeitet sie so, daß Operandenadressen erzeugt werden. Die Adressen werden dem Datenslave 12 zugeführt.
  • Der Datenslave findet die Operanden erforderlichenfalls wieder auf, indem sie aus einem Hauptspeicher (nicht gezeigt) wiedergefunden werden. Die wiederaufgerundenen Operanden werden der unteren Pipeline 13 zugeführt.
  • Die untere Pipeline 13 führt arithmetische oder logische Vorgänge an dem Operanden aus, wie durch die Instruktion angegeben; das Resultat wird verwendet, um ein internes Register fortzuschalten oder wird in die Datenhilfsvorrichtung und/oder den Hauptspeicher zurückgeschrieben. Im Falle einer bedingten Sprunginstruktion zeigt die untere Pipeline an, ob eine spezielle Sprungbedingung erfüllt worden ist oder nicht, und entscheidet damit ob ein Sprung gemacht werden sollte oder nicht. Wenn der Disponent 10 eine falsche Voraussage für diese Instruktion getroffen hat, werden die nachfolgenden Instruktionen in der Pipeline gestrichen, und die untere Pipeline 13 speist einen korrigierten Programmzählerwert CPC in den Disponenten ein, damit dieser die nächste Instruktion abruft.
  • Die obere Pipeline, die Datenhilfsvorrichtung und die untere Pipeline können alle konventionelle Einheiten sein, so daß es nicht erforderlich ist, sie im einzelnen zu beschreiben. Nachstehend wird der Disponent jedoch näher beschrieben.
  • Instruktionsformat
  • Die Instruktionen können entweder in einem 16-Bit (Halbwort) oder 32-Bit (Ganzwort)- Format sein.
  • Die Instruktionen werden aus dem Speicher in Doppelwort-Blöcken (d. h. vier Halbwörtern) abgerufen. Jeder Block kann ein Gemisch von Instruktionen von 16 Bits und 32 Bits sein. Die Instruktionen sind alle mit Halbwort-Grenzen im Block ausgerichtet, die Instruktionen mit 32 Bit sind jedoch nicht notwendigerweise mit dem Vollwort-Grenzen ausgerichtet. Somit kann eine in 16-Bit-Instruktion, oder aber die erste Hälfte einer 32-Bit-Instruktion in einer beliebigen Halbwortstelle liegen.
  • Einzelheiten des Instruktionsformats können z. B. der Druckschrift "The ICL 2900 series" von J.K. Buckle, MacMillan Press Ltd., 1978 entnommen werden.
  • Jede Instruktion enthält einen Funktionscode F, der die Betriebsweise angibt, die von der Instruktion durchgeführt werden soll. Diese enthalten die drei relativen bedingten Sprungfuktionscode JCC (Sprung auf Konditionscode), JAT (Sprung aufarithmetische Kondition echt) und JAF (Sprung auf arithmetische Kondition falsch).
  • Jede Instruktion kann ferner einen Parameter N enthalten. Im Falle eines relativen literalen Sprunges wird dieser Parameter als ein Verschiebungswert interpretiert, der der jeweiligen Instruktionsadresse hinzuaddiert wird, um die Sprungbestimmungsadresse zu erzielen. Die Verschiebung kann entweder positiv oder negativ sein, so daß der Sprung entweder vorwärts oder rückwärts erfolgen kann.
  • Disponent
  • Fig. 2 zeigt den Instruktionsdisponenten 10 im einzelnen.
  • Der Disponent weist ein Programmzählerregister 20 auf, das eine Instruktions-Vorabruf- Adresse CVSA erzeugt, die die Adresse des nächsten, vorabzurufenden Blockes von Instruktionen angibt.
  • Die Inhalte des Registers 20 werden normalerweise in aufeinanderfolgenden Taktschlägen mit Hilfe einer Addierschaltung 21 weitergeschaltet und dann in das Register 20 zurückgeschrieben, so daß Blöcke von Instruktionen sequentiell vorabgerufen werden. Wenn ein Sprung vorausgesagt wird, wird ein Multiplexer 22 geschaltet, und dieser bewirkt, daß eine vorausgesagte Sprungbestimmungsadresse PCN in das Register 20 eingeführt wird. Im Falle eines falsch vorausgesagten Sprunges, der durch die untere Pipeline 13 angezeigt wird, wird alternativ ein Multiplexer 23 so geschaltet, daß er den korrigierten Programmzählerwert CPC in das Register 20 eingibt. In jedem Fall wird eine normale, sequentielle Adressierung fortgesetzt, nachdem das Register durch PCN oder CPC aktualisiert worden ist.
  • Die Instruktions-Vorabruf-Adresse CVSA wird einem Codehilfsspeicher 24 aufgegeben, damit ein 2-Wort-Block (64 Bits) von Instruktionsdaten aus dem Codehilfsspeicher wiedergefunden wird. Wenn der gewünschte Block im Codehilfsspeicher nicht vorhanden ist, wird er aus dem Hauptspeicher (nicht dargestellt) aufgefunden und in den Codehilfsspeicher 24 eingeführt.
  • Jeder Block von Instruktionen, der aus dem Codehilfsspeicher aufgefunden worden ist, wird in einen Instruktionspufferspeicher 25 eingeschrieben, der sechs Doppelwort-Blöcke hält. Instruktionen werden aus dem Instruktionspufferspeicher sequentiell über einen Multiplexer 26 ausgelesen und der oberen Pipelineeinheit 11 zugeführt. Wenn der Instruktionspufferspeicher leer ist, wird der Multiplexer 26 so geschaltet, daß die nächste Instruktion aus dem Codehilfsspeicher den Instruktionspufferspeicher im Bypaß umgehen kann.
  • Jeder Block von Instruktionen aus dem Codehilfsspeicher wird ferner in einen Sprungpufferspeicher 27 eingeschrieben, der drei Doppelwort-Block-Speicherplätze besitzt. Der Sprungpufferspeicher ist kleiner als der Instruktionspufferspeicher, weil die Information in ihm rascher verarbeitet wird, und weil es nicht notwendig ist, den Code in diesem Pufferspeicher zu halten. Die Doppelwort-Blöcke werden sequentiell aus dem Sprungpufferspeicher 27 über einen Multiplexer 29 ausgelesen und in eine Sprungvorhersageschaltung 28 eingeführt. Wenn der Sprungpufferspeicher 27 leer ist, wird der Multiplexer 29 so geschaltet, daß er bewirkt, daß der nächste Block direkt in die Vorhersageschaltung 28 eingeführt wird und den Pufferspeicher 27 im Bypaß umgeht. Die Sprungvorhersageschaltung 28 erzeugt die vorhergesagte Sprungbestimmungsadresse PCN.
  • Der Sprungpufferspeicher verarbeitet normalerweise Instruktionen vor dem Instruktionspufferspeicher. Dies ermöglicht, daß ein Sprung vorhergesagt und der Code abgerufen wird, bevor der Instruktionspufferspeicher aufgrund des Sprunges geleert wird, oder zumindest die Leerzeit auf ein Minimum reduziert.
  • Sprungvorhersageschaltung
  • Fig. 3 zeigt die Sprungvorhersageschaltung 28 im Detail.
  • Wie vorstehend erwähnt, nimmt die Sprungvorhersageschaltung einen Doppelwortblock von Instruktionen aus dem Sprungpufferspeicher oder aus dem Bypaß um den Pufferspeicher herum auf.
  • Der Doppelwort-Block wird einer logischen Sprunganzeigeschaltung 30 zugeführt, die den Inhalt des Blocks dekodiert, so daß die Position einer jeden relativen Sprunginstruktion (falls vorhanden) im Block bestimmt wird. Die Schaltung 30 erzeugt die folgenden Ausgangssignale.
  • (1) Ein Zwei-Bit-Signal LAPCSEL. Dieses gibt die Halbwort-Stelle des Staats der jeweils angezeigten relativen Sprunginstruktion an und wird in einem Register 38 gespeichert.
  • (2) Ein Zwei-Bit-Signal NSEL. Dieses gibt die Position des Parameters N der angezeigten relativen Sprunginstruktion an. NSEL wird zur Steuerung eines Multiplexers 35 verwendet, damit der spezifizierte Parameter N ausgewählt wird, der dann in ein Register 36 geladen wird. Das ausgewählte N wird einem lokalen Programmzählerwert LAPC zusammen mit LAPCSEL mit Hilfe einer Addierschaltung 31 hinzuaddiert, um die vorhergesagte Sprungbestimmungsadresse PCN zu erzeugen.
  • (3) Ein Zwei-Bit-Signal JTYPE. Dieses wird in einem Register 32 gespeichert und gibt die Art der angezeigten Sprunginstruktion wie folgt an:
  • YTYPE Type
  • 00 Nicht bedingt und literal
  • 01 Bedingt und literal
  • 10 Nicht bedingt und nicht literal
  • 11 Bedingt und nicht literal
  • (4) Ein Zwei-Bit-Signal JUMPID, das die Sprunginstruktion weiter wie folgt spezifiziert.
  • JUMPID TYPE
  • 01 JAT
  • 10 JAF
  • 11 JCC
  • 00 Andere
  • Das Signal JUMPID wird in einem Register 37 gespeichert.
  • Der Parameter N wird in einer Dekodierschaltung 39 dekodiert, um ein RATE-Signal zu erzeugen, das eine Vorhersage des Resultats der Sprunginstruktion auf der Basis eines internen Attributs der Sprunginstruktion darstellt. Bei diesem speziellen Beispiel ist RATEN echt, wenn N kleiner als 16 ist. Mit anderen Worten wird vorhergesagt, daß kurze Vorwärtssprünge und alle Rückwärtssprünge vorgenommen werden (umgekehrt werden längere Vorwärtssprünge mit N größer als oder gleich 16 nicht durchgeführt). Es wurde festgestellt, daß dies eine korrekte Vorhersage mit bedeutend mehr als 50% der Zeit ergibt. RATEN wird in einem Register 33 gespeichert.
  • Die Sprungvorhersageschaltung enthält auch einen Speicher 40 mit willkürlichem Zugriff (RAM) mit 1024 Speicherplätzen. Jeder Speicherplatz speichert 16 Bits wie folgt:
  • JUMPID TYPE
  • 10-15 JINVERT (0-5)
  • 2-9 GÜLTIG (0-7)
  • 1 PUBLIC
  • 0 PARITÄT
  • Die JINVERT-Bits (0-5) sind "Rateinvert"-Bits, die vorhersagen, ob das Rate-Signal, das für eine bestimmte Sprunginstruktion erzeugt worden ist, korrekt ist oder nicht. JINVERT (0-2) bezieht sich auf JAT-, JAF- und JCC-Instruktionen, die im Wort 0 eines Doppelwort-Blockes beginnen, während JINVERT-Bits (3-5) sich entsprechend auf JAT, JAF und JCC- Instruktionen beziehen, die im Wort 1 eines Doppelwort-Blockes beginnen. Wenn beispielsweise JINVERT (0) echt ist, gibt dies an, daß ein RATE-Signal, das für eine im Wort O beginnende JAT-Instruktion erzeugt wird, als unkorrekt vorhergesagt wird und somit invertiert werden muß.
  • Der RAM 40 wird durch eine 10-Bit-Hash-Adresse adressiert, die aus einer 29-Bit-Adresse von einem Multiplexer 41 gebildet wird. In diesem Beispiel wird die Hash-Adresse dadurch gebildet, daß eine vorbestimmte Auswahl von zehn aus den 29 Bits. Bei anderen Ausführungsformen der Erfindung kann diese Adresse beispielsweise durch Kombinieren von Paaren der Adressen-Bits in Exclusiv-ODER-Gattern gebildet werden.
  • Der Multiplexer 41 wählt normalerweise den Ausgang LAPC eines Registers 42. Dies stellt eine lokale Kopie des Programmzählers PC dar und gibt die Adresse des Blockes an, der gerade durch die Sprungvorhersageschaltung verarbeitet wird. Das Register 42 wird normal in einer Addierschaltung 43 jedesmal weitergeschaltet, wenn ein neuer Block durch die Vorhersageschaltung verarbeitet wird. Wenn der Programmzähler PC aktualisiert wird, um einen Sprung durchzuführen, wird ein Multiplexer 44 so geschaltet, daß er die Sprungbestimmungsadresse (Signal CVSA) in das Register 42 einschreibt.
  • Die Inhalte der adressierten Speicherstelle des RAM 40 werden ausgelesen und in folgender Weise verwendet.
  • Die sechs Rate-Invert-Bits JINVERT (0-5) werden in ein Register 45 eingeschrieben. Der Ausgang dieses Registers wird seinerseits dem Eingang eines Multiplexers 46 aufgegeben, der von dem Bit höchster Bedeutung des LAPCSEL, und den beiden Bits von JUMPID gesteuert wird. Der Multiplexer 46 wählt somit das eine der Rateinvertbits entsprechend der jeweiligen Instruktionstype und Position innerhalb des Zweiwort-Blockes aus. Wenn beispielsweise JUMPID eine JAT-Instruktion anzeigt, und das Bit höchster Bedeutung von LAPCSEL angibt, daß die Instruktion im Wort O beginnt, wählt der Multiplexer 46 JINVERT (0).
  • Die GÜLTIG-Bits aus der adressierten Speicherstelle des RAM 40 werden in einer Vergleichsschaltung 47 mit dem Inhalt eines Verarbeitungsmarkierregisters 48 verglichen.
  • Der Ausgang der Vergleichsvorrichtung 47 wird in einem ODER-Gatter 49 mit dem ÖFFENTLICH-Bit aus der adressierten Speicherstelle des RAM kombiniert, um ein Signal RAMHIT zu erzeugen, das in einem Register 50 gespeichert wird. Daraus ergibt sich, daß RAMHIT echt ist, wenn die GÜLTIG-Bits den Inhalten des Prozeßmarkierregisters 48 angepaßt sind, oder wenn das ÖFFENTLICH-Bit besetzt ist.
  • Das Prozeßmarkierregister 48 wird jedesmal dann weitergeschaltet, wenn eine Änderung des Prozesses (Programms) im System vorliegt, und dies macht alle Eingaben in den RAM 40, die sich auf andere Prozesse beziehen, ungültig, ausgenommen die Eingaben, die sich auf den anteiligen öffentlichen Code beziehen, der durch das Öffentlich-Bit angezeigt wird.
  • Das RAMHIT-Signal gibt an, ob die Rate-Invert-Signale JINVERT (0-5) als gültig angenommen werden sollen oder nicht.
  • RAMHIT steuert einen Multiplexer 51. Wenn RAMHIT echt ist, wählt der Multiplexer 51 den Ausgang eines Exclusiv-ODER-Gatters 52, das das RATE-Signal mit dem ausgewählten JINVERT-Bit aus dem Multiplexer 46 kombiniert. Wenn RAMHIT falsch ist, wählt der Multiplexer RATEN. Der Ausgang des Multiplexers 51 ist ein SPRUNGVORHERSAGE- Signal, das den vorhergesagten Ausgang der Sprunginstruktion anzeigt.
  • Daraus ergibt sich, daß dann, wenn RAMHIT angibt, daß JINVERT nicht gültig ist, das RATE-Signal direkt als die Endvorhersage ,,SPRUNGVORHERSAGE" verwendet wird. Wenn andererseits RAMHIT angibt, daß JINVERT gültig ist, wird die endgültige Vorhersage SPRUNGVORHERSAGE durch selektives Invertieren von RATEN, entsprechend dem Wert des geeigneten JINVERT-Bits gebildet.
  • JTYPE wird dann verwendet, um die endgültige Aktion wie folgt festzulegen:
  • (1) Wenn JTYPE = 00, erfolgt ein Sprung auf die vorhergesagte Bestimmung PCN.
  • (2) Wenn JTYPE = 01, erfolgt ein Sprung auf PCN, wenn SPRUNGVORHERSAGE echt ist.
  • (3) Wenn JTYPe = 10 oder 11, erfolgt kein Sprung.
  • Die Art und Weise, in der der RAM 40 aktualisiert wird, wird nachstehend beschrieben.
  • Wenn, wie vorstehend erläutert, die untere Pipeline 13 eine unrichtig vorhergesagte Sprunginstruktion anzeigt, sendet sie einen korrigierten Programmzählerwert CPC an den Disponenten, um eine Rückführung in die richtige Folge von Instruktionen zu erreichen. Gleichzeitig sendet die untere Pipeline die Adresse JSOURCEPC der in Frage kommenden Sprunginstruktion an die Sprungvorhersageschaltung. Diese Adresse wird in ein Register 53 eingeführt und dann verwendet, um den RAM 40 über einen Multiplexer 41 zu adressieren.
  • Das entsprechende Bit der JINVERT-Bits der jeweiligen adressierten RAM-Speicherstelle wird dann entsprechend der Art und Position der Sprunginstruktion invertiert. Wenn beispielsweise die nicht richtig vorhergesagte Sprunginstruktion ein JAT ist, das im Wort O beginnt, wird JINVERT (O) invertiert.
  • Wenn die GÜLTIG-Bits in der adressierten Speicherstelle der Prozeßmarkierung im Register 48 entsprechen, werden zur gleichen Zeit die verbleibenden JINVERT-Bits unverändert in den adressierten Speicherplatz des RAM zurückgeschrieben. Wenn andererseits die GÜLTIG-Bits der Prozeßmarkierung nicht entsprechen, werden alle diese übrigen JINVERT-Bits zurückgesetzt, der jeweilige Prozeßmarkierwert wird in die GÜLTIG-Bits eingeschrieben, und das PUBLIC-Bit wird aktualisiert.
  • Zusammenfassend ergibt sich, daß das System einen zweipegeligen Sprungvorhersagemechanismus verwendet. Der erste Pegel der Vorhersage ergibt das RATE-Signal und basiert auf einem internen Attribut des Sprungbefehls selbst. Der zweite Pegel der Vorhersage wird durch den RAM 40 erzielt und basiert auf der Historie des Resultats der Sprunginstruktion, während sie das letzte Mal durchgeführt worden ist. Speziell nimmt der zweite Pegel der Vorhersage die Form einer Anzeige darüber an, ob die anfängliche Vorhersage, die von dem RATE-Signal vorgenommen worden ist, korrekt war.
  • Wenn die durch den RAM 40 erzielte Vorhersage nicht gültig ist (RAMHIT falsch), z. B., weil diese spezielle Sprunginstruktion vorher nicht angetroffen worden ist, wird das anfängliche RATE-Signal direkt als eine endgültige Sprungvorhersage verwendet. Wenn jedoch die RAM-Vorhersage gültig ist, wird sie verwendet, um das anfängliche RATE-Signal zu korrigieren, damit die endgültige Vorhersage erzeugt wird.
  • Es wurde festgestellt, daß dieser zweipegelige Vorhersagemechanismus besonders vorteilhaft insoferne ist, als er die Durchführung einer Vorhersage ermöglicht, selbst wenn keine vorher aufgezeichnete Historie des Resultats einer bestimmten Instruktion vorhanden ist, während eine exaktere Vorhersage möglich ist, wenn die Historie verfügbar ist.
  • Die Verwendung der RAM-Inhalte zur Bezeichnung, ob das anfängliche RATE-Signal invertiert wird oder nicht, ermöglicht, daß verschiedene Vorhersagen in jeder Leitung des RAM gespeichert werden, anstatt daß einfach eine Vorhersage für das anfängliche RATE- Signal ersetzt wird.
  • Darüber hinaus verringert die Tatsache, daß in den RAM nur eingeschrieben wird, wenn ein Sprung unrichtig vorhergesagt worden ist, die Anzahl von Schreibzugriffen zum RAM erheblich, und macht damit eine effektivere Verwendung der Speicherkapazität des RAM möglich. Auch wird die Möglichkeit eines "thrashing" verringert, d. h. die Situation, bei der zwei unterschiedliche Instruktionen alternativ das gleiche JINVERT-Bit setzen und rücksetzen.
  • Desweiteren sei bemerkt, daß verschiedene unterschiedliche Instruktionen auf den gleichen Speicherplatz des RAM abbilden können, weil der RAM 40 Hash-adressiert ist. Als Ergebnis können einige der JINVERT-Ausgänge aus dem RAM insoferne fehlerhaft sein, als sie auf eine unterschiedliche Instruktion zu der bezogen sind, die gerade durch die Vorhersageschaltung verarbeitet wird. Die Möglichkeit, daß solche Streuausgänge verwendet werden, wird durch die Verwendung des GÜLTIG-Bits und der Prozeßmarkierungen reduziert, die Speicherplätze in dem RAM ungültig machen, die sich auf andere Prozesse als den gerade laufenden beziehen. Die Möglichkeit von Streuausgängen wird auch dadurch verringert, daß getrennt JINVERT-Bits für jede unterschiedliche Art von bedingten Sprunginstruktionen in unterschiedlichen Wortspeicherstellen eines Zweiwort-Blockes vorgesehen werden.

Claims (9)

1. Datenverarbeitungseinrichtung mit
a) einer Vorrichtung (10) zum Abrufen einer Serie von Befehlen einschließlich bedingter Sprungbefehle,
b) einer Vorrichtung (11, 12, 13) zum Ausführen der Serien von Befehlen, und
c) einer Vorhersagevorrichtung (28) zum Vorhersagen der Ergebnisse der Ausführung der bedingten Sprungbefehle auf der Basis einer gespeicherten Historie der vorausgehenden Ausführungen dieser Befehle, dadurch gekennzeichnet, daß, wenn eine gespeicherte Historie für einen bestimmten
bedingten Sprungbefehl nicht verfügbar ist, die Vorhersagevorrichtung (28) das Ergebnis
dieses Befehls auf der Basis eines internen Attributs (N)dieses Befehls vorhersagt.
2. Datenverarbeitungseinrichtung mit
a) einer Vorrichtung zum Abrufen einer Serie von Befehlen einschließlich bedingter Sprungbefehle,
b) einer Vorrichtung zum Ausführen der Serien von Befehlen, und
c) einem Speicher (40) zum Speichern einer Historie der Ausführung der bedingten Sprungbefehle, gekennzeichnet durch
d) eine Vorhersagevorrichtung (39) zur Erzielung einer Vorhersage des Ergebnisses eines bedingten Sprungbefehls auf der Basis eines internen Attributs (N) dieser Instruktion, und
e) eine Vorhersagekorrekturvorrichtung (46, 52), die wirksam wird, wenn die Historie der Ausführung eines bestimmten Sprungbefehls im Speicher (40) verfügbar ist, um die Vorhersage in Abhängigkeit von der gespeicherten Historie der Ausführung dieses Befehls zu korrigieren.
3. Einrichtung nach Anspruch 2, bei der der Speicher (40) eine Vielzahl von Bits hält, deren jedes angibt, ob die Sprungvorhersage für einen bestimmten Sprungbefehl bei einem vorausgehenden Vorgang, als der Sprungbefehl ausgeführt wurde, korrekt war.
4. Einrichtung nach Anspruch 2 oder 3, bei der das interne Attribut (N) ein Sprungparameter ist.
5. Einrichtung nach Anspruch 4, bei der die Voraussagevorrichtung (39) einen erfolgreichen Sprung voraussagt, wenn der Sprungparameter (N) kleiner als ein vorbestimmter Wert ist.
6. Einrichtung nach einem der Ansprüche 2-5, bei dem der Speicher (40) durch eine Hash- Adresse adressiert ist, die aus der Adresse des Sprungbefehls abgeleitet wird, die gerade von der Voraussagevorrichtung verarbeitet wird.
7. Einrichtung nach einem der Ansprüche 2-6, bei der der Speicher (40) nur aktualisiert wird, wenn eine unrichtige Sprungvorhersage angezeigt wird.
8. Einrichtung nach einem der Ansprüche 2-7, bei der jeder Speicherplatz des Speichers (40) eine Vielzahl von Sprunghistorieanzeigen hält, und zwar eine für jede einer Vielzahl von unterschiedlichen Arten von Sprungbefehlen, und die eine Vorrichtung (47) zum Auswählen einer der Sprunghistorieanzeigen entsprechend der Art des laufenden Sprungbefehls aufweist.
9. Einrichtung nach einem der Ansprüche 2-8, bei der jeder Speicherplatz des Speichers ein Gültigkeitsfeld aufweist, das auf den Wert einer Prozeßmarkierung gesetzt ist, wenn der Speicherplatz fortgeschaltet ist, und bei der eine Vorrichtung zum Vergleichen des Gültigkeitsfeldes des jeweils adressierten Speicherplatzes mit der Prozeßmarkierung vorgesehen ist, um ein Gültigkeitssignal zu erzeugen, wenn eine Anpassung vorliegt, wobei die Gültigkeitssignale anzeigen, daß die gespeicherte Historie verfügbar ist.
DE3851746T 1987-12-05 1988-10-17 Sprungvorhersage. Expired - Fee Related DE3851746T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
GB878728493A GB8728493D0 (en) 1987-12-05 1987-12-05 Jump prediction

Publications (2)

Publication Number Publication Date
DE3851746D1 DE3851746D1 (de) 1994-11-10
DE3851746T2 true DE3851746T2 (de) 1995-05-11

Family

ID=10628058

Family Applications (1)

Application Number Title Priority Date Filing Date
DE3851746T Expired - Fee Related DE3851746T2 (de) 1987-12-05 1988-10-17 Sprungvorhersage.

Country Status (6)

Country Link
US (1) US5121473A (de)
EP (1) EP0320098B1 (de)
AU (1) AU608921B2 (de)
DE (1) DE3851746T2 (de)
GB (1) GB8728493D0 (de)
ZA (1) ZA888749B (de)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0769811B2 (ja) * 1988-12-21 1995-07-31 松下電器産業株式会社 データ処理装置
US5142634A (en) * 1989-02-03 1992-08-25 Digital Equipment Corporation Branch prediction
JPH02287626A (ja) * 1989-04-28 1990-11-27 Toshiba Corp パイプライン方式の分岐命令制御装置
JP2570859B2 (ja) * 1989-05-25 1997-01-16 日本電気株式会社 データ処理装置
JPH0795271B2 (ja) * 1989-06-20 1995-10-11 富士通株式会社 分岐命令実行装置
JPH0650465B2 (ja) * 1989-10-16 1994-06-29 株式会社東芝 分岐制御回路
CA2045790A1 (en) * 1990-06-29 1991-12-30 Richard Lee Sites Branch prediction in high-performance processor
JPH0820950B2 (ja) * 1990-10-09 1996-03-04 インターナショナル・ビジネス・マシーンズ・コーポレイション マルチ予測型分岐予測機構
US5287467A (en) * 1991-04-18 1994-02-15 International Business Machines Corporation Pipeline for removing and concurrently executing two or more branch instructions in synchronization with other instructions executing in the execution unit
JP2773471B2 (ja) * 1991-07-24 1998-07-09 日本電気株式会社 情報処理装置
US5333283A (en) * 1991-10-29 1994-07-26 International Business Machines Corporation Case block table for predicting the outcome of blocks of conditional branches having a common operand
US5434986A (en) * 1992-01-09 1995-07-18 Unisys Corporation Interdependency control of pipelined instruction processor using comparing result of two index registers of skip instruction and next sequential instruction
US5442767A (en) * 1992-10-23 1995-08-15 International Business Machines Corporation Address prediction to avoid address generation interlocks in computer systems
US5379442A (en) * 1993-03-31 1995-01-03 Intel Corporation Fast primary and feedback path in a programmable logic circuit
JPH08106387A (ja) * 1994-10-06 1996-04-23 Oki Electric Ind Co Ltd 命令プリフェッチ回路及びキャッシュ装置
CN100507834C (zh) * 1994-12-02 2009-07-01 现代电子美国公司 有限游程转移预测
GB9504743D0 (en) * 1995-03-09 1995-04-26 Int Computers Ltd Jump prediction
JPH0991136A (ja) * 1995-09-25 1997-04-04 Toshiba Corp 信号処理装置
US5905881A (en) * 1995-11-30 1999-05-18 Unisys Corporation Delayed state writes for an instruction processor
US5887174A (en) * 1996-06-18 1999-03-23 International Business Machines Corporation System, method, and program product for instruction scheduling in the presence of hardware lookahead accomplished by the rescheduling of idle slots
US5867699A (en) * 1996-07-25 1999-02-02 Unisys Corporation Instruction flow control for an instruction processor
EP0848323B1 (de) * 1996-12-10 2004-02-25 Texas Instruments Incorporated Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor
US6044222A (en) * 1997-06-23 2000-03-28 International Business Machines Corporation System, method, and program product for loop instruction scheduling hardware lookahead
SE510295C2 (sv) * 1997-07-21 1999-05-10 Ericsson Telefon Ab L M Metod vid processor för att hantera villkorade hoppinstruktioner samt processor anpassad att verka enligt den angivna metoden
US6151672A (en) 1998-02-23 2000-11-21 Hewlett-Packard Company Methods and apparatus for reducing interference in a branch history table of a microprocessor
EP0953898A3 (de) 1998-04-28 2003-03-26 Matsushita Electric Industrial Co., Ltd. Prozessor zur Ausführung von Befehlen aus dem Speicher mittels eines Programmzählers und Kompiler, Assembler, Programmverbinder und Fehlerbeseitiger für einen solchen Prozessor
SE513431C2 (sv) * 1999-01-11 2000-09-11 Ericsson Telefon Ab L M Buffert för icke-rapporterade hopp
US20080222392A1 (en) * 2007-03-09 2008-09-11 On Demand Microelectronics Method and arrangements for pipeline processing of instructions
WO2021186589A1 (en) * 2020-03-17 2021-09-23 Nec Corporation Processing apparatus, security control method, and non-transitory computer readable medium

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3559183A (en) * 1968-02-29 1971-01-26 Ibm Instruction sequence control
US4200927A (en) * 1978-01-03 1980-04-29 International Business Machines Corporation Multi-instruction stream branch processing mechanism
JPS6047617B2 (ja) * 1980-03-27 1985-10-22 日本電気株式会社 情報処理装置
US4373180A (en) * 1980-07-09 1983-02-08 Sperry Corporation Microprogrammed control system capable of pipelining even when executing a conditional branch instruction
US4390946A (en) * 1980-10-20 1983-06-28 Control Data Corporation Lookahead addressing in a pipeline computer control store with separate memory segments for single and multiple microcode instruction sequences
US4370711A (en) * 1980-10-21 1983-01-25 Control Data Corporation Branch predictor using random access memory
US4430706A (en) * 1980-10-27 1984-02-07 Burroughs Corporation Branch prediction apparatus and method for a data processing system
US4435756A (en) * 1981-12-03 1984-03-06 Burroughs Corporation Branch predicting computer
US4477872A (en) * 1982-01-15 1984-10-16 International Business Machines Corporation Decode history table for conditional branch instructions
US4604691A (en) * 1982-09-07 1986-08-05 Nippon Electric Co., Ltd. Data processing system having branch instruction prefetching performance
US4594659A (en) * 1982-10-13 1986-06-10 Honeywell Information Systems Inc. Method and apparatus for prefetching instructions for a central execution pipeline unit
EP0109655B1 (de) * 1982-11-17 1991-07-24 Nec Corporation Anordnung zum Vorabholen von Befehlen mit Vorhersage einer Verzweigungszieladresse
WO1985000453A1 (en) * 1983-07-11 1985-01-31 Prime Computer, Inc. Data processing system
US4764861A (en) * 1984-02-08 1988-08-16 Nec Corporation Instruction fpefetching device with prediction of a branch destination for each branch count instruction
JPH0769818B2 (ja) * 1984-10-31 1995-07-31 株式会社日立製作所 デ−タ処理装置
US4679141A (en) * 1985-04-29 1987-07-07 International Business Machines Corporation Pageable branch history table
US4763245A (en) * 1985-10-30 1988-08-09 International Business Machines Corporation Branch prediction mechanism in which a branch history table is updated using an operand sensitive branch table
US4853840A (en) * 1986-01-07 1989-08-01 Nec Corporation Instruction prefetching device including a circuit for checking prediction of a branch instruction before the instruction is executed
US4755935A (en) * 1986-01-27 1988-07-05 Schlumberger Technology Corporation Prefetch memory system having next-instruction buffer which stores target tracks of jumps prior to CPU access of instruction
DE3785897T2 (de) * 1986-02-28 1993-09-30 Nippon Electric Co Steuervorrichtung zum vorabruf von befehlen.
GB2188759B (en) * 1986-04-05 1990-09-05 Burr Brown Ltd Data processing with op code early comparison

Also Published As

Publication number Publication date
AU608921B2 (en) 1991-04-18
EP0320098A2 (de) 1989-06-14
ZA888749B (en) 1989-08-30
EP0320098B1 (de) 1994-10-05
AU2654388A (en) 1989-06-08
US5121473A (en) 1992-06-09
DE3851746D1 (de) 1994-11-10
GB8728493D0 (en) 1988-01-13
EP0320098A3 (en) 1990-11-07

Similar Documents

Publication Publication Date Title
DE3851746T2 (de) Sprungvorhersage.
DE2230102C2 (de) Mikroprogrammierter Prozessor mit bitparalleler Datenübertragung
DE68928513T2 (de) Verfahren zur Vorverarbeitung mehrerer Befehle
DE2855106C2 (de) Einrichtung zur Durchführung von bedingten Verzweigungen
DE69133302T2 (de) Registerabbildung in einem einzigen Taktzyklus
DE68926385T2 (de) Methode und Hardware-Ausführung von komplexen Datentransferbefehlen
DE3751474T2 (de) Verzweigungsstrom-Koprozessor.
DE3486399T2 (de) Zentrale Verarbeitungseinheit mit der Fähigkeit, Befehle mit variablen Längen zu unterstützen.
DE60010907T2 (de) Sram-steuerungvorrichtung für parallele prozessorarchitektur mit adressen- und befehlswarteschlange und arbiter
DE69534113T2 (de) Kompression der Befehlswörter eines Rechners
DE2630323C3 (de) Datenspeichereinrichtung mit einem Hauptspeicher, einem HilfsSpeicher und einer Vorausschaulogik
DE3151745C2 (de)
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE68911398T2 (de) Methode und digitaler computer zum vorausholen von vektordaten aus dem speicher in einem für skalaverarbeitung bestimmten speichersystem.
DE69023568T2 (de) Cache-Speicheranordnung.
DE3685913T2 (de) Vektorenverarbeitung.
DE3687744T2 (de) Aktualisierung der verzweigungsgeschichtstabelle in einem pipeline-verarbeitungssystem.
DE69024068T2 (de) Verfahren und Datenverarbeitungseinheit zur Pipeline- Verarbeitung von Register- und Registeränderungs- Spezifizierern in dem gleichen Befehl
DE69030931T2 (de) Mehrfachsequenzprozessorsystem
DE69738188T2 (de) Verfahren und apparat für eine erhöhte genauigkeit bei der verzweigungsvorhersage in einem superskalaren mirkroprozessor
DE3689595T2 (de) Datenverarbeitungssystem.
DE19855806A1 (de) Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen
DE3854369T2 (de) Zentralprozessoreinheit für digitale datenverarbeitungsanordnung mit cache-speicherverwaltungsvorrichtung.
DE2948668A1 (de) Puffereinheit
DE68924719T2 (de) Vorrichtung und Verfahren zur Ausführung eines Unterprogramms in einem Datenverarbeitungssystem mit Blockumschaltung.

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee