DE3751474T2 - Verzweigungsstrom-Koprozessor. - Google Patents
Verzweigungsstrom-Koprozessor.Info
- Publication number
- DE3751474T2 DE3751474T2 DE3751474T DE3751474T DE3751474T2 DE 3751474 T2 DE3751474 T2 DE 3751474T2 DE 3751474 T DE3751474 T DE 3751474T DE 3751474 T DE3751474 T DE 3751474T DE 3751474 T2 DE3751474 T2 DE 3751474T2
- Authority
- DE
- Germany
- Prior art keywords
- instruction
- instructions
- branch
- buffer
- computing device
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 239000000872 buffer Substances 0.000 claims description 127
- 238000007781 pre-processing Methods 0.000 claims description 28
- 238000012545 processing Methods 0.000 claims description 27
- 238000000034 method Methods 0.000 claims description 23
- 230000015654 memory Effects 0.000 claims description 22
- 238000005070 sampling Methods 0.000 claims description 5
- 238000001514 detection method Methods 0.000 claims description 4
- 230000004044 response Effects 0.000 claims description 3
- 238000012937 correction Methods 0.000 description 22
- 230000009471 action Effects 0.000 description 17
- 238000013459 approach Methods 0.000 description 14
- 230000000903 blocking effect Effects 0.000 description 13
- 230000001934 delay Effects 0.000 description 13
- 238000012360 testing method Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 230000008859 change Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 239000011159 matrix material Substances 0.000 description 5
- 238000013500 data storage Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000003111 delayed effect Effects 0.000 description 3
- 230000008521 reorganization Effects 0.000 description 3
- 230000001174 ascending effect Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000002023 wood Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative 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)
Description
- Die Erfindung betrifft die Auflösung von Verzweigungsbefehlen in Befehlsfolgen, die von Computern ausgeführt werden können. Im besonderen betrifft die Erfindung die frühzeitige Auflösung von bedingten Verzweigungsbefehlen, um dadurch Verzögerungen bei der Ausführung einer Folge von Befehle zu reduzieren. Die Erfindung beabsichtigt ebenfalls, Verzögerungen zu vermeiden, die durch die Benutzung von gleichen Registern durch aufeinanderfolgende Befehle innerhalb einer Befehlsfolge auftreten.
- Die am meisten verwendeten Computerarchitekturen, einschließlich der IBM System 370 Architektur, basieren auf einem sequentiellen Modell der Programmausführung, worin jeder Programmbefehl aus dem Speicher geholt wird, vollständig ausgeführt wird und alle Ergebnisse in den Speicher zurückgespeichert werden, bevor der nächste Befehl aus dem Speicher geholt werden kann. Das Modell legt auch fest, daß der nächste Befehl normalerweise der in aufsteigender Adressenfolge unmittelbar folgende Befehl ist, mit der Ausnahme, daß bestimmte Befehle, sogenannte Verzweigungsbefehle, einen speziellen Speicherplatz bereitstellen, der sich von der nächsthöheren Adresse unterscheidet, von wo aus der nächste Befehl geholt werden soll. Dieser spezielle Platz wird als Verzweigungsziel bezeichnet; und man sagt, daß eine Verzweigung genommen wird, wenn der nächste nach der Verzweigung auszuführende Befehl der Zielbefehl ist.
- Es gibt unbedingte Verzweigungen, das heißt, sie werden immer genommen, oder Verzweigungen können bedingt sein, das heißt, sie werden nur genommen, wenn eine Bedingung (in der IBM System 370 Architektur der Bedingungscode), die durch einen vorhergehenden Befehl gesetzt wurde, einen spezifizierten Wert besitzt. Wenn eine bedingte Verzweigung nicht genommen wird, ist der als nächster abzurufende und auszuführende Befehl der nächste Befehl in der Befehlsfolge.
- Die frühesten Computer entsprachen nicht nur diesem Modell, sondern waren auch in ihrer Arbeitsweise sequentiell, so daß Verzweigungsbefehle keine besondere Schwierigkeit darstellten. Wenn ein Verzweigungsbefehl auftrat, führte der Computer lediglich den Befehl aus und sprang dann entsprechend dem Ergebnis der Ausführung zu dem passenden Speicherplatz, um den nächsten Befehl zu holen. Diese Verzögerung war akzeptabel, solange die Computer langsamer arbeiteten, es einer größeren Anzahl Maschinenzyklen bedurfte, um einen Befehl zu holen und auszuführen. Die Anzahl der Verzögerungszyklen, die durch eine genommene Verzweigung hervorgerufen wurden, war im Vergleich nicht signifikant.
- In einer Anzahl neuerer Maschinen überlappen sich das Holen und das Ausführen der Befehle. Während ein Befehl ausgeführt wird, wird der nächste und ein in der Folge noch weiter unten stehender Befehl aus dem Speicher geholt. Wenn keine Verzweigungen auftreten, ist die überlappende Arbeitsweise zufriedenstellend. Wenn man jedoch auf eine Verzweigung stößt und diese genommen wird, bewirkt dieser Ansatz des Überlappens des Befehlsholens/ausführens, daß unrichtige Befehle in die Befehlsfolge geholt werden. Nun würde, da ein ausgeführter Verzweigungsbefehl zu einem zusätzlichen Holen des Zielbefehls führen würde, welcher dann den während des überlappten Zeitraumes geholten Befehl ersetzen würde, das Vorhandensein eines unrichtigen Befehls nicht zu einem sehr großen Problem werden. Wenn auch wertvolle Maschinenzyklen verloren gehen, so ist für weniger weit überlappende Verfahren, wie beispielsweise ein Zwei-Schritt-Überlappen, der Verlust nicht unerträglich.
- Mit dem Anwachsen der Verarbeitungsgeschwindigkeit ist auch der Grad der Überlappung gestiegen, so daß die Anzahl der pro Maschinenzyklus geholten Befehle und Befehlsausführungen gewachsen ist. Folglich hat sich die Verzögerung im Verhältnis zur benötigten Ausführungszeit dramatisch vergrößert, auch wenn die Anzahl der durch eine genommene Verzweigung bewirkten Verzögerung in Maschinenzyklen nicht angewachsen ist.
- Hochleistungsprozessoren, wie beispielsweise die IBM 3033 und 3039, welche wie unten noch diskutiert wird, einen "Pipeline"- Ansatz für die Befehlsausführung benutzen, benötigen sehr große Speicher. Die Zeit, die benötigt wird, um auf diese Speicher zuzugreifen, ist wesentlich größer als die Zyklus zeit des Prozessors. Als ein Ergebnis dessen würde Prozessorzeit verschwendet, wenn ein direkter Speicherzugriff verwendet würde.
- Folglich wurde die Technik der Anwendung kleinerer Speicher (sogenannter Cache) entwickelt, um die Vorteile der Prozessorgeschwindigkeit nutzen zu können. Diese Cachespeicher sind wesentlich kleiner als die Prozessorspeicher und erfordern dementsprechend kürzere Zugriffszeiten, im allgemeinen in der Größenordnung von zwei Maschinenzyklen. Die Cachespeicher speichern Daten und Befehle, die als letzte vom Prozessor verwendet wurden, wobei die Erfahrung gezeigt hat, daß diese Daten und Befehle das sind, was der Prozessor in der unmittelbaren Zukunft, während der Ausführung eines gegebenen Programms mit höchster Wahrscheinlichkeit wieder benötigt.
- Durch die Verwendung von Cachespeichern, die eine signifikante Verringerung der Speicherzugriffszeit ermöglichen, ist es möglich geworden, die übergroße Mehrheit an Programmbefehlen in vier oder fünf Schritten wie folgt zu verarbeiten:
- 1) Holen des Befehls aus dem Speicher.
- 2) Decodieren des Befehls, Lesen von Universalregistern, die für die Basis- und Indexwerte kennzeichnen (Operanden) vorgesehen sind.
- 3) Adreßerzeugung: Erzeugen einer effektiven Adresse durch Addieren der Basis-, Index- und Distanzwerte.
- 4) Zugriff auf den Cache unter Verwendung der erzeugten effektiven Adresse (wenn es der decodierte Befehl erforderlich macht, einen Operanden aus dem Speicher zu holen. Der Cachezugriff benötigt im allgemeinen zwei Maschinenzyklen, kann jedoch auch nur einen benötigen, wenn der notwendige Operand oder die Operanden in Registern anstatt im Cache gespeichert sind.)
- 5) Ausführen des Befehls (Bei den meisten Befehlen dauert die Ausführung einen Maschinenzyklus.)
- Im allgemeinen werden für jeden Schritt separate Einrichtungen bereitgestellt, und jeder Schritt benötigt normalerweise nur einen Maschinenzyklus, so daß die Schritte, die für die Ausführung eines Befehls erforderlich sind, mit den Schritten, die für die Ausführung von drei oder vier Befehlen erforderlich sind, überlappen können, wobei die Schritte bei der Ausführung jener Befehle um jeweils einen Zyklus verschoben sind. Diese Pipelinegestaltung macht es theoretisch möglich, Befehle mit einer Geschwindigkeit von einem Befehl pro Maschinenzyklus auszuführen, wobei mehrere kurze Maschinenzyklen benötigt werden, um einen Befehl vollständig zu verarbeiten. Wiederum ist diese theoretische Geschwindigkeit nur erreichbar, wenn innerhalb der Programmfolge die passenden Befehle geholt werden. Aufgrund der Natur der Programme ist eine solche Geschwindigkeit nur über kurze Zeitspannen aufrechtzuhalten.
- Wie im vorhergehenden überlappt das Befehlsholen für die Pipeline mit der oben beschriebenen Arbeitsweise der Pipeline. Typischerweise werden Puffer bereitgestellt, die in der Lage sind, mehrere Befehle zu speichern, so daß die Befehle unmittelbar in die Pipeline eingegeben werden können, wenn dies erforderlich wird. Dementsprechend werden die Befehle im voraus so weit in den Puffer geholt, wie es die Puffergröße bei der vorgesehenen Reihenfolge gestattet.
- Ein Hauptgrund dafür, daß die oben erwähnte theoretische Geschwindigkeit nur über kurze Zeitspannen aufrechterhalten werden kann, sind Abrisse auf Grund von Verzweigungen. Verzweigungen bewirken zwei Hauptverzögerungen. Eine Verzögerung liegt darin, daß der der Verzweigung folgende Befehl decodiert werden muß.
- Natürlich wird, wenn die Verzweigung nicht genommen wird, keine Verzögerung in der Pipelinearbeit auftreten, weil der nächste Befehl schon vorabgerufen wäre und als Teil der normalen Befehlsfolge ausgeführt würde. Wenn jedoch eine nicht genommene Verzweigung einer Bedingung unterliegt, kann, selbst wenn der nächste Befehl im Puffer verfügbar ist, dieser nicht mit Bestimmtheit verarbeitet werden, bis der Verzweigungsbefehl ausgeführt worden ist (z. B. Schritt 4 oben). Bei Prozessoren mit einem beispielsweise Zwei-Zyklen-Cachezugriff auf Befehle entsteht eine Verzögerung um zwei Zyklen, bevor der nächste Befehl decodiert werden kann. Wenn die Verzweigung genommen wird, muß dann das Verzweigungsziel geholt und decodiert werden. Die Verzögerung für genommene Verzweigungen beträgt typischerweise drei Maschinenzyklen. Weil ein Viertel aller Befehle typischerweise Verzweigungen sind und ein Sechstel aller Befehle typischerweise genommene Verzweigungen darstellen, sind diese Verzögerungen ein signifikantes Hindernis für die Aufrechterhaltung der theoretischen Befehlsausführungsgeschwindigkeit.
- Der zweite Typ Verzögerungen, der durch die Verzweigungen hervorgerufen wird, entsteht auf Grund von Konkurrenzsituationen beim Cachezugriff. Die meisten Prozessoren besitzen einen Cache, der einen Cachezugriff pro Zyklus bearbeiten kann, währenddessen Daten abgerufen, Befehle geholt oder Daten gespeichert werden können. Wenn der Cache auch für eine, zwei oder sogar drei dieser Operationen verwendet werden kann, so ist doch klar, daß pro Zyklus nur jeweils eine dieser Operationen ausgeführt werden kann; die anderen müssen aufgeschoben werden. Um zu bestimmen, wie das Aufschieben ausgeführt werden sollte, sind Prioritätsschemata erforderlich. Dem Abrufen von Daten wird die erste Priorität gegeben, weil die Verzögerung des Datenabrufs immer die Beendigung eines Befehls verzögert, wogegen die Datenspeicherung und das Befehlsholen nicht notwendigerweise eine Verzögerung bewirkt.
- Das Befehlsholen kann ohne Nachteil aufgeschoben werden, wenn der Prozessor einen Befehlspuffer besitzt und der Puffer nicht leer ist. Wenn der Puffer leer wird, wie es geschieht, wenn das Befehlsholen zu oft aufgeschoben wird, dann gibt es eine Verzögerung, während der nächste Befehl geholt wird. Die Datenspeicherung kann sogar auf Kosten der Komplexität der Programmablaufsteuerung aufgeschoben werden. Alle Abrufe, sowohl von Daten als auch von Befehlen, die nach einem verzögerten Speicherzyklus auftreten, müssen überprüft werden, um zu sehen, ob sie beeinflußt worden wären, wenn das Speichern nicht verzögert worden wäre. Wenn es Auswirkungen gibt, muß eine Korrekturhandlung ausgeführt werden. Im allgemeinen wird dann dem Datenspeichern die zweite Priorität zugeteilt, und das Befehlsholen erhält die niedrigste Priorität.
- Das Ergebnis all dieser Prioritätszuweisungen besteht darin, daß, wenn ein Prozessor entsprechend der oben beschriebenen Cachezugriffsprioritäten mit einer Geschwindigkeit von einem Befehl pro Zyklus arbeiten soll, Befehle nur während eines Zugriffs aus zehn geholt werden könnten. Eine solche Häufigkeit ist zum Aufrechterhalten der theoretischen Befehlsausführungsgeschwindigkeit unzureichend.
- Sowohl diesem Problem der Bereitstellung der Befehle als auch dem oben diskutierten Problem der Verzweigungsverzögerungen hat man sich in unterschiedlicher Weise angenommen. Leider tendieren die Lösungen für eines der Probleme dazu, das andere Problem zu verschlimmern.
- Ein Ansatz für das Verzweigungsproblem besteht darin, die weitere Befehlsdecodierung zu unterbrechen, bis entschieden ist, ob die Verzweigung genommen wird oder nicht. Dieser Ansatz erscheint im besonderen im Hinblick auf das Problem der Bereitstellung der Befehle vernünftig, um sicherzustellen, daß kein unnötiges Befehlsholen ausgeführt wird. Bei diesem Ansatz würde nach einem Verzweigungsbefehl kein weiterer Befehl geholt werden. Es würde sich eine Verzögerung um fünf Zyklen ergeben: Die Auflösung der Verzweigung würde wie oben diskutiert drei Zyklen beanspruchen, und das ebenfalls oben diskutierte Befehlsholen würde zwei Zyklen beanspruchen. Weil ein Viertel aller Befehle Verzweigungen sind, würde die-zusätzliche Verzögerung, die sich aus diesem Ansatz ergibt, 1,25 Zyklen pro Befehl betragen, was einen ziemlich großen Nachteil für eine Maschine bedeutet, die mit einer Geschwindigkeit von einem Zyklus pro Befehl arbeiten soll.
- In einigen Prozessoren werden bei unerledigten Verzweigungsauflösungen anstatt des Unterbrechens des weiteren Befehlsdecodierens Schätzungen dazu durchgeführt, ob eine aufgetretene Verzweigung genommen wird. Natürlich wird bei unbedingten Verzweigungen immer vorausgesetzt, daß diese genommen werden. Mit statistischen Verfahren ist herausgefunden worden, daß bedingte Verzweigungen nur ungefähr zu 40% genommen werden. Folglich wird bei bedingten Verzweigungen geschätzt, daß sie nicht genommen werden, wobei die Decodierung der nachfolgenden Befehle in einem "bedingten" Modus stattfindet. In diesem Modus werden die Operanden geholt, die Register und Speicher aber nicht aktualisiert, bis festgestellt worden ist, daß die Verzweigung tatsächlich nicht genommen wird. Im allgemeinen werden Verzweigungen drei Zyklen nach ihrer Decodierung aufgelöst, so daß drei Befehle, die einer Verzweigung folgen, in diesem bedingten Modus verarbeitet werden.
- Bei diesem zweiten Ansatz werden die Befehle, die in dem bedingten Modus bearbeitet wurden, freigegeben, wenn die Schätzung richtig ist, das heißt, wenn die Verzweigung nicht genommen wird, und es wird gestattet, die Ausführung dieser Befehle fortzusetzen. Es tritt kein Zeitverlust auf. Wenn jedoch die Schätzung falsch ist, werden die bedingten Befehle zusammen mit irgendwelchen Operanden, welche abgerufen worden sein könnten, gelöscht. Als ein Ergebnis dessen sind die drei Zyklen, die das Decodieren dieser bedingten Befehle beansprucht hat, verloren; natürlich treten, da Verzweigungen nur zu 40% genommen werden, falsche Voraussagen (und folglich verloren Zyklen) nur mit einer entsprechenden Häufigkeit auf. Ebenfalls sollte beachtet werden, daß gemäß einem dem Stand der Technik entsprechenden Verfahren, das auf eine Art "Sicherheitsabruf" hinausläuft, durch ausgedehnte Cachezugriffe keine Zyklen verloren gehen. Bei diesem dem Stand der Technik entsprechenden Ansatz, welcher unten detaillierter diskutiert werden wird, werden einer oder mehrere zusätzliche Befehlspuffer verwendet und sowohl die Befehle, die sowohl der Verzweigungszieladresse als auch der nächsten folgenden Adresse entsprechen, werden in die zugeordneten Puffer geholt, und in Abhängigkeit vom Ausgang der bedingten Verzweigung wird der passende Puffer ausgewählt. In jedem Fall tritt bei Anwendung dieses zweiten Ansatzes auf Grund des sich ergebenden Widerrufs der falschen Schätzung keine Verzögerung auf, so daß die gesamte Verzweigungsverzögerung offensichtlich reduziert wird.
- Die Lösung des Problems der Bereitstellung der Befehle ist schwieriger als die Lösung des Problems der Verzweigungsverzögerung. Wie oben beschrieben, benutzen einige Prozessoren mehr als einen Befehlspuffer, so daß ein Holen des auf der Verzweigungszieladresse stehenden Befehls selbst dann ausgeführt werden kann, wenn geschätzt wird, daß die Verzweigung nicht genommen wird. Die Verwendung von mehr als einem Befehlspuffer spart nur dann Zeit, wenn die Verzweigung genommen wird, anderenfalls ist das zusätzliche Befehlsholen (der Sicherheitsabruf) verschwendet. Wie auch immer die Entscheidung ausfällt, die Befehle werden abwechselnd an die Vielzahl Befehlspuffer gesendet, bis die Verzweigung aufgelöst ist, so daß die Befehle zur Ausführung bereit sind. Weil jedoch Verzweigungen so häufig auftreten, werden viele wertvolle Möglichkeiten zum Befehlsholen verschenkt. Der Verlust dieser Gelegenheiten bewirkt deshalb eine merkliche Verzögerung, weil der Befehlspuffer häufiger leer ist.
- Es sollte ebenfalls beachtet werden, daß, wenn Befehle innerhalb des bedingten Modus einen zweiten Verzweigungsbefehl enthalten, die weiteren bedingten Aktivitäten gestoppt werden müssen, weil, wenn nur zwei Befehlspuffer verwendet werden, kein Puffer für das zweite Verzweigungsziel vorhanden ist. Die in dem U.S.-Patent Nr. 4 200 927 dargelegte Lösung bestand darin, in eine nachfolgende Maschine einen dritten Puffer einzubauen.
- Wenn eine bessere Schätzung darüber gemacht werden könnte, ob eine Verzweigung genommen wird oder nicht, könnte die Anzahl der verlorenen Zyklen, hervorgerufen durch das Problem der Bereitstellung der Befehle, verringert werden. Als allgemeine Regel ist für einzeln betrachtete bedingte Verzweigungen gefunden worden, daß es, wenn eine bedingte Verzweigung einmal genommen wird, wahrscheinlich ist, daß diese nachfolgend wieder genommen wird. Entgegengesetzt, wenn sie das erste Mal nicht genommen wird, dann ist es wahrscheinlich, daß sie bei nachfolgenden Ausführungen ebenfalls nicht genommen wird. Dementsprechend scheint es Sinn zu machen, eine Art Aufzeichnung über die Aktionen zu führen, die stattfinden, wenn Verzweigungen das erste Mal auftreten. Dann kann diese Aufzeichnung nachfolgend abgefragt werden, und die in dem beispielhaften Fall aufgetretene Aktion kann als Schätzung wiedergegeben werden. Statistisch wird diese Schätzung genauer sein als die oben beschriebene feste Schätzung.
- Der oben erwähnte Ansatz wird detaillierter in dem U.S.-Patent Nr. 4 477 872 beschrieben. Kurz zusammengefaßt, die Aufzeichnung wird in einer Hardwaretabelle festgehalten, einer sogenannten Decodiergeschichte-Tabelle, die zum Beispiel 1024-Ein-Bit-Einträge besitzt. Ein Eintrag wird durch eine 10-Bit-Adresse ausgewählt. Immer wenn eine Verzweigung decodiert wird (Schritt 1 in der oben beschriebenen Folge), wird die Verzweigungsadresse auf 10-Bit umorganisiert. Dieses Umorganisieren ist erforderlich, weil die Verzweigungsadresse viel länger als 10 Bit ist. Der ausgewählte Ein-Bit-Eintrag stellt die Nehmen/Nicht-nehmen-Aktion bereit, die durch die Verzweigung beim letzten Auftreten ausgeführt wurde. Wenn sich die tatsächliche Aktion verändert (d. h., die Tabelle einen falschen Ausgangswert liefert), würde der Eintrag ebenfalls verändert werden. Diese Tabelle wird als eine Decodiergeschichte-Tabelle bezeichnet, weil sie abgefragt wird, wenn die Verzweigung decodiert werden soll. Mit Hilfe dieser Tabelle sind die Schätzungen genauer, so daß Befehlsholzyklen weniger oft verschwendet werden. Obwohl das Umorganisieren bewirken kann, daß eine oder zwei Verzweigungen durch denselben umorganisierten Eintrag repräsentiert werden, sind die Fehler, die aus dem Umorganisieren herrühren im Vergleich zu jenen, die aus falschen Schätzungen herrühren, normalerweise in der Minderzahl.
- Die Decodiergeschichte-Tabelle ist für die Lösung des Verzögerungsproblems bei Verzweigungen nicht nützlich, weil das Verzweigungsziel erhalten werden muß, selbst nachdem eine geeignete Decodierung stattgefunden hat. Die Zieladresse muß erzeugt werden, und das Ziel muß geholt werden. Diese Verzögerung kann mittels einer Verzweigungsgeschichte-Tabelle, welche die Zieladressen der genommenen Verzweigungen aufzeichnet, beträchtlich reduziert werden. Dieser Ansatz wird in dem U.S.-Patent Nr. 3 559 183 offenbart.
- Eine Verzweigungsgeschichte-Tabelle kann 1024 Einträge (oder mehr) enthalten, wobei jeder Eintrag die volle Zieladresse einer genommenen Verzweigung zusammen mit der entsprechenden Verzweigungsadresse repräsentieren kann. Auf die Verzweigungsgeschichte-Tabelle wird zum Zeitpunkt des Vorabrufen eines Befehls (vor dem Decodieren des Befehls) zugegriffen. Weil beim Vorabrufen von Befehlen im allgemeinen auf acht Bytes auf einmal zugegriffen wird, werden die Einträge der Verzweigungsgeschichte-Tabelle auf der Basis von Doppelworten (acht Bytes) vorgenommen, so daß, wenn ein gegebenes Doppelwort eine genommene Verzweigung enthält, dann die Doppelwortadresse verwendet wird, um einen Eintrag der Verzweigungsgeschichte-Tabelle auszuwählen. Dieser Eintrag enthält natürlich sowohl die Verzweigungsadresse als auch die entsprechende Zieladresse. Wenn das Doppelwort keine genommene Verzweigung enthält, gibt es keinen Eintrag in der Verzweigungsgeschichte-Tabelle.
- Aus obiger Diskussion ist ersichtlich, daß mittels der Verzweigungsgeschichte-Tabelle Zeit auf zwei Arten gespart werden kann. Erstens leitet die Verzweigungsgeschichte-Tabelle den Vorabruf der Befehle, so daß der Befehlspuffer korrekt gefüllt werden kann. Auf die Verzweigungsgeschichte-Tabelle wird bei jedem vorabgerufenen Doppelwort zugegriffen. Wenn es einen entsprechenden Eintrag in der Verzweigungsgeschichte-Tabelle gibt, wird die darin enthaltene Zieladresse verwendet, um das nächste Doppelwort zu identifizieren, das vorabgerufen werden soll. Wenn es keinen entsprechenden Eintrag gibt, wird das nächst folgende Doppelwort vorabgerufen. Dieser Vorgang kann für eine Anzahl aufeinanderfolgender Verzweigungen ausgeführt werden, so daß das Decodieren nicht unterbrochen werden muß. Mit steigender Anzahl der auftretenden Verzweigungen erhöht sich auch das Risiko, daß eine der Voraussagen aus der Verzweigungsgeschichte-Tabelle falsch ist, wobei in jenem Fall die nachfolgenden Vorabrufe verschwendet sind.
- Zweitens dient die Verzweigungsgeschichte-Tabelle zur Auswahl des nächsten zu decodierenden Befehls. Folglich gibt es auf Grund der Verzweigungen keine Verzögerungen, wenn die Verzweigungsgeschichte-Tabelle korrekt ist. Natürlich muß das vorausgesagte Ziel nach dem Decodieren mit dem tatsächlichen Ziel verglichen werden, und die vorhergesagte Aktion muß mit der tatsächlichen Aktion nach dem Ausführen verglichen werden. Wenn eines davon falsch ist, muß ein Korrekturvorgang durchgeführt werden, und die Verzweigungsgeschichte-Tabelle muß aktualisiert werden. Leider ist die Verzweigungsgeschichte-Tabelle bei 10% bis 20% der Abfragen fehlerhaft, so daß die Verzweigungsverzögerung noch beachtlich sein kann. Das U.S.-Patent Nr. 4 679 141 vom 29. April 1985, das zusammen mit der vorliegenden Anmeldung übertragen wurde, stellt eine vollständigere Beschreibung der Verzweigungsgeschichte-Tabelle bereit. Jene Beschreibung wird durch diese Bezugnahme in die vorliegende Anmeldung mit aufgenommen.
- EP-A-0 229 513 vom 5. Januar 1987 beschreibt ein Vorabrufelement für Befehle, das eine Verzweigungsgeschichte-Tabelle und eine Abschnittsprüfschaltung umfaßt, die aufbauend auf der Analyse des Typs des Verzweigungsbefehls so zeitig wie möglich eine Voraussage für die Ausführung des Verzweigungsbefehls trifft.
- Eines der Probleme beim Aktualisieren der Verzweigungsgeschichte-Tabelle entsprechend diesem, dem Stand der Technik entsprechenden Ansatz besteht darin, daß das Aktualisieren verzögert wird, bis ein Befehl ausgeführt worden ist. Diese Verzögerung tritt auf, weil die vorabgerufenen Befehle in einen Befehlspuffer geschafft werden, welcher Befehle für die Eingabe in die Hauptstrom-Pipeline bereitstellt. Wenn die Verzweigungsgeschichte-Tabelle bewirkt, daß eine falsche Schätzung vorgenommen wird, werden einige unrichtige Befehle vorabgerufen, aber der Fehler wird nicht erkannt, bis die Verzweigung in der Haupt folge tatsächlich aufgelöst wird. Erst dann kann die Verzweigungsgeschichte-Tabelle korrigiert und der richtige Befehl geholt werden. Somit können mehrere Maschinenzyklen verloren gehen. Ein Ablaufdiagramm, das diese nach der Ausführung stattfindende Korrektur zeigt, wird in Fig. 1 dargestellt.
- Aus der vorstehenden Diskussion ist ersichtlich, daß es wünschenswert ist, die Verzweigungsgeschichte-Tabelle so frühzeitig wie möglich, nachdem ein Fehler in der Verzweigungsgeschichte- Tabelle erkannt wurde, zu aktualisieren, vorzugsweise vor der Befehlsausführung.
- Noch eine weitere Ursache von Verarbeitungsverzögerungen ergibt sich, wenn ein Befehl innerhalb einer Befehlsfolge einen neuen Wert in ein Register schreibt und ein zweiter unmittelbar folgender Befehl dasselbe Register als Basisregister verwendet. Eine solche Situation kann auftreten, weil es zwischen der für den Registerzugriff und der für den Cachezugriff erforderlichen Zeit nur einen kleinen Unterschied gibt, so daß Programmierer häufig auf Register und Cachespeicher in austauschbarer Weise zugreifen. Als ein Ergebnis dessen tritt die oben erwähnte Situation der gemeinsamen Nutzung eines Registers auf, weil bei der Erstellung von Compilern, Programmen in Maschinensprache und dergleichen durch den Programmierer gewöhnlich nur eine begrenzte Anzahl Register benutzt werden.
- In jedem Fall kann in der oben beschriebenen Situation auf Grund dieser gemeinsamen Nutzung des Registers eine Adresse für den zweiten Befehl solange nicht erzeugt werden, bis der erste Befehl ausgeführt worden ist. Die Unmöglichkeit solche Situationen vorauszusehen, welche als Blockierung der Adreßerzeugung bezeichnet werden, bewirken weitere Verzögerungen bei der Befehlsausführung, weil der Prozessor darauf warten muß, daß der neue Wert des Basisregisters aus dem Cache kommt, bevor der nächste Befehl ausgeführt wird. Die Auflösung dieser Situation erfordert die Untersuchung des Zusammenhanges zwischen aufeinanderfolgenden Befehlen. Frühere Prozessoren haben diese Untersuchungen nicht ausgeführt.
- Es ist eine Aufgabe der vorliegenden Erfindung, Verzweigungen so zeitig wie möglich aufzulösen, bevor Befehle in einen Befehlspuffer vorabgerufen werden müssen und Verzweigungsverzögerungen im größtmöglichen Umfang zu behandeln, bevor die Befehle zur Ausführung in die Hauptstrom-Pipeline eingegeben werden.
- Es ist eine weitere Aufgabe der vorliegenden Erfindung, den Befehlspuffer so voll wie möglich zu halten, um das Problem der Bereitstellung der Befehle zu minimieren, damit Blockierungssituationen bei der Adreßerzeugung, wann auch immer möglich, frühzeitig erkannt und aufgelöst werden können.
- Gemäß der vorliegenden Erfindung, wie diese in den Ansprüchen 1 und 15 dargelegt ist, wird das Problem der Auflösung von Verzweigungen während des Vorabrufprozesses der Befehle behandelt und nicht während der Ausführung der Befehlsfolge. Die Befehle werden unter Steuerung einer Verzweigungsgeschichte-Tabelle aus dem Speicher vorabgerufen und in einen Befehlspuffer geschafft. Es ist möglich, daß der Puffer auf Grund von Fehlern in der Verzweigungsgeschichte-Tabelle eine unrichtige Befehlsfolge enthält. Anstatt jedoch diese in die Hauptstrom-Pipeline einzugeben, speist der Befehlspuffer zwei Befehle pro Zeitintervall in einen Verzweigungsstrom-Coprozessor, welcher Verzweigungen sucht und diese auflöst, wann immer dies möglich ist.
- Wenn eine Verzweigung auftritt, vorverarbeitet der Verzweigungsstrom-Coprozessor diese zusammen mit dem Befehl, der den Bedingungscode setzt, wobei letzterer der Verzweigung gewöhnlich unmittelbar vorausgeht. Der Vergleich zwischen den tatsächlichen Aktionen und Zielen und den vorausgesagten Aktionen und Zielen findet statt, bevor die Befehle in die Hauptstrom-Pipeline eingegeben werden. Wenn erforderlich, wird die Verzweigungsgeschichte-Tabelle korrigiert. Die Korrektur findet in dieser Verzweigungsfolge statt und nicht in der Haupt folge, so daß die Verzweigungsverzögerungen während der Befehlsausführung reduziert werden. Weil der Verzweigungsstrom-Coprozessor zwei Befehle pro Zeitintervall abtastet, tendiert der Coprozessor dazu, einen ausreichenden Vorsprung vor dem Hauptprozessor zu behalten, welcher die Befehle tatsächlich ausführt.
- Wenn die Befehle in der Verzweigungsfolge einmal bestätigt worden sind, werden sie an einen Fertig-zum-Decodieren-Puffer gesendet, welcher sie dann in die Hauptstrom-Pipeline in gleicher Weise eingibt, wie dem Stand der Technik entsprechend der Befehlspuffer die Hauptstrom-Pipeline speist. Weil Verzweigungen in allen Fällen, in denen sie aufgelöst werden können, durch den Verzweigungsstrom-Coprozessor aufgelöst werden, enthält der Fertig-zum-Decodieren-Puffer weniger Verzweigungsfehler. Er kann jedoch einige nicht decodierte Verzweigungen enthalten, wenn einige der auftretenden Verzweigungen vor der tatsächlichen Befehlsausführung nicht aufgelöst werden können. In jedem Fall arbeitet der Verzweigungsstrom-Coprozessor auf Grund seiner Arbeitsweise, bei der zwei Befehle pro Zyklus abgetastet werden und nur ein Teil aller Befehle ausgeführt wird, in die Richtung, den Fertig-zum-Decodieren-Puffer gefüllt zu halten. Desweiteren führt der Verzweigungsstrom-Coprozessor Verzweigungen nicht vollständig aus, sondern es ist der Hauptprozessor, welcher die Befehle bis zum tatsächlichen Verändern des Maschinenzustands, Ändern der Adressen und dergleichen vollständig ausführt.
- Der Verzweigungsstrom-Coprozessor tritt Verzweigungsverzögerungen entgegen, wenn Fehler in der Verzweigungsgeschichte-Tabelle vorhanden sind. Weil jedoch zwei Befehle auf einmal abgetastet werden, besteht die Tendenz, daß der Fertig-zum-Decodieren-Puffer gefüllt bleibt, wenn nicht mehrere aufeinanderfolgende Fehler in der Verzweigungsgeschichte-Tabelle auftreten.
- Gemäß einer bevorzugten Ausführungsform der Erfindung kann der Verzweigungsstrom-Coprozessor mögliche Blockierungssituationen bei der Adreßerzeugung durch Behandlung verschiedener Befehlstypen als mögliche Ursachen für eine Blockierung der Adreßerzeugung im voraus erkennen. Der Zusammenhang zwischen aufeinanderfolgenden Befehlen dieser bestimmten Typen wird untersucht. Dem Hauptprozessor werden solche Situationen angezeigt, und dieser wählt den geeigneten Basiswert für den nachfolgenden Befehl aus.
- Fig. 1 ist ein Ablaufdiagramm des Verarbeitungsflusses zur Korrektur der Verzweigungsgeschichte-Tabelle innerhalb eines konventionellen Prozessors.
- Fig. 2 ist ein Ablaufdiagramm des Verarbeitungsflusses zur Korrektur der Verzweigungsgeschichte-Tabelle innerhalb eines Datenverarbeitungssystems gemäß einer bevorzugten Ausführungsform der Erfindung.
- Fig. 3 ist ein Blockschaltbild eines Datenverarbeitungssystems gemäß der vorliegenden Erfindung.
- Fig. 4 ist eine Tafel, die den Aufbau des Verzeichnisses und die Matrix der Verzweigungsgeschichte-Tabelle zeigt.
- Fig. 5 ist eine Darstellung des Formates eines Blockeintrags in einer Verzweigungsgeschichte-Tabelle.
- Fig. 6 ist eine detailliertere Darstellung der in Fig. 3 gezeigten Vorabrufsteuerung.
- Fig. 7 ist eine detailliertere Darstellung eines Teils des in Fig. 3 gezeigten Cache und der Cachesteuereinrichtung.
- Fig. 8 ist eine detailliertere Darstellung des in Fig. 3 gezeigten Befehlspuffers.
- Fig. 9 ist eine Darstellung, die zeigt, wie Befehlspaare zur Eingabe in den Verzweigungsstrom-Coprozessor ausgewählt werden.
- Fig. 10 ist eine Darstellung, die einige der in Fig. 9 gezeigten Elemente detaillierter zeigt.
- Fig. 11 ist eine Darstellung, die einige der in den Fig. 9 und 10 gezeigten Elemente detaillierter zeigt.
- Fig. 12 ist eine Darstellung, die den Teildecoder von Fig. 11 detaillierter zeigt.
- Fig. 13 ist eine detailliertere Darstellung des in Fig. 3 gezeigten Verzweigungsstrom-Coprozessors.
- Fig. 14 ist eine Tafel, die den Vorgang der Überprüfung des Bedingungscodes, der durch den Verzweigungsstrom-Coprozessor gesetzt wird, zeigt.
- Fig. 15 ist eine detailliertere Darstellung des in Fig. 3 gezeigten Fertig-zum-Decodieren-Puffers.
- Fig. 16 ist eine detailliertere Darstellung des in Fig. 3 gezeigten Hauptprozessors
- Fig. 17 ist eine Darstellung, die die Korrektur der Verzweigungsgeschichte-Tabelle zeigt.
- In der Rechnerarchitektur des IBM System 370 können Befehle 2, 4 oder 6 Byte lang sein, wobei vier Byte im allgemeinen als die durchschnittliche Länge angesehen wird. Weil Befehle aufeinanderfolgend gespeichert werden und weil Cachezugriffe zum Befehlsholen begrenzt sind, ist es wünschenswert, so viele Befehle wie möglich pro Zeitintervall zu holen.
- Im allgemeinen werden pro Abruf acht oder 16 Byte bereitgestellt. Jedoch wäre eine größere Anzahl Bytes pro Abruf vorzuziehen. Weil im Durchschnitt einer von sechs Befehlen zu einer genommenen Verzweigung führt, würde eine durchschnittliche Gruppe von Befehlen mit einem Zielbefehl einer vorhergehend genommenen Verzweigung beginnen und würde fünf oder mehr Befehle enthalten. Wobei deren letzter eine weitere genommene Verzweigung ist. Eine solche Gruppe würde 6 · 4 = 24 Bytes umfassen. Folglich würde ein Befehlsholen von 24 Bytes ausreichend sein, um diese Gruppe einzulesen.
- Weil jedoch diese Eins-in-Sechs-Darstellung ein Durchschnittswert ist, können zwischen aufeinanderfolgenden genommenen Verzweigungen auch weniger als fünf Befehle liegen, oder es können mehr als fünf Befehle sein. Wenn es weniger als fünf sind, dann würde offensichtlich ein 24-Byte-Befehlsholen ausreichen. Wenn jedoch mehr als fünf Befehle zwischen aufeinanderfolgenden genommenen Verzweigungen liegen, sind 24 Byte nicht genug.
- Ebenfalls sollte beachtet werden, daß Abrufe generell mit festen Unterabschnitten des Speichers (z. B. 8-, 16-, 32- oder 64-Bytegrenzen) durchgeführt werden, wogegen Verzweigungsziele an jedem Zwei-Byte-Intervall (Halbwort) liegen können; im Durchschnitt liegt das Verzweigungsziel in der Mitte des Unterabschnitts. Bei einem Befehlsholen von 64 Bytes wäre beispielsweise der mittlere Anteil an verwendbaren Befehlen 32 Bytes, worin die durchschnittliche (d. h. 24-Byte-) Gruppe Befehle enthalten wäre. Folglich wird in der beschriebenen Ausführungsform ein 64-Byte- Abruf verwendet.
- Der 64-Byte-Abruf betrifft lediglich den Umfang, den der Cache bei einem gegebenen Zugriff bereitstellt. Es wäre ausreichend, einen Befehlspuffer in vier aufeinanderfolgenden Zyklen über einen Zwischenpuffer aus dem Cache zu laden, wobei innerhalb jedes Zyklus 16 Bytes (ein Vierfachwort) übertragen werden. Dieser alternative Ansatz wird vollständiger in der Patentanmeldung EP-A-0 166 192 beschrieben, die zusammen mit der vorliegenden Anmeldung übertragen wurde. Deren Offenbarung wird durch diese Bezugnahme ebenfalls in die vorliegende Anmeldung mit aufgenommen.
- Bezugnehmend auf Fig. 3 wird ein Überblick über die Arbeitsweise eines Verzweigungsstrom-Coprozessors, wie er in einem Datenverarbeitungssystem gemäß der vorliegenden Erfindung implementiert wird, gegeben. Später wird jedes der Hauptelemente detailliert beschrieben.
- Der Vorabruf in einen Befehlspuffer 401 wird durch eine Verzweigungsgeschichte-Tabelle 301 gesteuert, um den größten Nutzen aus den Vorabrufmöglichkeiten zu ziehen und um die durch den Verzweigungsstrom-Coprozessor 501 erkannten Verzweigungsverzögerungen zu reduzieren.
- Eine Vorabrufsteuereinrichtung 201 und die Verzweigungsgeschichte-Tabelle (BHT - branch history table) 301 sind über den Pfad 351, welcher die Zugriffe der Vorabrufsteuereinrichtung 201 überträgt, und den Pfad 353 verbunden, welcher die Ausgaben der Verzweigungsgeschichte-Tabelle zurückgibt. Wenn eine Korrektur der Verzweigungsgeschichte-Tabelle 301 erforderlich ist, wie dies durch den Verzweigungsstrom-Coprozessor 501 bei der teilweisen Ausführung der bedingten Verzweigungsbefehle festgestellt wird, wird eine solche Korrektur über den Pfad 581 vom Verzweigungsstrom-Coprozessor 501 zur Verzweigungsgeschichte-Tabelle übertragen.
- Anweisungen zum Vorabruf von Befehlen in 64-Byte-Blöcken werden von der Vorabrufsteuereinrichtung 201 über eine Leitung 251 zum Cache geleitet und werden vom Cache 101 in 64-Byte-Blöcken über den Pfad 253 in vier Zyklen (16 Bytes/Zyklus) in den Befehlspuffer 401 übertragen. Wenn auch Cachezugriffe in 64-Byte-Blöcken zu einem effektiveren Betrieb führen, so sind doch auch Zugriffe in 16-Byte-Blöcken akzeptabel, wenn Entwurfsgesichtspunkte dies rechtfertigen.
- Wie für den Fachmann ebenfalls zu erkennen ist, könnte ein separater Befehlscache bereitgestellt werden, der Datenzugriffe und Datenspeicherung nicht behandelt, der aber einfach vier Hauptspeicherzugriffe zu je einem Vierfachwort (16 Bytes) bereitstellen würde, um dieselbe Befehls-Bereitstellungsgeschwindigkeit zu erreichen. Ein solcher unterteilter Cache ist für den Aufbau der beschriebenen Ausführungsform jedoch nicht erforderlich.
- Der Befehlspuffer 401 gibt in Reaktion auf Signale zum Auslesen der nächsten Befehle aus dem Befehlspuffer 401, die über Leitung 453 vom Verzweigungsstrom-Coprozessor 501 kommen, über den Pfad 451 Befehle an den Verzweigungsstrom-Coprozessor aus. Der Befehlspuffer 401 gibt über Leitung 273 auch ein Signal an die Vorabrufsteuereinrichtung 201, wenn Platz für die Aufnahme weiterer Befehle ist.
- Um Befehle vorzuverarbeiten, von denen jeweils zwei pro Zeitintervall vom Befehlspuffer 401 empfangen werden, holt der Verzweigungsstrom-Coprozessor 501, wenn dies geeignet erscheint, über Leitung 551 entsprechende Testoperanden aus dem Cache 101. Die Operanden werden dann vom Cache über Leitung 553 geschickt. Es sollte beachtet werden, daß der Verzweigungsstrom-Coprozessor 501 nicht alle Befehle vorverarbeitet, sondern nur die, welche vor Ausführung durch den Hauptprozessor 701 irgendwelche Aktionen erfordern. Die anderen Befehle werden direkt an den Fertigzum-Decodieren-Puffer 601 weitergeleitet. Weil Befehle, welche vorverarbeitet werden, vor der Weiterleitung zum Fertig-zum-Decodieren-Puffer 601 verzögert werden, wird ein Zählwert im Coprozessor festgehalten, so daß der vorverarbeitete Befehl den entsprechenden Platz im Fertig-zum-Decodieren-Puffer 601 einnimmt.
- Alle Befehle werden vom Verzweigungsstrom-Coprozessor 501 über Leitung 571 zum Fertig-zum-Decodieren-Puffer 601 geleitet. Jene Befehle, die vorverarbeitet worden sind, werden durch zusätzliche Bits begleitet, die über Leitung 573 ausgegeben werden und welche dem Hauptprozessor anzeigen, was durchgeführt wurde und was noch durchzuführen ist. Wenn der Verzweigungsstrom-Coprozessor 501 einen Fehler in der Verzweigungsgeschichte-Tabelle 301 erkennt, wird über Leitung 581 eine Korrektur an die Verzweigungsgeschichte-Tabelle 301 ausgegeben.
- Der Fertig-zum-Decodieren-Puffer 601 speichert alle Befehle in der richtigen Abfolge zur Ausführung durch den Hauptprozessor 701. Der Hauptprozessor 701 arbeitet im wesentlichen wie ein konventioneller Pipeline-Prozessor, wie beispielsweise ein IBM 3033 oder 3090, mit der Ausnahme, daß er entsprechend den Informationen arbeitet, die in einer Anzahl von Datenkennungen enthalten sind, welche über Leitung 573 an den Fertig-zum-Decodieren-Puffer 601 ausgegeben werden. Anforderungen zur Befehlsweiterleitung werden an den Fertig-zum-Decodieren-Puffer 601 über Leitung 653 gegeben, und die Befehle werden über Leitung 651 an den Hauptprozessor 701 ausgegeben.
- Der Hauptprozessor 701 spricht über Leitung 751 den Cache 101 an und empfängt die abgerufene Information über Leitung 753. Über Leitung 755 werden die Ausgaben im Cache gespeichert. Wenn der Hauptprozessor 701 eine Verzweigung auflösen muß, welche der Verzweigungsstrom-Coprozessor 501 nicht behandeln konnte und als Ergebnis davon eine Korrektur der Verzweigungsgeschichte-Tabelle notwendig wird, wird die Korrektur über Leitung 581 an die Verzweigungsgeschichte-Tabelle 301 ausgegeben.
- Jetzt folgt eine detailliertere Beschreibung der Elemente der Erfindung.
- Die Verzweigungsgeschichte-Tabelle ist für den Zugriff auf Vierfachwort-Befehlsblöcke ausgelegt und enthält Einträge für solche Blöcke, welche mindestens einen Befehl enthalten, welcher zu einer genommenen Verzweigung geführt hat. Pro Eintrag kann mehr als eine genommene Verzweigung vorhanden sein; die Verzweigungsgeschichte-Tabelle erlaubt vier genommene Verzweigungen pro Eintrag.
- In Fig. 4 werden das Verzeichnis und die Matrix der Verzweigungsgeschichte-Tabelle gezeigt. Die Adressen der Vierfachworte, die durch die Vorabrufsteuereinrichtung 201 vorabgerufen werden, werden über den Pfad 351 an das Verzeichnis 303 der Verzweigungsgeschichte-Tabelle gegeben. Eine oder keine der Adressen in dem Verzeichnis der Verzweigungsgeschichte-Tabelle stimmt mit der gelieferten Adresse überein. Wenn es eine Übereinstimmung gibt, wird der entsprechende Blockeintrag in der Matrix 305 über den Pfad 353 an die Vorabrufsteuereinrichtung 201 ausgegeben. Wenn es keine Übereinstimmung gibt, wird eine "FEHLEND"-Anzeige über diesen Pfad ausgegeben. Angenommen, die Vierfachwortadresse auf Pfad 351 sei "X". Dies würde mit einem Eintrag 307 im Verzeichnis verglichen, und ein entsprechender Blockeintrag 309 würde auf dem Pfad 353 ausgegeben.
- Das in Fig. 5 gezeigt Blockeintragsformat enthält vier Untereinträge für die genommenen Verzweigungen, welche in dem Befehlsvierfachwort, das durch den Blockeintrag repräsentiert wird, enthalten sein können. (Man erinnere sich, daß ein einzelner Verzweigungsgeschichte-Tabelleneintrag bis zu vier genommene Verzweigungen enthalten kann.) Jeder Untereintrag besitzt drei Felder. Ein Feld BA 311 kennzeichnet den Platz der Verzweigung innerhalb des Vierfachwortes; ein Feld TA 313 kennzeichnet die Zieladresse der Verzweigung; und ein Feld V 315 ist ein Gültigkeitsbit, welches anzeigt, ob ein BA/TA-Paar gültig ist. Das Gültigkeitsbit ist notwendig, weil ein gegebenes Vierfachwort weniger als vier genommene Verzweigungen enthalten kann.
- Wenn vier gültige Untereinträge vorhanden sind und ein fünfter hinzugefügt werden soll, wird einer der existierenden Untereinträge und zwar der, der am längsten nicht mehr verwendet wurde, entfernt, um Platz für den neuen zu schaffen. Der Zustand des am längsten nicht verwendeten Untereintrags wird in einigen LRU- Bits (für least recently used - am längsten nicht verwendet) im Feld 317 gespeichert. Das Ersetzen von Einträgen auf diese Weise, d. h. auf der Grundlage von LRU-Bits oder einer Approximation derer, ist im Cachespeicherentwurf wohlbekannt.
- Fig. 6 ist eine Darstellung der Vorabrufsteuereinrichtung 201, welche dafür sorgt, daß der Befehlspuffer 401 mit den wahrscheinlich nächsten Befehlen gefüllt bleibt, wobei dies unter Leitung der Verzweigungsgeschichte-Tabelle 301 erfolgt. Die Vorabrufe erfolgen auf der Basis von Befehlsvierfachworten. Ein Adreßregister 211 für das nächste Vierfachwort enthält die Adresse des nächsten vorabzurufenden Vierfachwortes. Wenn im Befehlspuffer 401 Platz frei ist, wird vom Befehlspuffer 401 über Leitung 273 ein Signal erzeugt, um dies anzuzeigen. Bei einer derartigen Anzeige sollte ein Vorabruf begonnen werden. Das Signal auf Leitung 273 ermöglicht es einem Puffer-verfügbar- Gatter 213, die nächste Vierfachwort-Vorabrufadresse über den Pfad 251 an den Cache 101 und über den Pfad 351 an die Verzweigungsgeschichte-Tabelle 301 zu senden. Wie im vorhergehenden beschrieben, gibt die Verzweigungsgeschichte-Tabelle 301 Informationen über genommene Verzweigungen innerhalb dieses vorabgerufenen Vierfachwortes zurück, wenn solche vorhanden sind.
- Die Arbeitsweise des Cache und der Cachesteuereinrichtung 101 wird in Fig. 7 dargestellt. Das angeforderte Vierfachwort kann entweder aus einem 64-Byte-Block kommen, der im vorhergehenden aus einer Cachematrix 103 in einen 64-Byte-Ausgangspuffer 105 übertragen wurde oder es kann aus einem anderen Block kommen, welcher aus der Cachematrix 103 in den Ausgangspuffer 105 geholt werden muß. Die Auswahl erfolgt durch eine Vergleichereinheit 111, welche die Adresse des sich momentan im Ausgangspuffer 105 befindenden Blocks, wie diese in einem Adreßregister 109 gespeichert ist, mit der auf dem Pfad 251 eingehenden Vierfachwortadresse vergleicht. Wenn die Anforderung einem anderen Block gilt, signalisiert die Vergleichereinheit 111 die neue Blockanforderung auf Pfad 117 und gibt ein Zugriffssignal auf das Cacheverzeichnis und die Cachematrix 103, wobei dies natürlich vorhergehend gesetzten Cachezugriffs-Prioritäten unterworfen ist, welche oben beschrieben wurden. Der angeforderte Block wird aus der Cachematrix 103 in den Ausgangspuffer 105 geschafft. Inzwischen ist die neue Blockadresse, die über den Pfad 117 gesendet wurde, in ein Neuer-Block-Adreßregister 119 eingegeben worden. Wenn der Matrixzugriff beendet ist, wird dies durch ein Signal auf Leitung 125 angezeigt, und die neue Blockadresse in dem Neuer-Block-Adreßregister 119 wird über ein Freigabegatter 127 in das Adreßregister 109 übertragen, um den jetzt im Ausgangspuffer 105 stehenden Block zu identifizieren.
- An diesem Punkt (oder wenn die Vierfachwort-Anforderung auf den momentan im Ausgangspuffer 105 stehenden Block gerichtet war), wählen einige Auswahlgatter 107 unter Verwendung der niederwertigen Bits 113 der Vierfachwortadresse, die in der Vorabrufsteuereinrichtung 201 erzeugt wurde und aktuell auf Leitung 251 (Fig. 6) anliegt, das spezielle Vierfachwort aus. Das ausgewählte Vierfachwort wird über Pfad 129 in das Gatter 123 gelesen. Dieses Gatter 123 wird freigegeben, wenn die aktuelle Vierfachwort-Anforderung auf denselben Block gerichtet ist, was über Leitung 115 von der Vergleichereinheit 111 signalisiert wird, oder wenn das Signal auf Leitung 125 von Cacheverzeichnis und Matrix 103 anzeigt, daß ein Matrixabruf beendet ist. Diese Signale der Leitungen 115 und 125 sind Eingangssignale für ein ODER-Gatter 121, dessen Ausgangssignal das Gatter 123 freigibt, um das angeforderte Vierfachwort über den Pfad 253 an den Befehlspuffer 401 anzulegen.
- Das Vorabrufen wird fortgesetzt, indem zusätzliche Vierfachworte in den Befehlspuffer 401 eingegeben werden, bis dieser voll ist, und danach immer dann, wenn dort Speicherplatz verfügbar ist. Wie in Fig. 6 dargestellt, können die zusätzlichen Vierfachworte entweder die nächst folgenden oder Verzweigungsziel-Vierfachworte sein, abhängig davon, was von der Verzweigungsgeschichte-Tabelle 310 ausgegeben wird. Wenn das zuletzt abgerufene Vierfachwort ein oder mehrere genommene Verzweigungen enthält, ist es wahrscheinlich, daß es einen entsprechenden Eintrag in der Verzweigungsgeschichte-Tabelle gibt. Dieser Eintrag wird über den Pfad 353 auf die Auswahllogik 203 zurückgegeben, welche das Halbwort (Halbwort - die niederwertigen 3 Bits) der Adresse auf dem Pfad 351 verwendet, um hinter dem Eintrittspunkt in das neue Vierfachwort den Untereintrag für die erste genommene Verzweigung auszuwählen, wenn es eine gibt. Wenn es einen solchen Eintrag gibt und wenn er gültig ist, wird der Inhalt des TA-Feldes 313 des Untereintrags über den Pfad 205 ausgegeben und an das Freigabegatter 209 und ebenfalls an einen BA/TA-Stapelspeicher 503 im Verzweigungsstrom-Coprozessor 501 angelegt. Ein "TREFFER"- Signal 206, das an das Gatter 209 angelegt wird, bewirkt, daß der Inhalt des TA-Feldes 313 in das Adreßregister 211 für das nächste Vierfachwort übernommen wird. Der Inhalt des BA-Feldes 311 (3 Bits) wird an die Vierfachwortadresse angehängt, die auf dem Pfad 351 bereitgestellt wird, um ein volle Verzweigungsadresse bereitzustellen, welche über den Pfad 207 an den BA/TA- Stapelspeicher 503 ausgegeben wird.
- Wenn es hinter dem Eintrittspunkt in das neue Vierfachwort keine genommene Verzweigung gibt oder wenn ein "FEHLT"-Signal von der Verzweigungsgeschichte-Tabelle 301 über Leitung 357 angelegen hat, aktiviert die Auswahllogik 203 die "NÄCHSTFOLGENDE"-Leitung 208, um ein anderes Gatter 219 freizugeben, um die nächstfolgende Vierfachwortadresse aus einem Adreßregister 217 für die nächstfolgende Vierfachwortadresse in ein Adreßregister 211 für den nächsten Vierfachwort-Vorabruf zu schaffen. Es sollte beachtet werden, daß der Eintrittspunkt für das nächst folgende Vierfachwort am Anfang des Vierfachwortes liegt; folglich sind die drei niederwertigen Bits im Adreßregister 217 für das nächstfolgende Vierfachwort Nullen. Die Adresse des nächstfolgenden Vierfachwortes im Adreßregister 217 für das nächstfolgende Vierfachwort wird erhalten, indem zu der Vierfachwortadresse im Adreßregister 211 für den nächsten Vierfachwort-Vorabruf Eins (über eine Addiere-Eins-Logik 215) addiert wird.
- Jetzt wird bezugnehmend auf Fig. 8 die Arbeitsweise des Befehlspuffers 401 für den Fall beschrieben, in dem 64-Byte-Blöcke übertragen werden, immer ein Vierfachwort auf einmal. Wie in der Figur dargestellt, besteht eine Puffermatrix 403 aus vier 64- Byte-Blöcken, von denen jeder in vier Vierfachworte unterteilt ist. Die Adressen der vier Blöcke in der Puffermatrix 403 werden in einem Block-Adreßregister 411 gespeichert. Ein aus dem Cache 101 vorabgerufenes und über den Pfad 253 ausgegebenes Vierfachwort wird über Auswahlgatter 405 in der Puffermatrix 403 in eine spezielle Zeile (Block) und Spalte (Vierfachwort) geschrieben. Nachfolgend wird ein über den Pfad 451 in einen Befehlspaar-Abschnitt (Fig. 9) auszulesendes Vierfachwort über Auswahlgatter 407 aus einer speziellen Zeile und Spalte ausgewählt.
- Jeder der Blöcke in der Puffermatrix 403 besitzt ebenfalls ein zugeordnetes F/E-Bit 425, kennzeichnend, ob der Block voll oder leer ist. Wenn alle Blöcke voll sind, gibt eine Logikschaltung 427, welche ein Vierfach-NAND-Gatter sein kann, über Leitung 273 ein Signal an die Vorabrufsteuereinrichtung 201 aus, das anzeigt, daß kein Block verfügbar ist, d. h., daß der Befehlspuffer 401 voll ist. Wenn jedoch einer der Blöcke leer ist, gibt die Logikschaltung 427 ein Signal über jene Leitung 273 aus, das anzeigt, daß ein weiteres Vierfachwort in die Puffermatrix 403 eingegeben werden kann. Die Adresse des vorabgerufenen Vierfachwortes wird über Pfad 251 an den Befehlspuffer geliefert, und das Vierfachwort selbst wird über Leitung 253 an die Puffermatrix 403 angelegt.
- Der Pfad 251 führt von der Vorabrufsteuereinrichtung 201 zu dem Vierfachwort-Adreßregister 409, welches eine Vierfachwortadresse speichert. Der Blockadreßabschnitt, der über Pfad 251 übertragen wird, wird auf die erste leere Blockadresse im Block-Adreßregister 411 geschrieben, die durch die Logikschaltung 429 bestimmt wird, welche die F/E-Bits 425 auswertet. Entsprechend dieser ersten leeren Blockadresse wird das Vierfachwort in eine Zeile der Puffermatrix 403 geschrieben, wobei die Spalte durch die niederwertigen zwei Bits der Vierfachwortadresse ausgewählt wird. Nachfolgende Vierfachworte, die aus demselben Block im Ausgangspuffer 105 (siehe Fig. 7) vorabgerufen werden, werden in dieselbe Zeile geschrieben werden, aber in unterschiedliche (nachfolgende) Spalten. Es ist möglich, daß abhängig von der Adressenfolge, die von der Vorabrufsteuereinrichtung 201 ausgegeben wird, nicht alle Spalten innerhalb einer gegebenen Zeile gefüllt werden.
- Veränderungen von Blöcken müssen ebenfalls erkannt werden, weil das Vorabrufen nach einer Veränderung eines Blocks angehalten werden muß, bis mehr Speicherplatz im Puffer verfügbar wird. Natürlich können Vorabrufe so lange fortgesetzt werden, so lange sie Vierfachworte aus demselben Block betreffen. Die Logikschaltungen, die dazu dienen, dies festzustellen, können denen gleichen, die unten zum Gewährleisten des Auslesens des Puffers beschrieben werden.
- Wir beziehen uns wieder auf Fig. 8. Es werden Vierfachworte über die Befehlspaar-Auswahllogik (dargestellt in Fig. 9), welche Vierfachwort-Anforderungen auf Leitung 453 ausgibt, aus der Puffermatrix 403 geholt und als Befehle für den Verzweigungsstrom- Coprozessor 501 übertragen. Die Adresse des nächsten, zu decodierenden Vierfachwortes wird an das Nächstes-zu-decodierendes- Vierfachwort-Register 415 gesendet, und der Blockabschnitt der Adresse wird an eine Vergleichereinheit 413 angelegt. Dieser Blockabschnitt wird mit den vier Blockadressen verglichen, die in dem Block-Adreßregister 411 enthalten sind, wobei diese Adressen Blöcke kennzeichnen, die sich momentan in der Puffermatrix 403 befinden. Wenn beim Vergleich eine Übereinstimmung einer der Blockadressen festgestellt wird, selbst wenn dies vielleicht nicht die unmittelbar folgende ist, wird die entsprechende Zeile zum Auslesen ausgewählt. Die niederwertigen zwei Bits der Vierfachwortadresse wählen wie oben beschrieben die auszulesende Spalte aus. Die Adresse des ausgewählten Blocks wird als letzter ausgewählter Block ebenfalls in ein Letzter-ausgewählter-Block-Register 417 geschrieben, und die ausgewählte Zeilennummer (wiederum die zwei niederwertigen Bits) wird als die letzte ausgewählte Zeile in ein Letzte-Zeile-Register 419 geschrieben.
- Die nächste Vierfachwortadresse, die von der Befehlspaar-Auswahllogik auf dem Pfad 453 ausgegeben wird, wird dann durch eine Vergleichereinheit 421 mit dem Inhalt des Letzter-ausgewählter- Block-Registers 417 verglichen, um festzustellen, ob die neue Anforderung einen anderen Block betrifft als die letzte. (Es sollte beachtet werden, daß dieselbe Art Logikschaltung verwendet werden könnte, um zu bestimmen, wann ein Puffer wieder verfügbar wird.) Wenn auf einen neuen Block zugegriffen wird, wird der letzte Block in der Puffermatrix 403 nicht länger benötigt, und somit kann das Gatter 423 gesetzt werden, um anzuzeigen, daß die letzte Zeile der Puffermatrix 403 leer ist. Jetzt kann die Vorabrufsteuereinrichtung 201 zusätzliche Vierfachworte in den neu geleerten Block hinein vorabrufen. Auf diese Weise kann die Füllung des Puffers mit Befehlen aufrechterhalten werden, welche vor den für den Verzweigungsstrom-Coprozessor 501 zu entnehmenden Befehlen liegen. (Wie unten beschrieben wird, besteht eine Schlüsseleigenschaft der Erfindung darin, daß jeweils zwei in den Befehlspuffer 401 einzugebende Vierfachworte auf einmal zum Decodieren durch den Verzweigungsstrom-Coprozessor 501 ausgewählt werden, so daß der Verzweigungsstrom-Coprozessor 501 seinen Vorlauf vor dem Hauptprozessor 701 aufrechterhalten kann.)
- Jetzt wird mit Bezug auf die Fig. 9 bis 14 die Arbeitsweise des Verzweigungsstrom-Coprozessors 501 beschrieben. Allgemein arbeitet der Verzweigungsstrom-Coprozessor 501 wie folgt.
- Wie in Fig. 3 dargestellt, entnimmt der Verzweigungsstrom-Coprozessor 501 unter Steuerung des BA/TA-Stapelspeichers 503 im Verzweigungsstrom-Coprozessor 501 Befehlsvierfachworte aus dem Befehlspuffer 401 und wählt Befehlspaare (wann es auch immer möglich ist; Sechs-Byte-Befehle werden als Doppelbefehle verarbeitet) aus, um die Befehle abzutasten und um Test- und Verzweigungsbefehlspaare vorzuverarbeiten. Diese Abtastung und Vorverarbeitung ermittelt die Mehrzahl der Verzweigungsergebnisse.
- In dieser Beschreibung der Verzweigungsauflösung werden, um die Erklärung zu vereinfachen, nur die zwei am häufigsten auftretenden Testbefehle, Test mit Maske (TM) und Unmittelbarer Logischer Vergleich (CLI - Compare Logical Immediate) und nur die am häufigsten begleitenden Verzweigungen, Verzweigung-unter-Bedingung (BC - Branch On Condition) und Verzweigung-gemäß-Bedingungsregister (BCR) diskutiert. Es sollte jedoch verstanden werden, daß die Erfindung nicht auf die Behandlung dieser Test- und Verzweigungsbefehlspaare beschränkt ist. In Wirklichkeit gibt es viele andere Typen solcher Befehle, welche mittels der Erfindung behandelt werden können und welche tatsächlich in jedem vernünftigen Entwurf enthalten sein sollten. Solche Befehle sind Vergleich (C), Logischer Vergleich (CL) und Registervergleich (CR).
- Ladebefehle werden ebenfalls durch den Verzweigungsstrom-Coprozessor 501 geleitet, um mögliche Blockierungssituationen bei der Adreßerzeugung aufzulösen, welche oben kurz beschrieben wurden und unten detaillierter beschrieben werden. Ladebefehle sind die Befehle, welche am häufigsten solche Situationen hervorrufen. Der Ansatz der Erfindung zum Auflösen dieser Situationen wird unten detaillierter diskutiert.
- Nachdem die Befehle abgetastet wurden, werden sie in den Fertigzum-Decodieren-Puffer 601 eingegeben, egal ob sie vorverarbeitet werden oder nicht. In den Befehlen sind Zustandsmarkierungen enthalten, um zu identifizieren, ob sie vorverarbeitet worden sind oder nicht und ob es sich um Verzweigungen handelt oder nicht, ausgeführte oder nicht ausgeführte. Eine Befehlszählung ist ebenfalls enthalten, um eine nachfolgende Identifikation von Einträgen im Fertig-zum-Decodieren-Puffer 601 zu ermöglichen.
- Wenn der Verzweigungsstrom-Coprozessor Verzweigungen auflöst oder wenn Blockierungssituationen bei der Adreßerzeugung erkannt werden, werden im Fertig-zum-Decodieren-Puffer 601 Einträge in den Zustandsmarkierungen der entsprechenden Befehle vorgenommen. Diese Markierungen gestatten es dem Hauptprozessor 701, zwischen bereits aufgelösten und nicht aufgelösten Verzweigungen zu unterscheiden und weisen den Hauptprozessor 701 auch auf mögliche Blockierungssituationen bei der Adreßerzeugung hin.
- Jetzt wird bezugnehmend auf Fig. 9 das Verfahren der Bereitstellung von Befehlen für den Verzweigungsstrom-Coprozessor 501 beschrieben. Das schon diskutierte Vorabrufverfahren stellt für den Befehlspuffer 401 die passenden Befehle bereit. Die möglicherweise unterschiedliche Länge der Befehle stellt jedoch ein Problem dar, wenn zu entscheiden ist, wie die Befehle für den Verzweigungsstrom-Coprozessor 501 bereitgestellt werden sollen. Wie im vorhergehenden erwähnt, treten, wenn die Befehle zwei oder vier Bytes lang sind, keine Probleme dabei auf, gleichzeitig zwei Befehle für den Verzweigungsstrom-Coprozessor 501 zu holen. Sechs-Byte-Befehle erfordern jedoch zwei Adressen, so daß vorzugsweise zwei Einrichtungen zur Adreßerzeugung verwendet werden sollten. Als ein Ergebnis dessen kann gleichzeitig mit einem Sechs-Byte-Befehl noch nicht einmal ein Zwei-Byte-Befehl abgerufen werden.
- In Fig. 9 enthält ein Erster-Befehl-Adreßregister 517 die Adresse des ersten Befehls eines gegebenen Befehlspaares, welches in den Verzweigungsstrom-Coprozessor 501 eingegeben werden soll. Diese Adresse wird über den Pfad 453 zum Befehlspuffer 401 geleitet, welcher über den Pfad 451 ein entsprechendes Vierfachwort an ein Doppel-Vierfachwort-Register 533 ausgibt.
- Vierfachworte werden in das Doppel-Vierfachwort-Register 533 wie folgt eingegeben. Wenn die Vierfachwortadresse gerade ist, wird das Vierfachwort im Register auf Position QW0 angeordnet; anderenfalls ist die Adresse ungerade und somit wird es auf Position QW1 angeordnet. Man folgt dieser Vereinbarung, um acht aufeinanderfolgende Bytes zu erhalten (angenommen, jeder der beiden aufeinanderfolgenden Befehle ist vier Byte lang, die maximal zulässige Länge für zwei aufeinanderfolgende Befehle, die als Paar verarbeitet werden sollen.)
- Auf die Befehle wird in Halbworten zugegriffen (zwei Byte) In Fig. 10 ist dargestellt, wie in dem Doppel-Vierfachwort-Register 533 auf den Positionen QW0 und QW1 die Halbworte jeweils von 0 bis 7 angeordnet sind. Weil QW0 die geraden Vierfachworte und QW1 die ungeraden Vierfachworte speichert, folgt nicht, daß die Befehle in QW0 immer vor denen von QW1 liegen. Die richtige Reihenfolge kann entweder QW0, QW1 oder QW1, QW0 sein. Die Auswahl der Reihenfolge wird durch die Befehlsadresse 517 des ersten Befehls bestimmt, welche bewirkt hat, daß das Doppel-Vierfachwort-Register 533 geladen wurde. Die Befehlsadresse 517 des ersten Befehls wählt im Register 533 das beginnende Halbwort für die Folge der acht aufeinanderfolgenden Bytes aus, entweder aus QW0 oder aus QW1.
- Die Befehlsadresse 517 des ersten Befehls wird durch den Decodierer 536 decodiert, um eine Halbwort-Startposition entweder in QW0 oder QW1 auszuwählen. Diese Auswahl wird am Ausgang des Decodierers 536 in Fig. 19 gezeigt. Für eine gegebene erste Befehlsadresse wird einer dieser Decodiererausgänge aktiviert, wodurch ein Satz, bestehend aus vier Gattern in linker, diagonal aufsteigender Richtung freigegeben wird. Die Eingangssignale dieser Gatter sind vier aufeinanderfolgende Halbworte aus dem Doppel-Vierfachwort-Register 533. Die freigegebenen Gatter bewirken, daß die vier Halbworte auf den horizontalen Leitungen nach rechts in die entsprechenden Positionen 0 bis 3 eines Registers 532 für acht aufeinanderfolgende Bytes geschrieben werden. Es gibt vier horizontale Leitungen, von denen jede ein Halbwort führt.
- Als ein Beispiel der Arbeitsweise dieses Byteschalters 531 für acht aufeinanderfolgende Bytes wird angenommen, daß die Befehlsadresse im Befehlsadreßregister 517 mit HW0 in QW0 beginnt. Der Decodierer 536 gibt die QW0-, HW0-Leitung frei, die als dunklere Linie in Fig. 10 dargestellt ist, was bewirkt, daß das HW0 aus QW0 im Doppel-Vierfachwort-Register 533 auf der oberen horizontalen Leitung auf Position 3 des Registers 532 für die acht aufeinanderfolgenden Bytes übertragen wird. Auf gleiche Weise wird HW1 auf der nächstniedrigeren horizontalen Leitung auf Position 2 des Registers 532 für die acht aufeinanderfolgenden Bytes übertragen, und HW2 und HW3 werden auf entsprechend niedrigeren horizontalen Leitungen auf die Positionen 1 und 0 des Registers 532 für die acht aufeinanderfolgenden Bytes übertragen.
- Als weiteres Beispiel wird angenommen, daß die erste Befehlsadresse mit HW5 in QW1 beginnt. Der Decodierer 536 wird dann die QW1-, HW5-Leitung freigeben, die in Fig. 10 ebenfalls als dunklere Leitung dargestellt ist und welche ganz rechts fortgesetzt wird (Diagonalleitung bezeichnet mit A). In diesem Fall befinden sich die Halbworte 5, 6 und 7 von QW1 auf den entsprechenden Positionen 3, 2 und 1 des Registers 532 für die acht aufeinanderfolgenden Bytes, gefolgt von HW0 aus QW0 auf Position 0. (In diesem Fall wurde QW0 nach QW1 geladen.)
- Mindestens das erste Halbwort des oben erwähnten ersten Befehls wird aus dem ersten Vierfachwort erhalten. Ein Wähle-8-aufeinanderfolgende-Bytes-Schalter 531 sendet die zwei am weitesten links stehenden Bits dieses ersten Halbwortes auf Pfad 537 an die Leitgatter 529 und an die Addiererschaltung 523, welche immer den Betrag addiert, der zu der ersten Befehlsadresse im Adreßregister 517 für den ersten Befehl addiert werden muß, um die zweite Befehlsadresse zu erhalten, welche im Adreßregister 521 für den zweiten Befehl gespeichert wird. Weil acht aufeinanderfolgende Bytes ausgewählt werden sollen und weil die Länge des ersten Befehls bekannt ist, kann die Adresse des zweiten Befehls leicht ermittelt werden.
- Wenn die Adresse des zweiten Befehls im selben Vierfachwort liegt wie die des ersten Befehls, ist kein weiteres Befehlsholen erforderlich, weil sich das Vierfachwort schon im Register 532 für die acht aufeinanderfolgenden Bytes befindet. Wenn die Adresse jedoch die Adresse des nächstfolgenden Vierfachwortes ist, wird die Adresse in das Adreßregister 517 des ersten Befehls geschrieben, und es wird ein weitere Abruf aus dem Befehlspuffer 401 durchgeführt. In jedem Fall befinden sich nach Beendigung der einen oder anderen Prozedur acht aufeinanderfolgende Bytes in dem Register 532 für die acht aufeinanderfolgenden Bytes.
- Diese acht aufeinanderfolgenden Bytes werden an die Leitgatter 529 angelegt, wie dies detaillierter in Fig. 11 dargestellt wird. Die ersten zwei Bits des Operationscodes des ersten Befehls innerhalb des Registers 532 für die acht aufeinanderfolgenden Bytes bestimmen die Länge des ersten Befehls. Ein Teildecodierer 530 besteht aus vier Zwei-Bit-Komparatoren 534, wie sie detaillierter in Fig. 12 dargestellt werden. Abhängig von den Werten der ersten zwei Bits, gibt nur einer der Komparatoren ein wahres Leitsignal aus, um damit die in Fig. 11 gezeigten Leitgatter 529 zu steuern. In Abhängigkeit von der Länge des ersten Befehls leiten die Leitgatter die passenden Halbworte in das erste Befehlsregister 527 und das zweite Befehlsregister 525. Wie in Fig. 11 dargestellt, wird das dritte Halbwort eines Sechs-Byte-Befehls auf die Position des zweiten Halbwortes des zweiten Befehlsregisters geleitet, um die Verwendung der zweiten Adreßerzeugungsmittel zu ermöglichen.
- Wie in Fig. 9 dargestellt, wird die Länge des zweiten Befehls im Register 525 für den zweiten Befehl über den Pfad 535 an eine Addiererschaltung 519 gesendet, welche die passende Anzahl Bytes (d. h. die Länge des zweiten Befehls) zur zweiten Befehlsadresse (aus dem Adreßregister 521 für den zweiten Befehl) addiert, um die dritte Befehlsadresse zu erhalten, welche die Adresse des ersten Befehls des nächsten Befehlspaares repräsentiert. Diese neue Adresse wird dann an das Adreßregister 517 für den ersten Befehl gesendet, wobei das nächste Befehlspaar abgerufen wird.
- Wie weiter oben beschrieben, enthält der BA/TA-Stapelspeicher 503 Adressen von Verzweigungen, von denen die Verzweigungsgeschichte-Tabelle 301 vorhersagt, daß die Verzweigungen genommen werden. Der Inhalt der Adreßregister für den ersten 517 und den zweiten 521 Befehl wird an die Komparatorschaltungen 509 beziehungsweise 511 angelegt. Der BA-Abschnitt des ältesten Eintrages im BA/TA-Stapelspeicher 503 wird ebenfalls an jede dieser Schaltungen gesendet. Wenn einer der Vergleiche wahr ist (d. h. die Eingabeadressen sind dieselben), wird der entsprechende TA-Abschnitt des Stapelspeichereintrags über den Pfad 507 und das Gatter 515, welches durch das Ausgangssignal der ODER-Schaltung 513 freigegeben ist, gesendet, um als die nächste Adresse in das Adreßregister 517 für den ersten Befehl geschrieben zu werden.
- Es ist zu beachten, daß die beiden Komparatorschaltungen 509 und 511 nicht gleichzeitig eine Gleichheit anzeigen können, weil für den Vergleich mit dem aus dem BA/TA-Stapelspeicher 503 gesendeten BA-Abschnitt unterschiedliche Adressen eingegeben werden.
- Die ersten und zweiten Befehle in den entsprechenden Registern 525 und 527 sollten jetzt zum Abtasten bereit sein. Das Abtasten des ersten Befehls des Paares wird unten beschrieben; eine im wesentlichen identische Prozedur wird mit parallelen Schaltungsanordnungen mit dem zweiten Befehl jedes Paares genauso ausgeführt. Der Hauptunterschied zwischen dem Abtasten der beiden Befehle betrifft die Schaltung 561, welche unten diskutiert wird.
- Der Fertig- zum-Decodieren- Puffer 601 besitzt entsprechende Stapelregister für jeden Schaltungssatz; der Hauptprozessor 701 nimmt aufeinanderfolgend Befehle von jedem der Stapelspeicher an. Diese Prozedur wird ebenfalls unten beschrieben.
- Wie in Fig. 13 dargestellt, werden die Gültigkeitsbits, die in den ersten und zweiten Befehlsregistern 525 und 527 gespeichert sind, verwendet, um gültige Befehle zu kennzeichnen, eine notwendige Vorkehrung, weil gültige Befehle nicht während jedes Maschinenzyklus vorhanden sind. Die OP- (Operationscode) und R&sub1;- (zu ladendes Register) Felder des ersten Befehls werden an eine Teildecodiererschaltung 539 gesendet, so daß der Befehl identifiziert werden kann. Wiederum gibt es eine Anzahl möglicher Befehle; zur Vereinfachung beschäftigt sich diese Diskussion nur mit Ladebefehlen und den Befehlen Verzweigung-unter-Bedingung, Verzweigung-gemäß-Bedingungsregister, Test-mit-Maske- und Unmittelbarer-logischer-Vergleich. Wenn ein gegebener Befehl als einer dieser Befehle identifiziert wird und ein gültiger Befehl ist, gibt eine ODER-Schaltung 534 ein Gatter 545 frei, um den Befehl in ein Befehlsregister 547 durchzuschalten. Zu diesem Zeitpunkt empfängt ein Befehlsadreßregister 549, welches das erste einer Folge von Befehlsregistern ist, über Gatter 579 die erste Befehlsadresse.
- Das Befehlsadreßregister 549 ist unter anderem aus folgenden Gründen von Bedeutung. Natürlich wird ein gültiger Befehl, der sich während eines gegebenen Zyklus in dem ersten Befehlsregister 527 befindet und nicht vorverarbeitet werden muß, während des nächsten Zyklus direkt in den Fertig-zum-Decodieren-Puffer 601 durchgeschaltet, um den Puffer so voll wie möglich zu halten. Wenn ein Befehl, welcher vorverarbeitet werden muß (z. B. einer der oben erwähnten fünf Befehle) durch den Verzweigungsstrom-Coprozessor durchgeschaltet wird, durchläuft er nacheinander die folgenden Stufen: das Befehlsregister 547, einen Decodierschritt 555, einen Adreßerzeugungsschritt 557 und einen Vorverarbeitungsschritt 559. Jede Stufe benötigt einen Zyklus, so daß der gesamte Vorverarbeitungsprozeß mehrere Maschinenzyklen beansprucht. Wenn die Folge des Durchlaufens des Befehls durch die verschiedenen Stufen 547, 555, 557 und 559 im Verzweigungsstrom-Coprozessor 501 nicht irgendwie aufgezeichnet werden würde, wäre es schwierig, den richtigen Platz des Befehls im Fertig-zum-Decodieren-Puffer 601 zu bestimmen. Desweiteren wäre die richtige aufeinanderfolgende Anordnung des korrigierten Befehls extrem schwierig, wenn nicht gar unmöglich, wenn die Verzweigungsgeschichte-Tabelle 301 korrigiert werden müßte. Folglich gestattet das Festhalten eines geeigneten Zählwertes die Korrektur von Einträgen im Fertig-zum-Decodieren-Puffer 601.
- Ein Befehl, der vorverarbeitet werden muß, wird im Befehlsregister 547 in die Pipeline des Verzweigungsstrom-Coprozessors eingegeben, sein entsprechender Zählwert befindet sich im Befehlsadreßregister 549. Der Befehl wird im Schritt 555 decodiert, und es wird ein Zugriff auf das angezeigte Basisregister der Universalregister (nicht dargestellt) ausgeführt, um den folgenden Adreßerzeugungsschritt vorzubereiten. Wenn der Befehl ein Testmit-Maske oder ein Unmittelbarer-logischer-Vergleich ist, muß überprüft werden, ob das Basisregister durch einen vorhergehenden Befehl, der durch den Hauptprozessor 701 noch nicht ausgeführt worden ist, nicht verändert wird. (Nur der Hauptprozessor verändert den Inhalt der Universalregister.) Diese Überprüfung wird durchgeführt, indem das R&sub1;-Feld jedes Befehls, der ein Universalregister verändert, von der Teildecodiererschaltung 539 über den Pfad 564 an einen Registeränderungs-Stapelspeicher 565 gesendet wird. Leere Einträge werden bei Befehlen vorgenommen, welche die Universalregister nicht verändern. Der Stapelspeicher hat Platz für so viele Einträge, wie in den linken und rechten Abschnitten des Fertig-zum-Decodieren-Puffers stehen. Im Decodierschritt 555 wird ein Befehl über den Pfad 581 an den Registeränderungs-Stapelspeicher 565 gesendet, um das Basisregisterfeld der Befehle Test-mit-Maske und Unmittelbarer-logischer-Vergleich mit dem Inhalt dieses Stapelspeichers zu vergleichen. Wenn es eine Übereinstimmung gibt, wird im nächsten Adreßerzeugungsschritt 557 ein Bit gesetzt, um den Befehl als ungültig zu kennzeichnen. Wenn der Befehl als ungültig gekennzeichnet ist, wird ein Signal über eine Leitung 583 an das Register gesendet, das dem Adreßerzeugungsschritt zugeordnet 557 ist, so daß der Operand nicht abgerufen wird.
- Jetzt wird das Verfahren zum Vorwegnehmen und Behandeln möglicher Blockierungssituationen bei der Adreßerzeugung beschrieben. Wenn der aktuell decodierte Befehl ein Ladebefehl ist, kann seine Ausführung ein Universalregister verändern, welches als Basisregister durch den nächsten Befehle verwendet werden könnte. Diese Situation wird als Blockierung der Adreßerzeugung bezeichnet, weil der nächste Befehl keine Adresse erzeugen kann, bis der neue Basiswert vom Cache zurückgegeben wird. Weil Blockierungen der Adreßerzeugung eine Ursache beträchtlicher Verzögerungen sind, ist es von Bedeutung, sie zu erkennen. Folglich wird jeder Ladebefehl unter der Annahme in die Pipeline eingegeben, daß er eine Blockierung der Adreßerzeugung bewirken kann. In der Zwischenzeit wird das R&sub1;-Feld (das zu ladende Register) an eine AGI- (Blockierung der Adreßerzeugung - adress generation interlock) Erkennungsschaltung 567 gesendet, wie dies in Fig. 13 dargestellt ist, um mit dem Basisfeld des folgenden Befehls verglichen zu werden. Wenn es keine Übereinstimmung gibt, gibt es keine Blockierung der Adreßerzeugung, und der Ladebefehl wird im Adreßerzeugungsschritt 557 durch ein Signal, das über Leitung 585 ausgegeben wird, ungültig gemacht, so daß kein Operandenabruf stattfindet.
- Wenn es eine Übereinstimmung gibt, was eine Blockierung der Adreßerzeugung anzeigt, wird der Ladebefehl verarbeitet, und der Operand wird über Pfad 551 und Pfad 553 aus dem Cache 101 abgerufen. Der Vorverarbeitungsschritt 559 sendet den Operanden auf dem Pfad 569 an den AGI-Stapelspeicher 563 und setzt ebenfalls ein Blockierung-der-Adreßerzeugung-Bit (A) im Eintrag des Ladebefehls im Fertig-zum-Decodieren-Puffer 601, der durch den zugeordneten Zählwert identifiziert wird, auf HIGH. Später dann, wenn der Ladebefehl im Hauptprozessor 701 ausgeführt wird, bewirkt das Vorhandensein des A-Bits, daß der Hauptprozessor 701 den ältesten Eintrag aus dem AGI-Stapelspeicher 565 zur Verwendung als Basiswert für den folgenden Befehl nimmt.
- Wenn ein Befehl Test-mit-Maske oder Unmittelbarer-logischer-Vergleich nicht wie oben beschrieben als ungültig markiert ist, läuft er durch die Pipeline. Der Operand wird über die Pfade 551 und 553 aus dem Cache 101 abgerufen, und der Vorverarbeitungsschritt 559 erzeugt den Bedingungscode und sendet ihn an eine BSC- (Verzweigungsstrom-Coprozessor - branch stream coprocessor) Bedingungscode- und Gültigkeits-Logikschaltung 561. In dieser Logik wird eine unwahrscheinliche aber mögliche Situation getestet. Einem Befehl Test-mit-Maske oder Unmittelbarer-logischer- Vergleich folgt fast immer ein Befehl Verzweigung-unter-Bedingung oder Verzweigung-gemäß-Bedingungsregister, in welchem Fall der Bedingungscode der richtige für den auszuführenden Befehl Verzweigung-unter-Bedingung oder Verzweigung-gemäß-Bedingungsregister ist. Es könnte jedoch einen dazwischenkommenden Befehl geben, welcher den Bedingungscode, der durch den Befehl Testmit-Maske oder Unmittelbarer-logischer-Vergleich erzeugt wurde, verändern könnte, wodurch der erzeugte Bedingungscode unzuverlässig wird. Die Logik für dieses Verfahren wird in Fig. 14 in tabellarischer Form dargestellt. Es ist zu beachten, daß drei aufeinanderfolgende Befehle in diese Logik eingegeben werden.
- Gültige Bedingungscodes werden für den zugeordneten Befehl Testmit-Maske oder Unmittelbarer-logischer-Vergleich in den Fertigzum-Decodieren-Puffer 601 eingegeben, weil der Hauptprozessor 701 diese zum Aktualisieren des tatsächlichen Bedingungscodes benötigt. Wenn Befehle aus dem Fertig-zum-Decodieren-Puffer 601 entnommen und durch den Hauptprozessor 701 ausgeführt werden, wird ein Signal über den Pfad 577 an den Registeränderungs-Stapelspeicher 565 gesendet, um den ältesten Eintrag zu entfernen. Dieser Schritt stellt sicher, daß der Inhalt des Registeränderungs-Stapelspeichers 565 nur Registeränderungen widerspiegelt, die der Hauptprozessor noch nicht durchgeführt hat.
- Wenn der in Schritt 555 decodierte Befehl ein Befehl Verzweigung-unter-Bedingung oder Verzweigung-gemäß-Bedingungsregister ist, wird die Adresse im Schritt 557 bestimmt. Es wird jedoch kein Abruf aus dem Cache durchgeführt. Ein solcher Abruf wäre später notwendig, wenn die Verzweigungsgeschichte-Tabelle 301 unrichtig war. Statt dessen wird die Zieladresse zum Vergleich mit der durch die Verzweigungsgeschichte-Tabelle 301 vorausgesagten Zieladresse in den Vorverarbeitungsschritt 559 einbezogen. Eine Aktion Verzweigung nehmen/nicht nehmen, wie sie durch den Vorverarbeitungsschritt 559 bestimmt wurde, wird ebenfalls mit der Vorhersage aus der Verzweigungsgeschichte-Tabelle verglichen. Wenn einer der Vergleiche nicht positiv ausfällt, dann wird eine Fehlerinformation an den Verzweigungsstrom-Coprozessorabschnitt 575 der Korrekturbehandlungslogik gesendet. Anderenfalls wird die Vorhersage der Verzweigungsgeschichte-Tabelle bestätigt, und die Verzweigung ist aufgelöst. Ein Verzweigungaufgelöst-Bit (R) wird über Leitung 573 an den Fertig-zum-Decodieren-Puffer 601 gesendet und in dem Eintrag gespeichert, der die Verzweigung enthält.
- An diesem Punkt sollte beachtet werden, daß es wünschenswert ist, den Vorsprung des Verzweigungsstrom-Coprozessors 501 vor dem Hauptprozessor 701 so groß wie möglich zu halten. Weil der Verzweigungsstrom-Coprozessor 501 jeweils zwei Befehle gleichzeitig abtastet und nicht alle Befehle, die er abtastet, auch vorverarbeitet, tendiert die "Führung" des Coprozessors vor dem Hauptprozessor 701 dazu, über alle Maßen zuzunehmen, ungeachtet der notwendigen frühzeitigen Behandlung von bedingten Verzweigungen und von potentiellen Blockierungssituationen der Adreßerzeugung, welche dahingehend wirken, daß der Verzweigungsstrom- Coprozessor 501 gebremst wird. Die Größe der "Führung" wird durch die Größe des Fertig-zum-Decodieren-Puffers 601 begrenzt. In dieser bevorzugten Ausführungsform ist die Größe des Fertigzum-Decodieren-Puffers 601 so ausgelegt, daß der Verzweigungsstrom-Coprozessor 501 bis zu 32 Befehle vor dem Hauptprozessor 701 in Führung liegen kann.
- Die Arbeitsweise des Fertig-zum-Decodieren-Puffers 601 wird jetzt mit Bezug auf Fig. 15 beschrieben. Wie im vorhergehenden erklärt, gehen alle Befehle durch den Fertig-zum-Decodieren-Puffer 601, unabhängig davon, ob der Verzweigungsstrom-Coprozessor 501 diese bearbeitet hat oder nicht. Zusätzlich führen die vorverarbeiteten Befehle Test-mit-Maske, Unmittelbarer-logischer- Vergleich, Verzweigung-unter-Bedingung, Verzweigung-gemäß-Bedingungsregister sowie Ladebefehle zu nachfolgenden Einträgen in diesen Puffer. Diese Einträge sind Einträge in ein Bedingungscode- (CC) Feld 631, ein Verzweigung-aufgelöst- (R) Feld 629, ein Adreßerzeugung-Blockierungs- (A) Feld 627 und ein Gültigkeitsfeld 625. Diese nachfolgenden Einträge leiten den Hauptprozessor 701 in bedeutend anderer Form als bei der normalen Prozessoraktivität. Diese andere Arbeitsweise bildet einen bedeutenden Teil der Erfindung.
- Der Fertig-zum-Decodieren-Puffer 601 ist ein Stapelspeicher. Jeder Befehl 621 wird über den Pfad 571 eingegeben, und eine zugehörige Befehlsadresse 623 wird über den Pfad 570 eingegeben. Die Befehlsadresse 623 identifiziert den Eintrag, wenn nachfolgende Informationen wie oben beschrieben hinzugefügt werden sollen. Teile dieser nachfolgenden Informationen kommen über den Pfad 573 aus dem Vorverarbeitungsschritt und setzen entweder den Bedingungscode 631 (zwei Bits), das Verzweigung-aufgelöst-Bit 629 oder das Adreßerzeugung-Blockierungsbit 627. Das Gültigkeitsbit 625 wird auf gültig gesetzt, wenn ein Befehl in den Fertig-zum-Decodieren-Puffer 601 eingegeben wird, weil nur vorher gültige Befehle in diesen Puffer gelassen werden. Das Bit 625 kann jedoch auf ungültig verändert werden, wenn ein Fehler der Verzweigungsvoraussage entweder im Verzweigungsstrom-Coprozessor 501 oder im Hauptprozessor 701 erkannt wird. Der erste derartig ungültige Befehl, der auf die falsch vorausgesagte Verzweigung folgt sowie alle nachfolgenden Befehle im Fertig-zum- Decodieren-Puffer 601 und in der Pipeline des Verzweigungsstrom- Coprozessors 501 werden ebenfalls als ungültig markiert.
- Der Hauptprozessor 701 entnimmt Einträge vom Boden des Stapels des Fertig-zum-Decodieren-Puffers 601, das heißt, die ältesten Einträge. Nur gültige Einträge zählen, ungültige Einträge werden übersprungen. Es sollte beachtet werden, daß der Fertig-zum-Decodieren-Puffer 601 linke und rechte Einträge besitzt und daß der rechtsseitige Eintrag eines Paares älter ist als der linksseitige Eintrag. Der Hauptprozessor 701 entnimmt vorzugsweise abwechselnd Befehle aus dem rechtsseitigen und dem linksseitigen Teil des Fertig-zum-Decodieren-Puffer-Stapelspeichers.
- Ein Schalter 633 wählt die ältesten Einträge aus und legt den älteren der beiden ausgewählten Einträge über den Pfad 651 als ersten Befehl an das Nächstes-Befehlspaar-Register 703 an. Der nächstälteste Befehl, der nur durch sein Verzweigung-aufgelöst- Bit 629 repräsentiert wird, wird ebenfalls auf den Pfad 651 gelegt.
- Das Verzweigung-aufgelöst-Bit des nächstältesten Befehls ist von eindeutigem Interesse, weil es besagt, daß der Befehl ein Verzweigungsbefehl ist, welcher durch den Verzweigungsstrom-Coprozessor 501 aufgelöst worden ist. Es kennzeichnet ebenfalls Korrekturen der Verzweigungsgeschichte-Tabelle 301, wenn solche erforderlich sind. Als ein Ergebnis dessen gelten folgende Bedingungen:
- 1. Gültige Befehle im Fertig-zum-Decodieren-Puffer 601, die der aufgelösten Verzweigung bis einschließlich zur nächsten Verzweigung folgen, sind die richtigen auszuführenden Befehle.
- 2. Der erste Befehl im Nächstes-Befehlspaar-Register 703 ist entweder ein Befehl Test-mit-Maske oder Unmittelbarer-logischer- Vergleich, welcher nur den Bedingungscode setzt. Weil der richtige Bedingungscodewert durch den Verzweigungsstrom-Coprozessor 501 bestimmt wurde und Teil des Eintrages im Fertig-zum-Decodieren-Puffer 601 ist, ist es nicht erforderlich, den Operanden des Befehls Test-mit-Maske oder Unmittelbarer-logischer-Vergleich erneut abzurufen. Der Bedingungscodewert wird mit durch die Pipeline des Hauptprozessors 701 geführt und dazu verwendet, den Bedingungscode des Hauptprozessors zum gegebenen Zeitpunkt während der Ausführung des Befehls Test-mit-Maske oder Unmittelbarer-logischer-Vergleich zu aktualisieren.
- 3. Der zweite Befehl, der aufgelöste Verzweigungsbefehl, gekennzeichnet durch sein Verzweigung-aufgelöst-Bit, benötigt im Hauptprozessor keinen Decodierzyklus und muß nicht in der Pipeline des Hauptprozessors auftreten, weil die folgenden Befehle im Fertig- zum-Decodieren- Puffer 601 bereits die Verzweigungsaktion richtig widerspiegeln, einschließlich der Befehlsadressen. Notwendigerweise wird der Verzweigungsbefehl dann im Hauptprozessor 701 in einen Leerbefehl konvertiert. Nur ein Decodierzyklus wird für das Paar Test-mit-Maske/Unmittelbarer-logischer- Vergleich - Verzweigung verwendet, und der nächste Decodierzyklus ist für den folgenden Befehl verfügbar. Als ein Ergebnis dessen sind für dieselbe Anzahl Befehle weniger Decodierzyklen erforderlich, wodurch der Leistungsparameter Zyklen pro Befehl verbessert wird.
- Es sollte beachtet werden, daß, wenn das Verzweigung-aufgelöst- Bit 629 "aus" ist, der erste Befehl aus dem Nächstes-Befehlspaar-Register 703 in die Pipeline des Hauptprozessors 701 eingegeben wird und daß nur dann der erste Befehl aus dem Fertig-zum- Decodieren-Puffer 601 entfernt wird. Der zweite Befehl wird dann der erste Befehl des nächsten Paares. Wenn das Verzweigung-aufgelöst-Bit 629 "ein" ist, wird der zweite Befehl durch ein Signal, das über die Leitung 653 gesendet wird, ebenfalls aus dem Fertig-zum-Decodieren-Puffer 601 entfernt, weil, wie oben beschrieben, seine Wirkungen bereits vollzogen worden sind.
- Mit Bezug auf Fig. 16 wird jetzt die Arbeitsweise des Hauptprozessors 701 beschrieben. Mit Ausnahme der unten zu diskutierenden, speziellen Bedingungen arbeitet der Hauptprozessor 701 in derselben Weise wie ein Hochleistungs-Pipelineprozessor, beispielsweise wie dem IBM 3033 oder dem 3090. Die Pipeline besteht aus einem Decodierschritt 717, einem Adreßerzeugungsschritt 729, einem Cachezugriffsschritt über die Pfade 751 und 753, einem Ausführungs- und Abspeicherungsschritt 735 und einem Befehl sende-Schritt 737. Wie im IBM 3033 oder im 3090 ist die Pipeline so ausgelegt, daß die Befehle mit einer Geschwindigkeit von einem Befehl pro Prozessorzyklus ausgeführt werden können. Bestimmte Befehle erfordern jedoch mehr als einen Zyklus im Ausführungsschritt, und die Pipeline kann verzögert werden, bis diese Befehle ausgeführt sind.
- Um die speziellen Bedingungen, welche einen Teil der Erfindung bilden, zu behandeln, wird für jeden Befehl, wie in Fig. 16 dargestellt, eine Befehlsadresse 705 durch jeden Schritt der Pipeline mitgeführt. Ebenso werden Bedingungscodebits 709, ein Verzweigung-aufgelöst-Bit 711 und ein Adreßerzeugung-Blockierungsbit 713 durch die Pipeline mitgeführt.
- Einige der speziellen Bedingungen, die der Hauptprozessor 701 behandeln muß, sind die folgenden:
- 1. Ein Verzweigung-aufgelöst-Bit 715 des zweiten Befehls des Befehlspaares im Nächstes-Befehlspaar-Register 703 ist "ein".
- Wie im vorhergehenden erklärt, bedeutet diese Bedingung, daß der zweite Befehl ein Verzweigungsbefehl ist, welcher durch den Verzweigungsstrom-Coprozessor 501 bereits aufgelöst worden ist und der deshalb durch den Hauptprozessor 701 als Leerbefehl behandelt wird. Auch der erste Befehl ist vorverarbeitet worden, und die sich ergebenden Bedingungscodebits 709 sind verfügbar, um im Ausführungs- und Abspeicherungsschritt 735 verwendet zu werden. Deshalb ist es nicht erforderlich, den Operanden des ersten Befehls erneut abzurufen. Unter dieser Bedingung treten die folgenden Pipelineschritte auf:
- a. Decodierschritt 717 - Der erste Befehl 707 im Nächstes- Befehlspaar-Register 703 wird in den Decodierschritt 717 eingegeben. Die Befehlsadresse 705 dieses Befehls wird zum Decodierschritt 717 übertragen, so wie die Bedingungscodebits 709, das Verzweigung-aufgelöst-Bit 711 und das Adreßerzeugung-Blockierungsbit 713. Das Verzweigung-aufgelöst-Bit 715 des zweiten Befehls wird ebenfalls übertragen. Weil dieses Bit "ein" ist, wird über den Pfad 653 ein Signal an den Fertig-zum-Decodieren-Puffer 601 gesendet, was bewirkt, daß der zweite Befehl entfernt wird. Als ein Ergebnis dessen wird der "nächste" erste Befehl, der im Nächstes-Befehlspaar-Register 703 erscheint, der Befehl, der dem aufgelösten Verzweigungsbefehl folgt.
- b. Adreßerzeugungsschritt 729 - Weil der zweite Befehl durch den Hauptprozessor 701 als ein Leerbefehl behandelt wird, muß keine Adresse erzeugt werden, so daß dieser Schritt umgangen werden kann.
- c. Ausführungs- und Abspeicherungsschritt 735 - Der erste Befehl wird zusammen mit seiner Adresse und den zugeordneten Bits und dem Verzweigung-aufgelöst-Bit 715 des zweiten Befehls in den Ausführungs- und Abspeicherungsschritt 735 eingegeben. Weil dieses Bit "ein" ist, werden die Bedingungscodebits 709 verwendet, um den Bedingungscode des Hauptprozessors 701 zu setzen.
- d. Befehlsende-Schritt 737 - Dieser Schritt signalisiert den richtigen Abschluß des Befehls und wird oft mit dem Ausführungsschritt 735 kombiniert.
- 2. Das Adreßerzeugung-Blockierungsbit 713 des ersten Befehls des Befehlspaares im Nächstes-Befehlspaar-Register 703 ist "ein".
- Unter dieser Bedingung bewirkt der erste Befehl eine Blockierung der Adreßerzeugung, derart, daß ein Register geladen wird, das der folgende Befehl als sein Basisregister verwenden wird. Unter dieser Bedingung treten die folgenden Pipelineschritte auf:
- a. Decodierschritt 717 - Der "Ein"-Zustand des Adreßerzeugung-Blockierungsbits wird in diesem Schritt erkannt. Diese Erkennung führt zu einer Anforderung, die über den Pfad 719 an den AGI-Stapelspeicher 563 gesendet wird. Der AGI-Stapelspeicher 563 ist ursprünglich durch den Verzweigungsstrom-Coprozessor 501 mit den neuen Registerwerten geladen worden, welche durch die blokierten Befehle benötigt werden. Der älteste Eintrag aus dem Stapelspeicher wird über den Pfad 721 an das Nächste-Basis-Register 725 angelegt und zur Verwendung durch den nächsten Befehl zu einem Basisregister 727 übertragen.
- b. Adreßerzeugungsschritt 729 - Eine erzeugte Adresse ist für diesen Befehl nicht erforderlich, weil der Verzweigungsstromcoprozessor 501 diesen Schritt schon vorher ausgeführt hat. In jedem Fall tritt beim Ausführen dieses Schrittes kein Schaden auf. Es ist jedoch wünschenswert einen Cacheabruf zu verhindern. Dieses Verhindern wird durch das Durchschalten des "ein" -Zustandes des Adreßerzeugung-Blockierungsbits 713 durch ein ODER-Gatter 731 und ein Gatter 733 erreicht.
- c. Ausführungs- und Abspeicherungsschritt 735 - Der "Ein"- Zustand des Adreßerzeugung-Blockierungsbits 713 bewirkt, daß der Inhalt des Nächste-Basis-Registers 725 (obwohl nicht dargestellt, in der Pipeline mitgeführt) in die Universalregister des Hauptprozessors 701 geschrieben wird.
- 3. Der erste Befehle im Nächstes-Befehlspaar-Register 703 ist ein Verzweigungsbefehl.
- Weil ein Verzweigungsbefehl als erster Befehl auftritt, hat der Verzweigungsstrom-Coprozessor 501 diesen nicht aufgelöst. Folglich wird es erforderlich sein, dessen aktuelle Zieladresse aus dem Adreßerzeugungsschritt 729 mit der Zieladresse zu überprüfen, die die Verzweigungsgeschichte-Tabelle 301 vorausgesagt hat. Es wird ebenfalls erforderlich sein, die tatsächlich unternommene Aktion, wie sie im Ausführungs- und Abspeicherungsschritt 735 bestimmt wird, mit der Aktion zu vergleichen, welche die Verzweigungsgeschichte-Tabelle 301 voraussagt. Anders ausgedrückt, die Verzweigung wird beim Durchlauf durch die Pipeline konventionell verarbeitet. Folgende Pipelineschritte treten auf:
- a. Decodierschritt 717 - Ein Signal, daß dieser Befehl ein Verzweigungsbefehl ist, wird über den Pfad 757 an den Korrekturbehandlungs-Stapelspeicher 743 gesendet. Die Befehlsadresse wird ebenfalls gesendet und zwar über Pfad 759. Der Korrekturbehandlungs-Stapelspeicher 743 lokalisiert die vorausgesagte Zieladresse für diese Verzweigung, und, wenn die tatsächliche Zieladresse vom Adreßerzeugungsschritt 729 auf Pfad 761 verfügbar ist, wird ein Vergleich zwischen den beiden ausgeführt. Wenn sie übereinstimmen, war die Voraussage korrekt, und es ist keine Korrektur der Verzweigungsgeschichte-Tabelle erforderlich. Wenn es jedoch keine Übereinstimmung gibt, enthält die Verzweigungsgeschichte-Tabelle 301 einen Fehler. Dieser Fehler wird auf dem Pfad 581 der Verzweigungsgeschichte-Tabelle 301 angezeigt (siehe Fig. 17). In diesem Fall sind alle Befehle, die der falsch vorausgesagten Verzweigung in der Pipeline, im Fertig-zum-Decodieren-Puffer 601 und im Befehlspuffer 401 folgen, ungültig. Die Verzweigungsgeschichte-Tabelle 301 muß korrigiert werden, und das Vorabrufen der Befehle muß mit der richtigen Zieladresse wieder aufgenommen werden. Dieser Vorgang wird unten detaillierter beschrieben.
- b. Ausführungsschritt 735 - Die tatsächliche Verzweigungsaktion wird bestimmt und über einen Nehmen/nicht-nehmen-Pfad 741 an den Korrekturbehandlungs-Stapelspeicher 743 gesendet. Die Verzweigungsadresse wird auf dem Pfad 739 gesendet. Wenn die Verzweigung aktuell genommen wurde und ein entsprechender Eintrag im Korrekturbehandlungs-Stapelspeicher 743 vorhanden ist, ist kein Fehler aufgetreten. Genauso ist kein Fehler aufgetreten, wenn die Verzweigung aktuell nicht genommen wurde und kein entsprechender Eintrag im Korrekturbehandlungs-Stapelspeicher 743 vorhanden ist. Anderenfalls ist, wie unten beschrieben wird, ein Fehler aufgetreten.
- Mit Ausnahme der vorstehenden speziellen Bedingungen werden beim Durchlauf durch die Pipeline alle Befehle normal verarbeitet. Es sollte jedoch beachtet werden, daß zwei besondere Situationen nicht auftreten:
- 1. Das Verzweigung-aufgelöst-Bit 711 des ersten Befehls des Paares ist "ein", was anzeigt, daß es sich um einen aufgelösten Verzweigungsbefehl handelt. Dieses Bit sollte bei einem ersten Befehl niemals "ein" sein, weil der Befehl unmittelbar davor als ein zweiter Befehl mit seinem Verzweigung-aufgelöst-Bit 711 ein erschienen wäre. Deshalb würde der erste Befehl wie oben beschrieben behandelt werden und somit aus dem Fertig-zum-Decodieren-Puffer 601 gelöscht werden.
- 2. Das Adreßerzeugung-Blockierungsbit des ersten Befehls ist "ein" und das Verzweigung-aufgelöst-Bit ist "ein". Diese Situation kann nicht eintreten, weil der erste Befehl, welcher eine Blockierung der Adreßerzeugung bewirkt, ein Ladebefehl sein muß und deshalb weder ein Test-mit-Maske-Befehl noch ein Unmittelbarer-logischer-Vergleich-Befehl ist. Die Logik von Fig. 14 zeigt, daß in diesem Fall die Bedingungscodebits als ungültig markiert würden. Wenn der zweite Befehl ein Verzweigungsbefehl war, konnte er ohne gültigen Bedingungscode nicht aufgelöst werden.
- Mit Bezug auf Fig. 17 wird jetzt die Korrektur der Verzweigungsgeschichte-Tabelle beschrieben. Eine solche Korrektur wird entweder durch die Vorverarbeitungsaktivitäten des Verzweigungsstrom-Coprozessors 501 oder durch die nachfolgenden regulären Ausführungsaktivitäten des Hauptprozessors W01 bezüglich Verzweigungsbefehlen erforderlich, welche der Verzweigungsstrom-Coprozessor 501 nicht auflösen konnte.
- Fig. 17 zeigt auch die Gesamtaktivität der Verzweigungsgeschichte-Tabelle 301 sowie die Mittel zu ihrer Korrektur. Wie oben diskutiert initiiert die Vorabrufsteuereinrichtung 201 die Abrufe von Vierfachworten über einen Pfad (in der Figur nicht dargestellt) vom Cache 101 in den Befehlspuffer 401. Jede Abrufadresse eines Vierfachwortes wird ebenfalls über den Pfad 351 an die Verzweigungsgeschichte-Tabelle 301 gesendet. Wenn es einen entsprechenden Eintrag gibt, gibt die Verzweigungsgeschichte-Tabelle 301 über den Pfad 353 eine Verzweigungszieladresse an die Vorabrufsteuereinrichtung 201 zurück. Die zurückgegebene Verzweigungszieladresse bestimmt den nächsten Vierfachwort-Befehlsabruf und so weiter. Solche Einträge in der Verzweigungsgeschichte-Tabelle, welche sowohl die Zieladresse als auch die zugeordnete Verzweigungsbefehlsadresse enthalten, werden über die Pfade 205 und 207 in den BA/TA-Stapelspeicher 503 transportiert, um die Auswahl von Befehlspaaren für die Zuführung zum Verzweigungsstrom-Coprozessor 501 zu leiten.
- Die Einträge aus dem BA/TA-Stapelspeicher 503 werden dann über den Pfad 587 zum Verzweigungsstrom-Coprozessorabschnitt 575 des Korrekturbehandlungs-Stapelspeichers transportiert, um Fehler in der Verzweigungsgeschichte-Tabelle zu behandeln, welche der Verzweigungsstrom-Coprozessor 501 im Vorverarbeitungsschritt 559 (Fig. 13) erkennen könnte. Alle derart während des Vorverarbeitungsschritts 559 erkannten Fehler werden über den Pfad 581 dem Korrekturbehandlungs-Stapelspeicher 575 signalisiert.
- Wenn ein Fehler erkannt wird, müssen zwei Operationen ausgeführt werden. Erstens müssen alle Befehle, welche in den Befehlspuffer 401 vorabgerufen worden sind oder welche in der Pipeline des Verzweigungsstrom-Coprozessors 501 der falsch vorausgesagten Verzweigung folgen, ungültig gemacht werden. Zweitens muß eine Korrektur der Verzweigungsgeschichte-Tabelle auf dem Pfad 581 signalisiert werden.
- Die auf dem Pfad 581 übertragene Information enthält die Verzweigungsadresse (zum Identifizieren des Eintrages in der Verzweigungsgeschichte-Tabelle, der korrigiert werden soll), die tatsächliche Zieladresse und die tatsächlich unternommene Aktion. Wenn die Zieladresse unrichtig war, empfängt die Verzweigungsgeschichte-Tabelle 301 auf dem Pfad 581 die korrigierte Zieladresse. Wenn die Verzweigung tatsächlich genommen wurde und die Verzweigungsgeschichte-Tabelle vorausgesagt hat, daß sie nicht genommen würde, werden die neuen Verzweigungs- und Zieladressen wiederum über den Pfad 581 in die Verzweigungsgeschichte-Tabelle 301 eingegeben. Wenn die Verzweigung tatsächlich nicht genommen wurde, die Verzweigungsgeschichte-Tabelle 301 aber vorausgesagt hat, daß sie genommen würde, wird der entsprechende Eintrag gestrichen. Der Löschbefehl wird über den Pfad 581 gesendet.
- Weil der Verzweigungsstrom-Coprozessor 501 nicht alle Verzweigungen auflöst, werden die Einträge im Verzweigungsstrom-Coprozessorabschnitt 575 des Korrekturbehandlungs-Stapelspeichers bezüglich der nicht aufgelösten Verzweigungen über einen Pfad 745 in den Hauptprozessorabschnitt 743 des Korrekturbehandlungs- Stapelspeichers transportiert. Der Hauptprozessor 701 behandelt Fehler der Verzweigungsvoraussagen in gleicher Weise wie der Verzweigungsstrom-Coprozessor 501, so wie sie oben diskutiert wurde und wie es in Fig. 17 dargestellt ist.
- Es sollte beachtet werden, daß es von der Rechnerarchitektur bestimmte Regeln gibt, die die Beziehungen von Abruf- und Abspeicheroperationen zueinander betreffen. Dies wurde in gewissem Umfang vorstehend diskutiert. Bei der vorliegenden Ausführungsform sollte darauf geachtet werden, ob die durch den Verzweigungsstrom-Coprozessor 501 durchgeführten Abrufe vor ihrer eigentlichen Stellung in der Befehlsfolge erfolgen. Wenn auch hier nicht aufgezeigt, so ist es doch wohlbekannt, wie es erkannt werden kann, wenn nachfolgende Speicher- oder andere Operationen solch frühzeitige Speicherabrufe ungültig oder möglicherweise ungültig machen und wie weitere Aktionen auf der Grundlage dieser ungültigen Abrufe verhindert werden können.
- Wie oben beschrieben, werden gemäß der Erfindung bedingte Verzweigungsbefehle durch einen Verzweigungsstrom-Coprozessor während des Vorabrufs von Befehlen für die Hauptprozessorpipeline in größtmöglichem Umfang aufgelöst, um es dem Hauptprozessor zu ermöglichen, näher an die Ausführungsgeschwindigkeit von einem Befehl pro Maschinenzyklus heranzukommen. Als weitere Verbesserung der Datenverarbeitung werden durch den Verzweigungsstromcoprozessor Blockierungssituationen der Adreßerzeugung erkannt und wenn möglich behandelt. Die normale Pipeline des Hauptprozessors ähnelt dann konventionellen Pipelines sehr stark, mit der Ausnahme, daß verschiedene Bits hinzugefügt werden, um anzuzeigen, ob eine Verzweigung aufgelöst wurde oder ob eine Blokkierungssituation der Adreßerzeugung erkannt und im vorhergehenden behandelt wurde.
Claims (18)
1. Rechenvorrichtung zur Ausführung von Programmbefehlen in
Befehlsfolgen, wobei diese Befehlsfolgen einen ersten Typ
Befehle enthalten, welche bedingte Verzweigungsbefehle
umfassen sowie einen zweiten Typ Befehle, die sich von dem
ersten Typ unterscheiden, wobei die Ergebnisse der
Ausführung der Verzweigungsbefehle die Auswahl zwischen
alternativen Befehlsfolgen bestimmen, wobei die Rechenvorrichtung
besitzt: Speichermittel (101) zum Speichern der
Programmbefehle und Daten, Vorabrufmittel (201) zum vorherigen
Abrufen der Programmbefehle aus den Speichermitteln und zum
Bilden der Befehlsfolgen, die unmittelbar auf
Befehlspuffermittel (401) aufgeteilt werden, wobei die Vorabrufmittel
Mittel (301) enthalten, die vorläufige Schätzungen über die
Ergebnisse der bedingten Verzweigungsbefehle vornehmen, und
Hauptverarbeitungsmittel (701) und wobei die
Rechenvorrichtung gekennzeichnet ist durch:
Vorverarbeitungsmittel (501), Mittel umfassend zum
Empfangen der Befehlsfolgen von den Vorabrufmitteln und zur
Vorabausführung einzelner Befehle des ersten Befehlstyps und
Mittel zum Einstellen der Vorabrufmittel entsprechend der
Ergebnisse der Vorabausführung einzelner Befehle des ersten
Befehlstyps, um die Anzahl der korrekten vorläufigen
Schätzungen zu maximieren, wobei die Vorverarbeitungsmittel
desweiteren Mittel enthalten, die aus den Befehlsfolgen auf
der Grundlage einer inkorrekten vorläufigen Schätzung
vorher abgerufene Befehle entsprechend den Ergebnissen der
Vorabausführung einzelner Befehle des ersten Befehlstyps
entfernen, und durch Puffermittel (601) zum Speichern der
Befehlsfolgen ohne die auf der Grundlage einer inkorrekten
vorläufigen Schätzung vorher abgerufenen Befehle, wobei die
Hauptverarbeitungsmittel, wenn sie die voraus arbeitenden
Puffermittel benötigen, die Programmbefehle aus den
Puffermitteln heraus ausführen und die Daten dementsprechend
verarbeiten,
und wobei die Vorverarbeitungsmittel und die
Puffermittel (601) in Reihe geschaltet und zwischen den
Befehlspuffermitteln (401) und den Hauptverarbeitungsmitteln
angeordnet sind.
2. Rechenvorrichtung gemäß Anspruch 1, worin die
Vorverarbeitungsmittel desweiteren Mittel zur Minimierung einer Anzahl
von Fehlern, welche in den Befehlsfolgen auftreten, die
durch die Vorabrufmittel gebildet werden, enthalten.
3. Rechenvorrichtung gemäß Anspruch 1, worin die Mittel zur
Durchführung der vorläufigen Schätzungen eine Tabelle (BHT)
umfassen, die Informationen enthält, welche die Ergebnisse
der Ausführung der bedingten Verzweigungsbefehle anzeigen,
wobei die Einstellmittel Mittel zum Aktualisieren der
Einträge der Tabelle entsprechend der Ergebnisse der
Vorverarbeitung der Befehle des ersten Typs enthalten.
4. Rechenvorrichtung gemäß Anspruch 3, worin die Mittel zum
Aktualisieren der Einträge Mittel zum Hinzufügen der
Einträge und zum Entfernen der Einträge aus der Tabelle
umfassen.
5. Rechenvorrichtung gemäß Anspruch 4, worin die Befehlsfolgen
ohne die auf der Grundlage falscher vorläufiger Schätzungen
vorabgerufenen Befehle erste und zweite Informationstypen
enthalten, welche die Ergebnisse der Vorverarbeitung der
Befehle des ersten Typs anzeigen, wobei die
Hauptverarbeitungsmittel die Befehlsfolgen ohne die auf der Grundlage
falscher vorläufiger Schätzungen vorabgerufenen Befehle
entsprechend dem ersten und zweiten Informationstyp
ausführen.
6. Rechenvorrichtung gemäß Anspruch 5, worin der erste
Informationstyp Informationen enthält, die anzeigen, ob ein
gegebener bedingter Verzweigungsbefehl aufgelöst wurde.
7. Rechenvorrichtung gemäß Anspruch 5, worin der erste
Informationstyp desweiteren Ladebefehle enthält, welche ein
Register verändern, das durch einen unmittelbar folgenden
Befehl verwendet wird, wobei die Rechenvorrichtung
desweiteren Mittel zur Berechnung eines neuen Registerwertes in
Reaktion auf die Erkennung eines der Ladebefehle umfaßt und
wobei die Hauptverarbeitungsmittel den neuen Registerwert
verwenden, sobald dieser durch den unmittelbar folgenden
Befehl benötigt wird.
8. Rechenvorrichtung gemäß Anspruch 7, worin die
Vorverarbeitungsmittel desweiteren umfassen:
Mittel zum Empfangen der Befehle der Befehlsfolgen von den
Vorabrufmitteln, jeweils zwei zu jedem Zeitpunkt; und
Mittel zum Abtasten der zwei zu jedem Zeitpunkt anstehenden
Befehle, wobei eine zum zweiten Informationstyp gehörende
Information, ohne daß sie vorverarbeitet wird, direkt an
die Hauptverarbeitungsmittel ausgegeben wird.
9. Rechenvorrichtung gemäß Anspruch 8, worin die
Hauptverarbeitungsmittel Mittel zum Korrigieren der Vorabrufmittel
umfassen.
10. Rechenvorrichtung gemäß Anspruch 9, worin der zweite
Informationstyp Ladebefehlsinformationen enthält, die anzeigen,
ob ein erster Befehl von den zwei zu jedem Zeitpunkt
anstehenden Befehlen einer der Ladebefehle ist, welche ein
Register verändern, welches durch einen unmittelbar folgenden
Befehl verwendet werden wird, wobei die
Hauptverarbeitungsmittel den neuen Registerwert entsprechend der
Ladebefehlsinformation verwenden.
11. Rechenvorrichtung gemäß Anspruch 1, worin der erste
Befehlstyp Ladebefehle enthält, welche ein Register
verändern, das durch einen unmittelbar folgenden Befehl
verwendet
wird, wobei die Rechenvorrichtung desweiteren Mittel
zur Berechnung eines neuen Registerwertes in Reaktion auf
die Erkennung eines dieser Ladebefehle umfaßt und wobei die
Hauptverarbeitungsmittel den neuen Registerwert sobald
verwenden, wie dies durch den unmittelbar folgenden Befehl
erforderlich ist.
12. Rechenvorrichtung gemäß Anspruch 11, worin die
Vorverarbeitungsmittel desweiteren umfassen:
Mittel zum Empfangen der Befehle der Befehlsfolgen von den
Vorabrufmitteln, jeweils zwei zu jedem Zeitpunkt; und
Mittel zum Abtasten der zwei zu jedem Zeitpunkt anstehenden
Befehle, wobei ein zum zweiten Befehlstyp gehörender
Befehl, ohne daß er vorverarbeitet wird, direkt an die
Hauptverarbeitungsmittel ausgegeben wird.
13. Rechenvorrichtung gemäß Anspruch 12, worin die
Befehlsfolgen ohne die auf der Grundlage falscher vorläufiger
Schätzungen vorabgerufenen Befehle erste und zweite
Informationstypen enthalten, welche die Ergebnisse der
Vorverarbeitung der Befehle des ersten Befehlstyps anzeigen, wobei
die Hauptverarbeitungsmittel die Befehlsfolgen ohne die auf
der Grundlage falscher vorläufiger Schätzungen
vorabgerufenen Befehle entsprechend der Informationen des ersten und
zweiten Typs ausführen.
14. Rechenvorrichtung gemäß Anspruch 13, worin der zweite
Informationstyp Ladebefehlsinformationen enthält, die
anzeigen, ob ein erster Befehl von den zwei zu jedem Zeitpunkt
anstehenden Befehlen einer der Ladebefehle ist, welche ein
Register verändern, welches durch einen unmittelbar
folgenden Befehl verwendet werden wird, wobei die
Hauptverarbeitungsmittel den neuen Registerwert entsprechend der
Ladebefehlsinformation verwenden.
15. Rechenverfahren zur Ausführung von Programmbefehlen in
Befehlsfolgen, wobei die Befehlsfolgen einen ersten Typ
Befehle enthalten, welcher bedingte Verzweigungsbefehle
enthält sowie einen zweiten Typ Befehle, die sich von dem
ersten Typ unterscheiden, wobei die Ergebnisse der Ausführung
der Verzweigungsbefehle die Auswahl zwischen alternativen
Befehlsfolgen bestimmen, wobei die Programmbefehle in einem
Speicher gespeichert und aus diesem vorabgerufen werden,
wobei vorläufige Schätzungen über die Ergebnisse der
bedingten Verzweigungsbefehle vorgenommen werden und wobei
Befehlsfolgen entsprechend dem Vorabruf in einem
Befehlspuffer gebildet werden, wobei das Rechenverfahren die
folgenden Schritte umfaßt:
Vorverarbeiten einzelner Befehle des ersten Befehlstyps in
den Befehlsfolgen, einschließlich des Vorabausführens der
bedingten Verzweigungsbefehle und Identifizieren von auf
der Grundlage falscher vorläufiger Schätzungen
vorabgerufenen Befehlen in den Befehlsfolgen, wobei der
Vorverarbeitungsschritt desweiteren die Optimierung des
Vorabrufschrittes entsprechend der Ergebnisse des
Vorverarbeitungsschrittes umfaßt, wobei der Optimierungsschritt den Schritt
der Maximierung der Anzahl der korrekten vorläufigen
Schätzungen enthält;
Übersetzen der Befehlsfolgen entsprechend der Ergebnisse
des Vorverarbeitungsschrittes ohne die auf der Grundlage
falscher vorläufiger Schätzungen vorabgerufenen Befehle;
Speichern der Befehlsfolgen ohne die auf der Grundlage
falscher vorläufiger Schätzungen vorabgerufenen Befehle in
Puffermitteln, bevor diese durch die
Hauptverarbeitungsmittel benötigt werden;
Übertragen der Befehle, die auf korrekten vorläufigen
Schätzungen basieren, aus den Puffermitteln in die
Hauptverarbeitungsmittel; und
Ausführung der Programmbefehle und Verarbeitung der Daten
entsprechend der Befehlsfolgen ohne die auf der Grundlage
falscher vorläufiger Schätzungen vorabgerufenen Befehle.
16. Verfahren gemäß Anspruch 15, worin die Befehlsfolgen ohne
die auf der Grundlage falscher vorläufiger Schätzungen
vorabgerufenen Befehle Vorverarbeitungsinformationen
enthalten, die die Ergebnisse der Ausführung der bedingten
Verzweigungsbefehle anzeigen, wobei der Ausführungsschritt
entsprechend der Vorverarbeitungsinformation ausgeführt
wird.
17. Verfahren gemäß Anspruch 16, worin der
Vorverarbeitungsschritt den Schritt des Abtastens der zwei zu jedem
Zeitpunkt anstehenden Befehlsfolgen umfaßt, um die
Geschwindigkeit zu erhöhen, mit der der Verarbeitungsschritt
ausgeführt wird.
18. Verfahren gemäß Anspruch 17, worin der Verarbeitungsschritt
als weiteren Schritt enthält den Schritt der Ausführung der
Befehlsfolgen ohne die auf der Grundlage falscher
vorläufiger Schätzungen vorabgerufenen Befehle entsprechend der
Ladebefehlsinformation, die anzeigt, ob ein erster Befehl
in jedem der Befehle ein Ladebefehl ist, wobei der
Vorverarbeitungsschritt den Schritt der Berechnung eines neuen
Registerwertes entsprechend der Ladebefehlsinformation
enthält und wobei der Verarbeitungsschritt den Schritt der
Verwendung des neuen Registerwertes entsprechend der
Ladebefehlsinformation enthält.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US06/839,312 US4991080A (en) | 1986-03-13 | 1986-03-13 | Pipeline processing apparatus for executing instructions in three streams, including branch stream pre-execution processor for pre-executing conditional branch instructions |
Publications (2)
Publication Number | Publication Date |
---|---|
DE3751474D1 DE3751474D1 (de) | 1995-09-28 |
DE3751474T2 true DE3751474T2 (de) | 1996-03-28 |
Family
ID=25279394
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE3751474T Expired - Fee Related DE3751474T2 (de) | 1986-03-13 | 1987-02-05 | Verzweigungsstrom-Koprozessor. |
Country Status (5)
Country | Link |
---|---|
US (1) | US4991080A (de) |
EP (1) | EP0236745B1 (de) |
JP (1) | JPS62221036A (de) |
CA (1) | CA1268555A (de) |
DE (1) | DE3751474T2 (de) |
Families Citing this family (90)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5440704A (en) * | 1986-08-26 | 1995-08-08 | Mitsubishi Denki Kabushiki Kaisha | Data processor having branch predicting function |
US5265220A (en) * | 1986-12-23 | 1993-11-23 | Nec Corporation | Address control device for effectively controlling an address storing operation even when a request is subsequently cancelled |
JP2723238B2 (ja) * | 1988-01-18 | 1998-03-09 | 株式会社東芝 | 情報処理装置 |
IL92605A0 (en) * | 1988-12-19 | 1990-08-31 | Bull Hn Information Syst | Production line method and apparatus for high performance instruction execution |
EP0378415A3 (de) * | 1989-01-13 | 1991-09-25 | International Business Machines Corporation | Verteilungsmechanismus für mehrere Befehle |
US5127091A (en) * | 1989-01-13 | 1992-06-30 | International Business Machines Corporation | System for reducing delay in instruction execution by executing branch instructions in separate processor while dispatching subsequent instructions to primary processor |
EP0394624B1 (de) * | 1989-04-24 | 1997-06-18 | International Business Machines Corporation | Mehrfachsequenzprozessorsystem |
US5652910A (en) * | 1989-05-04 | 1997-07-29 | Texas Instruments Incorporated | Devices and systems with conditional instructions |
US5617574A (en) * | 1989-05-04 | 1997-04-01 | Texas Instruments Incorporated | Devices, systems and methods for conditional instructions |
CA2016068C (en) * | 1989-05-24 | 2000-04-04 | Robert W. Horst | Multiple instruction issue computer architecture |
JP2570859B2 (ja) * | 1989-05-25 | 1997-01-16 | 日本電気株式会社 | データ処理装置 |
JP2680899B2 (ja) * | 1989-08-28 | 1997-11-19 | 日本電気株式会社 | 情報処理装置及びその制御方法 |
JPH0650465B2 (ja) * | 1989-10-16 | 1994-06-29 | 株式会社東芝 | 分岐制御回路 |
US5471593A (en) * | 1989-12-11 | 1995-11-28 | Branigin; Michael H. | Computer processor with an efficient means of executing many instructions simultaneously |
EP0442116A3 (en) * | 1990-02-13 | 1993-03-03 | Hewlett-Packard Company | Pipeline method and apparatus |
US5230068A (en) * | 1990-02-26 | 1993-07-20 | Nexgen Microsystems | Cache memory system for dynamically altering single cache memory line as either branch target entry or pre-fetch instruction queue based upon instruction sequence |
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 |
US5212794A (en) * | 1990-06-01 | 1993-05-18 | Hewlett-Packard Company | Method for optimizing computer code to provide more efficient execution on computers having cache memories |
CA2045791A1 (en) * | 1990-06-29 | 1991-12-30 | Richard Lee Sites | Branch performance in high speed processor |
US5276882A (en) * | 1990-07-27 | 1994-01-04 | International Business Machines Corp. | Subroutine return through branch history table |
US5530941A (en) * | 1990-08-06 | 1996-06-25 | Ncr Corporation | System and method for prefetching data from a main computer memory into a cache memory |
US5276825A (en) * | 1991-03-12 | 1994-01-04 | Chips & Technologies, Inc. | Apparatus for quickly determining actual jump addresses by assuming each instruction of a plurality of fetched instructions is a jump instruction |
US5394530A (en) * | 1991-03-15 | 1995-02-28 | Nec Corporation | Arrangement for predicting a branch target address in the second iteration of a short loop |
US5287467A (en) * | 1991-04-18 | 1994-02-15 | International Business Machines Corporation | Pipeline for removing and concurrently executing two or more branch instructions in synchronization with other instructions executing in the execution unit |
US5265199A (en) * | 1991-05-22 | 1993-11-23 | Silicon Graphics, Inc. | Method and apparatus for accomplishing Z-buffering by prediction |
US5630157A (en) * | 1991-06-13 | 1997-05-13 | International Business Machines Corporation | Computer organization for multiple and out-of-order execution of condition code testing and setting instructions |
JPH0628184A (ja) * | 1991-08-26 | 1994-02-04 | Internatl Business Mach Corp <Ibm> | ブランチ予測方法及びブランチプロセッサ |
JP3182438B2 (ja) * | 1991-10-28 | 2001-07-03 | 株式会社日立製作所 | データプロセッサ |
US5333283A (en) * | 1991-10-29 | 1994-07-26 | International Business Machines Corporation | Case block table for predicting the outcome of blocks of conditional branches having a common operand |
US5280592A (en) * | 1992-01-03 | 1994-01-18 | Amdahl Corporation | Domain interlock |
CA2124333A1 (en) * | 1992-02-27 | 1993-09-02 | John A. Saba | Cpu having pipelined instruction unit and effective address calculation unit with retained virtual address capability |
US5434985A (en) * | 1992-08-11 | 1995-07-18 | International Business Machines Corporation | Simultaneous prediction of multiple branches for superscalar processing |
US5442767A (en) * | 1992-10-23 | 1995-08-15 | International Business Machines Corporation | Address prediction to avoid address generation interlocks in computer systems |
US5696958A (en) * | 1993-01-11 | 1997-12-09 | Silicon Graphics, Inc. | Method and apparatus for reducing delays following the execution of a branch instruction in an instruction pipeline |
US5590368A (en) * | 1993-03-31 | 1996-12-31 | Intel Corporation | Method and apparatus for dynamically expanding the pipeline of a microprocessor |
EP0623874A1 (de) * | 1993-05-03 | 1994-11-09 | International Business Machines Corporation | Verfahren zur Ausführung von Befehlen in einer Schleife |
JPH09500989A (ja) * | 1993-05-14 | 1997-01-28 | インテル・コーポレーション | 分岐ターゲット・バッファにおける推論履歴 |
JP2596712B2 (ja) * | 1993-07-01 | 1997-04-02 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 近接した分岐命令を含む命令の実行を管理するシステム及び方法 |
DE69420540T2 (de) * | 1994-01-03 | 2000-02-10 | Intel Corp., Santa Clara | Verfahren und Vorrichtung zum Implementieren eines vierstufigen Verzweigungsauflosungssystem in einem Rechnerprozessor |
US5644779A (en) * | 1994-04-15 | 1997-07-01 | International Business Machines Corporation | Processing system and method of operation for concurrent processing of branch instructions with cancelling of processing of a branch instruction |
JP3599409B2 (ja) * | 1994-06-14 | 2004-12-08 | 株式会社ルネサステクノロジ | 分岐予測装置 |
US5566317A (en) * | 1994-06-14 | 1996-10-15 | International Business Machines Corporation | Method and apparatus for computer disk drive management |
US5664135A (en) * | 1994-09-28 | 1997-09-02 | Hewlett-Packard Company | Apparatus and method for reducing delays due to branches |
US5675758A (en) * | 1994-11-15 | 1997-10-07 | Advanced Micro Devices, Inc. | Processor having primary integer execution unit and supplemental integer execution unit for performing out-of-order add and move operations |
US6128720A (en) * | 1994-12-29 | 2000-10-03 | International Business Machines Corporation | Distributed processing array with component processors performing customized interpretation of instructions |
US5850542A (en) * | 1995-09-15 | 1998-12-15 | International Business Machines Corporation | Microprocessor instruction hedge-fetching in a multiprediction branch environment |
US5815700A (en) * | 1995-12-22 | 1998-09-29 | Intel Corporation | Branch prediction table having pointers identifying other branches within common instruction cache lines |
JP3510729B2 (ja) * | 1996-02-29 | 2004-03-29 | 三洋電機株式会社 | 命令実行方法および命令実行装置 |
US5896519A (en) * | 1996-06-10 | 1999-04-20 | Lsi Logic Corporation | Apparatus for detecting instructions from a variable-length compressed instruction set having extended and non-extended instructions |
US5794010A (en) * | 1996-06-10 | 1998-08-11 | Lsi Logic Corporation | Method and apparatus for allowing execution of both compressed instructions and decompressed instructions in a microprocessor |
US5918044A (en) * | 1996-10-31 | 1999-06-29 | International Business Machines Corporation | Apparatus and method for instruction fetching using a multi-port instruction cache directory |
US6088793A (en) * | 1996-12-30 | 2000-07-11 | Intel Corporation | Method and apparatus for branch execution on a multiple-instruction-set-architecture microprocessor |
US5961631A (en) * | 1997-07-16 | 1999-10-05 | Arm Limited | Data processing apparatus and method for pre-fetching an instruction in to an instruction cache |
US6157988A (en) | 1997-08-01 | 2000-12-05 | Micron Technology, Inc. | Method and apparatus for high performance branching in pipelined microsystems |
US5934212A (en) * | 1997-09-04 | 1999-08-10 | Gitlin; Harris M | Two part sewing system for large work pieces |
US6012138A (en) * | 1997-12-19 | 2000-01-04 | Lsi Logic Corporation | Dynamically variable length CPU pipeline for efficiently executing two instruction sets |
US6314493B1 (en) * | 1998-02-03 | 2001-11-06 | International Business Machines Corporation | Branch history cache |
US6026488A (en) * | 1998-02-20 | 2000-02-15 | International Business Machines Corporation | Method for conditional hedge fetching into cache storage |
US6035392A (en) * | 1998-02-20 | 2000-03-07 | International Business Machines Corporation | Computer with optimizing hardware for conditional hedge fetching into cache storage |
JP3741870B2 (ja) * | 1998-08-07 | 2006-02-01 | 富士通株式会社 | 命令及びデータの先読み方法、マイクロコントローラ、疑似命令検出回路 |
US6430682B1 (en) * | 1998-09-11 | 2002-08-06 | Agere Systems Guardian Corp. | Reliable branch predictions for real-time applications |
JP2000132390A (ja) * | 1998-10-23 | 2000-05-12 | Toshiba Corp | プロセッサ及び分岐予測器 |
US6205544B1 (en) | 1998-12-21 | 2001-03-20 | Intel Corporation | Decomposition of instructions into branch and sequential code sections |
US6912650B2 (en) * | 2000-03-21 | 2005-06-28 | Fujitsu Limited | Pre-prefetching target of following branch instruction based on past history |
JP3981238B2 (ja) * | 1999-12-27 | 2007-09-26 | 富士通株式会社 | 情報処理装置 |
US6415356B1 (en) * | 2000-01-14 | 2002-07-02 | Sun Microsystems, Inc. | Method and apparatus for using an assist processor to pre-fetch data values for a primary processor |
US6728872B1 (en) * | 2000-02-04 | 2004-04-27 | International Business Machines Corporation | Method and apparatus for verifying that instructions are pipelined in correct architectural sequence |
US6772321B2 (en) | 2000-05-04 | 2004-08-03 | Sun Microsystems, Inc. | Method and apparatus for using an assist processor and value speculation to facilitate prefetching for a primary processor |
US20030188141A1 (en) * | 2002-03-29 | 2003-10-02 | Shailender Chaudhry | Time-multiplexed speculative multi-threading to support single-threaded applications |
US20020062476A1 (en) * | 2000-07-14 | 2002-05-23 | Saxe James Benjamin | Case-reduced verification condition generation system and method by use of dynamic single assumption and assigning labels to variables at control join points |
US6633969B1 (en) | 2000-08-11 | 2003-10-14 | Lsi Logic Corporation | Instruction translation system and method achieving single-cycle translation of variable-length MIPS16 instructions |
US6681318B2 (en) | 2000-09-08 | 2004-01-20 | Sun Microsystems, Inc. | Method and apparatus for using an assist processor to prefetch instructions for a primary processor |
US6671794B1 (en) | 2000-10-02 | 2003-12-30 | International Business Machines Corporation | Address generation interlock detection |
US7287147B1 (en) * | 2000-12-29 | 2007-10-23 | Mips Technologies, Inc. | Configurable co-processor interface |
US7237090B1 (en) | 2000-12-29 | 2007-06-26 | Mips Technologies, Inc. | Configurable out-of-order data transfer in a coprocessor interface |
US7337306B2 (en) * | 2000-12-29 | 2008-02-26 | Stmicroelectronics, Inc. | Executing conditional branch instructions in a data processor having a clustered architecture |
CN1231837C (zh) * | 2001-04-11 | 2005-12-14 | 皇家菲利浦电子有限公司 | 带有分支机构的仿真协处理器 |
US6950929B2 (en) * | 2001-05-24 | 2005-09-27 | Samsung Electronics Co., Ltd. | Loop instruction processing using loop buffer in a data processing device having a coprocessor |
JP4020692B2 (ja) * | 2002-05-08 | 2007-12-12 | 三菱電機株式会社 | 針送りミシン |
US20040193855A1 (en) * | 2003-03-31 | 2004-09-30 | Nicolas Kacevas | System and method for branch prediction access |
US7502725B2 (en) * | 2004-04-29 | 2009-03-10 | International Business Machines Corporation | Method, system and computer program product for register management in a simulation environment |
JP2006048132A (ja) * | 2004-07-30 | 2006-02-16 | Fujitsu Ltd | 分岐予測装置、分岐予測装置の制御方法、情報処理装置 |
JP5444889B2 (ja) * | 2009-06-30 | 2014-03-19 | 富士通株式会社 | 演算処理装置および演算処理装置の制御方法 |
US10180841B2 (en) | 2014-12-22 | 2019-01-15 | Centipede Semi Ltd. | Early termination of segment monitoring in run-time code parallelization |
US10296350B2 (en) | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences |
US10296346B2 (en) | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences based on pre-monitoring |
US20180129500A1 (en) * | 2016-11-06 | 2018-05-10 | Centipede Semi Ltd. | Single-thread processing of multiple code regions |
US20190369999A1 (en) * | 2018-06-04 | 2019-12-05 | Advanced Micro Devices, Inc. | Storing incidental branch predictions to reduce latency of misprediction recovery |
US11106466B2 (en) * | 2018-06-18 | 2021-08-31 | International Business Machines Corporation | Decoupling of conditional branches |
US20230315476A1 (en) * | 2022-03-30 | 2023-10-05 | Huawei Technologies Co., Ltd. | Systems and methods for load-dependent-branch pre-resolution |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3559183A (en) * | 1968-02-29 | 1971-01-26 | Ibm | Instruction sequence control |
US3707725A (en) * | 1970-06-19 | 1972-12-26 | Ibm | Program execution tracing system improvements |
US4062058A (en) * | 1976-02-13 | 1977-12-06 | The United States Of America As Represented By The Secretary Of The Navy | Next address subprocessor |
US4155120A (en) * | 1977-12-01 | 1979-05-15 | Burroughs Corporation | Apparatus and method for controlling microinstruction sequencing by selectively inhibiting microinstruction execution |
US4270167A (en) * | 1978-06-30 | 1981-05-26 | Intel Corporation | Apparatus and method for cooperative and concurrent coprocessing of digital information |
US4325120A (en) * | 1978-12-21 | 1982-04-13 | Intel Corporation | Data processing system |
US4338675A (en) * | 1980-02-13 | 1982-07-06 | Intel Corporation | Numeric data processor |
JPS5927935B2 (ja) * | 1980-02-29 | 1984-07-09 | 株式会社日立製作所 | 情報処理装置 |
JPS56149646A (en) * | 1980-04-21 | 1981-11-19 | Toshiba Corp | Operation controller |
US4442484A (en) * | 1980-10-14 | 1984-04-10 | Intel Corporation | Microprocessor memory management and protection mechanism |
US4547849A (en) * | 1981-12-09 | 1985-10-15 | Glenn Louie | Interface between a microprocessor and a coprocessor |
US4477872A (en) * | 1982-01-15 | 1984-10-16 | International Business Machines Corporation | Decode history table for conditional branch instructions |
US4604691A (en) * | 1982-09-07 | 1986-08-05 | Nippon Electric Co., Ltd. | Data processing system having branch instruction prefetching performance |
US4521851A (en) * | 1982-10-13 | 1985-06-04 | Honeywell Information Systems Inc. | Central processor |
US4597041A (en) * | 1982-11-15 | 1986-06-24 | Data General Corp. | Method and apparatus for enhancing the operation of a data processing system |
US4569018A (en) * | 1982-11-15 | 1986-02-04 | Data General Corp. | Digital data processing system having dual-purpose scratchpad and address translation memory |
US4819154A (en) * | 1982-12-09 | 1989-04-04 | Sequoia Systems, Inc. | Memory back up system with one cache memory and two physically separated main memories |
JPS6027945A (ja) * | 1983-07-27 | 1985-02-13 | Nec Corp | 命令取出装置 |
JPS6051948A (ja) * | 1983-08-31 | 1985-03-23 | Hitachi Ltd | 情報処理装置 |
US4710866A (en) * | 1983-09-12 | 1987-12-01 | Motorola, Inc. | Method and apparatus for validating prefetched instruction |
US4608659A (en) * | 1983-09-30 | 1986-08-26 | Honeywell Information Systems Inc. | Arithmetic logic unit with outputs indicating invalid computation results caused by invalid operands |
US4594651A (en) * | 1984-01-18 | 1986-06-10 | General Electric Company | Concurrent processor for control |
US4764861A (en) * | 1984-02-08 | 1988-08-16 | Nec Corporation | Instruction fpefetching device with prediction of a branch destination for each branch count instruction |
US4742451A (en) * | 1984-05-21 | 1988-05-03 | Digital Equipment Corporation | Instruction prefetch system for conditional branch instruction for central processor unit |
US4691277A (en) * | 1984-10-24 | 1987-09-01 | International Business Machines Corp. | Small instruction cache using branch target table to effect instruction prefetch |
JPH0789319B2 (ja) * | 1985-04-22 | 1995-09-27 | 株式会社日立製作所 | デ−タ処理装置における先行制御装置 |
US4701842A (en) * | 1985-10-04 | 1987-10-20 | International Business Machines Corporation | Method and apparatus for avoiding excessive delay in a pipelined processor during the execution of a microbranch instruction |
DE3752100T2 (de) * | 1986-01-07 | 1997-12-11 | Nippon Electric Co | Befehlsvorabrufgerät mit einer Schaltung zum Prüfen der Vorhersage eines Verzweigungsbefehls vor seiner Ausführung |
US4821183A (en) * | 1986-12-04 | 1989-04-11 | International Business Machines Corporation | A microsequencer circuit with plural microprogrom instruction counters |
JP2603626B2 (ja) * | 1987-01-16 | 1997-04-23 | 三菱電機株式会社 | データ処理装置 |
-
1986
- 1986-03-13 US US06/839,312 patent/US4991080A/en not_active Expired - Fee Related
-
1987
- 1987-01-20 JP JP62009220A patent/JPS62221036A/ja active Pending
- 1987-02-05 EP EP87101590A patent/EP0236745B1/de not_active Expired - Lifetime
- 1987-02-05 DE DE3751474T patent/DE3751474T2/de not_active Expired - Fee Related
- 1987-02-11 CA CA000529483A patent/CA1268555A/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
EP0236745A2 (de) | 1987-09-16 |
EP0236745A3 (de) | 1991-12-04 |
JPS62221036A (ja) | 1987-09-29 |
DE3751474D1 (de) | 1995-09-28 |
CA1268555A (en) | 1990-05-01 |
EP0236745B1 (de) | 1995-08-23 |
US4991080A (en) | 1991-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE3751474T2 (de) | Verzweigungsstrom-Koprozessor. | |
DE69816044T2 (de) | Zeitstrafen-basierende cache-speicherungs- und ersetzungs-techniken | |
DE60308201T2 (de) | Datenverarbeitungssystem mit externen und internen anweisungssätzen | |
DE68928513T2 (de) | Verfahren zur Vorverarbeitung mehrerer Befehle | |
DE69031991T2 (de) | Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen | |
DE68928677T2 (de) | Verfahren und digitaler Computer zur Vorverarbeitung mehrerer Befehle | |
DE68927492T2 (de) | Verfahren und Vorrichtung zur gleichzeitigen Verteilung von Befehlen an mehrere funktionelle Einheiten | |
DE19527031C2 (de) | Verzweigungsprozessor für ein Datenverarbeitungssystem und Verfahren zum Betreiben eines Datenverarbeitungssystems | |
DE69023568T2 (de) | Cache-Speicheranordnung. | |
DE69227465T2 (de) | Cpu mit pipeline-einheit und effektiv-adressenrechnungseinheit mit möglichkeit zur beibehaltung von virtuellen operandenadressen. | |
DE3851746T2 (de) | Sprungvorhersage. | |
DE69620807T2 (de) | Datenverarbeitungsvorrichtung zum Vorziehen einer Datenstruktur aus dem Hauptspeicher oder seinem Cachespeicher | |
DE69325086T2 (de) | Verfahren und System für spekulative Befehlsausführung | |
DE68929215T2 (de) | Datenprozessor | |
DE69129569T2 (de) | Maschine mit sehr langem Befehlswort für leistungsfähige Durchführung von Programmen mit bedingten Verzweigungen | |
DE3588182T2 (de) | Vorausschauende Speicherabrufmethode und System für Verzweigung mit Ausführungsbefehlen | |
DE69932066T2 (de) | Mechanismus zur "store-to-load forwarding" | |
DE69229198T2 (de) | Verzweigungsbefehlprozessor und Verfahren | |
DE69331448T2 (de) | Dataprozessor mit einem Cachespeicher | |
DE69715328T2 (de) | System und Verfahren zur Parallelisierung der Durchführung von Speichertransaktionen mittels mehreren Speichermodellen | |
DE69130138T2 (de) | Sprungvorhersageeinheit für hochleistungsfähigen Prozessor | |
DE69028138T2 (de) | Mechanismus zur präzisen Behandlung von Ausnahmebedingungen in einem Prozessor mit gepaarten Befehlen | |
DE69327927T2 (de) | Schnelles Vorausholen und Zuteilung von Befehlen mittels vorausschauender Anmerkungen von früher vorausgeholten | |
DE69030931T2 (de) | Mehrfachsequenzprozessorsystem | |
DE69130858T2 (de) | Überlappende Serienverarbeitung |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |