DE102014003434A1 - Vorhersage indirekter Verzweigungen - Google Patents

Vorhersage indirekter Verzweigungen Download PDF

Info

Publication number
DE102014003434A1
DE102014003434A1 DE102014003434.8A DE102014003434A DE102014003434A1 DE 102014003434 A1 DE102014003434 A1 DE 102014003434A1 DE 102014003434 A DE102014003434 A DE 102014003434A DE 102014003434 A1 DE102014003434 A1 DE 102014003434A1
Authority
DE
Germany
Prior art keywords
indirect
taken
history
predicted
destination address
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.)
Granted
Application number
DE102014003434.8A
Other languages
English (en)
Other versions
DE102014003434B4 (de
Inventor
Manouk Vartan Manoukian
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.)
MIPS Tech LLC
Original Assignee
Imagination Technologies 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 Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of DE102014003434A1 publication Critical patent/DE102014003434A1/de
Application granted granted Critical
Publication of DE102014003434B4 publication Critical patent/DE102014003434B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30061Multi-way branch instructions, e.g. CASE
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
    • 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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques

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)

Abstract

Verfahren und Prädiktor-Logikeinheiten für indirekte Verzweigungen zur Vorhersage der Zieladressen indirekter Verzweigungsanweisungen. Das Verfahren umfasst ein Speichern, in einer Tabelle, vorhergesagter Zieladressen für indirekte Verzweigungsanweisungen, indexiert mit einer Kombination der Historie des indirekten Pfads für vorherige indirekte Verzweigungsanweisungen und der Genommen-/Nicht-genommen-Historie für vorherige bedingte Verzweigungsanweisungen. Wenn eine neue indirekte Verzweigungsanweisung zur Vorhersage empfangen wird, werden die Historie des indirekten Pfads und die Genommen-/Nicht-genommen-Historie kombiniert, um einen Index für die indirekte Verzweigungsanweisung zu erzeugen. Der erzeugte Index wird dann zum Identifizieren einer vorhergesagten Zieladresse in der Tabelle verwendet. Falls die identifizierte vorhergesagte Zieladresse gültig ist, wird vorhergesagt, dass die Zieladresse der indirekten Verzweigungsanweisung die vorhergesagte Zieladresse ist.

Description

  • Hintergrund
  • Viele Prozessoren umfassen einen Verzweigungsprädiktor, der im Fall von Anweisungen, von denen bekannt ist, dass sie möglicherweise Änderungen des Ablaufs bewirken, wie Verzweigungsanweisungen, vorhersagt, welche Richtung der Programmablauf nehmen wird. Verzweigungsvorhersage ist nützlich, da sie ermöglicht, dass Anweisungen spekulativ vom Prozessor ausgeführt werden, bevor der Ausgang der Verzweigungsanweisung bekannt ist.
  • Verzweigungsanweisungen können in bedingt oder indirekt eingeteilt werden. Bedingte Verzweigungsanweisungen (Verzweigungsanweisungen basierend auf einem konstanten Wert) erfordern eine binäre Entscheidung dahingehend, ob die Verzweigung genommen wird oder nicht genommen wird. Indirekte Verzweigungsanweisungen (Verzweigungsanweisungen basierend auf einer Variablen) erfordern eine N-stufige Entscheidung bezüglich der Zieladresse, wobei N die Anzahl der möglichen Zieladressen ist. Demgemäß sind indirekte Verzweigungen schwieriger vorherzusagen als bedingte Verzweigungen. Infolgedessen sind viele Verzweigungsprädiktoren nicht imstande, indirekte Verzweigungsanweisungen präzise vorherzusagen.
  • Eine Lösung hierfür bestand darin, den vom Verzweigungsprädiktor verwendeten Vorhersagealgorithmus für indirekte Verzweigungen zu verbessern. Dies ist häufig jedoch sehr schwierig und zeitintensiv.
  • Die nachstehend beschriebenen Ausführungsformen sind nicht auf Implementierungen beschränkt, die irgendwelche oder sämtliche der Nachteile von bekannten Prozessoren lösen.
  • Kurzfassung
  • Diese Kurzfassung wird bereitgestellt, um eine Auswahl von Konzepten in vereinfachter Form einzuführen, die nachstehend in der Ausführlichen Beschreibung weiter beschrieben werden. Diese Kurzfassung ist nicht dafür bestimmt, wichtige Merkmale oder wesentliche Merkmale des beanspruchten Gegenstands zu identifizieren, noch ist sie dafür bestimmt, als eine Hilfe bei der Bestimmung des Rahmens des beanspruchten Gegenstands verwendet zu werden.
  • Hier werden Verfahren und Prädiktor-Logikeinheiten für indirekte Verzweigungen zur Vorhersage der Zieladressen indirekter Verzweigungsanweisungen beschrieben. Das Verfahren umfasst Speichern, in einer Tabelle, vorhergesagter Zieladressen für indirekte Verzweigungsanweisungen, indexiert mit einer Kombination der Historie des indirekten Pfads für vorherige indirekte Verzweigungsanweisungsziele und der Genommen-/Nicht-genommen-Historie für vorherige bedingte Verzweigungsanweisungen. Wenn eine neue indirekte Verzweigungsanweisung zur Vorhersage empfangen wird, werden die Historie des indirekten Pfads und die Genommen-/Nicht-genommen-Historie kombiniert, um einen Index für die indirekte Verzweigungsanweisung zu erzeugen. Der erzeugte Index wird dann zum identifizieren einer vorhergesagten Zieladresse in der Tabelle verwendet. Falls die identifizierte vorhergesagte Zieladresse gültig ist, wird vorhergesagt, dass die Zieladresse der indirekten Verzweigungsanweisung die vorhergesagte Zieladresse ist.
  • Ein erster Aspekt stellt ein Verfahren zur Vorhersage einer Zieladresse einer indirekten Verzweigungsanweisung in einem von einem Prozessor ausgeführten Programm bereit, wobei das Verfahren umfasst: Speichern, in einer Tabelle vorhergesagter Ziele indirekter Verzweigungen, einer Mehrzahl vorhergesagter Zieladressen für indirekte Verzweigungsanweisungen, wobei jede vorhergesagte Zieladresse mit einer Kombination einer Historie des indirekten Pfads und einer Genommen- und Nicht-genommen-Historie indexiert wird; Empfangen, an einem Indexgenerator, von Informationen, die eine indirekte Verzweigungsanweisung identifizieren; Erlangen, an dem Indexgenerator, einer Historie des indirekten Pfads und einer Genommen- und Nicht-genommen-Historie; Kombinieren, an dem Indexgenerator, der Historie des indirekten Pfads und der Genommen- und Nicht-genommen-Historie zum Erzeugen eines Indexes für die identifizierte indirekte Verzweigungsanweisung; Identifizieren einer vorhergesagten Zieladresse in der Tabelle vorhergesagter Ziele indirekter Verzweigungen unter Verwendung des Indexes für die identifizierte indirekte Verzweigungsanweisung; falls die identifizierte vorhergesagte Zieladresse gültig ist, Vorhersagen, dass die Zieladresse der identifizierten indirekten Verzweigungsanweisung die identifizierte vorhergesagte Zieladresse ist.
  • Ein zweiter Aspekt stellt eine Prädiktor-Logikeinheit für indirekte Verzweigungen zum Vorhersagen einer Zieladresse einer indirekten Verzweigungsanweisung in einem von einem Prozessor ausgeführten Programm bereit, wobei die Prädiktor-Logikeinheit für indirekte Verzweigungen umfasst: eine Tabelle vorhergesagter Ziele indirekter Verzweigungen, ausgelegt zum Speichern einer Mehrzahl vorhergesagter Zieladressen für indirekte Verzweigungsanweisungen, wobei jede vorhergesagte Zieladresse mit einer Kombination einer Historie des indirekten Pfads und einer Genommen- und Nicht-genommen-Historie indexiert wird; ein Indexgenerator in Kommunikation mit der Tabelle vorhergesagter Ziele indirekter Verzweigungen, der Indexgenerator ausgelegt zum: Empfangen von Informationen, die eine indirekte Verzweigungsanweisung identifizieren; Erlangen einer Historie des indirekten Pfads und einer Genommen- und Nicht-genommen-Historie; Kombinieren der Historie des indirekten Pfads und der Genommen- und Nicht-genommen-Historie zum Erzeugen eines Indexes für die identifizierte indirekte Verzweigungsanweisung; und eine Entscheidungs-Logikeinheit in Kommunikation mit der Tabelle vorhergesagter Ziele indirekter Verzweigungen, die Entscheidungs-Logikeinheit ausgelegt zum: Identifizieren einer vorhergesagten Zieladresse der Tabelle vorhergesagter Ziele indirekter Verzweigungen unter Verwendung des Indexes für die identifizierte indirekte Verzweigung; falls die identifizierte vorhergesagte Zieladresse gültig ist, Vorhersagen, dass die Zieladresse der identifizierten indirekten Verzweigungsanweisung die identifizierte vorhergesagte Zieladresse ist.
  • Ein dritter Aspekt stellt einen Prozessor bereit, umfassend die Prädiktor-Logikeinheit für indirekte Verzweigungen des zweiten Aspekts.
  • Ein vierter Aspekt stellt ein computerlesbares Speichermedium bereit, das darauf codierten computerlesbares Programmcode zum Erzeugen eines Prozessors, umfassend die Prädiktor-Logikeinheit für indirekte Verzweigungen des zweiten Aspekts, umfasst.
  • Ein fünfter Aspekt stellt ein computerlesbares Speichermedium bereit, das darauf codierten computerlesbares Programmcode zum Erzeugen eines Prozessors, ausgelegt zum Durchführen des Verfahrens des ersten Aspekts, umfasst.
  • Ein sechster Aspekt stellt einen Prozessor bereit, im Wesentlichen wie unter Bezugnahme auf 3 beschrieben.
  • Ein siebter Aspekt stellt eine Prädiktor-Logikeinheit für indirekte Verzweigungen bereit, im Wesentlichen unter Bezugnahme auf 4 beschrieben.
  • Ein achter Aspekt stellt ein Verfahren zum Vorhersagen einer Zieladresse einer indirekten Verzweigungsanweisung bereit, im Wesentlichen wie unter Bezugnahme auf 9 beschrieben.
  • Ein neunter Aspekt stellt ein Verfahren zum Aktualisieren einer Tabelle vorhergesagter indirekter Verzweigungen bereit, im Wesentlichen wie unter Bezugnahme auf 10 beschrieben.
  • Ein zehnter Aspekt stellt einen Multi-Thread-Prozessor bereit, im Wesentlichen wie unter Bezugnahme auf 11 beschrieben.
  • Die hier beschriebenen Verfahren können von Software in maschinenlesbarer Form auf einem materiellen Speichermedium durchgeführt werden, z. B. in der Form eines Computerprogramms, umfassend computerlesbare Programmcodemittel, ausgelegt zum Durchführen sämtlicher Schritte eines der hier beschriebenen Verfahrens, wenn das Programm auf einem Computer ausgeführt wird, und wobei das Computerprogramm auf einem computerlesbaren Speichermedium ausgeführt sein kann. Beispiele von materiellen (oder nicht vorübergehenden) Speichermedien beinhalten Platten, Sticklaufwerke, Speicherkarten usw. und beinhalten keine ausgebreiteten Signale. Die Software kann zur Ausführung auf einem parallelen Prozessor oder einem seriellen Prozessor geeignet sein, so dass die Schritte des Verfahrens in jeder geeigneten Reihenfolge oder gleichzeitig ausgeführt werden können.
  • Die hier beschriebenen Hardwarekomponenten können von einem computerlesbaren Speichermedium, das darauf codierten computerlesbaren Programmcode aufweist, erzeugt werden.
  • Dies erkennt an, dass Firmware und Software wertvolle, getrennt handelbare Waren sein können. Sie soll Software einschließen, die auf ”dummer” oder standardmäßiger Hardware läuft oder diese steuert, um die gewünschten Funktionen auszuführen. Sie soll außerdem Software einschließen, die die Konfiguration von Hardware ”beschreibt” oder definiert, wie HDL- bzw. Hardware-Description-Language-Software, wie sie zum Konstruieren von Siliziumchips oder zum Konfigurieren universell programmierbarer Chips verwendet wird, um gewünschte Funktionen auszuführen.
  • Die bevorzugten Merkmale können kombiniert werden, wie es zweckdienlich ist, wie es einem Fachmann ersichtlich ist, und können mit beliebigen der Aspekte der Erfindung kombiniert werden.
  • Kurze Beschreibung der Zeichnungen
  • Ausführungsformen der Erfindung werden beispielhaft unter Bezugnahme auf die folgenden Zeichnungen beschrieben, von denen:
  • 1 eine schematische Darstellung einer beispielhaften bekannten Verzweigungsziel-Zwischenspeichertabelle zeigt;
  • 2 eine schematische Darstellung einer beispielhaften bekannten Tabelle zur Vorhersage zweistufiger Verzweigungen zeigt;
  • 3 eine schematische Darstellung eines beispielhaften Single-Thread-Prozessors zeigt;
  • 4 eine schematische Darstellung einer beispielhaften Logikeinheit zur Vorhersage indirekter Verzweigungen von 3 zeigt;
  • 5 eine schematische Darstellung beispielhafter Historien indirekter Pfade zeigt;
  • 6 eine schematische Darstellung beispielhafter Genommen-/Nicht-genommen-Historien zeigt;
  • 7 eine schematische Darstellung eines ersten beispielhaften Indexgenerators von 4 zeigt;
  • 8 eine schematische Darstellung eines zweiten beispielhaften Indexgenerators von 4 zeigt;
  • 9 ein Flussdiagramm eines beispielhaften Verfahrens zum Vorhersagen der Zieladresse einer indirekten Verzweigungsanweisung zeigt;
  • 10 ein Flussdiagramm eines beispielhaften Verfahrens zum Aktualisieren einer Tabelle vorhergesagter Ziele indirekter Verzweigungen zeigt; und
  • 11 eine schematische Darstellung eines beispielhaften Multi-Thread-Prozessors zeigt;
  • In den gesamten Figuren werden gemeinsame Bezugszeichen zur Anzeige gleicher Merkmale verwendet.
  • Ausführliche Beschreibung
  • Ausführungsformen der vorliegenden Erfindung werden nachstehend lediglich beispielhaft beschrieben. Diese Beispiele repräsentieren die besten Weisen zum Umsetzen der Erfindung in die Praxis, die dem Anmelder gegenwärtig bekannt sind, obwohl sie nicht die einzigen Weisen sind, in denen dies erreicht werden könnte. Die Beschreibung legt die Funktionen des Beispiels und die Abfolge von Schritten zum Konstruieren und Operieren des Beispiels dar. Die gleichen oder äquivalente Funktionen und Abläufe können jedoch durch verschiedene Beispiele erreicht werden.
  • Wie oben beschrieben, lassen sich indirekte Verzweigungen (z. B. Verzweigungen basierend auf einer Variablen anstatt einem konstanten Wert) schwer vorhersagen, da der Verzweigungsprädiktor vorhersagen muss, wo das Ziel sein wird. Das Ziel ist besonders schwer vorherzusagen, da es typischerweise auf einem Registerwert basiert, der sich periodisch ändert.
  • Die häufigste Weise zum Vorhersagen indirekter Verzweigungen ist die Verwendung eines Verzweigungszielpuffers (Branch Target Buffer, BTB), der die letzte Zieladresse indirekter Verzweigungsanweisungen speichert. Jetzt wird Bezug auf 1 genommen, die einen beispielhaften BTB 100 darstellt. Der BTB 100 ist eine Tabelle, die vorhergesagte Zieladressen 102 für indirekte Verzweigungsanweisungen speichert. Die Tabelle wird mit der Adresse (z. B. Programmzähler (Program Counter, PC)) der indirekten Verzweigungsanweisung indexiert. Im Allgemeinen wird die Adresse (oder z. B. ein Teil davon) 104 für eine indirekte Verzweigungsanweisung zum Erzeugen eines Indexes, der auf einen Eintrag im BTB 100 zeigt, verwendet. Die an diesem Eintrag gespeicherte vorhergesagte Zieladresse wird dann ausgegeben. Falls die vorhergesagte Zieladresse gültig ist, erfasst der Prozessor die nächste Anweisung aus der vorhergesagten Zieladresse. Falls die vorhergesagte Zieladresse nicht gültig ist, kann die Abrufstufe angehalten werden, bis die tatsächliche Zieladresse von den Pipelines bestimmt wird.
  • In einigen Fällen wird die vorhergesagte Zieladresse nach jeder Ausführung einer indirekten Verzweigungsanweisung aktualisiert. Zum Beispiel können die Pipelines, nachdem eine indirekte Verzweigungsanweisung von den Pipelines ausgeführt wurde, dem Verzweigungsprädiktor den Programmzähler der Anweisung, die auf die indirekte Verzweigungsanweisung folgte, bereitstellen. Der Verzweigungsprädiktor kann dann den vorhergesagten Zielwert im BTB 100 durch den empfangenen Programmzähler ersetzen.
  • In anderen Fällen kann der BTB 100 einen Zwei-Bit-Zähler für jede indirekte Verzweigungsanweisung umfassen, der die Anzahl von falschen Vorhersagen für die indirekte Verzweigungsanweisung verfolgt. In diesen Fällen ist es möglich, die vorhergesagte Zieladresse nur nach zwei aufeinanderfolgenden falschen Vorhersagen zu aktualisieren. Diese Variante des standardmäßigen BTB wird manchmal als BTB-2BC (Verzweigungszielpuffer – Zwei-Bit-Zähler) bezeichnet.
  • Eine andere Weise zum Vorhersagen indirekter Verzweigungen besteht in der Verwendung eines zweistufigen Prädiktors, wobei die Zieladressen in der Vorhersagetabelle mit einer Kombination (z. B. Hashing) sowohl der Adresse (z. B. Programmzähler) der indirekten Verzweigungsanweisung als auch Historie-Informationen für vorherige Verzweigungsanweisungen indiziert werden. Die Historie-Informationen stellen einen Pfad bereit, wie das Programm die indirekte Verzweigungsanweisung erreichte. Die Historie-Informationen können die Historie des indirekten Pfads oder die Genommen-/Nicht-genommen-Historie sein. Die Absicht eines zweistufigen Prädiktors besteht in der Abbildung von Mustern der Verzweigungsausführung auf Verzweigungsziele, damit die Vorhersage früheres Verhalten zum Verbessern der Vorhersage verwenden kann.
  • Die Historie des indirekten Pfads ist eine Historie der vorherigen Ziele indirekter Verzweigungsanweisungen. Insbesondere umfasst die Historie des indirekten Pfads die Zieladressen (oder einen Teil davon) der vorhergehenden N indirekten Verzweigungsanweisungen, wobei N die Länge des Pfads ist. Zum Beispiel kann die Historie des indirekten Pfads die letzten vier Bits der Zieladressen (z. B. PCs) der vier vorhergehenden indirekten Verzweigungsanweisungen umfassen. Die ganz linken Bits können die Zieladresse der ältesten indirekten Verzweigungsanweisung in der Historie repräsentieren und die ganz rechten Bits können die Zieladresse der jüngsten indirekten Verzweigungsanweisung in der Historie repräsentieren.
  • Die Genommen-/Nicht-genommen-Historie (die auch als die „Genommen- und Nicht-genommen-Historie” bezeichnet werden kann) ist eine Historie des Resultats der vorherigen bedingten Verzweigungen. Insbesondere umfasst die Genommen-/Nicht-genommen-Historie das Resultat (genommen/nicht genommen) der vorhergehenden M bedingten Verzweigungen, wobei M die Länge des Pfads ist. Die Genommen-/Nicht-genommen-Historie kann zum Beispiel eine Pfadlänge von zwölf haben und jedes der zwölf Bits gibt an, ob eine bedingte Verzweigung genommen oder nicht genommen wurde. Eine Null (”0”) kann angeben, dass die bedingte Verzweigung nicht genommen wurde, und eine Eins (”1”) kann angeben, dass die bedingte Verzweigung genommen wurde. Das ganz linke Bit kann die älteste Genommen-/Nicht-genommen-Entscheidung in der Historie repräsentieren und das ganz rechte Bit kann die jüngste Genommen-/Nicht-genommen-Entscheidung in der Historie repräsentieren.
  • Jetzt wird Bezug auf 2 genommen, die eine beispielhafte zweistufige Verzweigungsvorhersagetabelle 200 darstellt. Die zweistufige Verzweigungsvorhersagetabelle 200 ist wie die BTB 100 von 1 eine Tabelle, die vorhergesagte Zieladressen 200 für indirekte Verzweigungsanweisungen speichert. Anstatt jedoch nur mit der Adresse (z. B. PC) der indirekten Verzweigungsanweisung indexiert zu sein, ist die Tabelle 200 mit einer Kombination der Adresse (z. B. PC) der indirekten Verzweigungsanweisung und der Historie des indirekten Pfads indexiert. Im Allgemeinen wird die Adresse (oder ein Teil davon) 204 einer indirekten Verzweigungsanweisung mit der Historie des indirekten Pfads 206 kombiniert (z. B. durch exklusives Oder verknüpft), um einen Index zu erzeugen, der auf einen Eintrag in der zweistufigen Verzweigungsvorhersagetabelle 200 zeigt.
  • Die an diesem Eintrag gespeicherte vorhergesagte Zieladresse wird dann ausgegeben. Falls die vorhergesagte Zieladresse gültig ist, erfasst der Prozessor die nächste Anweisung aus der vorhergesagten Zieladresse. Falls die vorhergesagte Zieladresse nicht gültig ist, kann die Abrufstufe angehalten werden, bis die tatsächliche Zieladresse von den Pipelines bestimmt wird.
  • Es wurde jedoch gezeigt, dass im Vergleich zu BTB, BTB-2BC und zweistufiger Verzweigungsvorhersage bessere indirekte Verzweigungsvorhersage durch Indexieren der Zieladressen in einer Vorhersagetabelle unter Verwendung einer Kombination der Historie des indirekten Pfads und der Genommen-/Nicht-genommen-Historie erreicht werden kann. Insbesondere wurde gezeigt, dass die Zieladresse einer indirekten Verzweigungsanweisung nicht nur von den vorhergehenden indirekten Verzweigungsanweisungen, sondern auch den vorhergehenden bedingten Verzweigungsanweisungen abhängig ist. Dies beruht darauf, dass es die indirekte Historie und die bedingte Historie zusammen sind, die den vollständigen Pfad angeben, der genommen wurde, um zu der indirekten Verzweigungsanweisung zu gelangen. Demgemäß wird Sich-Verlassen auf nur einen oder den anderen nicht ein vollständiges Bild des genommenen Pfads bereitstellen.
  • Man könnte dann denken, dass es vorteilhaft wäre, die Historie des indirekten Pfads, die Genommen-/Nicht-genommen-Historie und die Adresse der Verzweigungsanweisung zu kombinieren. Diese dreifache Kombination tendiert jedoch dahin, ihre Korrelation zu verlieren, da wichtige Informationen in der Kombination verlorengehen. Zum Lösen dieses Problems wurde gezeigt, dass, im Gegensatz zu gegenwärtigem Denken, die Zieladresse einer indirekten Verzweigungsanweisung nicht in hohem Maße von der Adresse der indirekten Verzweigungsanweisung abhängig ist und daher ohne sie oder unter Verwendung nur eines Teils davon genau vorhergesagt werden kann.
  • Demgemäß betreffen hier beschriebene Ausführungsformen Verfahren und Verzweigungsprädiktoren, wobei die Zieladresse für eine indirekte Verzweigungsanweisung basierend auf einer Kombination der Historie des indirekten Pfads und der Genommen-/Nicht-genommen-Historie vorhergesagt wird.
  • Jetzt wird Bezug auf 3 genommen, die einen Single-Thread-Prozessor 300 darstellt, wobei die Zieladresse für eine indirekte Verzweigungsanweisung unter Verwendung der Historie des indirekten Pfads und der Genommen-/Nicht-genommen-Historie vorhergesagt wird. Der Prozessor 300 umfasst eine Abrufstufe 302, ausgelegt zum Abrufen von Anweisungen aus einem Programm (in Programmreihenfolge), wie von einem Programmzähler (PC) angegeben, und eine Decodierungs- und Umbenennungsstufe 304, angeordnet zum Interpretieren der Anweisungen und Durchführen von Registerumbenennung.
  • Nachdem eine Anweisung die Decodierungs- und Umbenennungsstufe 304 durchläuft, wird sie (a) in einen Umordnungspuffer 306 (Re-order Buffer, ROB) eingegeben und (b) zu den Pipelines 308 zur Ausführung abgesandt.
  • Der Umordnungspuffer 306 ist ein Puffer, der ermöglicht, dass die Anweisungen außerhalb der Reihenfolge ausgeführt, aber in der Reihenfolge festgelegt werden. Der Umordnungspuffer 306 hält die Anweisungen, die in Programmreihenfolge in ihn eingegeben werden, aber die Anweisungen im ROB 306 können von der Mehrzahl von Pipelines 308 außerhalb der Abfolge ausgeführt werden. In einigen Beispielen kann der Umordnungspuffer 306 als ein kreisförmiger Puffer gebildet werden, der einen Kopf, der auf die älteste Anweisung im ROB 306 zeigt, und einen Fuß, der auf die jüngste Anweisung im ROB 306 zeigt, aufweist. Anweisungen werden aus dem Umordnungspuffer 306 in Programmreihenfolge ausgegeben. Anders ausgedrückt, wird eine Anweisung vom Kopf des ROB 306 ausgegeben, wenn diese Anweisung von den Pipelines 308 ausgeführt wurde, und der Kopf wird zu der nächsten Anweisung im ROB 306 inkrementiert. Aus dem Umordnungspuffer 306 ausgegebene Anweisungen werden einer Festlegungsstufe 310 bereitgestellt, die die Ergebnisse der Anweisungen im Register/Speicher festlegt.
  • Der Prozessor 300 umfasst außerdem einen Verzweigungsprädiktor 312, der ausgelegt ist, im Fall von Anweisungen, von denen bekannt ist, dass sie möglicherweise Änderungen des Ablaufs bewirken, wie Verzweigungsanweisungen, vorherzusagen, welche Richtung der Programmablauf nehmen wird. Eine Verzweigungsvorhersage ist nützlich, da sie ermöglicht, dass Anweisungen spekulativ vom Prozessor 300 ausgeführt werden, bevor das Resultat der Verzweigungsanweisung bekannt ist. Der Verzweigungsprädiktor 312 kann mit der Abrufstufe 302 und/oder den Pipelines 308 in Kommunikation sein. Die Abrufstufe 202 kann zum Beispiel dem Verzweigungsprädiktor 312 Informationen bereitstellen, die angeben, welche Anweisungen Verzweigungsanweisungen sind, und kann Informationen vom Verzweigungsprädiktor 312 verwenden, um zu bestimmen, welche Anweisung als nächste abzurufen ist; und die Pipelines 308 können dem Verzweigungsprädiktor 312 Informationen bereitstellen, die Aktualisierungen des Programmzählers angeben.
  • Wenn der Verzweigungsprädiktor 312 den Programmablauf genau vorhersagt, verbessert dies die Leistung des Prozessors 300. Falls der Verzweigungsprädiktor 312 jedoch die Verzweigungsrichtung nicht richtig vorhersagt, erfolgt eine falsche Vorhersage, die korrigiert werden muss, bevor das Programm fortgesetzt werden kann. Zum Korrigieren einer falschen Vorhersage werden die zum ROB 306 gesandten spekulativen Anweisungen verworfen und die Abrufstufe 302 beginnt, Anweisungen aus der richtigen Programmverzweigung abzurufen.
  • Der Verzweigungsprädiktor 312 umfasst eine Prädiktor-Logikeinheit für indirekte Verzweigungen 314 zum Vorhersagen indirekter Verzweigungen (Verzweigungsanweisungen basierend auf einer Variablen) und eine Prädiktor-Logikeinheit für bedingte Verzweigungen 316 zum Vorhersagen bedingter Verzweigungen (Verzweigungsanweisungen basierend auf einer Konstanten).
  • Die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 sagt die Zieladresse indirekter Verzweigungsanweisungen unter Verwendung einer Kombination der Historie indirekter Verzweigungen für vorherige indirekte Verzweigungsanweisungen und der Genommen-/Nicht-genommen-Historie für vorherige bedingte Verzweigungsanweisungen voraus. Eine beispielhafte Prädiktor-Logikeinheit für indirekte Verzweigungen 314 wird unter Bezugnahme auf 4 beschrieben.
  • Die Prädiktor-Logikeinheit für bedingte Verzweigungen 316 sagt unter Verwendung eines beliebigen bekannten Verfahrens voraus, ob eine bedingte Verzweigung genommen oder nicht genommen wird.
  • Jetzt wird Bezug auf 4 genommen, die eine beispielhafte Prädiktor-Logikeinheit für indirekte Verzweigungen 314 von 3 darstellt. Die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 sagt die Zieladresse indirekter Verzweigungsanweisungen unter Verwendung einer Kombination der Historie indirekter Verzweigungen und der Genommen-/Nicht-genommen-Historie (Historie der Resultate bedingter Verzweigungen) voraus.
  • Die beispielhafte Vorhersage-Logikeinheit 314 von 4 umfasst eine Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 zum Speichern vorhergesagter Zieladressen, indexiert mit einer Kombination der Historie indirekter Verzweigungen und der Genommen-/Nicht-genommen-Historie; ein Indexgenerator 404 in Kommunikation mit der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 zur Erzeugung eines Indexes für eine indirekte Verzweigungsanweisung; und eine Entscheidungs-Logikeinheit 406 in Kommunikation mit der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 zum Vorhersagen der Adresse der nächsten Anweisung (z. B. Zieladresse) basierend auf der vorhergesagten Zieladresse, identifiziert mit dem von dem Indexgenerator 404 erzeugten Index; und eine Aktualisierungs-Logikeinheit 408 in Kommunikation mit der Entscheidungs-Logikeinheit 406 und der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 zum Aktualisieren der Historie indirekter Verzweigungen und/oder der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402.
  • Die Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 ist, wie der BTB 100 von 1 und die zweistufige Verzweigungsvorhersagetabelle 200 von 2, eine Tabelle, die vorhergesagte Zieladressen 410 für indirekte Verzweigungsanweisungen speichert. Anstatt jedoch nur mit der Adresse (z. B. PC) der indirekten Verzweigungsanweisung oder mit einer Kombination der Adresse (z. B. PC) der indirekten Verzweigungsanweisung und der Historie des indirekten Pfads indexiert zu werden, werden die vorhergesagten Zieladressen 410 mit einer Kombination der Historie des indirekten Pfads 414 und der Genommen-/Nicht-genommen-Historie 416 indexiert.
  • Die Historie des indirekten Pfads 414 ist eine Aufzeichnung von Zieladressen (oder Teilen davon) vorheriger indirekter Verzweigungsanweisungen. Die Anzahl von Zieladressen (oder von Teilen davon), die in der Historie des indirekten Pfads gespeichert ist, wird als die Pfadlänge bezeichnet. Falls die Pfadlänge der Historie des indirekten Pfads 414 zum Beispiel drei ist, zeichnet die Historie des indirekten Pfads die Zieladresse (oder Teile davon) der drei vorherigen indirekten Verzweigungsanweisungen auf. Die Pfadlänge kann basierend auf der Größe der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 ausgewählt werden. Falls zum Beispiel 1024 Einträge in der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 vorhanden sind, kann die Historie des indirekten Pfads 10 (210 = 1024) Bits umfassen. Beispielhafte Historien des indirekten Pfads 414 werden unter Bezugnahme auf 5 beschrieben.
  • In einigen Fällen, wie in 4 gezeigt, erzeugt und speichert die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 zwei Versionen der Historie des indirekten Pfads – eine laufende oder vorhersagende Historie des indirekten Pfads 414 und eine festgelegte Historie des indirekten Pfads 418. Die laufende oder vorhersagende Historie des indirekten Pfads 414 speichert die vorhergesagten Zieladressen (oder Teile davon) der zuletzt vorhergesagten indirekten Verzweigungsanweisungen. Die laufende oder vorhersagende Historie des indirekten Pfads 414 wird aktualisiert, nachdem die Entscheidungs-Logikeinheit 406 die Zieladresse für eine indirekte Verzweigungsanweisung vorhergesagt hat. Dagegen speichert die festgelegte Historie des indirekten Pfads 418 die tatsächlichen Zieladressen (oder Teile davon) der zuletzt festgelegten indirekten Verzweigungsanweisungen. Die festgelegte Historie des indirekten Pfads 418 wird aktualisiert, nachdem die Aktualisierungs-Logikeinheit 408 Informationen aus den Pipelines 308 empfängt, die die tatsächlichen Zieladressen indirekter Verzweigungsanweisungen angeben (z. B. nachdem die Verzweigungsanweisungen aufgelöst wurden). Der Prozess des Aktualisierens der Historien des indirekten Pfads 414 und 418 wird nachstehend unter Bezugnahme auf die Aktualisierungs-Logikeinheit 408 detaillierter beschrieben.
  • Die laufende oder vorhersagende Historie des indirekten Pfads 414 dient zum Vorhersagen der Zieladresse einer indirekten Verzweigungsanweisung. Dies gestattet der Prädiktor-Logikeinheit für indirekte Verzweigungen 314, im Anweisungssatz viel weiter als die ausgeführten Anweisungen vorauszuschauen. Die festgelegte Historie des indirekten Pfads 418 dient zum Erzeugen der Indexe, die zum Aktualisieren der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 verwendet werden. Die festgelegte Historie des indirekten Pfads 418 kann auch zum Reparieren (z. B. Überschreiben) der laufenden Historie des indirekten Pfads 414 verwendet werden, wenn eine falsche Vorhersage vorlag.
  • In einigen Fällen können die Historien des indirekten Pfads 414 und 418 als Schieberegister implementiert werden.
  • In den hierin beschriebenen Beispielen sind die Historien des indirekten Pfads 414 und 418 global, was bedeutet, dass nur ein Satz Historien des indirekten Pfads 414 und 418 für alle indirekten Verzweigungsanweisungen vorhanden ist. Insbesondere werden die Zieladressen (vorhergesagt oder tatsächlich) für alle indirekten Verzweigungsanweisungen in derselben Historie des indirekten Pfads gespeichert. In anderen Beispielen können die Historien des indirekten Pfads 414 und 418 jedoch für eine bestimmte indirekte Verzweigungsanweisung oder einen Satz indirekter Verzweigungsanweisungen typisch sein. Falls zum Beispiel eine Historie des indirekten Pfads für eine bestimmte indirekte Verzweigungsanweisung typisch ist, umfasst sie nur die Zieladressen (vorhergesagt oder tatsächlich) für die spezielle indirekte Verzweigungsanweisung. In diesen Beispielen gibt es verschiedene Sätze von Historien des indirekten Pfads 414 und 418 (z. B. eine für jede bestimmte indirekte Verzweigungsanweisung oder eine für jeden Satz von Verzweigungsanweisungen) und gibt es mehrere Tabellen vorhergesagter Ziele indirekter Verzweigungen (z. B. eine für jede bestimmte indirekte Verzweigungsanweisung oder eine für jeden Satz von Verzweigungsanweisungen).
  • Die Genommen-/Nicht-genommen-Historie 416 ist eine Aufzeichnung darüber, ob vorherige bedingte Verzweigungsanweisungen genommen oder nicht genommen wurden. Die Anzahl der in der Genommen-/Nicht-genommen-Historie 416 gespeicherten Resultate (genommen/nicht genommen) bedingter Verzweigungen wird als die Pfadlänge bezeichnet. Falls die Pfadlänge der Genommen-/Nicht-genommen-Historie 416 zum Beispiel zehn ist, zeichnet die Genommen-/Nicht-genommen-Historie 416 das Resultat der zehn vorherigen bedingten Verzweigungsanweisungen auf. Die Pfadlänge der Genommen-/Nicht-genommen-Historie 416 kann basierend auf der Größe der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 ausgewählt werden. Falls zum Beispiel 1024 Einträge in der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 vorhanden sind, kann die Anzahl Bits in der Genommen-/Nicht-genommen-Historie 416 10 (210 = 1024) Bits umfassen. Beispielhafte Genommen-/Nicht-genommen-Historien werden unter Bezugnahme auf 6 beschrieben.
  • Die Genommen-/Nicht-genommen-Historie 416 wird typischerweise von der Prädiktor-Logikeinheit für bedingte Verzweigungen 316 erzeugt. Die Prädiktor-Logikeinheit für bedingte Verzweigungen 316 kann, ähnlich der Historie des indirekten Pfads, zwei Versionen der Genommen-/Nicht-genommen-Historie erzeugen und speichern – eine laufende oder vorhersagende Genommen-/Nicht-genommen-Historie 416 und eine festgelegte Genommen-/Nicht-genommen-Historie 420. Die laufende oder vorhersagende Genommen-/Nicht-genommen-Historie 416 speichert das vorhergesagte Resultat (genommen/nicht genommen) der zuletzt vorhergesagten bedingten Verzweigungsanweisungen. Die laufende oder vorhersagende Genommen-/Nicht-genommen-Historie 416 wird aktualisiert, nachdem die Logikeinheit für bedingte Verzweigungsanweisungen 316 vorhergesagt hat, ob die Verzweigung genommen oder nicht genommen werden wird. Dagegen speichert die festgelegte Genommen-/Nicht-genommen-Historie 420 das tatsächliche Resultat (genommen/nicht genommen) der zuletzt festgelegten bedingten Verzweigungsanweisungen. Die festgelegte Historie des indirekten Pfads 420 wird aktualisiert, nachdem die Vorhersage-Logikeinheit für bedingte Verzweigungen 316 Informationen aus den Pipelines 308 empfängt, die angeben, ob eine bedingte Verzweigung tatsächlich genommen oder nicht genommen wurde.
  • Die laufende oder vorhersagende Genommen-/Nicht-genommen-Historie 416 dient zum Vorhersagen der Zieladresse einer indirekten Verzweigungsanweisung. Dies gestattet der Prädiktor-Logikeinheit für indirekte Verzweigungen 314, im Anweisungssatz viel weiter als die ausgeführten Anweisungen vorauszuschauen. Die festgelegte Genommen-/Nicht-genommen-Historie 420 dient zum Aktualisieren der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402. Die festgelegte Genommen-/Nicht-genommen-Historie 420 kann auch zum Reparieren (z. B. Überschreiben eines Teils) der laufenden Genommen-/Nicht-genommen-Historie 416 verwendet werden, wenn eine falsche Vorhersage vorlag.
  • In einigen Fällen können die Genommen-/Nicht-genommen-Historien 416 und 420 als Schieberegister implementiert werden.
  • In den hier beschriebenen Beispielen sind die Genommen-/Nicht-genommen-Historien 416 und 420 global, was bedeutet, dass nur ein Satz Genommen-/Nicht-genommen-Historien 416 und 420 für alle bedingten Verzweigungsanweisungen vorhanden ist. Insbesondere werden die Resultate aller bedingten Verzweigungsanweisungen in derselben Genommen-/Nicht-genommen-Historie gespeichert. In anderen Beispielen können die Genommen-/Nicht-genommen-Historien 416 und 420 jedoch für eine bestimmte bedingte Verzweigungsanweisung oder einen Satz bedingter Verzweigungsanweisungen typisch sein. In diesen Beispielen gibt es mehrere Sätze von Genommen-/Nicht-genommen-Historien, einen für jede bestimmte bedingte Verzweigungsanweisung oder einen für jeden Satz bedingter Verzweigungsanweisungen. In Fällen, in denen einen Genommen-/Nicht-genommen-Historie für jede bestimmte bedingte Verzweigung oder eine für jeden Satz bedingter Verzweigungsanweisungen vorhanden ist, kann die Adresse (oder ein Teil davon) der indirekten Verzweigungsanweisung verwendet werden, um auszuwählen, welche Genommen-/Nicht-genommen-Historien zum Erzeugen des Indexes verwendet werden.
  • Die Historie des indirekten Pfads 414 oder 418 und die Genommen-/Nicht-genommen-Historie 416 oder 420 können in jeder geeigneten Weise zum Erzeugen der Indexe kombiniert werden. In einigen Fällen wird eine Hashfunktion an einer Anzahl Bits der Historie des indirekten Pfads 414 oder 418 und einer Anzahl Bits der Genommen-/Nicht-genommen-Historie 416 oder 420 durchgeführt. Zum Beispiel kann eine bitweise Exklusive-Oder- bzw. XOR-Funktion an der Historie des indirekten Pfads 414 oder 418 und der Genommen-/Nicht-genommen-Historie 416 oder 418 durchgeführt werden, wobei jedes Bit der Historie des indirekten Pfads 414 oder 418 mit einem korrespondierenden Bit der Genommen-/Nicht-genommen-Historie 416 oder 420 durch eine XOR-Funktion verknüpft wird.
  • Für Fachleute im Fachgebiet wird offensichtlich sein, dass andere Kombinationen und/oder Hashfunktionen verwendet werden können. Zum Beispiel kann die Hashfunktion einige Bits aus einer Historie und einige aus einer anderen Historie auswählen und eine XOR-Operation an den ausgewählten Bits durchführen; oder die Hashfunktion kann die Bits der Historien in einer verschiedenen Reihenfolge mit einer XOR-Funktion verknüpfen.
  • Der Indexgenerator 404 ist für das Erzeugen eines Indexes für indirekte Verzweigungsanweisungen, die aus der Abrufstufe 302 empfangen wurden, verantwortlich. Zum Beispiel kann der Indexgenerator 404 Informationen aus der Abrufstufe 302 empfangen, die eine indirekte Verzweigungsanweisung im Programm identifizieren. In einigen Fällen bestehen die Informationen, die die indirekte Verzweigungsanweisung identifizieren, aus der Adresse (Programmzähler) der indirekten Verzweigungsanweisung. Der Indexgenerator 404 erlangt dann die laufende Historie des indirekten Pfads 414 und die laufende Genommen-/Nicht-genommen-Historie 416 und kombiniert sie, um einen Index für die indirekte Verzweigungsanweisung zu erzeugen. Wie oben beschrieben, können die laufende Historie des indirekten Pfads 414 und die laufende Genommen-/Nicht-genommen-Historie 416 in jeder geeigneten Weise kombiniert werden (z. B. durch eine bitweise XOR-Verknüpfung).
  • In einigen Fällen kann der Indexgenerator 404 vor dem Kombinieren der Historien zum Erzeugen des Indexes eine der laufenden Historie des indirekten Pfads 414 und der laufenden Genommen-/Nicht-genommen-Historie 416 modifizieren, um die Adresse (oder einen Teil davon) der indirekten Verzweigungsanweisung zu umfassen. Zum Beispiel kann der Indexgenerator 404 die letzten vier Bits der Adresse der indirekten Verzweigungsanweisung an die laufende Genommen-/Nicht-genommen-Historie 416 anfügen, bevor sie mit der laufenden Historie des indirekten Pfads 414 kombiniert wird. In einem anderen Beispiel kann der Indexgenerator 404 die oberen vier Bits der laufenden Genommen-/Nicht-genommen-Historie 416 durch die letzten vier Bits der Adresse der indirekten Verzweigungsanweisung ersetzen, bevor sie mit der laufenden Historie des indirekten Pfads 414 kombiniert wird.
  • Sobald der Indexgenerator 404 den Index für eine indirekte Verzweigungsanweisung erzeugt hat, wird er verwendet, um einen bestimmten Eintrag in der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 zu identifizieren. In einigen Fällen wird der Index nur einen Eintrag in der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 identifizieren. Dies kann zum Beispiel vorkommen, wenn 2X Einträge (z. B. Reihen) in der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 vorhanden sind und X Bits im Index vorhanden sind.
  • In anderen Fällen kann der Index mehr als einen Eintrag in der Tabelle identifizieren. Dies kann zum Beispiel vorkommen, wenn 2X Einträge (z. B. Reihen) in der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 vorhanden sind und weniger als X Bits im Index vorhanden sind. In diesen Fällen kann die Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 eine zusätzliche Markierungsspalte (nicht dargestellt) umfassen, die verwendet wird, um einen bestimmten Eintrag eindeutig zu identifizieren. Die Markierung kann die Adresse (oder ein Teil davon) der indirekten Verzweigungsanweisung sein. In diesen Fällen kann, wenn der Index mehr als einen Eintrag in der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 identifiziert, die Markierung für jeden der identifizierten Einträge mit der Adresse (oder einem Teil davon) der indirekten Verzweigungsanweisung verglichen werden, um zu bestimmen, ob eine Übereinstimmung vorliegt. Falls eine Übereinstimmung vorliegt, wird der übereinstimmende Eintrag ausgewählt. Falls keine Übereinstimmung vorliegt, kann angenommen werden, dass keine gültige vorhergesagte Zieladresse für den Index vorhanden ist.
  • Die vorhergesagte Zieladresse in dem durch den Index identifizierten Eintrag wird der Entscheidungs-Logikeinheit 406 bereitgestellt, die bestimmt, ob die empfangene vorhergesagte Zieladresse gültig ist. Eine bestimmte vorhergesagte Zieladresse kann ungültig sein, falls für den bestimmten Index keine vorhergesagte Zieladresse erzeugt wurde (z. B. ist für diesen Eintrag noch keine Aktualisierung erfolgt), oder in Fällen, in denen eine Markierungsspalte verwendet wird und kein Eintrag mit einer übereinstimmenden Markierung vorhanden ist. Falls die Entscheidungs-Logikeinheit 406 bestimmt, dass die vorhergesagte Zieladresse gültig ist, sagt die Entscheidungs-Logikeinheit 406 voraus, dass die Zieladresse der indirekten Verzweigungsanweisung die vorhergesagte Zieladresse ist. Die Entscheidungs-Logikeinheit 406 sendet dann eine Angabe an die Abrufstufe 302, dass sie die nächste Anweisung von der vorhergesagten Zieladresse abrufen soll. Falls die Entscheidungs-Logikeinheit 406 jedoch bestimmt, dass die vorhergesagte Zieladresse nicht gültig ist, kann sie eine Angabe an die Abrufstufe 302 senden, anzuhalten, bis die tatsächliche Zieladresse von den Pipelines 308 bestimmt wurde.
  • Die Entscheidungs-Logikeinheit 406 stellt außerdem jede gültige vorhergesagte Zieladresse der Aktualisierungs-Logikeinheit 408 bereit. Die Aktualisierungs-Logikeinheit 408 aktualisiert dann die laufende Historie des indirekten Pfads 414, um anzugeben, dass die zuletzt vorhergesagte Zieladresse die aus der Entscheidungs-Logikeinheit 406 empfangene vorhergesagte Zieladresse ist. Wenn die laufende Historie des indirekten Pfads 414 als ein Schieberegister implementiert ist, kann dies umfassen, die Bits im Register um eine im Voraus bestimmte Anzahl Bits zu verschieben und die empfangene vorhergesagte Adresse (oder einen Teil davon) in die freien Bits einzufügen.
  • Die Aktualisierungs-Logikeinheit 408 ist außerdem ausgelegt, Informationen aus den Pipelines 308 zu empfangen, wenn eine indirekte Verzweigungsvorhersage ausgeführt und festgelegt wurde. Die Informationen können die Adresse (z. B. Programmzähler) der indirekten Verzweigungsanweisung und die tatsächliche Zieladresse (z. B. die Aktualisierung des Programmzählers) umfassen. Nach Empfangen von Informationen aus den Pipelines 308 über eine bestimmte indirekte Verzweigungsanweisung kann die Aktualisierungs-Logikeinheit 408 ausgelegt sein zum: (a) Aktualisieren der Tabelle vorhergesagter Zieladressen indirekter Verzweigungen 402, um die tatsächliche Zieladresse zu reflektieren; (b) Aktualisieren der festgelegten Historie des indirekten Pfads 418; und/oder (c) Korrigieren der laufenden Historie des indirekten Pfads 414, falls die empfangenen Informationen angeben, dass eine falsche Vorhersage vorlag.
  • Aktualisieren der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 kann umfassen, einen Index aus der festgelegten Historie des indirekten Pfads 418 und der festgelegten Genommen-/Nicht-genommen-Historie 420 in der gleichen Weise wie der Indexgenerator 404 zu erzeugen. Wie oben beschrieben, können die Historien in jeder geeigneten Weise kombiniert werden, um den Index zu erzeugen. In einigen Fällen wird eine Hashfunktion an einer Anzahl Bits der festgelegten Historie des indirekten Pfads 418 und einer Anzahl Bits der festgelegten Genommen-/Nicht-genommen-Historie 420 durchgeführt. Zum Beispiel kann eine bitweise Exklusive-Oder- bzw. XOR-Funktion an der festgelegten Historie des indirekten Pfads 418 und der festgelegten Genommen-/Nicht-genommen-Historie 420 durchgeführt werden, wobei jedes Bit der festgelegten Historie des indirekten Pfads 418 mit einem korrespondierenden Bit der festgelegten Genommen-/Nicht-genommen-Historie 420 durch eine XOR-Funktion verknüpft wird.
  • Sobald der Index erzeugt wurde, wird er verwendet, um einen Eintrag (d. h. Reihe) in der Tabelle vorhergesagter Zieladressen indirekter Verzweigungen 402 zu identifizieren. In einigen Fällen wird die vorhergesagte Zieladresse im identifizierten Eintrag dann durch die aus den Pipelines 308 empfangene tatsächliche Zieladresse ersetzt. In anderen Fällen wird die vorhergesagte Zieladresse im identifizierten Eintrag nur durch die tatsächliche Zieladresse ersetzt, nachdem der Eintrag eine im Voraus bestimmte Anzahl von falschen Vorhersagen verursacht hat. Zum Beispiel kann die Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 einen Zwei-Bit-Zähler (nicht dargestellt) für jeden Eintrag umfassen, der die Anzahl der von diesem Eintrag verursachten falschen Vorhersagen verfolgt. Die Aktualisierungs-Logikeinheit 408 kann dann nur die vorhergesagte Zieladresse durch die tatsächliche Zieladresse ersetzen, falls der Zwei-Bit-Zähler angibt, dass der Eintrag zum Beispiel zwei aufeinanderfolgende falsche Vorhersagen verursacht hat.
  • Ein beispielhaftes Verfahren zum Aktualisieren der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402, das von der Aktualisierungs-Logikeinheit 408 ausgeführt werden kann, wird unter Bezugnahme auf 10 beschrieben.
  • Aktualisieren der festgelegten Historie des indirekten Pfads 418 kann umfassen, die Historie 418 zu aktualisieren, um anzugeben, dass die Zieladresse für die zuletzt ausgeführte indirekte Verzweigungsanweisung die aus den Pipelines 308 empfangene tatsächliche Zieladresse ist. Wenn die festgelegte Historie des indirekten Pfads 418 als ein Schieberegister implementiert ist, kann dies umfassen, die Bits im Register um eine im Voraus bestimmte Anzahl Bits zu verschieben und die tatsächliche Zieladresse (oder einen Teil davon) in die freien Bits des Registers einzufügen.
  • Korrigieren der laufenden Historie des indirekten Pfads kann umfassen, zuerst zu bestimmen, ob die aus den Pipelines 308 empfangenen Informationen angeben, dass eine falsche Vorhersage vorlag. Bestimmen, ob die aus den Pipelines 308 empfangenen Informationen angeben, dass eine falsche Vorhersage vorlag, kann umfassen, die aus den Pipelines 308 empfangene tatsächliche Zieladresse mit der in der Anweisungstabelle 422 für die von den Pipelines 308 identifizierte indirekte Verzweigungsanweisung aufgezeichneten vorhergesagten Zieladresse zu vergleichen. Falls die vorhergesagte Zieladresse und die tatsächliche Zieladresse nicht übereinstimmen, lag eine falsche Vorhersage vor. Falls eine falsche Vorhersage vorlag, ersetzt die Aktualisierungs-Logikeinheit 408 die laufende Historie des indirekten Pfads 414 durch die festgelegte Historie des indirekten Pfads 418. Obwohl die festgelegte Historie des indirekten Pfads 418 „hinter” der laufenden Historie des indirekten Pfads 416 liegt (d. h. sie umfasst nicht die Zieladressen (oder Teile davon) von indirekten Verzweigungsanweisungen, die vorhergesagt, aber nicht festgelegt wurden), bewirkt die falsche Vorhersage ein Rückspulen von Anweisungen bis zu der falsch vorhergesagten Anweisung, so dass die nach der falschen Vorhersage gemachten Vorhersagen irrelevant werden und verworfen werden.
  • Die Tabelle vorhergesagter Ziele indirekter Verzweigungen 402, der Indexgenerator 404, die Entscheidungs-Logikeinheit 406, die Aktualisierungs-Logikeinheit 408, die laufende Historie des indirekten Pfads 414 und die festgelegte Historie des indirekten Pfads 418 können unter Verwendung geeigneter Hardware implementiert werden.
  • Jetzt wird auf 5 Bezug genommen, die eine beispielhafte laufende Historie des indirekten Pfads 414 darstellt. Wie oben beschrieben, ist die laufende Historie des indirekten Pfads 414 eine Aufzeichnung von N Zieladressen (oder Teilen davon) vorher vorhergesagter indirekter Verzweigungsanweisungen, wobei N die Pfadlänge ist. Falls N zum Beispiel fünf ist, zeichnet die Historie des indirekten Pfads die Zieladressen (oder Teile davon) der fünf zuletzt vorhergesagten indirekten Verzweigungsanweisungen auf.
  • Die beispielhafte laufende Historie des indirekten Pfads 414 von 5 ist zwölf Bits lang und hat eine Pfadhistorie, N, von drei. Demgemäß zeichnet die laufende Historie des indirekten Pfads 414 vier Bits der Zieladressen der drei zuletzt vorhergesagten indirekten Verzweigungsanweisungen auf. In einigen Fällen sind es die letzten vier Bits der Zieladressen, die gespeichert werden. In anderen Fällen können es andere Bits der Zieladressen sein, die gespeichert werden. Für einen Fachmann im Fachgebiet wird es offensichtlich sein, dass die Historie des indirekten Pfads mehr oder weniger Bits umfassen, eine längere oder kürzere Pfadlänge (N) haben und mehr oder weniger Bits der Zieladressen speichern kann.
  • In diesem Beispiel ist die laufende Historie des indirekten Pfads 414 in drei Blöcke 502, 504 und 506 aufgeteilt. Der erste Block 502 korrespondiert mit den vier höchstwertigen Bits (Bits 8 bis 11) und dient zum Speichern der letzten vier Bits der Zieladresse der dritten zuletzt vorhergesagten indirekten Verzweigungsanweisung. Der zweite Block 504 korrespondiert mit den mittleren vier Bits (Bits 4–7) und dient zum Speichern der letzten vier Bits der Zieladresse der zweiten zuletzt vorhergesagten indirekten Verzweigungsanweisung. Der dritte Block 506 korrespondiert mit den vier niedrigstwertigen Bits (Bits 0 bis 3) und dient zum Speichern der letzten vier Bits der Zieladresse der zuletzt vorhergesagten indirekten Verzweigungsanweisung.
  • In einigen Fällen wird die laufende Historie des indirekten Pfads 414 anfangs gesamt auf Nullen eingestellt, wie in 5a gezeigt, und wenn die Entscheidungs-Logikeinheit 406 eine neue Zieladresse vorhersagt, verschiebt die Aktualisierungs-Logikeinheit 408 die Daten in den Blöcken 504 und 506 um vier Bits nach links zu den Blöcken 502 bzw. 504, und die letzten vier Bits der Zieladresse der neu ausgeführten indirekten Verzweigungsanweisung werden in Block 506 eingefügt.
  • Falls zum Beispiel die Aktualisierungs-Logikeinheit 408 Informationen aus der Entscheidungs-Logikeinheit 406 empfängt, dass sie vorhergesagt hat, dass die Zieladresse für eine neue indirekte Verzweigungsanweisung ”011000001010” ist, kann die Aktualisierungs-Logikeinheit 408 die Daten ”0000” und ”0000” in den Blöcken 504 und 506 in die Blöcke 502 bzw. 504 verschieben und die letzten vier Bits der Zieladresse ”1010” in den Block 506 einfügen, so dass die laufende Historie des indirekten Pfads 414 die Daten ”000000001010” enthält, wie in 5b gezeigt.
  • Falls die Aktualisierungs-Logikeinheit 408 anschließend Informationen aus der Entscheidungs-Logikeinheit 406 empfängt, die angeben, dass sie vorhergesagt hat, dass die Zieladresse für eine neue indirekte Verzweigungsanweisung ”010100001101” ist, kann die Aktualisierungs-Logikeinheit 408 die Daten ”0000” und ”1010” in den Blöcken 504 und 506 in die Blöcke 502 bzw. 504 verschieben und die letzten vier Bits der Zieladresse ”1101” in den Block 506 einfügen, so dass die laufende Historie des indirekten Pfads 414 die Daten ”000010101101” enthält, wie in 5c gezeigt.
  • Falls die Aktualisierungs-Logikeinheit 408 gleichermaßen anschließend Informationen aus der Entscheidungs-Logikeinheit 406 empfängt, die angeben, dass sie vorhergesagt hat, dass die Zieladresse einer neuen indirekten Verzweigungsanweisung ”101011100010” ist, kann die Aktualisierungs-Logikeinheit 408 die Daten ”1010” und ”1101” in den Blöcken 504 und 506 in die Blöcke 502 bzw. 504 verschieben und die letzten vier Bits der Zieladresse ”0010” in den Block 506 einfügen, so dass die laufende Historie des indirekten Pfads 414 die Daten ”101011010010” enthält, wie in 5d gezeigt.
  • Obwohl 5 eine beispielhafte laufende Historie des indirekten Pfads 414 zeigt, kann die festgelegte Historie des indirekten Pfads 418 eine ähnliche Struktur aufweisen und in einer zur laufenden Historie des indirekten Pfads 414 ähnlichen Weise aktualisiert werden. Anstatt aktualisiert zu werden, wenn eine Zieladresse für eine neue indirekte Verzweigungsanweisung vorhergesagt wird, wird die festgelegte Historie des indirekten Pfads 418 jedoch aktualisiert, nachdem die Aktualisierungs-Logikeinheit 408 Informationen aus den Pipelines 308 empfängt, dass eine neue indirekte Verzweigungsanweisung ausgeführt wurde.
  • Jetzt wird auf 6 Bezug genommen, die eine beispielhafte laufende Genommen-/Nicht-genommen-Historie 416 darstellt. Wie oben beschrieben, ist die laufende Genommen-/Nicht-genommen-Historie 416 eine Aufzeichnung des vorhergesagten Resultats (genommen/nicht genommen) der M zuletzt vorhergesagten bedingten Verzweigungsanweisungen, wobei M die Pfadlänge ist. Falls M zum Beispiel fünf ist, zeichnet die laufende Genommen-/Nicht-genommen-Historie 416 das vorhergesagte Resultat der fünf zuletzt vorhergesagten bedingten Verzweigungsanweisungen auf.
  • Die beispielhafte laufende Genommen-/Nicht-genommen-Historie 416 von 6 ist zwölf Bits lang und weist eine Pfadlänge M von zwölf auf. Demgemäß verwendet die laufende Genommen-/Nicht-genommen-Historie 416 ein Bit zur Aufzeichnung des Resultats (genommen/nicht genommen) jeder der zwölf zuletzt vorhergesagten bedingten Verzweigungsanweisungen. In einigen Fällen wird eine Eins (”1”) verwendet, um anzugeben, dass die Verzweigung genommen wurde, und wird eine Null (”0”) verwendet, um anzugeben, dass die Verzweigung nicht genommen wurde. Für einen Fachmann im Fachgebiet wird offensichtlich sein, dass die Historie des indirekten Pfads mehr oder weniger Bits umfassen kann und eine längere oder kürzere Pfadlänge (M) haben kann.
  • In diesem Beispiel kann die laufende Genommen-/Nicht-genommen-Historie 416 in zwölf Blöcke 602624 aufgeteilt werden, wobei jeder Block ein einzelnes Bit ist, das das Resultat einer zuletzt vorhergesagten bedingten Verzweigung repräsentiert. Die Blöcke sind in der Reihenfolge der Vorhersage der korrespondierenden bedingten Verzweigung, wobei der ganz linke Block (Block 602) das Resultat der ältesten vorhergesagten bedingten Verzweigungsanweisung in der Historie 416 repräsentiert und der ganz rechte Block (Block 624) das Resultat der jüngsten (oder letzten) vorhergesagten bedingten Verzweigungsanweisung in der Historie 416 repräsentiert.
  • In einigen Fällen wird die laufende Genommen-/Nicht-genommen-Historie 416 anfangs gesamt auf Nullen eingestellt, wie in 6a gezeigt, und wenn die Prädiktor-Logikeinheit für bedingte Verzweigungen 316 das Resultat einer bedingten Verzweigungsanweisung vorhersagt, verschiebt die Prädiktor-Logikeinheit für bedingte Verzweigungen 316 die Daten in den Blöcken 604624 jeweils um ein Bit nach links zu den Blöcken 602622 und wird das vorhergesagte Resultat für die neue bedingte Verzweigungsanweisung in Block 624 eingefügt.
  • Falls die Prädiktor-Logikeinheit für bedingte Verzweigungen 316 zum Beispiel vorhersagt, dass eine bedingte Verzweigung genommen werden wird (z. B. ist die Bedingung ”1”), kann die Prädiktor-Logikeinheit für bedingte Verzweigungen 316 die Daten ”00000000000” in den Blöcken 604624 jeweils zu den Blöcken 602622 verschieben und das vorhersagte Resultat (”1”) in den Block 624 einfügen, so dass die laufende Genommen-/Nicht-genommen-Historie 416 die Daten ”000000000001” enthält, wie in 6b gezeigt.
  • Falls die Prädiktor-Logikeinheit für bedingte Verzweigungen 316 dann anschließend vorhersagt, dass die nächste bedingte Verzweigung nicht genommen werden wird (z. B. ist die Bedingung ”0”), kann die Prädiktor-Logikeinheit für bedingte Verzweigungen 316 die Daten ”00000000001” in den Blöcken 604624 jeweils zu den Blöcken 602622 verschieben und das vorhersagte Resultat (”0”) in den Block 624 einfügen, so dass die laufende Genommen-/Nicht-genommen-Historie 416 die Daten ”000000000010” enthält, wie in 6c gezeigt.
  • Falls die Prädiktor-Logikeinheit für bedingte Verzweigungen 316 gleichermaßen dann anschließend vorhersagt, dass die nächste bedingte Verzweigung genommen werden wird (z. B. ist die Bedingung ”1”), kann die Prädiktor-Logikeinheit für bedingte Verzweigungen 316 die Daten ”00000000010” in den Blöcken 604624 jeweils zu den Blöcken 602622 verschieben und das vorhersagte Resultat (”1”) in den Block 624 einfügen, so dass die laufende Genommen-/Nicht-genommen-Historie 416 die Daten ”000000000101” enthält, wie in 6d gezeigt.
  • Obwohl 6 eine beispielhafte laufende Genommen-/Nicht-genommen-Historie 416 zeigt, kann die festgelegte Genommen-/Nicht-genommen-Historie 420 eine ähnliche Struktur aufweisen und in einer zur laufenden Genommen-/Nicht-genommen-Historie 416 ähnlichen Weise aktualisiert werden. Anstatt aktualisiert zu werden, wenn eine bedingte Verzweigung vorhergesagt wird, wird, wie oben beschrieben, die festgelegte Genommen-/Nicht-genommen-Historie 418 jedoch aktualisiert, nachdem die Prädiktor-Logikeinheit für bedingte Verzweigungen 316 Informationen aus den Pipelines 308 empfängt, dass eine bedingte Verzweigungsanweisung ausgeführt wurde.
  • Jetzt wird auf 7 Bezug genommen, die einen ersten beispielhaften Indexgenerator 404 von 4 darstellt. Wie oben unter Bezugnahme auf 4 beschrieben, empfängt der Indexgenerator 404 Informationen aus der Abrufstufe 302, die eine indirekte Verzweigungsanweisung im Programm identifizieren. In einigen Fällen bestehen die Informationen, die die indirekte Verzweigungsanweisung identifizieren, aus der Adresse (z. B. Programmzähler) der indirekten Verzweigungsanweisung. Der Indexgenerator 404 erlangt dann die laufende Historie des indirekten Pfads 414 und die laufende Genommen-/Nicht-genommen-Historie 416 und kombiniert sie, um einen Index 702 für die indirekte Verzweigungsanweisung zu erzeugen.
  • In dem in 7 gezeigten Beispiel führt der Indexgenerator 404 eine bitweise Exklusive-Oder- bzw. XOR-Operation an der laufenden Historie des indirekten Pfads 414 und der laufenden Genommen-/Nicht-genommen-Historie 416 durch, um den Index 702 zu erzeugen. Wie den Zugehörigen des Fachgebiets bekannt ist, produziert das bitweise XOR eine ”0”, falls die beiden korrespondierenden Bits (z. B. Bit 5 in der laufenden Historie des indirekten Pfads 414 und Bit 5 in der laufenden Genommen-/Nicht-genommen-Historie 416) gleich sind, und produziert eine ”1”, falls die beiden korrespondierenden Bits verschieden sind. Zum Beispiel ist, wie in 7, in der die laufende Historie des indirekten Pfads 414 ”011010101001” ist und die laufende Genommen-/Nicht-genommen-Historie 416 ”110110011001” ist, gezeigt, der resultierende Index 702 ”101100110000”.
  • Jetzt wird auf 8 Bezug genommen, die einen zweiten beispielhaften Indexgenerator 404 von 4 darstellt. Wie oben unter Bezugnahme auf 4 beschrieben, empfängt der Indexgenerator 404 Informationen aus der Abrufstufe 302, die eine indirekte Verzweigungsanweisung im Programm identifizieren. In einigen Fällen bestehen die Informationen, die die indirekte Verzweigungsanweisung identifizieren, aus der Adresse (z. B. Programmzähler) der indirekten Verzweigungsanweisung. In dem in 8 gezeigten Beispiel ist die Adresse der indirekten Verzweigungsanweisung ”00001111”.
  • Der Indexgenerator 404 erlangt dann die laufende Historie des indirekten Pfads 414 und die laufende Genommen-/Nicht-genommen-Historie 416. Der Indexgenerator 404 fügt dann die letzten vier Bits der Adresse der Verzweigungsanweisung der laufenden Genommen-/Nicht-genommen-Historie 416 hinzu, um eine modifizierte Genommen-/Nicht-genommen-Historie 802 zu erzeugen. Zum Beispiel wird, wie in 8, in der die laufende Genommen-/Nicht-genommen-Historie 416 ”110110011001” ist und die Adresse der indirekten Verzweigungsanweisung ”00001111” ist, gezeigt, die modifizierte Genommen-/Nicht-genommen-Historie 802 ”1101100110011111”.
  • Der Indexgenerator 404 kombiniert dann die letzten zwölf Bits (Bits 0 bis 11) der modifizierten Genommen-/Nicht-genommen-Historie 802 und die laufende Historie des indirekten Pfads 414, um einen Index 804 für die indirekte Verzweigungsanweisung zu erzeugen. In dem in 8 gezeigten Beispiel führt der Indexgenerator 404 eine bitweise Exklusive-Oder- bzw. XOR-Operation an der laufenden Historie des indirekten Pfads 414 und den letzten zwölf Bits (Bits 0-11) der modifizierten Genommen-/Nicht-genommen-Historie 802 durch, um den Index 804 zu erzeugen. Wie den Zugehörigen des Fachgebiets bekannt ist, produziert das bitweise XOR eine ”0”, falls die beiden korrespondierenden Bits (z. B. Bit 5 in der laufenden Historie des indirekten Pfads 414 und Bit 5 in der modifizierten Genommen-/Nicht-genommen-Historie 802) gleich sind, und produziert eine ”1”, falls die beiden korrespondierenden Bits verschieden sind. Zum Beispiel ist, wie in 8, in der die laufende Historie des indirekten Pfads 414 ”011010101001” ist und die letzten zwölf Bits (Bits 0 bis 11) der modifizierten Genommen-/Nicht-genommen-Historie 802 ”100110011111” sind, gezeigt, der resultierende Index 804 ”111100110110”.
  • Jetzt wird Bezug auf 9 genommen, die ein Verfahren 900 zum Vorhersagen der Zieladresse einer indirekten Verzweigungsanweisung darstellt, das von der Prädiktor-Logikeinheit für indirekte Verzweigungen 314 der 3 und 4 ausgeführt werden kann. In Schritt 902 empfängt die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. der Indexgenerator 404) Informationen aus der Abrufstufe 302, die eine indirekte Verzweigungsanweisung identifizieren. Wie oben beschrieben, können die Informationen die Adresse (z. B. PC) der indirekten Verzweigungsanweisung umfassen. Sobald die Informationen, die eine indirekte Verzweigungsanweisung identifizieren, empfangen wurden, fährt das Verfahren 900 mit Schritt 904 fort.
  • In Schritt 904 erlangt die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. der Indexgenerator 404) die laufende Historie des indirekten Pfads 414. Wie oben beschrieben, ist die laufende Historie des indirekten Pfads 414 eine Historie der vorhergesagten Zieladressen für vorher vorhergesagte indirekte Verzweigungsanweisungen. Sobald die laufende Historie des indirekten Pfads 414 erlangt wurde, fährt das Verfahren 900 mit Schritt 906 fort.
  • In Schritt 906 erlangt die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. der Indexgenerator 404) die laufende Genommen-/Nicht-genommen-Historie 416 aus der Prädiktor-Logikeinheit für bedingte Verzweigungen 316. Wie oben beschrieben, ist die laufende Genommen-/Nicht-genommen-Historie 416 eine Historie der vorhergesagten Resultate (genommen/nicht genommen) vorher vorhergesagter bedingter Verzweigungsanweisungen. Sobald die laufende Genommen-/Nicht-genommen-Historie 416 erlangt wurde, fährt das Verfahren 900 mit Schritt 908 fort.
  • In Schritt 908 kombiniert die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. der Indexgenerator 404) die laufende Historie des indirekten Pfads 414 und die laufende Genommen-/Nicht-genommen-Historie 416, erlangt in den Schritten 904 bzw. 906, um einen Index für die indirekte Verzweigungsanweisung, die in Schritt 902 identifiziert wurde, zu erzeugen. Wie oben beschrieben, können die laufende Historie des indirekten Pfads 414 und die laufende Genommen-/Nicht-genommen-Historie 416 in jeder geeigneten Weise kombiniert werden, um den Index zu erzeugen. In einigen Fällen wird eine Hashfunktion an einer Anzahl Bits der laufenden Historie des indirekten Pfads 414 und einer Anzahl Bits der laufenden Genommen-/Nicht-genommen-Historie 416 durchgeführt. Zum Beispiel kann eine bitweise Exklusive-Oder- bzw. XOR-Funktion an der laufenden Historie des indirekten Pfads 414 und der laufenden Genommen-/Nicht-genommen-Historie 416 durchgeführt werden, wobei jedes Bit der laufenden Historie des indirekten Pfads 414 mit einem korrespondierenden Bit der laufenden Genommen-/Nicht-genommen-Historie 416 durch eine XOR-Funktion verknüpft wird. Für Fachleute im Fachgebiet wird es offensichtlich sein, dass andere Kombinationen und/oder Hashfunktionen verwendet werden können.
  • In einigen Fällen kann die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. der Indexgenerator 404) die in Schritt 904 erlangte laufende Historie des indirekten Pfads 414 oder die in Schritt 906 erlangte laufende Genommen-/Nicht-genommen-Historie 416 vor dem Kombinieren der Historien modifizieren, um die Adresse (oder einen Teil davon) der indirekten Verzweigungsanweisung aufzunehmen. Zum Beispiel kann die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 einen Teil der Adresse der indirekten Verzweigungsanweisung an die laufende Historie des indirekten Pfads 414 oder die laufende Genommen-/Nicht-genommen-Historie 416 anfügen; oder einen Teil der laufenden Historie des indirekten Pfads 414 oder der laufenden Genommen-/Nicht-genommen-Historie 416 durch einen Teil der Adresse der indirekten Verzweigungsanweisung ersetzen.
  • Sobald der Index erzeugt wurde, fährt das Verfahren 900 mit Schritt 910 fort.
  • In Schritt 910 identifiziert die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 die mit dem in Schritt 908 erzeugten Index assoziierte vorhergesagte Zieladresse in der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402. Sobald die vorhergesagte Zieladresse identifiziert wurde, fährt das Verfahren 900 mit Schritt 912 fort.
  • In Schritt 912 bestimmt die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. die Entscheidungs-Logikeinheit 406), ob die in Schritt 910 vorhergesagte Zieladresse gültig ist. Falls die vorhergesagte Zieladresse gültig ist, fährt das Verfahren mit Schritt 914 fort. Falls die vorhergesagte Zieladresse jedoch nicht gültig ist, fährt das Verfahren 900 mit Schritt 916 fort.
  • In Schritt 914 sagt die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. die Entscheidungs-Logikeinheit 406) voraus, dass die Adresse der nächsten Anweisung die mit dem in Schritt 908 erzeugten Index assoziierte vorhergesagte Zieladresse in der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 ist. Sobald die Zieladresse für die indirekte Verzweigungsanweisung vorhergesagt wurde, fährt das Verfahren 900 mit Schritt 918 fort.
  • In Schritt 916 bewirkt die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. die Entscheidungs-Logikeinheit 406), dass die Abrufstufe 302 anhält, bis die tatsächliche Zieladresse von den Pipelines 308 bestimmt ist.
  • In Schritt 918 stellt die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. die Entscheidungs-Logikeinheit 406) der Abrufstufe 302, die die nächste Anweisung aus der bereitgestellten Adresse abruft, die vorhergesagte Adresse der nächsten Anweisung bereit. Die Abrufstufe 302 kann außerdem die empfangene Adresse (in Assoziation mit der Adresse der indirekten Verzweigungsanweisung) in einer Anweisungstabelle 422, wie oben beschrieben, zur Verwendung bei der Bestimmung, ob eine falsche Vorhersage vorlag, speichern.
  • Die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. die Entscheidungs-Logikeinheit 406) kann außerdem der Aktualisierungs-Logikeinheit 408, die die empfangene Adresse zum Aktualisieren der laufenden Historie des indirekten Pfads 414 verwendet, wie oben beschrieben, die vorhergesagte Adresse der nächsten Anweisung bereitstellen.
  • Sobald die vorhergesagte Adresse der nächsten Anweisung der Abrufstufe 302 bereitgestellt wurde, endet das Verfahren 900.
  • Jetzt wird Bezug auf 10 genommen, die ein Verfahren 1000 zum Aktualisieren der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 darstellt, das von der Prädiktor-Logikeinheit für indirekte Verzweigungen 314 der 3 und 4 ausgeführt werden kann. In Schritt 1002 empfängt die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. die Aktualisierungs-Logikeinheit 408) Informationen aus den Pipelines 308 bezüglich einer indirekten Verzweigungsanweisung, die ausgeführt und festgelegt wurde. Die Informationen können die Adresse der indirekten Verzweigungsanweisung und die tatsächliche Zieladresse der indirekten Verzweigungsanweisung umfassen. Sobald die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 die Informationen bezüglich einer ausgeführten und festgelegten indirekten Verzweigungsanweisung empfängt, fährt das Verfahren 1000 mit Schritt 1004 fort.
  • In Schritt 1004 erlangt die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. die Aktualisierungs-Logikeinheit 408) die festgelegte Historie des indirekten Pfads 418. Wie oben beschrieben, ist die festgelegte Historie des indirekten Pfads 418 eine Auflistung der Zieladressen für die vorher ausgeführten indirekten Verzweigungsanweisungen. Sobald die festgelegte Historie des indirekten Pfads 418 erlangt wurde, fährt das Verfahren 1000 mit Schritt 1006 fort.
  • In Schritt 1006 erlangt die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. die Aktualisierungs-Logikeinheit 408) die festgelegte Genommen-/Nicht-genommen-Historie 420 aus der Prädiktor-Logikeinheit für bedingte Verzweigungen 316. Wie oben beschrieben, ist die festgelegte Genommen-/Nicht-genommen-Historie 420 eine Historie der Resultate (genommen/nicht genommen) der vorher ausgeführten bedingten Verzweigungsanweisungen. Sobald die festgelegte Genommen-/Nicht-genommen-Historie 420 erlangt wurde, fährt das Verfahren 1000 mit Schritt 1008 fort.
  • In Schritt 1008 kombiniert die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. die Aktualisierungs-Logikeinheit 408) die festgelegte Historie des indirekten Pfads 418 und die festgelegte Genommen-/Nicht-genommen-Historie 420, erlangt in den Schritten 1004 bzw. 1006, um einen Index für die in Schritt 1002 identifizierte indirekte Verzweigungsanweisung zu erzeugen. Wie oben beschrieben, können die festgelegte Historie des indirekten Pfads 418 und die festgelegte Genommen-/Nicht-genommen-Historie 420 in jeder geeigneten Weise kombiniert werden, um den Index zu erzeugen. In einigen Fällen wird eine Hashfunktion an einer Anzahl Bits der festgelegten Historie des indirekten Pfads 418 und einer Anzahl Bits der festgelegten Genommen-/Nicht-genommen-Historie 420 durchgeführt. Zum Beispiel kann eine bitweise Exklusive-Oder- bzw. XOR-Funktion an der festgelegten Historie des indirekten Pfads 418 und der festgelegten Genommen-/Nicht-genommen-Historie 420 durchgeführt werden, wobei jedes Bit der festgelegten Historie des indirekten Pfads 418 mit einem korrespondierenden Bit der festgelegten Genommen-/Nicht-genommen-Historie 420 durch eine XOR-Funktion verknüpft wird. Für Fachleute im Fachgebiet wird es offensichtlich sein, dass andere Kombinationen und/oder Hashfunktionen verwendet werden können.
  • In einigen Fällen kann die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. die Aktualisierungs-Logikeinheit 408) die in Schritt 1004 erlangte festgelegte Historie des indirekten Pfads 418 oder die in Schritt 1006 erlangte festgelegte Genommen-/Nicht-genommen-Historie 420 vor dem Kombinieren der Historien modifizieren, um die Adresse (oder einen Teil davon) der indirekten Verzweigungsanweisung aufzunehmen. Zum Beispiel kann die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 einen Teil der Adresse der indirekten Verzweigungsanweisung an die festgelegte Historie des indirekten Pfads 418 oder die festgelegte Genommen-/Nicht-genommen-Historie 420 anfügen; oder einen Teil der festgelegten Historie des indirekten Pfads 418 oder der festgelegten Genommen-/Nicht-genommen-Historie 420 durch einen Teil der Adresse der indirekten Verzweigungsanweisung ersetzen.
  • Sobald der Index erzeugt wurde, fährt das Verfahren 1000 mit Schritt 1010 fort.
  • In Schritt 1010 ersetzt die Prädiktor-Logikeinheit für indirekte Verzweigungen 314 (z. B. die Aktualisierungs-Logikeinheit 408) die mit dem in Schritt 1008 erzeugten Index assoziierte vorhergesagte Zieladresse durch die aus den Pipelines 308 empfangene Zieladresse. Sobald der Eintrag in der Tabelle vorhergesagter Ziele indirekter Verzweigungen 402 aktualisiert wurde, endet das Verfahren 1000.
  • Wie oben beschrieben, kann der Prädiktor für indirekte Verzweigungen 314 (z. B. die Aktualisierungs-Logikeinheit 408) in einigen Fällen auch die aus den Pipelines 308 empfangenen Informationen zum Aktualisieren/Korrigieren der laufenden Historie des indirekten Pfads 414 verwenden. Zum Beispiel kann der Prädiktor für indirekte Verzweigungen 314 (z. B. die Aktualisierungs-Logikeinheit 408) die empfangene Adresse der indirekten Verzweigung zum Vergleichen der tatsächlichen Adresse mit der vorhergesagten Zieladresse für die indirekte Verzweigungsanweisung verwenden. Falls sie übereinstimmen, war die Vorhersage richtig und ist keine Aktualisierung der laufenden Historie des indirekten Pfads 414 erforderlich. Falls sie jedoch nicht übereinstimmen, lag eine falsche Vorhersage vor und wird die laufende Historie des indirekten Pfads 414 durch die festgelegte Historie des indirekten Pfads 418 ersetzt.
  • Gleichermaßen kann der Prädiktor für bedingte Verzweigungen 316 Informationen aus den Pipelines 308 empfangen, die die Adresse einer ausgeführten und festgelegten bedingten Verzweigungsanweisung angeben und angeben, ob die Verzweigung genommen oder nicht genommen wurde (das Resultat). Der Prädiktor für bedingte Verzweigungen 316 kann diese Informationen zum Aktualisieren/Korrigieren der laufenden Genommen-/Nicht-genommen-Historie 416 verwenden. Zum Beispiel kann der Prädiktor für bedingte Verzweigungen 316 die empfangene Adresse der bedingten Verzweigung zum Vergleichen des tatsächlichen Resultats mit dem vorhergesagten Resultat für die bedingte Verzweigungsanweisung verwenden. Falls sie übereinstimmen, war die Vorhersage richtig und ist keine Aktualisierung der laufenden Genommen-/Nicht-genommen-Historie erforderlich. Falls sie jedoch nicht übereinstimmen, lag eine falsche Vorhersage vor und wird die laufende Genommen-/Nicht-genommen-Historie 416 durch die festgelegte Genommen-/Nicht-genommen-Historie 420 ersetzt.
  • Obwohl die hier beschriebenen Beispiele sich auf Single-Thread-Prozessoren beziehen, können die hier beschriebenen Prinzipien und Techniken gleichermaßen auf Multi-Thread-Prozessoren angewandt werden.
  • Jetzt wird Bezug auf 11 genommen, die eine schematische Darstellung eines Multi-Thread-Außerreihenfolgen-Prozessors 1100 zeigt. Der Prozessor 1100 umfasst zwei Threads 1102 und 1104, auf die hier als Thread 0 bzw. Thread 1 Bezug genommen wird. Jeder Thread 1102 und 1104 umfasst eine Abrufstufe 1106 oder 1108, eine Decodierungs- und Umbenennungsstufe 1110 oder 1112, einen Umordnungspuffer 1114 oder 1116, eine Festlegungsstufe 1118 oder 1120 und einen Verzweigungsprädiktor 1122 oder 1124, wie oben unter Bezug auf 3 beschrieben. Die Threads 1102 und 1104 nutzen die Pipelines 1126 gemeinsam, wie oben unter Bezug auf 3 beschrieben. Jeder Verzweigungsprädiktor 1122 oder 1124 umfasst eine Prädiktor-Logikeinheit für bedingte Verzweigungen 1128 oder 1130, die laufende und festgelegte Genommen-/Nicht-genommen-Historien für den bestimmten Thread 1102 oder 1102 erzeugt und speichert; und eine Prädiktor-Logikeinheit für indirekte Verzweigungen 1132 oder 1134, die laufende und festgelegte Historien des indirekten Pfads für den bestimmten Thread erzeugt und speichert. Jede Prädiktor-Logikeinheit für indirekte Verzweigungen 1132 und 1134 verwendet dann eine Kombination der Historie des indirekten Pfads und der Genommen-/Nicht-genommen-Historie zum Vorhersagen der Zieladresse der Verzweigung, wie oben unter Bezug auf die 4 bis 10 beschrieben. In einigen Fällen können die Verzweigungsprädiktoren 1122 oder 1124 dieselbe Tabelle vorhergesagter Ziele indirekter Verzweigungen führen und darauf zugreifen. In anderen Fällen kann jeder Verzweigungsprädiktor 1122 oder 1124 eine separate Tabelle vorhergesagter Ziele indirekter Verzweigungen führen und darauf zugreifen.
  • Jeder hier gegebene Bereich oder Vorrichtungswert kann erweitert oder geändert werden, ohne die angestrebte Wirkung zu verlieren, wie es für den Fachmann offensichtlich sein wird.
  • Es versteht sich, dass die oben beschriebenen Vorteile und Nutzen sich auf eine Ausführungsform beziehen können oder sich auf mehrere Ausführungsformen beziehen können. Die Ausführungsformen sind nicht auf diejenigen beschränkt, die irgendwelche oder sämtliche der angeführten Probleme lösen, oder diejenigen, die irgendwelche oder sämtliche der angeführten Vorteile und Nutzen aufweisen.
  • Jede Bezugnahme auf ”einen” Gegenstand bezieht sich auf einen oder mehrere dieser Gegenstände. Der Begriff ”umfassend” wird hier verwendet, um zu bedeuten, dass die identifizierten Verfahrensblöcke oder -elemente enthalten sind, dass aber derartige Blöcke oder Elemente keine ausschließliche Liste bilden und eine Vorrichtung zusätzliche Blöcke oder Elemente enthalten kann und ein Verfahren zusätzliche Blöcke oder Operationen enthalten kann.
  • Eine besondere Bezugnahme auf ”Logik” bezieht sich auf eine Struktur, die eine Funktion oder Funktionen durchführt. Ein Beispiel für Logik enthält Schaltungen, die ausgelegt sind, diese Funktion(en) durchzuführen. Zum Beispiel können derartige Schaltungen Transistoren und/oder andere Hardware-Elemente enthalten, die in einem Herstellungsprozess verfügbar sind. Derartige Transistoren und/oder andere Elemente können beispielhaft verwendet werden, um Schaltungen oder Strukturen, die Speicher wie Register, Flipflops oder Signalspeicher, logische Operatoren wie Boolesche Operationen, mathematische Operatoren wie Addierer, Multiplizierer oder Verschieber implementieren und/oder enthalten, zu bilden und zu verschalten. Derartige Elemente können als kundenspezifische Schaltungen oder standardmäßige Zellenbibliotheken, Makros oder auf anderen Abstraktionsstufen bereitgestellt werden. Derartige Elemente können in einer speziellen Anordnung verschaltet sein. Logik kann Schaltungen enthalten, die eine feste Funktion sind, und Schaltungen können programmiert werden, um eine Funktion oder Funktionen durchzuführen; derartige Programmierung kann aus einer Firmware- oder Software-Aktualisierung oder einem Steuermechanismus bereitgestellt werden. Logik, die zum Durchführen einer Funktion identifiziert wird, kann auch Logik enthalten, die eine Teilfunktion oder einen Unterprozess implementiert. In einem Beispiel weist Hardware-Logik Schaltungen auf, die eine Operation oder Operationen, eine Zustandsmaschine oder einen Prozess einer festen Funktion implementieren.
  • Die Schritte der hier beschriebenen Verfahren können in einer beliebigen geeigneten Reihenfolge oder gleichzeitig, wenn zweckdienlich, ausgeführt werden. Zudem können einzelne Blöcke aus irgendwelchen der Verfahren gelöscht werden, ohne das Wesen und den Schutzbereich des hier beschriebenen Gegenstands zu verlassen. Aspekte der oben beschriebenen Beispiele können mit Aspekten von beliebigen der beschriebenen anderen Beispiele kombiniert werden, um weitere Beispiele zu bilden, ohne die angestrebte Wirkung zu verlieren. Wenn Elemente der Figuren durch Pfeile verbunden gezeigt werden, wird anerkannt werden, dass diese Pfeil nur einen beispielhaften Kommunikationsfluss (einschließlich von Daten- und Steuermeldungen) zwischen Elementen zeigen. Der Fluss zwischen Elementen kann in einer der Richtungen oder in beiden Richtungen erfolgen.
  • Es versteht sich, dass die obige Beschreibung einer bevorzugten Ausführungsform nur beispielhaft gegeben ist und dass verschiedene Abwandlungen von Fachleuten im Fachgebiet vorgenommen werden können. Obwohl oben verschiedene Ausführungsformen mit einem bestimmten Grad der Ausführlichkeit oder unter Bezugnahme auf eine oder mehrere einzelne Ausführungsformen beschrieben wurden, könnten Fachleute im Fachgebiet zahlreiche Abänderungen an den offenbarten Ausführungsformen vornehmen, ohne das Wesen oder den Schutzbereich dieser Erfindung zu verlassen.

