DE69725278T2 - Programmierbares system und verfahren zum vorhersagen von verzweigungen für computersysteme - Google Patents

Programmierbares system und verfahren zum vorhersagen von verzweigungen für computersysteme Download PDF

Info

Publication number
DE69725278T2
DE69725278T2 DE69725278T DE69725278T DE69725278T2 DE 69725278 T2 DE69725278 T2 DE 69725278T2 DE 69725278 T DE69725278 T DE 69725278T DE 69725278 T DE69725278 T DE 69725278T DE 69725278 T2 DE69725278 T2 DE 69725278T2
Authority
DE
Germany
Prior art keywords
prediction
branch
program code
memory
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69725278T
Other languages
English (en)
Other versions
DE69725278D1 (de
Inventor
Jackie A Freeman
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.)
F Poszat HU LLC
Original Assignee
Individual
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 Individual filed Critical Individual
Publication of DE69725278D1 publication Critical patent/DE69725278D1/de
Application granted granted Critical
Publication of DE69725278T2 publication Critical patent/DE69725278T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

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

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)
  • Hardware Redundancy (AREA)
  • Debugging And Monitoring (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Description

  • Hintergrund der Erfindung
  • Diese Erfindung bezieht sich im Allgemeinen auf Computer-Systeme und insbesondere auf ein programmierbares Verzweigungsvorhersagesystem und auf ein Verzweigungsvorhersageverfahren für Computer-Systeme.
  • In Hochleistungsprozessoren ist es üblich, einen Befehl in mehrere Schritte zu zerlegen, wie z. B. einen Holschritt, einen Decodierungsschritt und einen Ausführungsschritt, und jeden Schritt durch eine andere Befehlsverarbeitungs-Untereinheit auszuführen. Diese Befehlsverarbeitungseinheiten können asynchron arbeiten, wobei sie nicht den gleichen Befehl verarbeiten müssen. Falls jede Befehlsverarbeitungseinheit normalerweise nicht den gleichen Befehl verarbeitet, vergrößert dies die Geschwindigkeit des Prozessors. Folglich ist es eine häufige Praxis, aufeinander folgende Befehle um einen Taktzyklus zu überlappen, sodass, wenn eine Holeinheit die Verarbeitung eines zweiten Befehls beginnt, eine Decodierungseinheit den ersten Befehl verarbeiten kann. Im nächsten Taktzyklus kann die Holeinheit einen dritten Befehl verarbeiten, während die Decodierungseinheit den zweiten Befehl verarbeitet, wobei die Ausführungseinheit den ersten Befehl verarbeiten kann. In einem normalen System arbeitet jede Befehlsverarbeitungseinheit synchron, sodass jeder Befehl für die Ausführung drei Taktzyklen erfordert. Folglich sind zwölf Taktzyklen erforderlich, um in einem nicht überlappenden System vier Befehle auszuführen. Mit der Befehlsüberlappung können im Gegensatz diese vier Befehle in nur sechs Taktzyklen ausgeführt werden. Diese Überlappung vergrößert die Verarbeitungsgeschwindigkeit des Prozessors signifikant. Ähnlich können die Befehle, die ausgeführt werden, in einer derartigen Weise überlappt werden, sodass der Decodierungsschritt für zwei oder mehr Befehle gleichzeitig ausgeführt werden kann. In diesem überlappenden System können mehrere Befehle gleichzeitig ausgeführt werden.
  • Diese Befehlsüberlappung kann jedoch nicht verfügbar oder ineffizient sein, hauptsächlich infolge des häufigen Auftretens verschiedener Typen von Verzweigungsbefehlen in den meisten Programmen. Ein Verzweigungsbefehl kann jeden Nutzen der Befehlsüberlappung vollständig beseitigen, insbesondere wenn die Verzweigung auftritt und ein neuer Code in die Pipeline geladen und dann ausgeführt werden muss.
  • Die Verzweigungsbefehle besitzen das signifikante Merkmal, dass sie den Wirkungsgrad der Befehlsüberlappung verringern oder beseitigen können. Die Verzweigung kann genommen oder nicht genommen werden, wobei dies eine zeitliche Unbestimmtheit einführt, was den nächsten Befehl anbelangt, wobei sie jede Befehlsüberlappung verhindert, weil der nächste Befehl nicht bekannt ist.
  • Die durch die Verzweigungsbefehle erzeugten Probleme für Befehlspipelines können verringert werden, indem ein Verzweigungsbefehls-Vorhersagesystem geschaffen wird, das vor der tatsächlichen Ausführung der Verzweigung vorhersagt, ob die Verzweigung genommen wird oder nicht, und die nächsten Befehle, Adressen oder eine andere Referenz auf das Ziel der Verzweigung, die ausgeführt werden, falls die Verzweigung genommen wird, und die nächsten Befehle oder die nächste Referenz auf das Ziel der Verzweigung, wie z. B. die Adresse, die ausgeführt werden, falls die Verzweigung nicht genommen wird, vorhersagt. Eine erfolgreiche Verzweigungsvorhersage erlaubt dem Prozessor, ohne die Verzögerung in der Verarbeitungszeit zu arbeiten, die durch eine Verzweigung verursacht wird. Es kann jedoch eine große Zeitstrafe geben, falls die Vorhersage falsch ist; wobei die Strafe für die falsche Vorhersage größer als die Verzögerung sein kann, die auf die Unbestimmtheit der Verzweigung zurückzuführen ist. Deshalb ist eine hohe Vorhersagegenauigkeit in einem Verzweigungsbefehls-Vorhersagesystem erwünscht.
  • Die meisten herkömmlichen Verzweigungsbefehls-Vorhersagesysteme sind automatische Verzweigungsbefehls-Vorhersageeinrichtungen, die das Ergebnis der Verzweigung vorhersagen, indem sie entweder auf die vorhergesagte Befehlssequenz, auf das letzte Verzweigungsbefehlsverhalten oder auf das Speichern der Programmoperanden oder -befehle reagieren.
  • Herkömmliche automatische Verzweigungsbefehls-Vorhersagesysteme können mit einer herkömmlichen Speicherhierarchie integriert sein oder sie können separat von der Speicherhierarchie aufrechterhalten werden. Ein herkömmliches System integriert z. B. ein automatisches Verzweigungsbefehls-Vorhersagesystem in einen Befehls-Cache. Diese Integration erlaubt dem System, sowohl als ein Befehls-Cache als auch als eine Verzweigungsvorhersageeinrichtung zu dienen, was vorteilhaft ist, weil beide Systeme auf die gleichen Befehle wirken müssen, wobei sie den Speicher oder die anderen Betriebsmittel gemeinsam verwenden können. Andere herkömmliche Systeme verbesserten das grundlegende Integra tionskonzept, indem sie Systeme besitzen, die automatisch das ausgeführte Programm in Spuren neu organisieren, die die Befehle von nicht sequentiellen Adressbereichen enthalten, und diese Spuren zusammen mit den Vorhersage- und Wiederherstellungsinformationen im Cache speichern.
  • Um Vorhersagen des Verzweigungsverhaltens mit höherer Genauigkeit zu erhalten, die sein können, ob eine Verzweigung genommen wird (das vorhergesagte Ergebnis) und/oder die Adresse oder die Referenz auf das Ziel der Verzweigung, zu der die Verzweigung nach einer erfolgreichen Vorhersage des Ergebnisses (des vorhergesagten Resultats) geht, gibt es eine Anzahl von herkömmlichen Verzweigungsvorhersagesystemen, die versuchen, das Ergebnis und das Resultat einer Verzweigung genau vorherzusagen. Diese herkömmlichen Systeme besitzen sich verändernde Grade der Genauigkeit, wie im Folgenden beschrieben ist. Einige sagen 60% der Verzweigungsergebnisse und -resultate genau vorher, während die genausten System eine Genauigkeit von 90% besitzen können. Diese herkömmlichen Verzweigungsvorhersagesysteme können in mehrere verschiedene Kategorien gruppiert werden, die statische Verzweigungsvorhersageeinrichtungen, dynamische Verzweigungsvorhersageeinrichtungen, implizit programmierbare Verzweigungsvorhersageeinrichtungen und explizit programmierbare Verzweigungsvorhersageeinrichtungen enthalten. Jede dieser Kategorien besitzt verschiedene Vorteile und Nachteile und verschiedene Vorhersagegenauigkeiten.
  • In einem statischen Verzweigungsbefehls-Vorhersagesystem werden die Verzweigungen auf der Grundlage statischer sich nicht ändernder Informationen vorhergesagt. Ein herkömmliches statisches automatisches Verzweigungsbefehls-Vorhersagesystem identifiziert z. B. die Verzweigungen in einer vorhergesagten Befehlssequenz und sagt dann immer vorher, dass jede Verzweigung genommen wird. Dieses Verzweigungsvorhersagesystem besitzt eine Genauigkeit von etwa 60% (d. h., es schätzt etwa 60% der Zeit richtig). Ein genaueres statisches Verzweigungsvorhersagesystem sagt vorher, dass eine Verzweigung genommen wird, falls die Zieladresse der Verzweigung eine numerisch niedrigere Speicherstelle als der Verzweigungsbefehl selbst ist. Ein weiteres herkömmliches statisches Verzweigungsvorhersagesystem verwendet die Vorhersageinformationen, die im Verzweigungsbefehl selbst codiert sind, zu dem Zeitpunkt, zu dem der Verzweigungsbefehl kompiliert wird. Alle diese Systeme sagen vorher, dass sich eine gegebene Verzweigung entsprechend den statischen Vorhersageinformatio nen verhalten wird. Wenn jedoch sich das Verzweigungsverhalten zu irgendeinem Zeitpunkt ändert, nachdem die statischen Verzweigungsvorhersageinformationen erzeugt worden sind, dann kann das statische Verzweigungsvorhersagesystem das Verzweigungsverhalten falsch vorhersagen. Wenn z. B. das Verhalten eines Verzweigungsbefehls von einer anderen Variable abhängig ist, die zum Zeitpunkt der Kompilierung unbestimmt ist, dann kann sich das Verhalten der Verzweigung ändern, nachdem die statischen Vorhersageinformationen erzeugt worden sind. Die Vorhersageentscheidung für jede gegebene Verzweigung ist fest, deshalb ist die Genauigkeit dieser statischen Verzweigungsvorhersagesysteme eingeschränkt. Um die Genauigkeit zu vergrößern, können dynamische Verzweigungsvorhersagesysteme verwendet werden.
  • In einem dynamischen Verzweigungsvorhersagesystem wird das Ergebnis einer Verzweigung auf der Grundlage von dynamischen Informationen, wie z. B. dem früheren Verzweigungsverhalten, vorhergesagt, die sich während der Ausführung des Programms ändern können oder modifiziert werden können. Ein herkömmliches dynamisches Verzweigungsvorhersagesystem verwendet z. B. einen Sättigungszähler, der vor den Entscheidungen über eine genommene/nicht genommene Verzweigung aktualisiert wird, um vorherzusagen, dass eine Verzweigung genommen wird, falls frühere Entscheidungen über die Verzweigungen anzeigen, dass die Verzweigung vor kurzem häufiger genommen als nicht genommen worden ist. Ansonsten sagt das dynamische System vorher, dass die Verzweigung nicht genommen wird. Nachdem die Verzweigung ausgeführt worden ist, können die Verzweigungsvorhersageinformationen aktualisiert werden.
  • Es ist eine Vielzahl dynamischer Verzweigungsvorhersagesysteme vorgeschlagen worden, die das frühere Verzweigungsbefehlsverhalten verwenden, um das künftige Verhalten des Verzweigungsbefehls vorherzusagen. Diese dynamischen Verzweigungsvorhersagesysteme besitzen jedoch trotzdem eine eingeschränkte Genauigkeit, weil diese Systeme frühere Programmdaten und das frühere Verzweigungsverhalten verwenden, um das künftige Verzweigungsverhalten vorhersagen. Das frühere Programmverhalten kann jedoch das künftige Verzweigungsverhalten nicht genau vorhersagen.
  • Ein weiteres herkömmliches dynamisches Verzweigungsvorhersagesystem verwendet spezielle Verzweigungsbefehle für bestimmte Verzweigungen mit vorhersagbarem Verhalten, wie z. B. Prozedurrücksprünge und Schleifen. Diese spe ziellen Verzweigungsbefehle besitzen eine vereinbarte Verwendung der Operanden, wobei diese Verwendung in genaue Vorhersagen dieser bestimmten Verzweigungen umgesetzt werden kann. Diese Systeme sagen jedoch andere Verzweigungen nicht genau vorher. Einige dieser obenbeschriebenen dynamischen Systeme sagen das Ergebnis der Verzweigung vorher (d. h., ob die Verzweigung genommen wird oder nicht), aber sie sagen nicht die Zieladresse der Verzweigung voraus, falls die Verzweigung genommen wird. Die Genauigkeit und die Wirksamkeit einer Verzweigungsvorhersageeinrichtung kann vergrößert werden, indem sowohl das Ergebnis einer Verzweigung als auch das Resultat einer Verzweigung genauer vorhergesagt werden.
  • Wenn eine Vorhersage, ob eine Verzweigung genommen werden wird, ausgeführt wird, ist der nächste Schritt, zu bestimmen, was die Referenz zum Ziel der Verzweigung sein wird, wie z. B. die Adresse. Wenn die Verzweigung nicht genommen wird, dann wird das nächste Ziel der Verzweigung die nächste Adresse nach der Verzweigung sein, sodass das Ziel der Verzweigung leicht vorhergesagt werden kann. Falls vorhergesagt wird, dass die Verzweigung genommen wird, kann es jedoch schwieriger sein, zu bestimmen, was die nächste Adresse sein wird. Ein herkömmliches Zieladressen-Vorhersagesystem sagt das Ziel der prozeduralen Rücksprünge unter Verwendung eines Stapelmechanismus voraus. In diesem System kann, wenn z. B. das Programm zu einem Unterprogramm verzweigt, die Adresse des letzten vor dem Unterprogramm ausgeführten Befehls im Stapel gespeichert werden. Wenn das Unterprogramm abgeschlossen ist, kann die im Stapel gespeicherte Adresse verwendet werden, um die nächste Adresse zu bestimmen. Dieser Stapel kann jedoch nicht computerbestimmte Ziele vorhersagen, wie z. B. eine Aufrufadresse für virtuelle C++-Funktionen, weil die Aufrufadresse der virtuellen Funktion nicht statisch fest ist oder durch eine vorhergehende Verzweigung erzeugt wird. Folglich arbeiten diese Systeme nicht für alle Typen von Verzweigungen effektiv.
  • Ein weiteres herkömmliches Zieladressen-Vorhersagesystem verwendet eine Verzweigungshistorientabelle, die die letzten Zieladressen für verschiedene Verzweigungen enthält. Abermals kann dieses System prozedurale Rücksprünge vorhersagen, es kann aber nicht computererzeugte Ziele vorhersagen, weil die letzten Ziele keine genauen künftigen Ziele sein können, weil sich das Ziel einer Verzweigung ändern kann. Ein drittes Verzweigungsadressen-Vorhersagesystem verwendet dedizierte Rücksprungsadressenregister, um Verzweigungszieladressen durch das Beobachten der gespeicherten Werte in den dedizierten Registern vorherzusagen. Diese Systeme mit dedizierten Registern erfordern spezielle Hardware und Vorkehrungen für diese Register im Befehlsvorrat, die nicht immer verfügbar sind, deshalb besitzt dieses System einen eingeschränkten Nutzen. Ein viertes Verzweigungsadressen-Vorhersagesystem überwacht alle gespeicherten Operanden, um künftige Verzweigungsadressen zu bestimmen, dieses System ist jedoch nur so gut wie die Informationen, die verwendet werden, die nur das frühere Programmverhalten enthalten, und wie die eingeschränkte Menge der Analyse, die zur Laufzeit ausgeführt werden kann. Diese Verzweigungsadressen-Vorhersagesysteme besitzen etwa die gleiche Genauigkeit wie einige der Verzweigungsergebnis-Vorhersageeinrichtungen. Um die Genauigkeit jedes dieser obigen Systeme weiter zu vergrößern, kann ein programmierbares Verzweigungsvorhersagesystem verwendet werden.
  • Ein programmierbares Verzweigungsvorhersagesystem schafft irgendeine Form der programmierbaren Steuerung über den Betrieb von jedem der obenbeschriebenen automatischen Verzweigungsvorhersagesysteme. In diesen programmierbaren Systemen führt das automatische Verzweigungsvorhersagesystem die tatsächlichen Verzweigungsvorhersagen aus, wobei das programmierbare System nur die Vorhersageeinrichtung beeinflusst, um die Vorhersageinformationen einzustellen, die falsch sein können, oder um die aus der Untersuchung des Programmzustandes abgeleiteten Informationen aufzunehmen. Diese programmierbaren Systeme sind im Ergebnis transparent für alle automatischen Verzweigungsvorhersagesysteme und kompatibel mit. allen automatischen Verzweigungsvorhersagesystemen, weil diese Systeme lediglich die Steuerung über das Vorhersagesystem ausüben. Diese programmierbaren Verzweigungsvorhersagesysteme können die implizite Steuerung oder die explizite Steuerung verwenden, wie im Folgenden beschrieben ist.
  • Die implizit programmierbaren Verzweigungsvorhersagesysteme beeinflussen die Verzweigungsvorhersageinformationen nicht direkt. Ein programmierbares System, das z. B. die implizite Steuerung verwendet, kann zwischen abwechselnden Codefragmenten wählen, die die gleiche Funktion in verschiedenen Arten implementieren. Das implizite programmierbare System kann das Codefragment wählen, das durch das Verzweigungsvorhersagesystem in einem speziellen Ausführungskontext am wahrscheinlichsten genau vorhergesagt wird. Diese impliziten Systeme erfordern jedoch mehr Speicherraum, weil mehrere Codefragmente ge speichert werden müssen, wobei sie für komplexere Verzweigungen nicht nützlich sein können. Weil außerdem einige Programme aus einem Festwertspeicher (ROM) ausgeführt werden, kann dieses System für diese Programme nicht verwendet werden, weil alternative Codefragmente nicht in einen Festwertspeicher geschrieben werden können. Es gibt außerdem implizite programmierbare Systeme, die Vorhersageinformationen verwenden, die innerhalb eines Verzweigungsbefehls codiert sind. Diese Systeme leiden jedoch, wenn es notwendig wird, die innerhalb des Befehls codierten Informationen zu ändern. Alle diese Systeme sind implizit, weil der Programmierer das Verzweigungsvorhersagesystem nicht tatsächlich direkt steuert, sondern die Verzweigungen steuert, die dem Verzweigungsvorhersagesystem gegeben werden. Die explizite programmierbare Verzweigungsvorhersage kann genau sein und weniger Speicherraum erfordern.
  • Die explizit programmierbaren Systeme steuern die Verzweigungsvorhersagesysteme unter Verwendung von Vorhersageoperationen, Befehlen oder Befehlssequenzen direkt. Diese Befehle werden zum Programmcode hinzugefügt. Diese expliziten Systeme sind flexibler, weit die zusätzlichen Befehle zu jedem Befehlsvorrat hinzugefügt werden können und die op_codes der Vorhersage so gewählt werden können, dass die älteren Prozessorkonstruktionen sie als no_op-Befehle behandeln, sodass diese älteren Systeme trotzdem den Programmcode, selbst mit den zusätzlichen Verzweigungsvorhersageoperationen, verwenden können. Die im Stand der Technik bekannten expliziten Systeme, wie z. B. US-Patent Nr. 5.454.117, steuern, ob das zugrunde liegende Verzweigungsvorhersagesystem zu einem speziellen Zeitpunkt verwendet wird, ob die Vorhersageinformationen aktualisiert werden und die Masseninitialisierung der Vorhersageinformationen. Diese expliziten programmierbaren Systeme des Standes der Technik beeinflussen jedoch alle durch eine Verzweigungsvorhersageeinrichtung ausgeführten Vorhersagen, wenn nicht die Verzweigungsvorhersageeinrichtung aktiviert und wiederum deaktiviert wird.
  • Keines dieser obenbeschriebenen Systeme schafft ein programmierbares Verzweigungsvorhersagesystem, das die Verzweigungsergebnisse und die Zieladressen für jede Verzweigung genau und zuverlässig vorhersagen kann. Außerdem schafft keines dieser herkömmlichen Systeme eine explizite Steuerung über die Vorhersagen jeder einzelnen Verzweigung.
  • Es gibt einen Bedarf an einem programmierbaren Verzweigungsvorhersagesys tem und einem Verzweigungsvorhersageverfahren, die diese und andere Probleme der bekannten Vorrichtungen vermeiden, wobei auf dieses Ziel die vorliegende Erfindung gerichtet ist.
  • Zusammenfassung der Erfindung
  • Gemäß einem Aspekt der vorliegenden Erfindung wird ein System und ein Verfahren geschaffen, wie sie in den unabhängigen Ansprüchen 1 und 14 definiert sind.
  • Die Erfindung schafft ein programmierbares Verzweigungsvorhersagesystem, das flexibler als einige herkömmliche Systeme ist, weil die Erfindung die Speicherung der zugrunde liegenden Vorhersageinformationen innerhalb des Verzweigungsvorhersagesystems steuern kann. Außerdem schafft die Erfindung ein programmierbares Verzweigungsvorhersagesystem, das den Programmcode nicht modifiziert oder zwischen Codefragmenten wählt, sodass die Nachteile dieser herkömmlichen Systeme nicht vorhanden sind. Die Erfindung schafft außerdem ein programmierbares Verzweigungsvorhersagesystem, das die explizite Steuerung der Vorhersagedaten für eine ausgewählte Verzweigung besitzen kann, bevor die Verzweigung tatsächlich ausgeführt wird, und ohne die Vorhersagen für andere Verzweigungen zu beeinflussen.
  • Die explizite Manipulation der Vorhersageinformationen der zugrunde liegenden Verzweigungsvorhersageinformationen schafft Vorhersagegenauigkeiten, die wenigstens so hoch wie, wenn nicht höher als, jedes herkömmliche Verzweigungsvorhersagesystem sind. Weil außerdem die zugrunde liegenden Verzweigungsvorhersageinformationen gesteuert werden, kann ein programmierbares Verzweigungsvorhersagesystem gemäß der Erfindung mit jedem Typ von Verzweigungsbefehl verwendet werden und kann zu jedem Befehlsvorrat hinzugefügt werden. Das programmierbare Verzweigungsvorhersagesystem kann außerdem jeden Typ des automatischen Verzweigungsvorhersagesystems enthalten.
  • Die Erfindung kann außerdem ein programmierbares Verzweigungsvorhersagesystem schaffen, das die Vorhersageinformationen sichert und speichert, sodass verschiedene Typen von Verzweigungen vorhergesagt werden können. Für Prozessschalter, in denen die Ausführung eines Stücks des Programmcodes durch ein weiteres anderes Stück des Programmcodes unterbrochen wird, können z. B. die Vorhersageinformationen für den alten Prozess gespeichert werden. Dann können, falls des Programm jemals zu diesem Prozess zurückkehrt, die Vorhersageinformationen für diesen Prozess zurück in das Verzweigungsvorhersagesystem geladen werden. Ähnlich können die Vorhersagedaten für eine Verzweigung später unabhängig von den Prozessschaltern gesichert und wiederhergestellt werden. Folglich wird die Vorhersagegenauigkeit der Erfindung für Prozessschalter und Programme, die in Phasen arbeiten, dramatisch vergrößert.
  • Kurzbeschreibung der Zeichnung
  • 1 ist ein Blockschaltplan einer automatischen Verzweigungsvorhersage, die ein programmierbares Verzweigungsvorhersagesystem gemäß der Erfindung enthalten kann;
  • 2 ist ein Blockschaltplan einer ersten Ausführungsform des programmierbaren Verzweigungsvorhersagesystems gemäß der Erfindung;
  • 3 ist eine schematische Darstellung der Vorhersagedaten, die im Vorhersageinformationen-Speichersystem nach 2 gespeichert sein können;
  • 4 ist ein Blockschaltplan einer zweiten Ausführungsform eines programmierbaren Verzweigungsvorhersagesystems gemäß der Erfindung;
  • 5 ist ein Blockschaltplan einer dritten Ausführungsform des programmierbaren Verzweigungsvorhersagesystems gemäß der Erfindung;
  • 6 ist eine graphische Darstellung eines Beispiels eines Vorhersagedaten-Speichersystems, das einen 2-Bit-Zähler verwenden kann;
  • 7 ist eine Tabelle, die die Manipulation des 2-Bit-Zählers nach 6 durch ein herkömmliches Verzweigungsvorhersagesystem zeigt;
  • 8 ist eine Tabelle, die ein Beispiel der Manipulation des 2-Bit-Zählers nach 6 durch ein programmierbares Verzweigungsvorhersagesystem gemäß der Erfindung zeigt;
  • 9 ist ein Ablaufplan eines ersten Beispiels eines Verfahrens gemäß der Erfindung zum Einfügen von Vorhersageoperationen in einen Computer-Code;
  • 10 ist ein Ablaufplan eines zweiten Beispiels eines Verfahrens gemäß der Erfindung zum Einfügen von Vorhersageoperationen in einen Computer-Code; und
  • 11 ist eine Tabelle von Beispiel-Vorhersagedatenwerten für ein Fragment des Programmcodes, in dem die Verzweigungen durch das programmierbare Verzweigungsvorhersagesystem vorhergesagt werden.
  • Ausführliche Beschreibung einer bevorzugten Ausführungsform
  • Die Erfindung ist auf ein programmierbares Verzweigungsvorhersagesystem besonders anwendbar. In diesem Kontext wird die Endung beschrieben. Es ist jedoch klar, dass das System und das Verfahren gemäß der Erfindung einen größeren Nutzen besitzen.
  • 1 ist ein Blockschaltplan eines Computer-Systems 20 mit einem Verzweigungsvorhersagesystem. Das Computer-System kann eine Verzweigungsvorhersageeinrichtung 22, einen Prozessor 24 und einen Speicher 26 enthalten. Der Prozessor steuert wie in den meisten Computer-Systemen den Betrieb des Computers durch das Ausführen von Befehlen, die im Speicher 26 gespeichert sein können. Die Erfindung ist nicht auf irgendeinen speziellen Prozessortyp eingeschränkt, wobei sie sowohl Prozessoren mit komplexem Befehlsvorrat (CISC-Prozessoren) als auch Prozessoren mit eingeschränktem Befehlsvorrat (RISC-Prozessoren) enthalten kann.
  • Innerhalb des Prozessors kann es eine oder mehrere Befehlspipelines geben, sodass mehrere Befehle gleichzeitig verarbeitet werden, wie in der Technik bekannt ist. Eine Gruppe von Befehlen kann typischerweise aus dem Speicher abgerufen werden und in eine oder mehrere Befehlspipelines gelegt werden. Wenn die Gruppe der Befehle in die eine oder die mehreren Befehlspipelines innerhalb des Prozessors geladen wird, können die Verzweigungen durch bekannte Systeme erfasst und markiert werden. Das Ergebnis der markierten Verzweigungen kann durch die Verzweigungsvorhersageeinrichtung vorhergesagt werden. Es kann z. B. auf der Grundlage einiger Verzweigungsvorhersagedaten bestimmt werden, ob die Verzweigung genommen wird, wie im Folgenden be schrieben ist. Wenn vorhergesagt wird, dass die Verzweigung genommen wird, dann kann die Verzweigungsvorhersageeinrichtung außerdem das Ziel der Verzweigung vorhersagen; das Ziel kann als eine Adresse dargestellt werden, zu der die Verzweigung gehen wird. Die Verzweigungsvorhersageeinrichtung kann außerdem gleichzeitig vorhersagen, ob die Verzweigung genommen wird und was das Ziel der Verzweigung ist, wie z. B. die Adresse. Wie oben beschrieben worden ist, kann die Vorhersage durch eine Vielzahl verschiedener automatischer Verzweigungsvorhersageeinrichtungen ausgeführt werden, einschließlich statischer Verzweigungsvorhersageeinrichtungen und dynamischer Verzweigungsvorhersageeinrichtungen. Wenn vorhergesagt wird, dass die Verzweigung nicht genommen wird, dann führt der Prozessor nichts spezielles aus, weil der Befehl direkt nach der Verzweigung ausgeführt werden sollte. Wenn jedoch vorhergesagt wird, dass die Verzweigung genommen wird, dann werden der Prozessor oder die automatische Verzweigungsvorhersageeinrichtung auf der Grundlage der Verzweigungsvorhersage die geeigneten Schritte unternehmen, sodass die in die Befehlspipeline geladenen nächsten Befehle die vorhergesagten Befehle sind. In dieser Weise führt der Prozessor die Befehle im Speicher in Übereinstimmung mit der durch die Verzweigungsvorhersageeinrichtung getroffenen Vorhersage aus. Nun wird ein programmierbares Verzweigungsvorhersagesystem gemäß der Erfindung beschrieben.
  • 2 ist ein Blockschaltplan einer ersten Ausführungsform eines programmierbaren Verzweigungsvorhersagesystems gemäß der Erfindung. Ein Computer-System 30 kann ein programmierbares Verzweigungsvorhersagesystem 32 enthalten, wie gezeigt ist. Das Computer-System kann außerdem einen Prozessor 34 enthalten. Der Prozessor kann, wie oben beschrieben worden ist, die Befehle ausführen, die in einem Speicher gespeichert sein können, der nicht gezeigt ist. Wie oben beschrieben worden ist, ist die Erfindung nicht auf irgendeinen speziellen Prozessortyp eingeschränkt, wobei er CISC- oder RISC-Prozessoren enthalten kann.
  • Das programmierbare Verzweigungsvorhersagesystem 32 kann eine automatische Verzweigungsvorhersageeinrichtung (ABP) 36 und ein Vorhersagedaten-Speichersystem (P-STORE) 38 enthalten. Die automatische Verzweigungsvorhersageeinrichtung 36 kann irgendeinen Typ eines herkömmlichen Verzweigungsvorhersagesystems sein, weil das programmierbare Verzweigungsvorhersagesystem 32 jedes herkömmliche Verzweigungsvorhersagesystem aufnehmen kann, wie im Folgenden beschrieben ist. Ein Verzweigungsvorhersagesystem, das die Verzweigungen auf der Grundlage der früheren Verzweigungshistorie vorhergesagt, kann z. B. verwendet werden. Für die beschriebenen Ausführungsformen wird ein Vorhersagesystem anhand der früheren Verzweigungshistorie mit einem Ein-Bit- oder Zweit-Bit-Zähler für die Klarheit beschrieben, es kann aber außerdem jeder andere Typ eines automatischen Verzweigungsvorhersagesystems verwendet werden, weil das programmierbare Verzweigungsvorhersagesystem die Vorhersagedaten im P-STORE modifiziert, wobei es modifiziert werden kann, um mit jedem Typ von Vorhersagedaten zu arbeiten. Obwohl eine automatische Verzweigungsvorhersageeinrichtung, die nur das Ergebnis der Verzweigung vorhersagt, gezeigt ist, kann eine Verzweigungsvorhersageeinrichtung, die sowohl das Verzweigungsergebnis als auch die Zieladresse vorhersagt, außerdem verwendet werden.
  • Das automatische Verzweigungsvorhersagesystem 36 kann z. B. die Vorhersagedaten, die sich auf die frühere Verzweigungshistorie beziehen, im P-STORE 38 speichern. In 3 ist ein Beispiel der im P-STORE 38 gespeicherten Vorhersagedaten für eine automatische Vorhersageeinrichtung anhand der früheren Verzweigungshistorie mit einem Ein-Bit-Zähler gezeigt. Der Vorhersagespeicher 38 kann für dieses spezielle Beispiel eine Verzweigungsreferenzspalte 40 und eine entsprechende Vorhersagedatenspalte 42 für jede Verzweigung besitzen. Wenn ein anderer Typ von Verzweigungsvorhersagesystem verwendet worden wäre, dann würden die Daten im P-STORE außerdem verschieden sein. Die Verzweigungsreferenzspalte 40 kann die Adresse einer Verzweigung 44 enthalten. Die entsprechende Vorhersagespalte 42 kann das vorhergesagte Ergebnis 46 der speziellen Verzweigung speichern. In dem gezeigten Beispiel wird vorhergesagt, dass die erste Verzweigung genommen wird, während vorhergesagt wird, dass die zweite Verzweigungsadresse nicht genommen wird.
  • Die Erfindung ist nicht auf irgendein spezielles Verfahren, um auf die Vorhersagedaten Bezug zu nehmen, eingeschränkt, es werden jedoch zwei bevorzugte Verfahren der Bezugnahme beschrieben. Zuerst kann eine Verzweigungsreferenz, wie z. B. eine Verzweigungsadresse, auf eine P-STORE-Referenz, wie z. B. eine PSTORE-Adresse, abgebildet werden. Die Abbildung kann durch eine Anzahl bekannter Verfahren erfolgen, wie z. B. die direkte Abbildung, die bereichsassoziative oder die assoziative Abbildung. Auf die Vorhersagedaten kann außerdem insofern direkt Bezug genommen werden, als jede der Vorhersageoperationen die P-STORE-Referenz spezifiziert. Wie oben beschrieben worden ist, kann die Referenz für die Vorhersagedaten eine Adresse sein, es kann aber jedes anderer Stück der Daten sein, die der speziellen Verzweigung zugeordnet sind. Die Vorhersagedaten können die Abbildungsinformationen enthalten, die anzeigen, wie eine Verzweigungsreferenz in eine Referenz im P-STORE umgesetzt wird.
  • In 2 bestimmt die ABP, wenn die ABP einem Verzweigungsbefehl oder einer Referenz auf den Verzweigungsbefehl begegnet, die Referenz für die spezielle Verzweigung, wie oben beschrieben worden ist, und greift dann durch eine A_Addr-Leitung auf die richtigen Vorhersagedaten im P-STORE 38 zu und liest die Vorhersagedaten über eine A_Read-Leitung aus dem P-STORE aus. Dann sendet die ABP die Vorhersagedaten über eine A_Result-Leitung zurück zum Prozessor. Die ABP kann in der Lage sein, den P-STORE zu aktualisieren, oder nicht. Für die erste Verzweigung wird z. B. der Prozessor informiert, dass vorhergesagt wird, dass die Verzweigung genommen wird, deshalb lädt der Prozessor die Befehle, auf die durch die Verzweigung gezeigt wird, in die Befehlspipeline.
  • Die Erfindung schafft ein System und ein Verfahren zum Ändern der im P-STORE 38 gespeicherten Vorhersagedaten unabhängig von der automatischen Verzweigungsvorhersageeinrichtung. Die Erfindung kann die Vorhersagedaten jederzeit modifizieren. Wohingegen die obenbeschriebene automatische Verzweigungsvorhersageeinrichtung die Vorhersagedaten verwendet, die im P-STORE gespeichert sind, wobei die Erfindung diese Vorhersagedaten während der Ausführung eines Programms in Reaktion auf die Vorhersageoperationen erzeugt und/oder modifiziert. Diese Vorhersageoperationen können vor der Ausführung des Programms durch ein separates Computer-System erzeugt werden, das ein Kompilierer-Programm ausführt, wie im Folgenden beschrieben ist. Die Vorhersagedaten im P-STORE für einen Prozeduraufruf-Befehl werden z. B. erzeugt, wenn das Programm kompiliert wird. Vor der Ausführung des Programms kann jedoch die tatsächliche Zieladresse für den Prozeduraufruf nicht bekannt sein. Folglich würde eine automatische Verzweigungsvorhersageeinrichtung das Ziel des Prozeduraufrufs falsch vorhersagen. Sobald das Programm jedoch ausgeführt wird, kann das Ziel des Prozeduraufrufs unter Verwendung einer Vorhersageoperation bestimmt werden, wie im Folgenden beschrieben ist, wobei dann vor der Ausführung des Prozeduraufruf-Befehls das richtige Ziel in den P-STORE geladen werden kann. Folglich wird, wenn der tatsächliche Prozessumschaltbefehl ausgeführt wird, die automatische Verzweigungsvorhersageeinrichtung auf der Grundlage der durch die Erfindung bereitgestellten aktualisierten Vorhersagedaten das Ziel des Prozeduraufrufs richtig vorhersagen.
  • Die Erfindung arbeitet im Zusammenhang mit jedem automatischen Verzweigungsvorhersagesystem, wobei sie die Vorhersagedaten auf der Grundlage von Vorhersageoperationen modifiziert, wie im Folgenden ausführlicher beschrieben ist. Die Erfindung vergrößert die Genauigkeit jedes herkömmlichen automatischen Verzweigungsvorhersagesystems, sie beeinflusst jedoch nicht den Betrieb der automatischen Verzweigungsvorhersageeinrichtung, weil die Erfindung nur die Vorhersagedaten aktualisiert, modifiziert oder auf sie zugreift. In der gezeigten Ausführungsform kann die Fähigkeit zum Modifizieren der Daten innerhalb des P-STORE unabhängig von der automatischen Verzweigungsvorhersageeinrichtung durch eine P_Write-Leitung 48 und eine P_Addr-Leitung 50 bereitgestellt sein. Diese Leitungen können mit einer Aktualisierungseinrichtung 52 verbunden sein, die die im P-STORE 38 gespeicherten Vorhersagedaten aktualisieren kann. Die Aktualisierungseinrichtung 52 kann außerdem die Vorhersagedaten aktualisieren, indem sie in bestimmten Situationen die Vorhersagedaten aus dem P-STORE liest, wie im Folgenden beschrieben ist.
  • Die Aktualisierungseinrichtung kann ein zweiter Prozessor sein, der die gleichen Befehle wie der Prozessor 34 ausführt und auf die Befehlsoperationen reagiert, die in den Programmcode, der ausgeführt wird, eingefügt worden sind, wie im Folgenden beschrieben ist. In Reaktion auf diese Vorhersageoperationen können die Vorhersagedaten innerhalb des P-STORE modifiziert werden, aktualisiert werden oder es kann auf sie zugegriffen werden. Ein Beispiel der Vorhersageoperation, die die Aktualisierungseinrichtung veranlässt, einen Wert im P-STORE zu modifizieren, wird im Folgenden beschrieben.
  • 4 ist ein Blockschaltplan einer zweiten Ausführungsform des programmierbaren Verzweigungsvorhersagesystems 80 für einen Computer. Das programmierbare Verzweigungsvorhersagesystem kann einen Prozessor 82, einen Speicher 84 zum Speichern der Befehle, eine automatische Verzweigungsvorhersageeinrichtung 86 und einen P-STORE 88 enthalten. Diese Ausführungsform ist zur vorherigen Ausführungsform ähnlich, der P-STORE ist jedoch mit dem Prozessor verbunden, weil die Aktualisierungseinrichtung, wie sie oben beschrieben worden ist, in dieser Ausführungsform ein Programm sein kann, das im Prozessor ausgeführt wird. In der Tat. kann die Aktualisierung in dieser Ausführungsform Teil des Programms sein, das durch den Prozessor ausgeführt wird, da die Vorhersageoperationen innerhalb des Programmcodes eingebettet sind. Für diese Ausführungsform kann der Befehlsvorrat des Prozessors modifiziert sein, sodass der Prozessor versteht, wie die Vorhersageoperationen zu interpretieren sind, wobei er die Inhalte des P-STORE aktualisieren kann.
  • Der Prozessor 82 besitzt die gleichen A_Result- und C_Result-Leitungen zum Steuern der automatischen Verzweigungsvorhersageeinrichtung, er kann aber außerdem eine G_Control-Leitung besitzen, um die automatische Verzweigungsvorhersageeinrichtung zu veranlassen, die Inhalte des P-STORE zurückzusetzen. Der Prozessor kann außerdem Informationen von der automatischen Verzweigungsvorhersageeinrichtung über die G_Control-Leitung anfordern. Die frühere Vorhersagegenauigkeit kann z. B. über eine G_Result-Leitung zum Prozessor geliefert werden.
  • Wie gezeigt ist, ruft die automatische Verzweigungsvorhersageeinrichtung 86 die Vorhersagedaten über eine A_Addr-Leitung vom Speichersystem ab und empfängt diese Vorhersagen über die A_Read-Leitung. In dieser Ausführungsform kann die automatische Verzweigungsvorhersageeinrichtung außerdem über eine A_Write-Leitung Daten in den P-STORE 88 schreiben, nachdem die Verzweigung ausgeführt worden ist. Wenn die automatische Verzweigungsvorhersageeinrichtung eine Verzweigung falsch vorhersagt, dann kann die automatische Verzweigungsvorhersageeinrichtung die Vorhersagedaten für diese Verzweigung im Speichersystem revidieren. Die automatische Verzweigungsvorhersageeinrichtung schreibt unter Verwendung einer A_WRITE-Leitung die Vorhersagedaten in den P-STORE, nachdem eine Verzweigung ausgeführt worden ist.
  • Wie oben beschrieben worden ist, kann in dieser Ausführungsform das System zum Aktualisieren der Daten innerhalb des Vorhersagedatenspeichers ein Programm sein, das im Prozessor ausgeführt wird. Sowohl für diese Ausführungsform als auch für die erste Ausführungsform aktualisiert die Aktualisierungseinrichtung die Daten im P-STORE in Reaktion auf eine oder mehrere Vorhersageoperationen, die innerhalb des Programmcodes eingebettet sein können. Wenn der Programmcode kompiliert wird, kann z. B. ein Kompilierer, der vollständig vom programmierbaren Verzweigungsvorhersageprozessor separat sein kann, den Code, der kompiliert wird, nach bestimmten Bedingungen und Befehlstypen überprüfen, sodass in den kompilierten Befehlscode Vorhersageoperationen eingefügt werden können oder Vorhersageoperationen eingefügt werden können, wie dieser Code erzeugt wird. Die Erzeugung und die Einfügung dieser Vorhersageoperationen in den Programmcode wird im Folgenden beschrieben. Wenn die eingefügten Vorhersageoperationen ausgeführt werden, bewirken sie, dass die Vorhersagedaten im P-STORE aktualisiert werden. Wie oben beschrieben worden ist, besitzen zum Zeitpunkt der Kompilierung einige Verzweigungen ein unbekanntes Ziel, sie werden jedoch einen bestimmtes Ziel besitzen, sobald die Ausführung des Programms beginnt, oder das Ziel kann sich während der Programmausführung ändern. Folglich kann es im kompilierten Code einer Vorhersageoperationen geben, die die Aktualisierungseinrichtung veranlasst, die spezielle Verzweigung zu betrachten, um die Adresse zu bestimmen, und dann die gespeicherten Vorhersagedaten zu aktualisieren.
  • Um die Kompatibilität der Erfindung mit den früheren Befehlsvorräten zu sichern, können die Vorhersageoperationen für das programmierbare Verzweigungsvorhersagesystem in Form von nicht verwendeten no_operation-Codes in älteren Systemen ausgedrückt werden. Folglich kann die programmierbare Verzweigungsvorhersageeinrichtung gemäß der Erfindung mit modernen Computer-Architekturen verwendet werden, die für Verzweigungsvorhersageeinrichtungen konstruiert sind, sie kann aber außerdem mit älteren Systemen verwendet werden, weil die Vorhersageoperationen irgendeinen richtigen Betrieb in einem älteren System nicht stören.
  • In dieser zweiten Ausführungsform kann die Aktualisierung der Vorhersagedaten im Speichersystem durch die programmierbare Verzweigungsvorhersageeinrichtung ausgeführt werden, die im Prozessor ausgeführt wird. Falls eine Aktualisierung der Vorhersagedaten erforderlich ist, kann dann die Aktualisierung unter Verwendung der obenbeschriebenen P_Addr- und P_Write-Leitungen ausgeführt werden. Die Vorhersagedaten im P-STORE können außerdem durch das Lesen der Vorhersagedaten aus dem P-STORE durch eine P_READ-Leitung aktualisiert werden. Nun wird eine dritte Ausführungsform der Erfindung beschrieben.
  • 5 ist ein Blockschaltplan der dritten Ausführungsform 100 des programmierbaren Verzweigungsvorhersagesystems gemäß der Erfindung. Diese Ausführungsform der programmierbaren Verzweigungsvorhersageeinrichtung kann einen Prozessor 102, einen Speicher 104, eine automatische Verzweigungsvorhersageeinrichtung 106 und einen P-STORE 108 enthalten. Diese Systeme sind oben ausführlich beschrieben worden, wobei sie hier nicht beschrieben werden. Das programmierbare Verzweigungsvorhersagesystem 100 kann außerdem eine Synchronisiereinrichtung 110 enthalten. Die Synchronisiereinrichtung kann den Prozessor durch die P_Sync-Leitung und die automatische Verzweigungsvorhersageeinrichtung durch die A_Sync-Leitung steuern. Die Synchronisiereinrichtung kann verwendet werden, um zu sichern, dass die Vorhersagedaten vom P-STORE durch die automatische Verzweigungsvorhersageeinrichtung zum richtigen Zeitpunkt empfangen werden (d. h. das Empfangen der Verzweigungsvorhersagedaten, nachdem die Verzweigung ausgeführt worden ist, ist zu spät). Das System der Synchronisiereinrichtungen ist in der Technik wohl bekannt. Diese programmierbare Verzweigungsvorhersageeinrichtung kann die innerhalb des P-STORE gespeicherten Daten durch die P_Access-Leitung aktualisieren, wie oben beschrieben worden ist. In dieser Ausführungsform kann jedoch die P_Access-Leitung als die P_Write-, P_read- und P_Addr-Leitungen arbeiten. Diese Ausführungsform arbeitet in der gleichen Weise wie die vorherigen Ausführungsformen, wobei sie hier nicht beschrieben ist. Nun wird ein Beispiel des Betriebs des programmierbaren Verzweigungsvorhersagesystems beschrieben.
  • 6 ist eine schematische Darstellung der Inhalte des P-STORE für ein 2-Bit-Zähler-Vorhersagesystem. In einem automatischen Zwei-Bit-Zähler-Verzweigungsvorhersagesystem werden zwei Bits verwendet, um die früheren Verzweigungsvorhersagen zu verfolgen. Wie gezeigt ist, kann ein Datenspeichersystem 140 ein Adressenfeld 142, ein bit_1-Feld 144 und ein bit_0-Feld 146 besitzen. Falls eine Verzweigung früher niemals genommen worden ist oder sie nicht wenigstens zweimal genommen worden ist, dann sind, wie für die Adresse 3 gezeigt ist, beide Bits 0. Falls die Verzweigung einmal genommen worden ist, ist das bit_0 "1", wie für die Adresse 0 gezeigt ist. Wenn eine Verzweigung zweimal genommen worden ist, dann ist das bit_1 "1" und das bit_0 "0", wie bei jedem binären Zähler. Für diese automatische Zwei-Bit-Zähler-Verzweigungsvorhersageeinrichtung wird vorhergesagt, dass künftige Verzweigungen genommen werden, falls das bit_1 "1" ist.
  • In einem herkömmlichen System, wie in 7 gezeigt ist, sind die vier möglichen Zustände des Zählers (00, 01, 10, 11) zusammen mit der Wirkung einer genommenen Verzweigung und einer nicht genommenen Verzweigung auf den Zähler gezeigt. Wie gezeigt ist, inkrementiert eine genommene Verzweigung, die vorhergesagt wird, den Zähler um eins. Folglich wird "10" zu "11 ". Eine nicht genomme nen Verzweigung, die vorhergesagt wird, dekrementiert den Zähler um eins. In dieser Weise werden nach der Ausführung jeder Verzweigung die Zähler entweder um eins vergrößert oder um eins verkleinert.
  • 8 ist eine Tabelle, die die Wirkungen der Erfindung auf den 2-Bit-Zähler zeigt. Die Erfindung inkrementiert oder dekrementiert den Zähler nicht notwendigerweise, kann aber den Zähler so einstellen, dass vorhergesagt wird, dass eine Verzweigung genommen wird, wenn sie das nächste Mal ausgeführt wird. Um dies zu erreichen, kann z. B. das bit_1 des Zählers auf "1" gesetzt werden, um zu erzwingen, dass vorhergesagt wird, dass die Verzweigung genommen wird, oder es kann auf "0" gesetzt werden, um zu erzwingen, dass vorhergesagt wird, dass die Verzweigung nicht genommen wird. Ein Beispiel der Typen der Vorhersageoperationen, die in einen kompilierten Code eingefügt werden können, wird im Folgenden beschrieben. Im Allgemeinen enthält das Verfahren des Einfügens der Vorhersageoperationen das Analysieren des Programms, um zu bestimmen, ob es irgendwelche Gelegenheiten für das Berechnen von Daten gibt, die verwendet werden können, um das künftige Verzweigungsverhalten vorherzusagen, und das Einfügen von Vorhersageoperationen in den Computer-Code, um den P-STORE zu aktualisieren oder zu modifizieren, sodass die Verzweigungsvorhersageeinrichtung entsprechend reagiert. Nun werden zwei Beispiele eines Verfahrens zum Einfügen dieser Vorhersageoperationen in einen Programmcode beschrieben.
  • Die Vorhersageoperationen können einen Vorhersageausdruck oder ein Vorhersagemuster verwenden, um die Inhalte des P-STORE zu modifizieren. Ein Beispiel eines Vorhersageausdrucks kann ein verbreiteter Wert sein, wie im Folgenden beschrieben ist. Ein Beispiel eines Vorhersagemusters kann eine Anzeigevariable sein, wie im Folgenden beschrieben ist. Der Vorhersageausdruck kann irgendein Ausdruck sein, der verwendet werden kann, um den Ausdruck vorherzusagen oder zu berechnen, von dem das Verhalten einer Verzweigung abhängt. Ähnlich ist ein Vorhersagemuster ein Muster der Vorhersagen, das verwendet werden kann, um den Ausdruck vorherzusagen oder zu berechnen, von dem das Verhalten einer Verzweigung abhängt. Es gibt viele Arten von Prozeduren oder Verfahren, die verwendet werden können, um Vorhersageausdrücke oder -muster zu identifizieren, wobei alle diese Ausdrücke oder Muster gemäß der Erfindung verwendet werden können, um Gelegenheiten zu identifizieren, um Vorhersageoperationen einzufügen. Nun werden zwei Beispiele dieser verschiedenen Typen von Ausdrücken beschrieben.
  • 9 ist ein Ablaufplan eines ersten Beispiels eines Verfahrens 160 gemäß der Erfindung zum Einfügen von Vorhersageoperationen in einen Computer-Code. Für die in den 9 und 10 gezeigten Beispiele kann die Einfügung der Vorhersageoperationen außerdem durch den Prozessor des programmierbaren Vorhersagesystems ausgeführt werden. Sie kann außerdem durch ein vollständig separates Computer-System ausgeführt werden, das einen Kompilierer ausführt, der diese spezialisierten Vorhersageoperationen erzeugen und in den Programmcode einfügen kann. Sie kann außerdem durch denselben Prozessor, der den Kompilierer ausführt, zu einem früheren Zeitpunkt als die Ausführung des Programms ausgeführt werden. Folglich kann das programmierbare Vorhersagesystem den Programmcode ausführen, der die Vorhersageoperationen enthält, die durch ein anderes Computer-System in den Programmcode eingefügt worden sind. Das Verfahren beginnt im Schritt 162, wobei im Schritt 164 der Programmcode, der kompiliert wird, analysiert wird, um nach verschiedenen Eigenschaften zu suchen, wie z. B. Verzweigungsadressen und Variable. Im Schritt 166 werden die Induktionsvariable, die Beispiele der Vorhersagemuster sind, innerhalb des Programmcodes identifiziert, wie in der Technik bekannt ist. Dann werden im Schritt 168 die Ausdrücke für die Verzweigungen berechnet, die von der Induktionsvariable abhängen. Eine Variable, die die Anzahl steuert, in der eine Schleife ausgeführt werden kann, kann z. B. eine Induktionsvariable sein, wobei die tatsächliche Anzahl, in der die Schleife wahrscheinlich ausgeführt wird, berechnet werden kann. Dann wird im Schritt 170 eine Vorhersageoperation in den Programmcode eingefügt, sodass die Vorhersagedaten für den Verzweigungsbefehl, der z. B. die Schleife steuert, aktualisiert werden, um die berechnete Anzahl widerzuspiegeln, mit der vorhergesagt wird, wie oft die Schleife ausgeführt wird. Im Schritt 172 bestimmt der Kompilierer, ob es irgendwelche weiteren Verzweigungen im Computer-Code gibt, die analysiert werden müssen. Wenn es weitere Verzweigungen gibt, dann kann die Steuerung zurück zum Schritt 164 gehen. Die Steuerung kann außerdem zum Schritt 168 zurückkehren, weil eine einzelne Induktionsvariable oder ein Satz von Induktionsvariable mehrere Verzweigungen steuern kann, oder es können alle Induktionsvariable oder Verzweigungen anfangs identifiziert werden. Wenn der Computer-Code vollständig analysiert worden ist, dann endet das Verfahren im Schritt 174.
  • 10 ist ein Ablaufplan eines zweiten Beispiels eines Verfahrens 200 gemäß der Erfindung zum Einfügen von Vorhersageoperationen in einen Computer-Code.
  • Das Verfahren beginnt im Schritt 202, wobei im Schritt 204 der Programmcode, der kompiliert wird, analysiert wird, um nach verschiedenen Eigenschaften zu suchen, wie z. B. Verzweigungsadressen und Variable. Im Schritt 206 werden alle verbreiteten Werte, die Beispiele eines Vorhersageausdrucks sind, innerhalb des Programmcodes identifiziert, wie in der Technik bekannt ist. Dann werden im Schritt 208 die Ausdrücke für die Verzweigungen berechnet, die von dem verbreiteten Wert abhängen. Der Merker, der z. B. eine Verzweigung steuert, die der if-Anweisung entspricht, kann z. B. ein verbreiteter Wert sein, wobei dieser verbreitete Wert berechnet werden kann. Dann wird im Schritt 210 eine Vorhersageoperation in den Programmcode eingefügt, sodass z. B. die Vorhersagedaten für den Verzweigungsbefehl, die den Verzweigungsbefehl steuern, der der if-Anweisung entspricht, aktualisiert werden, um den berechneten Wert des verbreiteten Wertes widerzuspiegeln. Im Schott 212 bestimmt der Kompilierer, ob es irgendwelche weiteren Verzweigungen im Computer-Code gibt, die analysiert werden müssen. Wenn es weitere Verzweigungen gibt, dann kann die Steuerung zurück zum Schritt 204 gehen. Außerdem kann die Steuerung zum Schritt 208 zurückkehren, weil ein einzelner verbreiteter Wert oder ein Satz verbreiteter Werte mehrere Verzweigungen steuern kann, oder es können alle verbreiteten Werte oder Verzweigungen anfangs identifiziert werden. Wenn der Computer-Code vollständig analysiert worden ist, dann endet das Verfahren im Schritt 214. Nun wird ein Beispiel des Einfügens einer Vorhersageoperation für eine Induktionsvariable und einen verbreiteten Wert in ein Stück des Computer-Codes beschrieben.
  • Für dieses Beispiel wird ein Fragment einer einzelnen C-Quellcodeschleife ohne die Vorhersageoperationen kompiliert und dann mit den Vorhersageoperationen am Platz kompiliert und der Wirkung, die die Vorhersageoperationen auf die Vorhersagegenauigkeit des Systems besitzen, gezeigt.
  • Das Fragment des C-Quellcodes kann:
    Figure 00200001
    sein, wobei @1, @2, @3 und @4 beliebige Fragmente des Codes sind. In der Tat kann die Variable flag an anderen Punkten im Code geändert werden. Dieses Fragment eines C-ähnlichen Quellcodes kann in Assemblercode kompiliert werden, der wie:
    Figure 00210001
    aussieht, wobei c@1, c@2, c@3 und c@4 der kompilierte Code für @1, @2, @3 bzw. @4 ist, wobei die Marken innerhalb des kompilierten Codes, wie in der Technik bekannt ist, in Großbuchstaben vorliegen. Die Variable "i" ist eine Induktionsvariable, wie in der Technik bekannt ist. Die Werte "old" und "new" sind verbreitete Werte, wie in der Technik bekannt ist.
  • Wie durch den kompilierten Code gezeigt wird, kann, wenn zum ersten Mal in die Schleife eingetreten wird, das Verzweigungsvorhersagesystem falsch vorhersagen, dass die Verzweigung nicht genommen wird, weil es diese Verzweigung vorher niemals gesehen hat. Dann kann, sobald die Schleife das letzte Mal ausgeführt wird, das herkömmliche Verzweigungsvorhersagesystem falsch vorhersagen, dass die Verzweigung ein weiteres Mal genommen wird. Im Gegensatz sagt die Erfindung alle Verzweigungen richtig vorher, wie im Folgenden beschrieben ist, wobei dies eine Genauigkeit von 100% ergibt.
  • Für die Erfindung können einige Vorhersageoperationen in den kompilierten Code hinzugefügt werden, sodass der revidierte kompilierte Code:
    Figure 00210002
    Figure 00220001
    sein kann, wobei die zwei Beispiel-Vorhersageoperationen "predict" und "repeat" gemäß der Erfindung in den kompilierten Code eingefügt worden sind. Die Vorhersageoperation kann ein erstes Argument, das der vorhergesagte Wert der Bedingung ist, und ein zweites Argument, das die Adresse der Verzweigung ist, für die die Vorhersage gilt, besitzen. Die Vorhersageoperation ändert auf der Grundlage des Programms diesen Wert der Vorhersagedaten, sodass das Verzweigungsvorhersagesystem die Schleife das erste Mal nicht falsch vorhersagt.
  • Die Vorhersageoperation repeat kann ein erstes Argument besitzen, das die vorhergesagte Anzahl sein kann, in der die Verzweigung genommen wird, bevor sie nicht genommen wird. In diesem Beispiel verursacht die Verzweigung, dass das Programm die Schleife n – 1-mal durchläuft. Das zweite Argument der Vorhersageoperation repeat kann die Adresse der Verzweigung sein, für die die Vorhersage gilt. Die Vorhersageoperation repeat modifiziert den Wert der Vorhersagedaten innerhalb des P-STORE, sodass das Verzweigungsvorhersagesystem das Ende der Schleife nicht falsch vorhersagt. Folglich erlaubt die Kombination der Vorhersageoperationen repeat und predict dem programmierbaren Verzweigungsvorhersagesystem, für dieses einfache Beispiel zu 100% genau zu sein. Weil die Werte von FLAG und n bekannt sind, bevor die geeigneten Verzweigungen ausgeführt werden, kann das programmierbare Verzweigungsvorhersagesystem Vorhersageoperationen hinzufügen, um dies auszunutzen. Das gezeigte Beispiel ist ein einfaches Beispiel, wobei viele andere verschiedene Vorhersageoperationen in den Programmcode eingefügt werden können, wie z. B. eine Vorhersageoperation "destination", die das Ziel einer Verzweigung vorhersagen kann. Nun werden die Änderungen im P-STORE für das gezeigte Beispiel, die durch die Erfindung verursacht werden, beschrieben.
  • Für dieses Beispiel kann der P-STORE ein 2-Bit-Sättigungszähler, wie oben beschrieben worden ist, und ein größerer Zähler für jede Verzweigungsadresse sein. Ein Beispiel des Speichers für die vorhergesagten Daten ist in 11 gezeigt. Wie gezeigt ist, besitzt in diesem Beispiel die if-Anweisung im ursprünglichen C-ähnlichen Quellcode den 2-Bit-Zähler, der der TST_FLG-Marke zugeordnet ist, wobei sie in der Tabelle mit 2 Bits markiert ist. Der größere Countdown-Zähler ist der BACK-Marke (für die do-Schleife) zugeordnet, wobei er in der Tabelle mit C markiert ist. Die Werte dieser zwei Stücke der Vorhersagedaten (2 Bits und C) innerhalb des Speichersystems sind an verschiedenen Punkten bei der Ausführung des Programmcodes gezeigt, sodass die durch die Vorhersageoperationen vorgenommenen Änderungen deutlicher werden.
  • Am Anfang der Ausführung des kompilierten Programmcodes können der 2-Bit-Zähler für die if-Anweisung und die do/while-Schleife beide auf "00" gesetzt sein, wobei der Countdown-Zähler für beide Verzweigungen außerdem auf "0" gesetzt ist. Für ein komplexeres Programm würde es mehr Einträge in der Tabelle geben. Wenn die Vorhersageoperation "repeat n – 1, BACK" ausgeführt wird, bleibt der 2-Bit-Zähler für die if-Anweisung unbeeinflusst, aber der C-Zähler für die do/while-Schleife wird auf "n – 1" gesetzt, dies stellt die vorhergesagte Anzahl dar, in der die Verzweigung genommen wird, um die Schleife auszuführen. Außerdem kann der 2-Bit-Zähler für die do/while-Schleife auf "10" oder irgendeinen anderen Wert gesetzt sein, der anzeigt, dass die Verzweigung das nächste Mal genommen werden sollte. Wie oben beschrieben worden ist, verhindert das Setzen des C-Zählers und des 2-Bit-Zählers auf "n – 1" bzw. "10" vor der tatsächlichen Ausführung der do-Schleife, dass die Verzweigungsvorhersageeinrichtung falsch vorhersagt, dass die erste Verzweigung der do/while-Schleife nicht genommen wird. Das Verhalten der gezeigten Schleife kann außerdem vorhergesagt werden, indem der 2-Bit-Zähler ignoriert wird und auf den C-Zähler vertraut wird. Wenn der C-Zähler null erreicht, sollte vorhergesagt werden, dass die nächste Ausführung der Verzweigung nicht genommen wird. Folglich kann, selbst wenn die Verzweigungsvorhersageeinrichtung die do/while-Schleife vorher niemals gesehen hat, die programmierbare Verzweigungsvorhersageeinrichtung sicherstellen, dass die erste Verzweigung der do/while-Schleife richtig vorhergesagt wird.
  • Wenn der Vorhersageoperation "predict old, TSTFLG" begegnet wird, kann der 2-Bit-Zähler für den Verzweigungsbefehl, der der if-Anweisung entspricht, auf "0X" zurückgesetzt werden, falls z. B. angenommen wird, dass "old" falsch ist, wobei die Zähler für die do/while-Schleife unbeeinflusst bleiben. Das "X" zeigt an, dass der Wert dieses Bits nicht wichtig ist, wobei es irgendeinen Wert sein kann. Wenn die Vorhersageoperation "predict new, TSTFLG" ausgeführt wird, wird der 2-Bit-Zähler, der dem Verzweigungsbefehl entspricht, der der if-Anweisung entspricht, auf "1X" gesetzt, falls z. B. angenommen wird, dass "new" wahr ist, was erzwingt, dass vorhergesagt wird, dass die Verzweigung genommen wird. Diese Einstellung des 2-Bit-Zählers für die Verzweigung, die der if-Anweisung entspricht, verhindert abermals, dass die Verzweigungsvorhersageeinrichtung die erste Verzweigung der if-Anweisung falsch vorhersagt. Die Zähler für die Verzweigung, die der do/while-Schleife entspricht, bleiben unbeeinflusst.
  • Wenn die Verzweigungsoperation "branch i < n, TOP" ausgeführt wird, wird die Verzweigung zurück zum Anfang des Codes richtig vorhergesagt, weil der C-Zähler und der 2-Bit-Zähler des Verzweigungsbefehls, der die do/while-Schleife implementiert, eingestellt worden sind, um vorherzusagen, dass die Verzweigung genommen wird, wobei der C-Zähler um eins dekrementiert wird, sodass er gleich "n – 2" sein kann. Der 2-Bit-Zähler für die Verzweigung, die der do/while-Schleife entspricht, hält fortgesetzt einen Wert von "11", weil die do/while-Verzweigung mehrmals genommen worden ist. Die Zähler für die Verzweigung, die der if-Anweisung entspricht, bleiben unbeeinflusst. Die Ausführung des Programmcodes wird in dieser Weise bis zum Ende der do/while-Schleife fortgesetzt.
  • Am Ende der do/while-Schleife ist der C-Zähler gleich "0", während der 2-Bit-Zähler für die Verzweigung, die der do/while-Schleife entspricht, durch das programmierbare Vorhersagesystem auf "00" zurückgesetzt wird, sodass das nächste Mal, wenn die do/while-Schleife ausgeführt wird, die Verzweigungsvorhersageeinrichtung richtig vorhersagen wird, dass die Verzweigung nicht genommen wird. Eine herkömmliche Verzweigungsvorhersageeinrichtung kann falsch vorhersagen, dass die Verzweigung genommen wird, weil diese herkömmlichen Systeme das frühere Verzweigungsverhalten verwenden, um die Werte der Vorhersagedaten zu aktualisieren und um folglich das künftige Verhalten vorherzusagen. Wie in diesem Beispiel gezeigt ist, verringert die programmierbare Verzweigungsvorhersageeinrichtung gemäß der Erfindung die falschen Vorhersagen in einer herkömmlichen automatischen Verzweigungsvorhersageeinrichtung, wie z. B. Ein-Bit- oder Zwei-Bit-Zählern. Die Vorhersagegenauigkeit der program mierbaren Verzweigungsvorhersageeinrichtung beträgt für dieses Beispiel 100%. Weil das Vorhersagen des Verhaltens einer Verzweigung am Anfang und am Ende von Schleifen, wie z. B. Verzweigungen, die do/while implementieren, verursacht, dass die meisten herkömmlichen Verzweigungsvorhersageeinrichtungen wenigstens einmal falsch vorhersagen, kann die programmierbare Verzweigungsvorhersageeinrichtung gemäß der Erfindung diesen Anfang und dieses Ende von Schleifenverzweigungen richtig vorhersagen.
  • Das System und das Verfahren zum Einfügen von einer oder mehreren Vorhersageoperationen in einen Programmcode, um die Leistung einer automatischen Verzweigungsvorhersageeinrichtung zu verbessern, kann innerhalb des Prozessors des Computer-Systems ausgeführt werden, wie oben beschrieben worden ist, oder es kann durch einen separaten Prozessor ausgeführt werden, der ein Kompilierungsprogramm ausführt. Die Erzeugung und das Einfügen von einer oder mehreren Vorhersageoperationen können in einem vom System mit der programmierbaren Verzweigungsvorhersageeinrichtung vollständig verschiedenen Computer-System ausgeführt werden. Außerdem können die Erzeugung und die Einfügung der einen oder der mehreren Vorhersageoperationen unmittelbar vor der Verzweigungsvorhersage oder irgendwann vor irgendeiner Verzweigungsvorhersage ausgeführt werden. Das obenbeschriebene programmierbare Verzweigungsvorhersagesystem kann folglich, muss aber nicht, die eine oder die mehreren Vorhersageoperationen erzeugen oder einfügen. Deshalb kann das programmierbare Verzweigungsvorhersagesystem Programmcode ausführen, in dem ein oder mehrere Verzweigungsbefehle vorher eingefügt worden sind. Ähnlich können das System und das Verfahren zum Erzeugen und Einfügen der einen oder der mehreren Vorhersageoperationen unabhängig vom obenbeschriebenen programmierbaren Verzweigungsvorhersagesystem verwendet werden. Es werden nun zwei spezifische Beispiele der Vorhersageoperationen beschrieben.
  • Die Vorhersageoperationen, die erzeugt und in einen Programmcode eingefügt werden, können entweder die Vorhersagedaten aktualisieren, indem sie neue Daten in den P-STORE schreiben, oder die Vorhersagedaten aktualisieren, indem sie die neuen Daten spezifizieren, die von einer bestimmten Stelle in den P-STORE gelesen werden sollten. Diese Vorhersageoperationen, die Daten schreiben, können z. B. die obenbeschriebenen Vorhersageoperationen predict und repeat sein. Diese Vorhersageoperationen für das Schreiben der Vorhersagedaten können aber außerdem irgendein Typ der Vorhersageoperation sein, die eine Referenz auf die Verzweigung, wie z. B. Verzweigungsadresse, und die zu aktualisierenden Vorhersagedaten besitzt.
  • Diese Vorhersageoperationen für das Schreiben der Vorhersagedaten können aus einer oder mehreren Vorhersageoperationen bestehen oder sie können als verschiedene fundamentale Befehle ausgedrückt sein. Die Vorhersageoperation "predict old, TSTFLG" und die Vorhersageoperation "predict new, TSTFLG" können z. B. tatsächlich fundamentale Befehle sein, sodass die Vorhersageoperationen den P-STORE beeinflussen, aber keine Wirkung in älteren Systemen besitzen, die das programmierbare Verzweigungsvorhersagesystem nicht besitzen. Beide Befehle verursachen, dass die Vorhersagedaten für die Verzweigung, auf die durch TSTFLG Bezug genommen wird, durch das Schreiben der Vorhersagedaten in den P-STORE aktualisiert werden. Die aktualisierten Vorhersagedaten können verursachen, dass vorhergesagt wird, dass die Verzweigung entweder genommen oder nicht genommen wird.
  • Die Vorhersageoperation kann außerdem als mehr als ein fundamentaler Befehl ausgedrückt sein. Die Vorhersageoperation "predict old, TSTFLG" kann z. B. als:
    mov<data>, E
    mov<address>, F
    oder
    output<data>, G
    output<address>, H
    ausgedrückt sein, wobei E–H so gewählt sind, dass der Befehl in einem älteren System nichts tut, er aber einem neueren System den P-STORE beeinflusst. Bei diesem Beispiel aus zwei Befehlen aktualisiert der erste Befehl in jedem Paar die Daten, während der zweite Befehl in jedem Paar die Adresse aktualisiert. Ähnlich kann eine Vorhersageoperation mit drei fundamentalen Befehlen implementiert sein, wobei der erste Befehl die Vorhersagedaten spezifiziert, der zweite Befehl die Verzweigungsreferenz spezifiziert und der dritte Befehl die Operation an den Vorhersagedaten ausführt. Folglich kann die Vorhersageoperation aus irgendeiner Anzahl fundamentaler Befehle bestehen. Nun wird ein Beispiel einer Lesevorhersageoperation unter Verwendung des Befehls gemäß der Erfindung beschrieben.
  • Eine Lesevorhersageoperation ist zu den obenbeschriebenen Schreibvorhersage operationen ähnlich, mit Ausnahme, dass die Lesevorhersageoperation spezifiziert, wo die Vorhersagedaten gespeichert sind, aber nicht die geschriebenen Daten spezifiziert, wie im Folgenden beschrieben ist. Wie die Schreibvorhersageoperationen kann die Lesevorhersageoperation in einen oder mehrere fundamentale Befehle zerlegt sein. Ein Beispiel der Lesevorhersageoperation wird nun beschrieben.
  • Wie oben beschrieben worden ist, kann ein Prozessschalter durch das programmierbare Verzweigungsvorhersagesystem gemäß der Erfindung gehandhabt werden, weil die Inhalte des P-STORE vor dem Prozessschalter gespeichert werden können, wobei dann, wenn der Prozess abermals gestartet wird, die Vorhersagedaten für den speziellen Prozess zurück im P-STORE gespeichert werden können. Wenn durch den Kompilierer ein Prozessschalter lokalisiert wird, werden die Vorhersagedaten aus dem P-STORE gelesen und unter Verwendung z. B. einer Vorhersageoperation "save <prediction data>" gespeichert, die z. B. durch einen fundamentalen Befehl "mov PSTORE[0...n], SAVE[0..n]", eine Folge von Befehlen oder ein Unterprogramm implementiert sein kann. Folglich werden einige oder alle Daten aus dem P-STORE in einer SAVE-Stelle gespeichert. Dann können, wenn das Programm zurück zum ursprünglichen Prozess schaltet, die in einer SAVE-Stelle gespeicherten Vorhersagedaten zurück in den P-STORE wiederhergestellt werden, z. B. durch eine Vorhersageoperation "restore <prediction data>", die z. B. durch einen fundamentalen Befehl "mov SAVE[0..n], PSTORE[0..n]", eine Folge von Befehlen oder ein Unterprogramm implementiert sein kann. Diese Lesevorhersageoperationen würden so eingefügt werden, dass sie etwa zu dem Zeitpunkt ausgeführt werden, zu dem ein Prozessschalter auftritt.

Claims (21)

  1. System zum Vorhersagen von Verzweigungen in einem Computersystem, das umfaßt: einen Speicher (26), der einen Programmcode enthält, der mehrere Befehle umfaßt, wobei die Befehle einen Verzweigungsbefehl und eine Vorhersageoperation enthalten, wobei die Vorhersageoperation in den Programmcode an einer vorgegebenen Stelle in dem Programmcode in Bezug auf den Verzweigungsbefehl eingefügt wird und in den Programmcode vor der Ausführung des Programmcodes eingefügt wird; einen Vorhersagespeicher (38), der verzweigungsspezifische Vorhersagedaten enthält; eine Einrichtung zum Schreiben von Vorhersagedaten für die Verzweigung in den Vorhersagespeicher (38) in Reaktion auf die Ausführung der in dem Programmcode enthaltenen Vorhersageoperation; und eine Einrichtung (36) zum Vorhersagen des Verhaltens des Verzweigungsbefehls auf der Grundlage der Vorhersagedaten in dem Vorhersagespeicher (38).
  2. System nach Anspruch 1, bei dem die Vorhersageeinrichtung (36) eine Einrichtung zum Vorhersagen einer Zielreferenz einer Verzweigung, deren Wahl vorhergesagt wird, umfaßt.
  3. System nach Anspruch 1, bei dem die Vorhersageeinrichtung (36) eine Einrichtung zum Vorhersagen einer Entscheidung über eine Verzweigung umfaßt.
  4. System nach Anspruch 1, bei dem die Vorhersageeinrichtung (36) ein Computerprogramm umfaßt, das durch den Prozessor ausgeführt wird.
  5. System nach Anspruch 1, bei dem die Vorhersageoperation eine Entscheidung über eine vorhergesagte Verzweigung vornimmt.
  6. System nach Anspruch 1, bei dem der Verzweigungsbefehl den Programmcode zu einer Schleife veranlaßt und die Vorhersageoperation eine Wiederholungsvorhersageoperation umfaßt, so daß die vorhergesagte Anzahl, in der die Schleife ausgeführt wird, in den Vorhersagespeicher (38) geschrieben wird, so daß sie von der Vorhersageeinrichtung (36) verwendet werden kann, um das Schleifenverhalten der Verzweigung vorherzusagen.
  7. System nach Anspruch 1, bei dem die Vorhersageoperation ein Ziel einer vorhergesagten Verzweigung schafft.
  8. System nach Anspruch 1, bei dem die Vorhersageoperation ein Argument enthält, das die Adresse des Verzweigungsbefehls angibt.
  9. System nach Anspruch 1, bei dem die Vorhersageoperation ein Argument enthält, das eine Stelle in dem Vorhersagespeicher (38) angibt.
  10. System nach Anspruch 1, bei dem die Vorhersageoperation Vorhersagedaten modifiziert, die der Verzweigung entsprechen und bereits in dem Vorhersagespeicher (38) vorhanden sind.
  11. System nach Anspruch 1, bei dem der Programmcode außerdem eine zweite Vorhersageoperation enthält und wobei das System ferner eine Einrichtung zum Lesen von Vorhersagedaten aus dem Vorhersagespeicher (38) in Reaktion auf die Ausführung der zweiten Vorhersageoperation umfaßt.
  12. System nach Anspruch 11, bei dem die zweite Vorhersageoperation die aus dem Vorhersagespeicher ausgelesenen Vorhersagedaten unter Verwendung eines Arguments, das die Adresse der Verzweigung angibt, identifiziert.
  13. System nach Anspruch 11, bei dem die zweite Vorhersageoperation die aus dem Vorhersagespeicher (38) ausgelesenen Vorhersagedaten unter Verwendung eines Arguments, das ihren Ort in dem Vorhersagespeicher (38) angibt, identifiziert.
  14. Verfahren (160) zum Einfügen von Vorhersageoperationen in einen Programmcode vor der Ausführung des Programmcodes, wobei der Programmcode mehrere Befehle einschließlich Verzweigungsbefehlen umfaßt, um ein Verhalten einer Verzweigung vorherzusagen, wobei das Verfahren umfaßt: Analysieren (164) des Programmcodes vor der Ausführung des Programmcodes, um eine Verzweigung zu lokalisieren, deren Verhalten von einer vorgegebenen Eigenschaft abhängt; Berechnen (168) der Werte der vorgegebenen Eigenschaft vor der Ausfüh rung der Verzweigung; Erzeugen einer Vorhersageoperation, um die Werte der vorgegebenen Eigenschaft in einem Vorhersagespeicher zu speichern; und Einfügen (170) der Vorhersageoperation in den Programmcode vor der Ausführung des Programmcodes, so daß die Vorhersageoperation vor dem Verzweigungsbefehl ausgeführt wird, um das Verhalten des Verzweigungsbefehls auf der Grundlage der in dem Vorhersagespeicher gespeicherten berechneten Werte vorherzusagen.
  15. Verfahren nach Anspruch 14, bei dem die vorgegebene Eigenschaft eine Induktionsvariable enthält.
  16. Verfahren nach Anspruch 14, bei dem die vorgegebene Eigenschaft ein Vorhersagemuster enthält.
  17. Verfahren nach Anspruch 14, bei dem die vorgegebene Eigenschaft einen Vorhersageausdruck enthält.
  18. Verfahren nach Anspruch 14, bei dem die vorgegebene Eigenschaft einen verbreiteten Wert enthält.
  19. Verfahren nach Anspruch 14, bei dem das Einfügen das Einfügen der Vorhersageoperation in den Programmcode während der Kompilierung des Programmcodes umfaßt.
  20. Verfahren nach Anspruch 14, bei dem die Berechnung ferner die Bestimmung, welche Argumente der Vorhersageoperation Werte besitzen, die bekannt sind, wenn die Vorhersageoperation eingefügt wird, die Berechnung der Werte der Argumente und die Einfügung eines oder mehrerer Befehle für die Berechnung der Werte irgendwelcher verbleibender Argumente der Vorhersageoperation in den Programmcode umfaßt.
  21. Verfahren nach Anspruch 20, bei dem einer oder mehrere der eingefügten Befehle eine Vorhersageoperation umfassen, die Vorhersagedaten aus dem Vorhersagespeicher lesen.
DE69725278T 1996-08-02 1997-07-25 Programmierbares system und verfahren zum vorhersagen von verzweigungen für computersysteme Expired - Lifetime DE69725278T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US691785 1996-08-02
US08/691,785 US5949995A (en) 1996-08-02 1996-08-02 Programmable branch prediction system and method for inserting prediction operation which is independent of execution of program code
PCT/US1997/013307 WO1998006032A1 (en) 1996-08-02 1997-07-25 Programmable branch prediction system and method for computer systems

Publications (2)

Publication Number Publication Date
DE69725278D1 DE69725278D1 (de) 2003-11-06
DE69725278T2 true DE69725278T2 (de) 2004-08-26

Family

ID=24777970

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69725278T Expired - Lifetime DE69725278T2 (de) 1996-08-02 1997-07-25 Programmierbares system und verfahren zum vorhersagen von verzweigungen für computersysteme

Country Status (7)

Country Link
US (1) US5949995A (de)
EP (1) EP0855058B1 (de)
JP (2) JPH11513164A (de)
AT (1) ATE251319T1 (de)
AU (1) AU3817797A (de)
DE (1) DE69725278T2 (de)
WO (1) WO1998006032A1 (de)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE509499C2 (sv) * 1996-05-03 1999-02-01 Ericsson Telefon Ab L M Metod och anordning för hantering av villkorliga hopp vid instruktionsbehandling i en pipeline-arkitektur
JPH1185515A (ja) * 1997-09-10 1999-03-30 Ricoh Co Ltd マイクロプロセッサ
US6079003A (en) * 1997-11-20 2000-06-20 Advanced Micro Devices, Inc. Reverse TLB for providing branch target address in a microprocessor having a physically-tagged cache
US6079005A (en) * 1997-11-20 2000-06-20 Advanced Micro Devices, Inc. Microprocessor including virtual address branch prediction and current page register to provide page portion of virtual and physical fetch address
US6266764B1 (en) * 1998-03-17 2001-07-24 Matsushita Electric Industrial Co., Ltd. Program controller for switching between first program and second program
US6205545B1 (en) * 1998-04-30 2001-03-20 Hewlett-Packard Company Method and apparatus for using static branch predictions hints with dynamically translated code traces to improve performance
US6189141B1 (en) * 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
US6243805B1 (en) 1998-08-11 2001-06-05 Advanced Micro Devices, Inc. Programming paradigm and microprocessor architecture for exact branch targeting
US6430682B1 (en) * 1998-09-11 2002-08-06 Agere Systems Guardian Corp. Reliable branch predictions for real-time applications
US6611910B2 (en) * 1998-10-12 2003-08-26 Idea Corporation Method for processing branch operations
US6185669B1 (en) * 1999-02-18 2001-02-06 Hewlett-Packard Company System for fetching mapped branch target instructions of optimized code placed into a trace memory
US6481008B1 (en) * 1999-06-30 2002-11-12 Microsoft Corporation Instrumentation and optimization tools for heterogeneous programs
US6446197B1 (en) * 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
US20020066081A1 (en) * 2000-02-09 2002-05-30 Evelyn Duesterwald Speculative caching scheme for fast emulation through statically predicted execution traces in a caching dynamic translator
US6725335B2 (en) * 2000-02-09 2004-04-20 Hewlett-Packard Development Company, L.P. Method and system for fast unlinking of a linked branch in a caching dynamic translator
US6859875B1 (en) * 2000-06-12 2005-02-22 Freescale Semiconductor, Inc. Processor having selective branch prediction
US6970985B2 (en) 2002-07-09 2005-11-29 Bluerisc Inc. Statically speculative memory accessing
US7278136B2 (en) * 2002-07-09 2007-10-02 University Of Massachusetts Reducing processor energy consumption using compile-time information
US6934865B2 (en) * 2002-07-09 2005-08-23 University Of Massachusetts Controlling a processor resource based on a compile-time prediction of number of instructions-per-cycle that will be executed across plural cycles by the processor
US20050114850A1 (en) 2003-10-29 2005-05-26 Saurabh Chheda Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control
US7996671B2 (en) 2003-11-17 2011-08-09 Bluerisc Inc. Security of program executables and microprocessors based on compiler-architecture interaction
US8607209B2 (en) 2004-02-04 2013-12-10 Bluerisc Inc. Energy-focused compiler-assisted branch prediction
JP4134179B2 (ja) * 2005-02-04 2008-08-13 株式会社ソニー・コンピュータエンタテインメント ソフトウエアによる動的予測方法および装置
US7487340B2 (en) * 2006-06-08 2009-02-03 International Business Machines Corporation Local and global branch prediction information storage
US8301871B2 (en) * 2006-06-08 2012-10-30 International Business Machines Corporation Predicated issue for conditional branch instructions
US20080126766A1 (en) 2006-11-03 2008-05-29 Saurabh Chheda Securing microprocessors against information leakage and physical tampering
JP4526560B2 (ja) * 2007-12-05 2010-08-18 日本テキサス・インスツルメンツ株式会社 プロセッサおよび信号処理方法
JPWO2012127589A1 (ja) * 2011-03-18 2014-07-24 富士通株式会社 マルチコアプロセッサシステム、および分岐予測方法
US9032191B2 (en) 2012-01-23 2015-05-12 International Business Machines Corporation Virtualization support for branch prediction logic enable / disable at hypervisor and guest operating system levels
US8935694B2 (en) 2012-01-23 2015-01-13 International Business Machines Corporation System and method for selectively saving and restoring state of branch prediction logic through separate hypervisor-mode and guest-mode and/or user-mode instructions
JP2013250593A (ja) * 2012-05-30 2013-12-12 Renesas Electronics Corp 半導体装置

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4370711A (en) * 1980-10-21 1983-01-25 Control Data Corporation Branch predictor using random access memory
US4763245A (en) * 1985-10-30 1988-08-09 International Business Machines Corporation Branch prediction mechanism in which a branch history table is updated using an operand sensitive branch table
US5228131A (en) * 1988-02-24 1993-07-13 Mitsubishi Denki Kabushiki Kaisha Data processor with selectively enabled and disabled branch prediction operation
US5136696A (en) * 1988-06-27 1992-08-04 Prime Computer, Inc. High-performance pipelined central processor for predicting the occurrence of executing single-cycle instructions and multicycle instructions
US5313637A (en) * 1988-11-29 1994-05-17 Rose David K Method and apparatus for validating authorization to access information in an information processing system
US5197137A (en) * 1989-07-28 1993-03-23 International Business Machines Corporation Computer architecture for the concurrent execution of sequential programs
US5471593A (en) * 1989-12-11 1995-11-28 Branigin; Michael H. Computer processor with an efficient means of executing many instructions simultaneously
US5226130A (en) * 1990-02-26 1993-07-06 Nexgen Microsystems Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
US5276882A (en) * 1990-07-27 1994-01-04 International Business Machines Corp. Subroutine return through branch history table
JPH04229337A (ja) * 1990-12-27 1992-08-18 Hitachi Ltd エミュレータ
JPH04264923A (ja) * 1991-02-20 1992-09-21 Nec Corp 情報処理装置
US5303355A (en) * 1991-03-27 1994-04-12 Motorola, Inc. Pipelined data processor which conditionally executes a predetermined looping instruction in hardware
JPH06124206A (ja) * 1992-10-13 1994-05-06 Oki Electric Ind Co Ltd 分岐命令予測処理装置及びその処理方法
JP3499252B2 (ja) * 1993-03-19 2004-02-23 株式会社ルネサステクノロジ コンパイル装置及びデータ処理装置
JPH09500989A (ja) * 1993-05-14 1997-01-28 インテル・コーポレーション 分岐ターゲット・バッファにおける推論履歴
US5454117A (en) * 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
IE940855A1 (en) * 1993-12-20 1995-06-28 Motorola Inc Data processor with speculative instruction fetching and¹method of operation
JP3599409B2 (ja) * 1994-06-14 2004-12-08 株式会社ルネサステクノロジ 分岐予測装置
US5664191A (en) * 1994-06-30 1997-09-02 Microsoft Corporation Method and system for improving the locality of memory references during execution of a computer program
US5742804A (en) * 1996-07-24 1998-04-21 Institute For The Development Of Emerging Architectures, L.L.C. Instruction prefetch mechanism utilizing a branch predict instruction

Also Published As

Publication number Publication date
JPH11513164A (ja) 1999-11-09
DE69725278D1 (de) 2003-11-06
ATE251319T1 (de) 2003-10-15
JP2007058875A (ja) 2007-03-08
WO1998006032A1 (en) 1998-02-12
US5949995A (en) 1999-09-07
AU3817797A (en) 1998-02-25
EP0855058B1 (de) 2003-10-01
EP0855058A1 (de) 1998-07-29
EP0855058A4 (de) 2000-01-12

Similar Documents

Publication Publication Date Title
DE69725278T2 (de) Programmierbares system und verfahren zum vorhersagen von verzweigungen für computersysteme
DE69031991T2 (de) Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen
DE3587277T2 (de) System fuer die umgehungssteuerung beim pipelinebetrieb eines computers.
DE68921775T2 (de) Prozessorssimulation.
DE69635881T2 (de) VLIW-Befehlsprozessor mit variabler Wortlänge
DE68921776T2 (de) Prozessorssimulation.
DE19527031C2 (de) Verzweigungsprozessor für ein Datenverarbeitungssystem und Verfahren zum Betreiben eines Datenverarbeitungssystems
DE69929936T2 (de) Verfahren und Vorrichtung zum Abrufen von nicht-angrenzenden Befehlen in einem Datenverarbeitungssystem
DE3785897T2 (de) Steuervorrichtung zum vorabruf von befehlen.
DE3685863T2 (de) Rechnersystem zur steuerung virtueller maschinen.
DE68927492T2 (de) Verfahren und Vorrichtung zur gleichzeitigen Verteilung von Befehlen an mehrere funktionelle Einheiten
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE69433621T2 (de) Geraet zur verarbeitung von befehlen in einem rechnersystem
DE69811474T2 (de) Rechnerarchitektur zur aufschiebung von exceptions statischer spekulativer befehle
DE3851746T2 (de) Sprungvorhersage.
DE69534113T2 (de) Kompression der Befehlswörter eines Rechners
DE69738188T2 (de) Verfahren und apparat für eine erhöhte genauigkeit bei der verzweigungsvorhersage in einem superskalaren mirkroprozessor
DE2630323C3 (de) Datenspeichereinrichtung mit einem Hauptspeicher, einem HilfsSpeicher und einer Vorausschaulogik
DE3116100C2 (de) Datenverarbeitungseinheit
DE69736164T2 (de) Datenverarbeitungsvorrichtung mit Verzweigungsvorhersage
DE19855806A1 (de) Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen
WO1994022079A1 (de) Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
DE3689389T2 (de) Datenverarbeitungsprozessor.
DE102004013676A1 (de) Schleifenbetrieb mit null Overhead in einem Mikroprozessor mit Anweisungspuffer
DE69727177T2 (de) Emulation von asynchronen Signalen mit Verzweigungsmechanismus

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: YELLOW DATA ACESS, LLC, LOS ALTOS, CALIF., US

8381 Inventor (new situation)

Inventor name: FREEMAN, JACKIE A., SAN JOSE, CALIF., US