Claims (11)

  1. Verfahren (900) zur Vorhersage einer Zieladresse einer indirekten Verzweigungsanweisung in einem von einem Prozessor ausgeführten Programm, wobei das Verfahren umfasst: Speichern, in einer Tabelle vorhergesagter Ziele indirekter Verzweigungen, einer Mehrzahl vorhergesagter Zieladressen für indirekte Verzweigungsanweisungen, wobei jede vorhergesagte Zieladresse durch eine Kombination einer Historie des indirekten Pfads und einer Genommen- und Nicht-genommen-Historie indexiert wird, wobei die Historie des indirekten Pfads wenigstens einen Teil von Zieladressen für eine Mehrzahl vorheriger indirekter Verzweigungsanweisungen umfasst, wobei die Genommen- und Nicht-genommen-Historie Resultate für eine Mehrzahl vorheriger bedingter Verzweigungsanweisungen umfasst; Empfangen, an einem Indexgenerator, von Informationen, die eine indirekte Verzweigungsanweisung identifizieren, wobei die Informationen, die die indirekte Verzweigungsanweisung identifizieren, eine Adresse der indirekten Verzweigungsanweisung umfassen (902); Erlangen, am Indexgenerator, einer laufenden Historie des indirekten Pfads und einer laufenden Genommen- und Nicht-genommen-Historie, wobei die laufende Historie des indirekten Pfads wenigstens einen Teil vorhergesagter Zieladressen für eine Mehrzahl vorher vorhergesagter indirekter Verzweigungsanweisungen umfasst, wobei die laufende Genommen- und Nicht-genommen-Historie Resultate für eine Mehrzahl vorher vorhergesagter bedingter Verzweigungsanweisungen umfasst (904, 906); Kombinieren, am Indexgenerator, der laufenden Historie des indirekten Pfads und der laufenden Genommen- und Nicht-genommen-Historie zum Erzeugen eines Indexes für die identifizierte indirekte Verzweigungsanweisung, wobei das Kombinieren der laufenden Genommen- und Nicht-genommen-Historie und der laufenden Historie des indirekten Pfads umfasst, eine der laufenden Historie des indirekten Pfads und der laufenden Genommen- und Nicht-genommen-Historie abzuändern, um wenigstens einen Teil der Adresse der indirekten Verzweigungsanweisung zu umfassen (908); Kennzeichnen einer vorhergesagten Zieladresse in der Tabelle vorhergesagter Ziele indirekter Verzweigungen unter Verwendung des Indexes für die identifizierte indirekte Verzweigungsanweisung (910); falls die identifizierte vorhergesagte Zieladresse gültig ist, Vorhersagen, dass die Zieladresse der identifizierten indirekten Verzweigungsanweisung die identifizierte vorhergesagte Zieladresse ist (912, 914).
  2. Verfahren (900) nach Anspruch 1, wobei das Kombinieren der laufenden Historie des indirekten Pfads und der laufenden Genommen- und Nicht-genommen-Historie umfasst, eine Hashfunktion an wenigstens einem Teil der laufenden Historie des indirekten Pfads und wenigstens einem Teil der laufenden Genommen- und Nicht-genommen-Historie durchzuführen.
  3. Verfahren (900) nach Anspruch 2, wobei die Hashfunktion eine Exklusive-ODER-Funktion ist.
  4. Verfahren (900) nach Anspruch 1, ferner umfassend: Empfangen, an einer Aktualisierungs-Logikeinheit, von Informationen, die mit einer ausgeführten indirekten Verzweigungsanweisung in Beziehung stehen (1002), wobei die mit der ausgeführten indirekten Verzweigungsanweisung in Beziehung stehenden Informationen eine tatsächliche Zieladresse für die ausgeführte indirekte Verzweigungsanweisung, umfassen; und an der Aktualisierungs-Logikeinheit Aktualisieren der Tabelle vorhergesagter Ziele indirekter Verzweigungen basierend auf der tatsächlichen Zieladresse (1010).
  5. Verfahren (900) nach Anspruch 4, wobei das Aktualisieren der Tabelle vorhergesagter Ziele indirekter Verzweigungen umfasst: Erlangen, an der Aktualisierungs-Logikeinheit, einer festgelegten Historie des indirekten Pfads und einer festgelegten Genommen- und Nicht-genommen-Historie (1004, 1006); Kombinieren, an der Aktualisierungs-Logikeinheit, der festgelegten Historie des indirekten Pfads und der festgelegten Genommen- und Nicht-genommen-Historie (1008) zum Erzeugen eines Indexes für die ausgeführte indirekte Verzweigungsanweisung; Identifizieren einer vorhergesagten Zieladresse der Tabelle vorhergesagter Ziele indirekter Verzweigungen unter Verwendung des Indexes für die ausgeführte indirekte Verzweigungsanweisung; und Ersetzen der durch den Index für die ausgeführte indirekte Verzweigungsanweisung identifizierten vorhergesagten Zieladresse durch die tatsächliche Zieladresse für die ausgeführte indirekte Verzweigungsanweisung (1010).
  6. Verfahren (900) nach Anspruch 5, wobei die festgelegte Historie des indirekten Pfads wenigstens einen Teil tatsächlicher Zieladressen für eine Mehrzahl vorher ausgeführter indirekter Verzweigungsanweisungen umfasst.
  7. Verfahren (900) nach Anspruch 5 oder Anspruch 6, wobei die festgelegte Genommen- und Nicht-genommen-Historie Resultate für eine Mehrzahl vorher ausgeführter bedingter Verzweigungsanweisungen umfasst.
  8. Verfahren (900) nach einem der vorstehenden Ansprüche, ferner umfassend, falls die identifizierte vorhergesagte Zieladresse nicht gültig ist, Anhalten einer Abrufstufe des Prozessors.
  9. Verfahren (900) nach einem der vorstehenden Ansprüche, wobei Erzeugen des Indexes für die identifizierte indirekte Verzweigungsanweisung umfasst, nur die laufende Historie des indirekten Pfads und die laufende Genommen- und Nicht-genommen-Historie zu kombinieren.
  10. Prädiktor-Logikeinheit für indirekte Verzweigungen (314) zum Vorhersagen einer Zieladresse einer indirekten Verzweigungsanweisung in einem von einem Prozessor (300) ausgeführten Programm, wobei die Prädiktor-Logikeinheit für indirekte Verzweigungen (314) umfasst: eine Tabelle vorhergesagter Ziele indirekter Verzweigungen (402), ausgelegt zum Speichern einer Mehrzahl vorhergesagter Zieladressen (410) für indirekte Verzweigungsanweisungen, wobei jede vorhergesagte Zieladresse durch eine Kombination einer Historie des indirekten Pfads und einer Genommen- und Nicht-genommen-Historie indexiert wird, wobei die Historie des indirekten Pfads wenigstens einen Teil von Zieladressen für eine Mehrzahl vorheriger indirekter Verzweigungsanweisungen umfasst, wobei die Genommen- und Nicht-genommen-Historie Resultate für eine Mehrzahl vorheriger bedingter Verzweigungsanweisungen umfasst; einen Indexgenerator (404) in Kommunikation mit der Tabelle vorhergesagter Ziele indirekter Verzweigungen (402), wobei der Indexgenerator (404) ausgelegt ist zum: Empfangen von Informationen, die eine indirekte Verzweigungsanweisung identifizieren, wobei die Informationen, die die indirekte Verzweigungsanweisung identifizieren, eine Adresse der indirekten Verzweigungsanweisung umfassen; Erlangen einer laufenden Historie des indirekten Pfads (414) und einer laufenden Genommen- und Nicht-genommen-Historie (416), wobei die laufende Historie des indirekten Pfads (414) wenigstens einen Teil vorhergesagter Zieladressen (502, 504, 506) für eine Mehrzahl vorher vorhergesagter indirekter Verzweigungsanweisungen umfasst, wobei die laufende Genommen- und Nicht-genommen-Historie (416) Resultate (602, 604) für eine Mehrzahl vorher vorhergesagter bedingter Verzweigungsanweisungen umfasst; Kombinieren der laufenden Historie des indirekten Pfads (414) und der laufenden Genommen- und Nicht-genommen-Historie (416) zum Erzeugen eines Indexes (702, 804) für die identifizierte indirekte Verzweigungsanweisung, wobei das Kombinieren der laufenden Genommen- und Nicht-genommen-Historie und der laufenden Historie des indirekten Pfads umfasst, eine der laufenden Historie des indirekten Pfads und der laufenden Genommen- und Nicht-genommen-Historie abzuändern, um wenigstens einen Teil der Adresse der indirekten Verzweigungsanweisung zu umfassen; und eine Entscheidungs-Logikeinheit (406) in Kommunikation mit der Tabelle vorhergesagter Ziele indirekter Verzweigungen (402), wobei die Entscheidungs-Logikeinheit (406) ausgelegt ist zum: Identifizieren einer vorhergesagten Zieladresse der Tabelle vorhergesagter Ziele indirekter Verzweigungen (402) unter Verwendung des Indexes (702, 802) für die identifizierte indirekte Verzweigung; falls die identifizierte vorhergesagte Zieladresse gültig ist, Vorhersagen, dass die Zieladresse der identifizierten indirekten Verzweigungsanweisung die identifizierte vorhergesagte Zieladresse ist.
  11. Prozessor (300), umfassend die Prädiktor-Logikeinheit für indirekte Verzweigungen (314) von Anspruch 10.
DE102014003434.8A 2013-03-13 2014-03-11 Vorhersage indirekter Verzweigungen Active DE102014003434B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1304504.2A GB2506462B (en) 2013-03-13 2013-03-13 Indirect branch prediction
GB1304504.2 2013-03-13

Publications (2)

Publication Number Publication Date
DE102014003434A1 true DE102014003434A1 (de) 2014-09-18
DE102014003434B4 DE102014003434B4 (de) 2024-07-04

Family

ID=48189829

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102014003434.8A Active DE102014003434B4 (de) 2013-03-13 2014-03-11 Vorhersage indirekter Verzweigungen

Country Status (4)

Country Link
US (2) US9792123B2 (de)
CN (2) CN107102845B (de)
DE (1) DE102014003434B4 (de)
GB (2) GB2506462B (de)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10795683B2 (en) * 2014-06-11 2020-10-06 International Business Machines Corporation Predicting indirect branches using problem branch filtering and pattern cache
US20170083333A1 (en) * 2015-09-21 2017-03-23 Qualcomm Incorporated Branch target instruction cache (btic) to store a conditional branch instruction
US10664280B2 (en) 2015-11-09 2020-05-26 MIPS Tech, LLC Fetch ahead branch target buffer
US9507598B1 (en) * 2015-12-15 2016-11-29 International Business Machines Corporation Auxiliary branch prediction with usefulness tracking
US11709679B2 (en) 2016-03-31 2023-07-25 Qualcomm Incorporated Providing load address predictions using address prediction tables based on load path history in processor-based systems
US10353710B2 (en) 2016-04-28 2019-07-16 International Business Machines Corporation Techniques for predicting a target address of an indirect branch instruction
US20170371669A1 (en) * 2016-06-24 2017-12-28 Qualcomm Incorporated Branch target predictor
US10896130B2 (en) * 2016-10-19 2021-01-19 International Business Machines Corporation Response times in asynchronous I/O-based software using thread pairing and co-execution
CN106843812A (zh) * 2016-12-23 2017-06-13 北京北大众志微***科技有限责任公司 一种实现间接转移关联软件预测的方法及装置
US10713048B2 (en) 2017-01-19 2020-07-14 International Business Machines Corporation Conditional branch to an indirectly specified location
US10261797B2 (en) 2017-04-27 2019-04-16 International Business Machines Corporation Indirect target tagged geometric branch prediction using a set of target address pattern data
CN109308191B (zh) * 2017-07-28 2021-09-14 华为技术有限公司 分支预测方法及装置
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US11150908B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US10908911B2 (en) * 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US11150904B2 (en) * 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US10437592B2 (en) * 2017-08-24 2019-10-08 Qualcomm Incorporated Reduced logic level operation folding of context history in a history register in a prediction system for a processor-based system
US20190065199A1 (en) 2017-08-31 2019-02-28 MIPS Tech, LLC Saving and restoring non-contiguous blocks of preserved registers
US10628167B2 (en) * 2018-02-21 2020-04-21 International Business Machines Corporation Runtime detection of code modification
US10732979B2 (en) 2018-06-18 2020-08-04 Advanced Micro Devices, Inc. Selectively performing ahead branch prediction based on types of branch instructions
US10936318B2 (en) 2018-11-14 2021-03-02 International Business Machines Corporation Tagged indirect branch predictor (TIP)
US10846097B2 (en) * 2018-12-20 2020-11-24 Samsung Electronics Co., Ltd. Mispredict recovery apparatus and method for branch and fetch pipelines
US11080062B2 (en) 2019-01-12 2021-08-03 MIPS Tech, LLC Address manipulation using indices and tags
CN111221575A (zh) * 2019-12-30 2020-06-02 核芯互联科技(青岛)有限公司 一种乱序高性能处理器的寄存器重命名方法及***
US11294684B2 (en) * 2020-01-31 2022-04-05 Apple Inc. Indirect branch predictor for dynamic indirect branches
US11379240B2 (en) 2020-01-31 2022-07-05 Apple Inc. Indirect branch predictor based on register operands

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4477872A (en) * 1982-01-15 1984-10-16 International Business Machines Corporation Decode history table for conditional branch instructions
US7165169B2 (en) 2001-05-04 2007-01-16 Ip-First, Llc Speculative branch target address cache with selective override by secondary predictor based on branch instruction type
US7725695B2 (en) * 2005-05-31 2010-05-25 Arm Limited Branch prediction apparatus for repurposing a branch to instruction set as a non-predicted branch
US7797521B2 (en) * 2007-04-12 2010-09-14 International Business Machines Corporation Method, system, and computer program product for path-correlated indirect address predictions
US20100161950A1 (en) 2008-12-24 2010-06-24 Sun Microsystems, Inc. Semi-absolute branch instructions for efficient computers
US8555040B2 (en) * 2010-05-24 2013-10-08 Apple Inc. Indirect branch target predictor that prevents speculation if mispredict is expected
US20110320787A1 (en) 2010-06-28 2011-12-29 Qualcomm Incorporated Indirect Branch Hint
CN102156636B (zh) 2011-04-28 2013-05-01 北京北大众志微***科技有限责任公司 一种实现值关联间接跳转预测的装置

Also Published As

Publication number Publication date
GB2511949B (en) 2015-10-14
GB2506462A (en) 2014-04-02
US9792123B2 (en) 2017-10-17
GB201304504D0 (en) 2013-04-24
CN104049938A (zh) 2014-09-17
US10261798B2 (en) 2019-04-16
US20180004529A1 (en) 2018-01-04
CN107102845B (zh) 2021-08-10
CN107102845A (zh) 2017-08-29
GB2511949A (en) 2014-09-17
GB2506462B (en) 2014-08-13
CN104049938B (zh) 2017-05-03
US20140281441A1 (en) 2014-09-18
DE102014003434B4 (de) 2024-07-04
GB201407780D0 (en) 2014-06-18

Similar Documents

Publication Publication Date Title
DE102014003434A1 (de) Vorhersage indirekter Verzweigungen
DE102015111363A1 (de) Vorhersage bedingter verzweigungen unter verwendung einer langen vorgeschichte
DE102014011332B4 (de) Priorisieren von anweisungen basierend auf typ
DE69129569T2 (de) Maschine mit sehr langem Befehlswort für leistungsfähige Durchführung von Programmen mit bedingten Verzweigungen
DE69904083T2 (de) Anordnung und verfahren zum etikettieren und ungültig-erklären von spekulativ ausgeführten befehlen
DE3650232T2 (de) Rechnersteuerung mit Verzweigung in einem einzigen Zyklus.
DE69132675T2 (de) Parallelfliessband-Befehlsverarbeitungssystem für sehr lange Befehlswörter
DE69133302T2 (de) Registerabbildung in einem einzigen Taktzyklus
DE69805275T2 (de) Verfahren und Anordnung zur Reduzierung von Störungen in einer Verzweigungsgeschichtstabelle eines Mikroprozessors
DE69420540T2 (de) Verfahren und Vorrichtung zum Implementieren eines vierstufigen Verzweigungsauflosungssystem in einem Rechnerprozessor
DE69031991T2 (de) Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen
DE4447238B4 (de) Schaltungsanordnung und Verfahren zum Gewinnen von Informationen zur Verzweigungsvorhersage
DE102015101414A1 (de) Verbesserter Rücksprungstapelpuffer
DE68928727T2 (de) Cachespeicheranlage zum Versorgen eines Festworts eines Befehlscodes mit variabler Länge und Befehlsabrufanlage
DE102014000382A1 (de) Vorhersage indirekter Abzweigungen
DE102015100705A1 (de) Vorhersage von werten stapelgespeicherter variablen
DE3851746T2 (de) Sprungvorhersage.
DE102012224363B4 (de) Informationsverarbeitungssystem mit Hardware- und Softwarevorablesezugriff
DE102015111333A1 (de) Betreiben eines 32-bit betriebssystems auf einer 64-bit maschine
DE102004013676A1 (de) Schleifenbetrieb mit null Overhead in einem Mikroprozessor mit Anweisungspuffer
DE68925397T2 (de) Pipelineprozessor
DE19855806A1 (de) Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen
DE4335475A1 (de) Datenverarbeitungseinrichtung mit Cache-Speicher
DE102014002012A1 (de) Spekulative Ladeausgabe
DE112004002365T5 (de) Übergang vom Befehls-Cache-Speicher zum Ablaufverfolgungs-Cache-Speicher basierend auf Markengrenzen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R081 Change of applicant/patentee

Owner name: MIPS TECH, LLC (N.D.GES.D.STAATES DELAWARE), S, US

Free format text: FORMER OWNER: IMAGINATION TECHNOLOGIES LIMITED, KINGS LANGLEY, HERTFORDSHIRE, GB

R082 Change of representative

Representative=s name: CMS CAMERON MCKENNA NABARRO OLSWANG LLP, GB

Representative=s name: OLSWANG GERMANY LLP, DE

R082 Change of representative

Representative=s name: CMS CAMERON MCKENNA NABARRO OLSWANG LLP, GB

Representative=s name: GLOBAL IP EUROPE PATENTANWALTSKANZLEI, DE

R082 Change of representative

Representative=s name: GLOBAL IP EUROPE PATENTANWALTSKANZLEI, DE

R018 Grant decision by examination section/examining division
R130 Divisional application to

Ref document number: 102014020161

Country of ref document: DE