DE4222776A1 - Verfahren und anordnung fuer eine verzweigungsbefehlsverarbeitung in einer parallelverarbeitungseinheit - Google Patents
Verfahren und anordnung fuer eine verzweigungsbefehlsverarbeitung in einer parallelverarbeitungseinheitInfo
- Publication number
- DE4222776A1 DE4222776A1 DE19924222776 DE4222776A DE4222776A1 DE 4222776 A1 DE4222776 A1 DE 4222776A1 DE 19924222776 DE19924222776 DE 19924222776 DE 4222776 A DE4222776 A DE 4222776A DE 4222776 A1 DE4222776 A1 DE 4222776A1
- Authority
- DE
- Germany
- Prior art keywords
- branch
- instruction
- instructions
- command
- flag
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000012545 processing Methods 0.000 claims abstract description 50
- 230000001419 dependent effect Effects 0.000 claims description 12
- 238000001514 detection method Methods 0.000 claims description 8
- 230000015572 biosynthetic process Effects 0.000 claims 4
- 238000012795 verification Methods 0.000 claims 2
- 230000008901 benefit Effects 0.000 abstract description 3
- 238000000034 method Methods 0.000 description 23
- 238000010586 diagram Methods 0.000 description 12
- 230000003111 delayed effect Effects 0.000 description 9
- 230000014509 gene expression Effects 0.000 description 9
- 230000002265 prevention Effects 0.000 description 9
- 230000006866 deterioration Effects 0.000 description 8
- 230000015556 catabolic process Effects 0.000 description 7
- 238000006731 degradation reaction Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 5
- 238000012360 testing method Methods 0.000 description 5
- 230000000873 masking effect Effects 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 230000004913 activation Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 238000007796 conventional method Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000012502 risk assessment Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000002542 deteriorative effect Effects 0.000 description 1
- 230000007274 generation of a signal involved in cell-cell signaling Effects 0.000 description 1
- 230000011664 signaling Effects 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/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/30003—Arrangements for executing specific machine instructions
- G06F9/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- 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
-
- 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/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
- G06F9/38585—Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
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 Verfahren und Anordnungen für eine
Verzweigungsbefehlsverarbeitung in Parallelverarbeitungseinheiten.
In einem Pipeline-Computer werden die Befehle, die sich bereits in
der Pipeline befinden, ungültig gemacht, wenn eine Verzweigung
auftritt. Diese Ungültigkeitserklärung von in der Pipeline
befindlichen Befehlen verschlechtert die Leistung des Pipeline-
Computers. Zum besseren Verständnis für diese Situation wird im
folgenden ein Prozessor mit einer fünfstufigen Pipeline betrachtet.
IF: Einlesen eines Befehls (Instruction Fetch).
ID: Befehlskodierung, Lesen aus einem Registersatz und Verzweigungsbefehl ausführen (Instruction Decode).
EXC: ein Befehl wird unter Verwendung einer ALU (arithmetische und logische Einheit) ausgeführt.
MEM: auf einen Speicher (Datenspeicher) wird zugegriffen.
WB: Schreiben von Daten in den Registersatz wird ausgeführt.
ID: Befehlskodierung, Lesen aus einem Registersatz und Verzweigungsbefehl ausführen (Instruction Decode).
EXC: ein Befehl wird unter Verwendung einer ALU (arithmetische und logische Einheit) ausgeführt.
MEM: auf einen Speicher (Datenspeicher) wird zugegriffen.
WB: Schreiben von Daten in den Registersatz wird ausgeführt.
In Fig. 1 ist der Betrieb einer Pipeline dargestellt, wenn eine
Verzweigung ausgeführt wird. Wenn keine Verzweigung existiert, führt
die Pipeline die vorbestimmten Befehle nacheinander aus. Daher
laufen die Befehle in die Pipeline in der Reihenfolge der Befehle i,
i+1, i+2, i+3, . . . ein. Es wird angenommen, daß der Befehl i+1 einen
Verzweigungsbefehl darstellt. Ob vom Befehl i+1 eine Verzweigung
vorgenommen wird oder nicht ist bis zum Ende der ID-Stufe unbekannt.
Wenn der Befehl i+1 zum Zeitpunkt (Takt) T+2 in die ID-Stufe
eintritt, läuft der nächste Befehl i+2 daher natürlicherweise in die
IF-Stufe ein.
Wenn am Ende von T+2 bekannt ist, daß entsprechend dem
Verzweigungsbefehl i+1 eine Verzweigung vorgenommen wird, ist der
als nächstes auszuführende Befehl nicht der Befehl i+2, sondern der
Befehl eines Verzweigungsziels. Daher wird zu diesem Zeitpunkt (am
Ende von T+2) der Befehl i+2 storniert. Unter der Annahme, daß der
Verzweigungszielbefehl ein Befehl j ist, läuft zum Zeitpunkt T+3 der
Befehl j in die IF-Stufe ein. Genauer gesagt wird für die Pipeline
eine Zeitspanne von der Dauer eines Takts erzeugt, in der kein
Befehl verarbeitet wird, wenn eine Verzweigung vorgenommen wird.
Diese Leerzeit von einem Takt in der Pipeline verschlechtert die
Verarbeitungsgeschwindigkeit des Prozessors und stört die
Leistungsergebnisse.
In einem RISC (Reduced Instruction Set Computer; Computer mit
vermindertem Befehlssatz) wird eine solche Verschlechterung der
Leistungsfähigkeit durch einen Verzweigungsbefehl verhindert, indem
man ein Verfahren mit verzögerter Verzweigung benutzt. Bei der
verzögerten Verzweigung werden die bereits in der Pipeline
befindlichen Befehle nicht ungültig gemacht, wenn eine Verzweigung
vorgenommen wird. Für den Fall einer verzögerten Verzweigung, bei
der die Leerzeitspanne in der Pipeline, die aufgrund einer
Verzweigung erzeugt wird, gleich "1" ist, werden die Befehle in der
folgenden Reihenfolge ausgeführt:
VERZWEIGUNGSBEFEHL
<BEFEHL<, und
VERZWEIGUNGSZIELBEFEHL
<BEFEHL<, und
VERZWEIGUNGSZIELBEFEHL
Der Anteil <Befehl< wird als Verzweigungsverzögerungs-Slot
bezeichnet. Der Befehl des Verzweigungsverzögerungs-Slot wird
unabhängig vom Vorhandensein oder Nicht-Vorhandensein einer
Verzweigung ausgeführt. Daher sollte ein Compiler einen
Verzweigungs-Slot schaffen, indem ein Befehl so verschoben wird, daß
das Ausführungsergebnis korrekt ist.
Ein Befehl, der in einen Verzweigungsverzögerungs-Slot verschoben
werden kann, ist in Fig. 2 gezeigt. In Fig. 2 ist jeder
Verzweigungsbefehl durch ein "IF. . . THEN" bezeichnet und sein
Verzweigungsziel durch einen Pfeil gekennzeichnet.
Wie in Fig. 2(A) dargestellt ist, wird ein Befehl "R1←R2+R3" in
einen Verzweigungsverzögerungs-Slot verschoben. Der Befehl "R1←
R2+R3" wird unabhängig vom Vorhandensein oder Nicht-Vorhandensein
einer Verzweigung ausgeführt und kann daher bedingungslos in den
Verzweigungsverzögerungs-Slot verschoben werden.
Für den Fall von Fig. 2(B), wenn das Verzweigungsziel eines
Verzweigungsbefehls ein Befehl "R4←R5-R6" darstellt, wird dieser
Befehl "R4←R5-R6" in einen Verzweigungsverzögerungs-Slot
verschoben. Der Befehl "R4←R5-R6" im Verzweigungsverzögerungs-Slot
wird selbst dann ausgeführt, wenn keine Verzweigung vorgenommen
wird, und daher muß garantiert sein, daß ein korrektes Ergebnis
auftritt, auch wenn keine Verzweigung vorgenommen wird.
In Fig. 2(C) wird der dem Verzweigungsverzögerungs-Slot nächst
liegende Befehl "R4←R5-R6" in den Verzweigungsverzögerungs-Slot
verschoben. In diesem Fall stellt der Befehl "R4←R5-R6"
ursprünglich einen Befehl dar, der nicht ausgeführt wird, wenn eine
Verzweigung auftritt, und daher muß sichergestellt sein, daß auch
dann ein korrektes Ergebnis auftritt, wenn eine Verzweigung erfolgt.
Nun wird ein Superskalar beschrieben. Der Superskalar stellt einen
Prozessor dar, der die folgenden charakteristischen Besonderheiten
aufweist:
- 1) Einlesen einer Mehrzahl von Befehlen;
- 2) aufweisen einer Mehrzahl von Funktionseinheiten und gleichzeitiges Ausführen einer Mehrzahl von Befehlen; und
- 3) Erfassen von gleichzeitig ausführbaren Befehlen aus der eingelesenen Mehrzahl von Befehlen und Verteilen dieser gleichzeitig ausführbaren Befehle an zugehörige Funktionseinheiten.
Die allgemeine Struktur eines Superskalars ist in Fig. 3 gezeigt.
Wie in Fig. 3 dargestellt ist, weist der Superskalar einen
Befehlsspeicher 1 zum Speichern von Befehlen, eine
Befehlseinlesestufe (IF-Stufe) 2 zum Übertragen der Adressen der
einzulesenden Befehle an den Befehlsspeicher 1, eine
Befehlsdekodierstufe (ID-Stufe) 3 zum Ausführen der Dekodierung der
eingelesenen Mehrzahl von Befehlen, Lesen aus einem (nicht
dargestellten) Registersatz und Verzweigungsbefehlen,
Funktionseinheiten 4a, 4b, 6 und 7 jeweils zum Ausführen einer
vorbestimmten Operation und einen Datenspeicher 8 zum Speichern von
Daten auf.
Die Befehlsdekodierstufe 3 erfaßt auch gleichzeitig ausführbare
Befehle in der dekodierten Mehrzahl von Befehlen und verteilt diese
gleichzeitig ausführbaren Befehle an die Funktionseinheiten 4a, 4b,
6 und 7.
Die Funktionseinheiten 4a und 4b führen eine Ganzzahladdition etc.
aus. Die Funktionseinheit 6 führt ein Laden oder Speichern von Daten
vom/in den Datenspeicher 8 aus. Die Funktionseinheit 7 führt eine
Gleitkommaaddition etc. aus.
Die Funktionseinheiten 4a, 4b, 6 und 7 weisen jeweils eine Mehrzahl
von Pipeline-Stufen auf. Die Funktionseinheiten 4a und 4b weisen
eine Ausführungsstufe EXC zum Ausführen eines gegebenen Befehls und
eine Registersatz-Schreibstufe WB zum Schreiben des
Ausführungsergebnisses in einen (nicht dargestellten) Registersatz
auf. Die Funktionseinheit 6 weist eine Adreßberechnungsstufe ADR zum
Berechnen einer Adresse, um den Datenspeicher 8 vom gegebenen Befehl
anzusprechen, eine Speicherzugriffsstufe MEM zum Zugreifen auf den
Datenspeicher entsprechend der berechneten Adresse, und eine
Registersatz-Schreibstufe WB zum Schreiben von Daten, die vom
Datenspeicher 8 geladen werden, in den Registersatz, auf.
Die Funktionseinheit 7 weist drei Ausführungsstufen EXC1, EXC2 und
EXC3 sowie eine Registersatz-Schreibstufe WB zum Schreiben des
Ausführungsergebnisses in den Registersatz auf. Im Superskalar, wie
er in Fig. 3 dargestellt ist, wird eine Mehrzahl von Befehlen
gleichzeitig aus dem Befehlsspeicher 1 eingelesen, und eine Mehrzahl
von Befehlen wird parallel in den Funktionseinheiten 4a, 4b, 7 und 7
ausgeführt. Daher wird eine verbesserte Verarbeitungsgeschwindigkeit
im Vergleich zu einem herkömmlichen Prozessor mit nur einer Pipeline
erzielt.
In Fig. 4 ist der Betrieb einer Pipeline dargestellt, wenn in einem
Superskalar eine Verzweigung auftritt. In Fig. 4 ist der Betrieb der
Pipeline im Superskalar gezeigt, wenn zwei Befehle gleichzeitig
eingelesen werden und maximal zwei Ganzzahlbefehle gleichzeitig
ausgeführt werden können. Unter der Annahme, daß der Befehl i+3
einen Verzweigungsbefehl darstellt, ist daß es bekannt ist, daß eine
Verzweigung auftritt, wenn der Befehl i+3 die ID-Stufe
(Befehlsdekodierstufe) erreicht hat. Zu diesem Zeitpunkt befinden
sich die Befehle i+4 und i+5 bereits in der IF-Stufe
(Befehlseinlesestufe). Diese Befehle i+4 und i+5 werden storniert,
wenn die Erzeugung der Verzweigung bekannt ist.
Ab dem Zeitpunkt (Takt) T+3 wird ein Verzweigungszielbefehl, der
Befehl j, gestartet. Wie in Fig. 4 gezeigt ist, wird im Superskalar
eine Mehrzahl von Befehlen gleichzeitig ausgeführt, es existiert
eine Mehrzahl von zu stornierenden Befehlen, und die
Leistungsfähigkeit wird stärker beeinflußt wie bei einem Prozessor
mit nur einer Pipeline.
Wenn ein Verfahren mit verzögerter Verzweigung benutzt wird, bei dem
der Verzweigungsverzögerungs-Slot nach diesem Verzweigungsbefehl
erledigt wird, sollte eine Mehrzahl von Befehlen als
Verzweigungsverzögerungs-Slot vorhanden sein.
Entsprechend dem Vortrag "Computer Architecture: A Quantitative
Approach" von J. Hennessy, D.A. Patterson, S. 276, Fig. 6.22 ist die
Wahrscheinlichkeit, daß ein Verzweigungsverzögerungs-Slot von einem
Befehl aufgefüllt wird, der von einem Compiler verschoben worden
ist, etwa gleich 50%. Üblicherweise werden NOP-Befehle etc. in die
Verzweigungsverzögerungs-Slots eingesetzt, die nicht mit einem
signifikanten Befehl gefüllt werden können. Daher ist in einem
Superskalar, in dem eine Mehrzahl von Verzweigungsverzögerungs-Slots
existiert, die Wahrscheinlichkeit sehr gering, daß alle
Verzweigungsverzögerungs-Slots mit verschobenen Befehlen gefüllt
werden.
Auch können im Superskalar Befehle, die in Verzweigungsverzögerungs-
Slots verschoben werden können, zur Ausführung zusammen mit anderen
Befehlen als gleichzeitig ausführbare Befehle verschoben werden,
bevor sie zum Auffüllen der Verzweigungsverzögerungs-Slots benutzt
werden. Entsprechend ist es beim Superskalar schwierig, die
Leistungsfähigkeit entsprechend einem herkömmlichen Verfahren mit
verzögerter Verzweigung zu verbessern.
Aufgabe der Erfindung ist es, ein Verfahren und eine Anordnung für
eine Verzweigungsbefehlsverarbeitung in einer
Parallelverarbeitungseinheit zu schaffen, durch die die Leistung der
Einheit nicht verschlechtert wird, wenn eine Verzweigung auftritt.
Bei einem Verfahren und einer Anordnung für eine
Verzweigungsbefehlsverarbeitung nach einem ersten Aspekt wird ein
Verzweigungsverzögerungs-Slot als alle Befehle einschließlich dem
Befehl, der einem Verzweigungsbefehl am nächsten ist, und den
Befehlen, die während der Zyklen zum Einlesen und Ausführen des
Verzweigungsbefehls eingelesen worden sind, definiert.
Bei einem Verfahren und einer Anordnung für eine
Verzweigungsbefehlsverarbeitung nach einem ersten Aspekt ist ein
Warteschlangenspeicher (Queue-Speicher) für das Befehlsvoreinlesen
(Befehls-Prefetch) zum Voreinlesen (Prefetching) eines Befehls aus
einem Befehlsspeicher und zum Speichern des voreingelesenen Befehls
gebildet. Im Warteschlangenspeicher ist ein Feld gebildet zum
Angeben im jeweiligen Eintrag des Warteschlangenspeichers, daß der
im zugehörigen Eintrag gespeicherte Befehl entsprechend einer
Verzweigungsvorhersage ausgeführt worden ist, und die
Ausführung/Verhinderung der Ausführung eines Befehls wird auf der
Basis des Wertes des Feldes gesteuert.
Beim ersten Aspekt ist der Befehl, der in einem Zyklus nach dem
Zyklus eingelesen werden soll, in dem ein Verzweigungsbefehl
ausgeführt wird, für einen Verzweigungsverzögerungs-Slot bestimmt,
wenn das Ausführungsergebnis eines Verzweigungsbefehls keine
Verzweigung ergibt, und daher wird der Befehl ohne Verzögerung
aufgrund einer Verzweigung ausgeführt.
Wenn das Ausführungsergebnis des Verzweigungsbefehls eine
Verzweigung ergibt, wird als nächstes ein Befehl ausgeführt, der im
Zyklus nach dem Zyklus eingelesen wird, in dem der
Verzweigungsbefehl ausgeführt wird. Wenn dieser Befehl in einen
Warteschlangenspeicher voreingelesen worden ist, kann ein
Verzweigungszielbefehl ohne Verzögerung aufgrund der Verzweigung
ausgeführt werden, indem einfach der Lesezeiger des
Warteschlangenspeichers verschoben wird.
Beim zweiten Aspekt ist jeder Befehl mit einem Feld verbunden, das
angibt, ob die Ausführung auf der Basis einer Verzweigungsvorhersage
erfolgt ist oder nicht, und falls die Verzweigungsvorhersage korrekt
ist wird der Verzweigungsvorhersagebefehl ausgeführt, wodurch die
Zeit eingespart wird, um einen weiteren Verzweigungszielbefehl
einzulesen, so daß die Verschlechterung der Leistung gemildert wird.
Weitere Merkmale und Zweckmäßigkeiten der Erfindung ergeben sich aus
der Beschreibung von Ausführungsbeispielen anhand der Figuren. Von
den Figuren zeigen:
Fig. 1 eine Tabelle zur Darstellung einer herkömmlichen
Verzweigungsverzögerungsoperation;
Fig. 2(A), 2(B), 2(C) eine Darstellung, wie ein
Verzweigungsverzögerungs-Slot mit einem Befehl aufgefüllt
wird;
Fig. 3 die allgemeine Struktur eines Superskalars;
Fig. 4 eine Tabelle zur Darstellung einer
Verzweigungsverzögerungsoperation in einem Superskalar;
Fig. 5 ein Blockdiagramm der Struktur einer Befehlsdekodierstufe
nach einer Ausführungsform der Erfindung;
Fig. 6 eine Darstellung des grundlegenden Betriebs der in Fig. 5
gezeigten Befehlswarteschlange;
Fig. 7 eine Darstellung zur Erläuterung der Definition eines
Verzweigungsverzögerungs-Slot;
Fig. 8 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl eine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
noch nicht eingelesen worden ist;
Fig. 9 den Zustand eines Zyklus, der der in Fig. 8 gezeigten
Befehlswarteschlange am nächsten ist;
Fig. 10 den Zustand eines Zyklus, der dem in Fig. 9 gezeigten
Zyklus am nächsten ist;
Fig. 11 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl eine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist;
Fig. 12 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl eine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist;
Fig. 13 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl eine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist;
Fig. 14 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl keine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist;
Fig. 15 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl keine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
noch nicht eingelesen worden ist;
Fig. 16 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl keine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
noch nicht eingelesen worden ist;
Fig. 17 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl keine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist;
Fig. 18 eine Darstellung, die den Betrieb einer Befehlswarte
schlange zeigt, wenn durch einen Verzweigungsbefehl keine
Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist;
Fig. 19 eine Tabelle, die die Logik im Zeigersteuerbereich von
Fig. 1 darstellt;
Fig. 20(A), 20(B) ein Logikdiagramm der Struktur des
Zeigersteuerbereich von Fig. 1;
Fig. 21 ein Blockdiagramm der Struktur eines Befehlsausgabe-
Analyseabschnitts nach einer ersten Ausführungsform der
Erfindung;
Fig. 22 ein Logikdiagramm der Struktur des Ausgabeverhinderungs
abschnitts von Fig. 21;
Fig. 23 ein Blockdiagramm der Struktur einer Befehlsdekodier
einrichtung, die in einer zweiten Ausführungsform benutzt
wird;
Fig. 24(A), 24(B), 24(C): eine Darstellung des Betriebs eines
Befehlsregisters, wenn in der Struktur der
Befehlsdekodierstufe von Fig. 23 von einem
Verzweigungsbefehl eine Verzweigung ausgeführt wird;
Fig. 25 eine Darstellung des Betriebs des Befehlsregisters von
Fig. 23, wenn vom Verzweigungsbefehl keine Verzweigung
ausgeführt wird;
Fig. 26 ein Blockdiagramm der Struktur des Befehlsausgabe-
Analysebereichs von Fig. 23;
Fig. 27 ein Blockdiagramm der Strukturen einer Befehlseinlesestufe
und einer Befehlsdekodierstufe, die entsprechend dem
zweiten Aspekt der Erfindung benutzt werden;
Fig. 28 eine Darstellung der Struktur zur Steuerung auf der Basis
eines Befehlsgültigkeits-Flag und eines
Verzweigungsvorhersage-Flag in einer Ausführungsstufe
EXC und dem Vorhandensein oder Nicht-Vorhandensein einer
Verzweigung;
Fig. 29 eine schematische Darstellung der Struktur von Fig. 28;
Fig. 30 eine Wahrheitstafel für die Steuersignale eines Scoreboard
zur Überwachung des Inhalts eines Registersatzes;
Fig. 31 ein Diagramm der Struktur der Logikschaltung zur
Implementierung der in Fig. 30 gezeigten Wahrheitstafel;
und
Fig. 32 ein Diagramm der Struktur des Befehlsdekoders von Fig. 27.
Die Struktur des wesentlichen Teils einer Befehlsdekodierstufe in
einer Parallelverarbeitungseinheit nach einer Ausführungsform der
Erfindung ist in Fig. 5 dargestellt. Wie in Fig. 5 gezeigt ist,
weist die Befehlsdekodierstufe eine Befehlswarteschlange 9, einen
Befehlsausgabe-Analyseabschnitt 10, einen Zeigersteuerbereich 12 und
einen Verzweigungsverarbeitungsbereich 11 auf.
Die Befehlswarteschlange 9 liest eine Mehrzahl von Befehlen (Befehle
1-4) aus einem Befehlsspeicher 1 (siehe Fig. 3) vorein und speichert
die voreingelesenen Befehle. Die Warteschlange 9 weist einen
Speicherabschnitt (Warteschlange) 13 zum Speichern der Befehle,
einen Lesezeiger 14 zum Halten einer Leseadresse scope und einen
Schreibzeiger 15 zum Halten einer Schreibadresse queue_top auf.
Der Befehlsausgabe-Analyseabschnitt 10 analysiert, welcher Befehl
unter den von der Befehlswarteschlange 9 gelesenen Befehle ausgebbar
ist. Das Analyseergebnis vom Befehlsausgabe-Analyseabschnitt 10 wird
zur Ausgabe jedem Befehl in Form eines Signals inst_avail beigefügt.
Wenn das Signal inst_avail aktiv ist, ist der entsprechende Befehl
ein ausgebbarer Befehl und soll ausgeführt werden. Bei der in Fig. 5
gezeigten Struktur werden vier Befehle beginnend von der Leseadresse
scope aus der Befehlswarteschlange 9 auf einmal ausgelesen, und die
Ausgabeanalyse wird im Befehlsausgabe-Analyseabschnitt 10
ausgeführt. Für das Signal inst_avail zu 4 Bit wird ein
entsprechendes Signal inst_avail aktiviert, wenn ein Befehl
ausgebbar ist. Der Befehlsausgabe-Analyseabschnitt 10 erzeugt auf
der Basis des Signals inst_avail ein Signal issue_count, das die
Anzahl der ausgebbaren Befehle angibt, und übermittelt das erzeugte
Signal an den Zeigersteuerbereich 12.
Wenn in einem vorgegebenen Befehl ein Verzweigungsbefehl enthalten
ist, übermittelt der Befehlsausgabe-Analyseabschnitt 10 auch einen
Wert br_block, der die niederwertigen 2 Bit der Adresse der
Befehlswarteschlange 9, die den Verzweigungsbefehl speichert,
ignoriert oder abschneidet.
Wenn die aus der Befehlswarteschlange 9 ausgelesenen Befehle
Verzweigungsbedingungen aufweisen (im Fall eines bedingten
Sprungbefehls), prüft der Verzweigungsverarbeitungsbereich 11 die
Verzweigungsbedingung und entscheidet, ob eine Verzweigung
vorgenommen werden soll oder nicht. Wenn eine Verzweigung erfolgen
soll, aktiviert der Verzweigungsverarbeitungsbereich 11 ein Signal
Taken, und wenn keine Verzweigung vorgenommen werden soll, ein
Signal Not Taken.
Der Zeigersteuerbereich 12 steuert die Werte des Lesezeigers scope
und des Schreibzeigers queue_top der Zeiger 14 und 15 der
Befehlswarteschlange 9. Der Zeigersteuerbereich 12 erzeugt ein
Signal issue_stop, das die Ausgabe der Befehle von der
Befehlsdekodierstufe ID an Pipelines insgesamt verhindert, und legt
das erzeugte Signal an den Befehlsausgabe-Analyseabschnitt 10 an.
Bei der Struktur eines solchen Superskalars, bei der vier Befehle
auf einmal aus dem Befehlsspeicher gelesen und die vier Befehle auf
einmal dekodiert werden, werden die vom Befehlsspeicher 1
zugeführten Befehle (Befehle 1-4) in vier Adressen der Warteschlange
13 gespeichert, und zwar beginnend mit der Schreibadresse queue_top.
Im nächsten Zyklus wird vier zum Schreibzeiger queue_top addiert.
Die vier Befehle, die in den vier Adressen der Warteschlange 13
beginnend mit dem Lesezeiger scope gespeichert sind, werden aus der
Warteschlange 13 ausgelesen, und dem Befehlsausgabe-Analyseabschnitt
10 und einem (nicht dargestellten) Dekodierschaltkreis zugeführt, um
analysiert und dekodiert zu werden. Als Ergebnis dieser Analyse wird
dem Wert des Lesezeigers scope im nächsten Zyklus n hinzuaddiert,
wenn n Befehle ausgegeben sind.
Fig. 6 zeigt den Betrieb der Befehlswarteschlange 9. Wie in Fig. 6
dargestellt ist, ist die Größe (Anzahl der Einträge) der
Warteschlange 13 auf 16 eingestellt.
Im Zyklus T stellt die Schreibadresse queue_top 8 dar. Die vier aus
dem Befehlsspeicher ausgelesenen Befehle werden in die Adressen 8,
9, 10 und 11 geschrieben.
Der Lesezeiger scope gibt 3 an, und es werden Befehle in den
Adressen 3, 4, 5 und 6 der Warteschlange 13 ausgelesen. Es wird
angenommen, daß in diesem Zyklus T zwei Befehle an
Funktionseinheiten verteilt werden. Mit anderen Worten ist die
Anzahl der ausgegebenen Befehle (issue_count) gleich 2. In diesem
Fall wird im nächsten Zyklus T+1 der Wert des Lesezeigers scope um 2
auf 5 erhöht. Der Schreibzeiger queue_top wird um 4 auf 12 erhöht.
Die Warteschlange 13 kann 4 Befehle auf einmal schreiben und 4
Befehle auf einmal lesen. Diese Schreib- und Leseoperationen können
asynchron ausgeführt werden.
Um einen Verzweigungsverzögerungs-Slot zu entscheiden wird ein
Befehlsblock definiert. Die folgenden vier Befehle werden als
Befehlsblock bezeichnet:
Befehle, deren Adressen in einer Befehlswarteschlange 4n, 4n+1, 4n+2 und 4n+3 (n: ganze Zahl) lauten.
Befehle, deren Adressen in einer Befehlswarteschlange 4n, 4n+1, 4n+2 und 4n+3 (n: ganze Zahl) lauten.
Ein Verzweigungsverzögerungs-Slot ist so definiert, daß er im
Bereich von einem Slot unmittelbar nach einem Verzweigungsbefehl bis
zum letzten Slot eines Befehlsblocks unmittelbar nach einem
Befehlsblock mit einem Verzweigungsbefehl liegt. Fig. 7 zeigt einen
Befehlsblock und einen Verzweigungsverzögerungs-Slot. Wie in Fig. 7
dargestellt ist, ist der Bereich von einem Slot unmittelbar nach dem
Verzweigungsbefehl bis zum letzten Slot des nächsten Blocks B2, der
diesem Block B1 benachbart ist, als Verzweigungsverzögerungs-Slot
(in Fig. 7 durch schräge Linien bezeichnet) definiert, wenn ein
Verzweigungsbefehl in einem Block B1 enthalten ist. Für den Fall der
Fig. 7 ist die Anzahl der im Verzweigungsverzögerungs-Slot
enthaltenen Befehle (die Anzahl der Slots) gleich 5.
Der Verzweigungsverzögerungs-Slot wird mit Befehlen auf der Seite
der Verzweigung gefüllt (Befehle, die nach einer Verzweigung
ausgeführt werden sollen). Befehle, um den Verzweigungsverzögerungs-
Slot zu füllen, müssen nur Befehle auf der Seite der Verzweigung und
andere Befehle als ein Verzweigungsbefehl sein. Genauer gesagt kann
jeder Befehl im Bereich von der Adresse eines
Verzweigungszielbefehls bis zu einer Adresse, die einem als nächstes
auszuführenden Verzweigungsbefehl um eine Adresse vorangeht, benutzt
werden. Bei einem herkömmlichen Verzweigungsverzögerungsverfahren
wird ein Befehl ausgewählt, durch den ein korrektes Ergebnis
unabhängig von der Richtung, in die eine Verzweigung führt
(Vorhandensein/Nicht-Vorhandensein einer Verzweigung), erzeugt wird,
um einen Verzweigungsverzögerungs-Slot aufzufüllen.
Entsprechend der vorliegenden Erfindung wird der
Verzweigungsverzögerungs-Slot nur mit Befehlen auf der Seite der
Verzweigung aufgefüllt. Wenn das Ergebnis der Ausführung eines
Verzweigungsbefehls angibt, daß keine Verzweigung vorgenommen werden
soll und das Signal Not Taken aktiviert wird, führt die Hardware
eine Steuerung so aus, daß die Befehle, die den
Verzweigungsverzögerungs-Slot füllen, nicht ausgeführt werden. Nun
folgt eine Beschreibung des Betriebs einer Befehlswarteschlange,
wenn ein Verzweigungsbefehl ausgeführt wird.
"Wenn eine Verzweigung erfolgt: Signal Taken ist aktiv"
Es wird angenommen, daß der Wert einer Adresse in der Warteschlange
13, an der ein Verzweigungsbefehl gespeichert ist und deren 2
niederwertige Bit weggelassen sind, gleich br_block ist, und daß der
Wert der Schreibadresse queue_top, deren 2 niederwertige Bit
weggelassen sind, gleichzeitig gleich qt_block ist. Ein Block, in
dem ein Verzweigungsbefehl gespeichert ist (ein Block in der
Warteschlange 13), und ein Block, in dem ein Befehl zu diesem
Zeitpunkt geschrieben wird, werden beide jeweils durch Weglassen der
zwei niederwertigen Bit dargestellt.
Wenn die Blockadressen br_block und qt_block gleich sind, so zeigt
das an, daß noch kein Verzweigungsverzögerungs-Slot in die
Befehlswarteschlange 9 eingelesen worden ist. In diesem Fall sollte
der Verzweigungsverzögerungs-Slot im nächsten Zyklus eingelesen
werden. Ein vorbestimmter Befehl wird gerade in den nächsten Block
in der Warteschlange 13 geschrieben. Daher wird 4 zum Schreibzeiger
queue_top addiert. Das wird durch die folgenden Ausdrücke
dargestellt.
br_block=(Adresse einer Warteschlange, an der ein
Verzweigungsbefehl gespeichert ist) (3. . .2)
gt_block=queue_top (3. . .2)
If br_block=qt_block
then queue_top=queue_top+4
wobei qt_block=queue_block (3. . .2) die Ersetzung des zweiten und dritten Bit in qt_block durch die Bit des Schreibzeigers queue_top angibt (äquivalent dem Weglassen der 2 niederwertigen Bit 0 und 1). Die Warteschlange 13 weist 16 Einträge auf, und der Schreibzeiger und Lesezeiger der Warteschlange wird durch 4 Bit dargestellt. Daher wird ein Block in der Warteschlange durch Überwachen der 2 höherwertigen Bit 2 und 3 identifiziert. Im oben angeführten Ausdruck gibt "=" an, daß der Wert der rechten und linken Seite übereinstimmt.
gt_block=queue_top (3. . .2)
If br_block=qt_block
then queue_top=queue_top+4
wobei qt_block=queue_block (3. . .2) die Ersetzung des zweiten und dritten Bit in qt_block durch die Bit des Schreibzeigers queue_top angibt (äquivalent dem Weglassen der 2 niederwertigen Bit 0 und 1). Die Warteschlange 13 weist 16 Einträge auf, und der Schreibzeiger und Lesezeiger der Warteschlange wird durch 4 Bit dargestellt. Daher wird ein Block in der Warteschlange durch Überwachen der 2 höherwertigen Bit 2 und 3 identifiziert. Im oben angeführten Ausdruck gibt "=" an, daß der Wert der rechten und linken Seite übereinstimmt.
Wenn br_block und qt_block nicht gleich sind, so zeigt das an, daß
der Verzweigungsverzögerungs-Slot bereits eingelesen und in der
Befehlswarteschlange 9 gespeichert worden ist. In diesem Fall wird
eine Adresse in der Warteschlange 13 zum Speichern eines
Verzweigungszielbefehls, mit anderen Worten also eine Adresse nach
einer Warteschlangenadresse, an der wiederum der
Verzweigungsverzögerungs-Slot gespeichert ist, im Schreibzeiger
queue_top eingestellt. Genauer gesagt gilt
If br_block!=qt_block
then queue_br_block O²+8
then queue_br_block O²+8
In diesem Ausdruck gibt "!=" an, daß die Werte der rechten und
linken Seite nicht gleich sind. "" zeigt an, daß der rechte und
linke Term kombiniert werden. Xn gibt an, daß die Operation X n-mal
wiederholt wird. Daher gibt der oben angeführte Ausdruck O2 an,
daß der Wert br_block gleich den 2 höherwertigen Bit gesetzt und den
2 niederwertigen Bit 0 hinzuaddiert wird. Durch diese Operation wird
der Kopf oder die Startadresse eines Blocks erzeugt, in dem ein
Verzweigungsbefehl enthalten ist. Die Addition von 8 zu dieser
Kopfadresse erzeugt die Kopfadresse des Blocks, der auf den nächsten
Block folgt.
Darüber hinaus wird in diesem Fall im nächsten Zyklus, nachdem der
Verzweigungsbefehl ausgeführt worden ist, kein
Verzweigungszielbefehl aus dem Befehlsspeicher (siehe Fig. 4)
übertragen. Daher wird im nächsten Zyklus, nachdem der
Verzweigungsbefehl ausgeführt worden ist, der Schreibzeiger
queue_top gleich dem Wert gesetzt, als der Verzweigungsbefehl
ausgeführt wurde.
Der Lesezeiger scope wird in derselben Weise aktualisiert wie in den
anderen Fällen außer dem Fall, wenn ein Verzweigungsbefehl
ausgeführt wird, und zwar unabhängig davon, ob ein
Verzweigungsverzögerungs-Slot bereits eingelesen worden ist oder
nicht.
Unter Bezugnahme auf die Zeichnungen folgt nun eine detaillierte
Beschreibung der oben angeführten Operation. In den Fig. 8 bis 10
ist der Betrieb einer Warteschlange dargestellt, wenn in einem
Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird, der
Verzweigungsverzögerungs-Slot noch nicht eingelesen worden ist.
Fig. 8 zeigt ein Beispiel für den Zustand der Befehlswarteschlange 9
im Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird. Der
Lesezeiger scope und der Schreibzeiger queue_top werden beide auf
dem Wert 0 gehalten. Es wird angenommen, daß in der Adresse 2 der
Warteschlange 13 ein Verzweigungsbefehl existiert, und daß dieser
Verzweigungsbefehl im nächsten Zyklus ausgeführt wird.
Beim in Fig. 9 dargestellten nächsten Zyklus wird aufgrund des
Ausdrucks br_block==qt_block der Schreibzeiger queue_top um 4
erhöht und nimmt den Wert 4 an. In die Adressen 4, 5, 6 und 7 der
Warteschlange 13 werden die Befehle des Verzögerungs-Slot
geschrieben. Gleichzeitig wird entsprechend einer
Verzweigungszieladresse auf den Befehlsspeicher zugegriffen.
Im nächsten Zyklus wird der Schreibzeiger queue_top um 4 auf 8
erhöht, wie in Fig. 10 dargestellt ist. Der Befehl des
Verzweigungsziels wird vom Befehlsspeicher übertragen. Die Adressen
8, 9, 10 und 11 der Warteschlange 13 werden mit dem Befehl des
Verzweigungsziels beschrieben. Die Befehle im Verzögerungs-Slot, die
durch den Lesezeiger scope bezeichnet werden, der eine Änderung
entsprechend einem ausgegebenen Befehl erfuhr, sind Befehle auf der
Seite der Verzweigung. Nach der Ausgabe eines Befehls im
Verzweigungsverzögerungs-Slot werden die eingelesenen
Verzweigungszielbefehle zu einer Dekodierstufe übertragen. Wenn ein
Verzweigungsverzögerungs-Slot im Zyklus, in dem ein
Verzweigungsbefehl ausgeführt wird, noch nicht eingelesen worden
ist, wird daher keine Leistungsverschlechterung (Leerstellen in
einer Pipeline) aufgrund der ausgeführten Verzweigung erzeugt.
Die Fig. 11 bis 13 stellen die Zustände der Befehlswarteschlange 9
dar, wenn im Zyklus, in dem ein Verzweigungsbefehls ausgeführt wird,
ein Verzweigungsverzögerungs-Slot bereits eingelesen worden ist.
Fig. 11 zeigt ein Beispiel für den Zustand der Warteschlange 13 im
Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird. Der
Lesezeiger scope gibt 0 an, und der Schreibzeiger queue_top zeigt 12
an. Nun wird ein Fall betrachtet, in dem an der Adresse 2 der
Warteschlange 13 ein Verzweigungsbefehl existiert und der
Verzweigungsbefehl in diesem Zyklus ausgeführt wird.
Beim nächsten in Fig. 12 dargestellten Zyklus wird der Schreibzeiger
queue_top gleich 8, um die nächste Adresse des
Verzweigungsverzögerungs-Slot zu speichern. In diesem Zyklus ist ein
Befehl, der aus dem Befehlsspeicher kommt, ein unnötiger Befehl. Mit
anderen Worten stellt er einen Befehl auf einer anderen
Verzweigungszielseite als dem Verzögerungs-Slot dar (ein Befehl, der
ausgeführt wird, wenn keine Verzweigung vorgenommen wird). Daher
wird im nächsten Zyklus, der in Fig. 13 dargestellt ist, der Wert
des Schreibzeigers queue_top nicht aktualisiert. Dieser unnötige
Befehl kann in die Warteschlange 13 geschrieben werden. Dieser
Befehl soll im nächsten Zyklus nur durch einen
Verzweigungszielbefehl ersetzt werden.
Beim in Fig. 12 gezeigten Zyklus wird entsprechend einer
Verzweigungszieladresse auf den Befehlsspeicher zugegriffen.
Beim in Fig. 13 dargestellten Zyklus wird vom Befehlsspeicher ein
Verzweigungszielbefehl übertragen. Der Schreibzeiger queue_top hält
den nächsten Wert des Verzweigungsverzögerungs-Slot. Daher werden
die Warteschlangenadressen 8, 9, 10 und 11 mit
Verzweigungszielbefehlen beschrieben. Wie aus dem Betrieb, der in
den Fig. 11 bis 13 dargestellt ist, klar ersichtlich ist, wird durch
die Ausführung einer Verzweigung keine Leistungsverschlechterung
verursacht, wenn im Zyklus, in dem ein Verzweigungsbefehl ausgeführt
wird, ein Verzweigungsverzögerungs-Slot bereits eingelesen worden
ist.
"Wenn keine Verzweigung erfolgt: Not Taken ist aktiv"
Unter den aus der Befehlswarteschlange 9 ausgelesenen und
dekodierten Befehlen wird der Befehl nach dem Verzweigungsbefehl
ungültig gemacht. Der Grund dafür ist, daß die Befehle nach dem
Verzweigungsbefehl einem Verzweigungsverzögerungs-Slot entsprechen
und der Verzweigungsverzögerungs-Slot nur Befehle auf der Seite der
Verzweigung enthält. Wie oben beschrieben worden ist, stellt ein
Befehl auf der Seite der Verzweigung, der sich in einem
Verzweigungsverzögerungs-Slot befindet, einen Befehl der
Verzweigungszielseite dar, der ausgeführt werden soll, wenn durch
diesen Verzweigungsbefehl eine Verzweigung ausgeführt werden soll.
Genauer gesagt reichen die Befehle auf der Seite der Verzweigung von
einem Befehl einer Verzweigungszieladresse, der ausgeführt wird,
wenn durch einen zu diesem Verzweigungsverzögerungs-Slot gehörenden
Verzweigungsbefehl eine Verzweigung ausgeführt wird, bis zu einem
Befehl in einem Adreßbefehl, der dem als nächstes auszuführenden
Verzweigungsbefehl um einen Befehl vorangeht. Wenn eine Verzweigung
ausgeführt wird, ist daher der Befehl, der in einen
Verzweigungsziel-Befehlsblock eingeführt wird, ein Befehl, der nach
den Befehlen ausgeführt werden soll, die den Verzögerungs-Slot
bilden.
Wenn keine Verzweigung ausgeführt wird und das Signal Not Taken
aktiv ist, darf der Befehl im Verzweigungsverzögerungs-Slot im
nächsten Zyklus nicht ausgeführt werden. Der Befehl im
Verzweigungsverzögerungs-Slot wird übergangen und der nächste Befehl
sollte ausgeführt werden. Daher wird der Lesezeiger scope durch den
folgenden Ausdruck dargestellt:
scope=br_blockO²+8
Wenn ein Befehlsblock nach dem Verzweigungsverzögerungs-Slot bereits
eingelesen worden ist, ist der auszuführende Befehl bereits im
Zyklus nach dem Zyklus, in dem der Verzweigungsbefehl ausgeführt
wird, eingelesen worden. Daher wird durch die Ausführung des
Verzweigungsbefehls keine Leistungsverschlechterung verursacht.
Wenn der Verzweigungsverzögerungs-Slot noch nicht eingelesen worden
ist, wenn mit anderen Worten die Zeiger br_block und qt_block gleich
sind, ist der auszuführende Befehl im Zyklus nach dem Zyklus, in dem
der Verzweigungsbefehl ausgeführt wird, noch nicht eingelesen
worden. Um auf das Einlesen des auszuführenden Befehls zu warten
sollte die Pipeline für einen Zyklus angehalten werden. Wenn die
Zeiger br_block und qt_block gleich sind, wird im nächsten Zyklus
genauer gesagt die Ausgabe eines Befehls verhindert.
Unabhängig davon, ob der Verzweigungsverzögerungs-Slot bereits
eingelesen worden ist oder nicht, wird der Schreibzeiger queue_top
in derselben Weise aktualisiert wie für den Fall, daß ein
Verzweigungsbefehl ausgeführt worden ist.
Die Fig. 14 bis 16 zeigen den Betrieb der Befehlswarteschlange, wenn
das Signal Not Taken aktiv und der Verzweigungsverzögerungs-Slot
noch nicht eingelesen worden ist. Unter Bezugnahme auf die Fig. 14
bis 16 folgt nun eine Beschreibung des Betriebs der
Befehlswarteschlange, wenn durch einen Verzweigungsbefehl eine
Verzweigung vorgenommen wird und der Verzweigungsverzögerungs-Slot
noch nicht eingelesen worden ist.
Fig. 14 zeigt ein Beispiel für den Zustand der Warteschlange 13 im
Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird. Der
Lesezeiger scope und der Schreibzeiger queue_top geben beide 0 an.
Es wird angenommen, daß in der Adresse 2 der Warteschlange 13 ein
Verzweigungsbefehl existiert und der Verzweigungsbefehl in diesem
Zyklus ausgeführt wird.
Im Zyklus nach der Ausführung des Verzweigungsbefehls, der in Fig.
15 dargestellt ist, wird dem Schreibzeiger queue_top 4 hinzuaddiert,
so daß er den Wert 4 annimmt. Die Adressen 4, 5, 6 und 7 der
Warteschlange 13 werden mit den Befehlen eines Verzögerungs-Slot
beschrieben. Die auszuführenden Befehle werden nicht unter den
Adressen 8, 9, 10 und 11 der Warteschlange 13 gespeichert. Die
Ausgabe eines Befehls in diesem Zyklus wird verhindert. Genauer
gesagt wird ein Ausgabeverhinderungssignal issue_stop an den in Fig.
15 gezeigten Befehlsausgabe-Analysebereich 10 übertragen und die
Ausgabe von Befehlen verhindert.
Im nächsten Zyklus (Fig. 16) wird dem Schreibzeiger queue_top 4
hinzuaddiert, so daß er den Wert 8 annimmt. Zu diesem Zeitpunkt wird
der vom Befehlsspeicher übertragene Befehlsblock gleichzeitig
ausgelesen und dem Befehlsdekoder übergeben, weil der Lesezeiger
scope 8 angibt.
Die Stufen des Superskalars arbeiten mit nicht-überlappenden 2-
Phasen-Taktsignalen (T-Taktsignal und L-Taktsignal), die
Eingangsstufe einer jeden Stufe weist einen Latch-Schaltkreis auf,
der vom T-Taktsignal abhängig ist, zum Verriegeln eines zugeführten
Signals, und der Ausgangsabschnitt weist ein L-Latch auf, das vom L-
Taktsignal abhängig ist, zum Verriegeln eines angelegten Signals. Zu
diesem Zeitpunkt wird das Schreiben von Daten in die Warteschlange
13 in Abhängigkeit vom T-Taktsignal ausgeführt, während das Lesen
der Daten in Abhängigkeit vom L-Taktsignal ausgeführt wird. Daher
wird das Schreiben eines Befehls, der vom Befehlsspeicher 13
zugeführt wird, in die Warteschlange 13 und deren Übertragung in den
Befehlsdekoder gleichzeitig implementiert. Dieses Schreiben und
Lesen von Daten kann in Abhängigkeit vom T-Taktsignal ausgeführt
werden, wobei die Datenlesetaktung bezüglich der Datenschreibtaktung
verzögert ist, und die Daten der Warteschlange 13 können ausgelesen
werden, wenn das notwendig ist.
Für den Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird, wird
unter Bezugnahme auf die Fig. 17 und 18 der Betrieb der
Warteschlange beschrieben, wenn der Verzweigungsverzögerungs-Slot
bereits eingelesen worden ist.
Fig. 17 zeigt ein Beispiel für den Zustand der Befehlswarteschlange
9 im Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird.
Der Lesezeiger scope gibt 0 an, der Schreibzeiger queue_top 8. Es
wird angenommen, daß in der Adresse 2 der Warteschlange 13 ein
Verzweigungsbefehl existiert, und der Verzweigungsbefehl im Zyklus
der Fig. 17 ausgeführt wird.
Beim in Fig. 18 dargestellten Zyklus wird der Lesezeiger scope
gleich 8, um die Adresse nach dem Verzögerungs-Slot anzugeben. Der
Schreibzeiger queue_top wird um 4 erhöht und wird gleich 12 wie im
üblichen Fall.
Wenn ein Verzweigungsverzögerungs-Slot bereits in dem Zyklus
eingelesen worden ist, in dem ein Verzweigungsbefehl ausgeführt
wird, erfolgt wie oben beschrieben keine Verschlechterung der
Leistung aufgrund der Ausführung des Verzweigungsbefehls. Wenn kein
Verzweigungsverzögerungs-Slot eingelesen ist, wird eine
Einleseverzögerung um einen Zyklus verursacht, wenn keine
Verzweigung erfolgt. Wenn die Bandbreite des Befehlseinlesens (die
Anzahl der in einem Zyklus eingelesenen Befehle) größer als die
mittlere Geschwindigkeit der Befehlsausgabe (die mittlere Anzahl von
Befehlen, die in einem Zyklus ausgegeben werden) eingestellt wird,
ist die Wahrscheinlichkeit hoch, daß ein Verzögerungs-Slot in dem
Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird, bereits
eingelesen worden ist. Daher hält diese Struktur die
Wahrscheinlichkeit sehr gering, daß die Leistung der
Verarbeitungseinheit durch die Ausführung eines Verzweigungsbefehls
verschlechtert wird.
Fig. 19 zeigt eine Liste von Logiken (oben beschrieben), die vom
Zeigersteuerbereich 12 erzielt werden. In Fig. 19 gibt "X" einen
beliebigen Wert an. "-" zeigt an, daß der Wert nicht angegeben ist.
Die Struktur des Zeigersteuerbereichs ist in den Fig. 20A und 20B
gezeigt. In den Fig. 20A und 20B gibt 16a einen Addierer zum
Addieren der Ausgabe eines Registers 15 und der Zahl 4, 16b einen
Addierer zum Addieren der Ausgabe des Zeigers scope eines Registers
14 und der ausgegebenen Befehlsinformation issue_count, 16c einen
Addierer zum Addieren der Kopfadresse br_blockO2 eines Blocks mit
einem Verzweigungsbefehl (einem Block in einer Warteschlange) und
der Zahl 8, 17a einen Selektor zum Auswählen der Ausgabe queue_top
des Registers 15, der Ausgabe des Addierers 16a oder der Ausgabe des
Addierers 16c und zum Schreiben des Auswahlergebnisses in das
Register 15, 17b einen Selektor zum Auswählen der Ausgabe des
Addierers 16b oder der Ausgabe des Addierers 16c und zum Schreiben
des Auswahlergebnisses in das Register 14, 18 einen Komparator zum
Vergleichen des Zeigers br_block und des Zeigers qt_block, 21 einen
Inverter zum Invertieren der Ausgabe des Komparators 18, 22 einen
UND-Schaltkreis zum Erzeugen des logischen Produkts der Ausgabe des
Komparators 18 und des Signals Not Taken, 23 einen Inverter zum
Invertieren des Signals Not Taken, 24 einen UND-Schaltkreis zum
Erzeugen des logischen Produkts der Ausgabe des Inverters 21 und des
Signals Taken, 19 ein Register zum Halten (Verzögern) der Ausgabe
des UND-Schaltkreises 24 für einen Takt, und 25 einen NOR-
Schaltkreis zum Erzeugen der negativen logischen Summe der Ausgabe
des UND-Schaltkreises 24 und der im Register 19 gehaltenen Daten an.
Das Ausgabeverhinderungssignal issue_stop wird vom UND-Schaltkreis
22 erzeugt. Die Signale sel_c, sel_a und sel_b sind Signale zum
Auswählen entsprechender Eingaben des Selektors 17a.
Die Signale sel_d sel_e sind Signale zum Auswählen entsprechender
Eingaben des Selektors 17b.
Fig. 21 zeigt die Struktur des in Fig. 5 gezeigten Befehlsausgabe-
Analyseabschnitts 10. Wie in Fig. 21 dargestellt ist, weist der
Befehlsausgabe-Analyseabschnitt 10 einen Gefahranalyseabschnitt 30,
einen Ausgabeverhinderungsabschnitt 31, einen Ausgabeanzahl-
Berechnungsabschnitt 32 und ein Gatter 33 zum Steuern eines
Verfügbarkeitssignals inst_avail entsprechend dem
Ausgabeverhinderungssignal issue_inhibit auf.
Der Gefahranalyseabschnitt 30 analysiert eine Gefährdung zwischen
Befehlen. Vier Befehle, nämlich die Befehle 1-4, werden in den
Gefahranalyseabschnitt 30 eingegeben. Wenn unter den eingegebenen
Befehlen der i-te Befehl von jeder Gefährdung frei ist, wird das i-
te Signal ia (Verfügbarkeitssignal) aktiviert. "Gefährdung" gibt den
Zustand an, in dem der Wert eines von einem Befehl zu benutzenden
Registers (in einem Registersatz) nicht bestimmt ist. Diese
Gefährdungsanalyse wird entsprechend dem Scoreboard des
Registersatzes (das später beschrieben wird) ausgeführt.
Der Ausgabeverhinderungsabschnitt 31 empfängt die Befehle 1-4 und
erzeugt ein Signal, das die niederwertigen 2 Bit der Adresse scope
der Warteschlange ignoriert, in der ein Verzweigungsbefehl
gespeichert ist. Der Ausgabeverhinderungsabschnitt 31 erzeugt mit
anderen Worten eine Blockadresse br_block für die
Befehlswarteschlange, zu der der Verzweigungsbefehl gehört. Der
Ausgabeverhinderungsabschnitt 31 aktiviert auch ein entsprechendes
Ausgabeverhinderungssignal issue_inhibit, um die Ausgabe eines
Befehls zu verhindern, der außer bei einer Gefährdung unter allen
Umständen verhindert werden sollte. Das Ausgabeverhinderungssignal
issue_inhibit wird vom Ausgabestopsignal issue_stop aktiviert, das
vom Zeigersteuerbereich 12 übertragen wird, oder es wird für die
Befehle aktiviert, die einem Verzweigungsbefehl folgen, wenn das
Signal Not Taken aktiv ist.
Das Gatter 33 weist einen Inverter zum Invertieren des
Ausgabeverhinderungssignals issue_inhibit vom
Ausgabeverhinderungsabschnitt 31 und einen UND-Schaltkreis zum
Empfangen dieses Inverterausgangssignals und des Signals ia vom
Gefährdungsanalyseabschnitt 30 auf. Der Inverter und der UND-
Schaltkreis sind entsprechend Befehlen gebildet. Die
Verfügbarkeitssignale inst_avail werden vom Gatter 33 entsprechend
den Befehlen erzeugt. Genauer gesagt ist das Signal inst_avail das
logische Produkt des Signals ia und des Signals/issue_inhibit
(logisches nicht_issue_inhibit).
Der Ausgabeanzahl-Berechnungsabschnitt 32 empfängt die Signale
inst_avail vom Gatter 33, berechnet die Anzahl der ausgegebenen
Befehle und erzeugt ein Signal issue_count, das die Anzahl der
ausgegebenen Befehle angibt.
Fig. 22 zeigt ein Logikdiagramm des Ausgabeverhinderungsabschnitts
von Fig. 21. Wie in Fig. 22 gezeigt ist, ist ein
Verzweigungserfassungsschaltkreis 43 entsprechend jedem der Befehle
1-4 gebildet. Der Verzweigungserfassungsschaltkreis 43 erfaßt, ob
ein zugeführter Befehl einen Verzweigungsbefehl darstellt oder nicht
und aktiviert das Ausgangssignal, wenn der zugeführte Befehl ein
Verzweigungsbefehl ist.
Das Ausgangssignal des Verzweigungserfassungsschaltkreises 43 wird
an einen Prioritätscodierer 44 angelegt. Der Prioritätscodierer 44
erfaßt die Position des Verzweigungsbefehls mit kleinster Adresse.
Ein Signal (2-Bit-Wert), das die Position des
Prioritätsverzweigungsbefehls anzeigt, wird vom Prioritätscodierer
44 abgegeben. Das Ausgangssignal des Prioritätscodierers 44 wird an
den Addierer 45 angelegt. Der Addierer 45 addiert die Ausgabe des
Prioritätscodierers und den Lesezeiger scope. Das Ausgangssignal des
Addierers 45 gibt die Adresse der Verzweigungsbefehls in der
Warteschlange an. Das Ausgangssignal des Addierers 45 wird einem
Maskierungsschaltkreis 46 zur Maskierung niederwertiger Bit
zugeführt. Der Maskierungsschaltkreis 46 schneidet die 2
niederwertigen Bit der Ausgabe ab (setzt sie auf "0") und gibt damit
einen Zeiger br_block aus.
Die ODER-Gatter OR1-OR5 und die UND-Gatter AN1-AN3 sind gebildet, um
die Verhinderung der Ausgabe von Befehlen zu steuern. Wenn ein
Befehl 1 einen Verzweigungsbefehl darstellt, wird ein Eingang eines
jeden UND-Gatters AN1-AN3 auf "H" gezogen. Wenn das Signal Not Taken
gleichzeitig den Pegel "H" erreicht, wird keine Verzweigung
ausgeführt und die Ausgabe der Befehle 2-4 wird verhindert. Das
führt zu einem aktiven Zustand des Signals issue_inhibit. Wenn das
Signal Not Taken inaktiv ist, ist auch das
Ausgabeverhinderungssignal issue_inhibit für jeden der Befehle 2-4
inaktiv und daher werden die Befehle ausgegeben. Wenn einer der
Befehle 2-4 einen Verzweigungsbefehl darstellt, wird die Position
des Ausgabeverhinderungssignals issue_inhibit im jeweiligen
Ausgabeabschnitt gerade um 1 verschoben. Wenn das Signal issue_stop
aktiviert wird, wird die Ausgabe der Befehle 1-4 verhindert.
Bei der oben beschriebenen Ausführungsform 1 wird der Befehl in die
Befehlswarteschlange 9 voreingelesen. Nun wird eine Struktur
beschrieben, die ein übliches Befehlsregister benutzt und den Befehl
nicht voreinliest.
Die Fig. 23 zeigt die wesentliche Struktur einer
Befehlsdekodierstufe, die in der zweiten Ausführungsform verwendet
wird. Wie in Fig. 23 dargestellt ist, weist die Befehlsdekodierstufe
ein Befehlsregister 54 zum Speichern zugeführter Befehle (Befehle 1-
4), einen Verzweigungsverarbeitungsabschnitt 11 zum Empfangen eines
Befehls vom Befehlsregister 54, Erfassen eines Verzweigungsbefehls
und Bestimmen, ob eine Verzweigung erfolgen soll oder nicht, und
einen Befehlsausgabe-Analyseabschnitt 10 zum Empfangen eines Signals
Not Taken vom Verzweigungsverarbeitungsbereich 11 und eines Befehls
vom Befehlsregister 54 und zum Analysieren des zugeführten Befehls
dahingehend, ob der Befehl ausgegeben werden soll oder nicht, auf.
Bei der in Fig. 23 gezeigten Struktur ohne Befehlswarteschlange ist
keine Struktur zur Steuerung des Zeigers einer Befehlswarteschlange
gebildet. Bei der in Fig. 23 dargestellten Struktur ist die
Definition eines Verzweigungsverzögerungs-Slot gleich wie bei der
Beschreibung von Ausführungsform 1.
In Fig. 24 ist der Betrieb des Befehlsregisters gezeigt, wenn von
einem Verzweigungsbefehl eine Verzweigung ausgeführt wird. Unter den
Befehlen, die in das Befehlsregister 54 aufgenommen worden sind, sei
der zweite Befehl ein Verzweigungsbefehl (Fig. 24A). Im
Verzweigungsverarbeitungsbereich 11 ist bekannt, daß eine
Verzweigung auf der Basis einer Ausführung dieses
Verzweigungsbefehls ausgeführt werden soll, das Signal Taken wird
aktiviert, und eine Verzweigungszieladresse wird zum Befehlsspeicher
übertragen. Der Befehlsausgabe-Analyseabschnitt 10 analysiert, ob
der im Befehlsregister 54 gespeicherte Befehl an eine
Funktionseinheit ausgegeben werden kann oder nicht, und aktiviert
das Signal inst_avail auf der Basis des Analyseergebnisses. Es wird
angenommen, daß vier Befehle ausgegeben werden.
Im nächsten Zyklus, der in Fig. 24B dargestellt ist, werden die
Befehle in einem Verzweigungsverzögerungs-Slot in das
Befehlsregister 54 eingelesen. Diese Befehle werden in
Funktionseinheiten eingegeben.
Im nächsten Zyklus (Fig. 24C) wird ein Befehl auf der Seite des
Verzweigungsziels, der vom Befehlsspeicher zugeführt wird, im
Registerspeicher 54 gespeichert und anschließend ausgeführt.
Im Fall der in Fig. 24 gezeigten Struktur, die die Befehle auf der
Seite der Verzweigung als Verzweigungsverzögerungs-Slot benutzt,
wird durch eine Verzweigung keine Verschlechterung der Leistung
verursacht, wenn bei der Verzweigung das Signal Taken aktiv ist.
Fig. 25 zeigt den Betrieb des Befehlsregisters, wenn keine
Verzweigung ausgeführt wird, das Signal Not Taken ist mit anderen
Worten aktiv. Unter Bezugnahme auf die Fig. 25 wird nun der Betrieb
des Befehlsregisters beschrieben, wenn das Signal Not Taken aktiv
ist.
Es wird angenommen, daß unter den in das Register 54 eingelesenen
Befehlen der zweite Befehl einen Verzweigungsbefehl darstellt (Fig.
25A). Der Verzweigungsverarbeitungsbereich 11 führt diesen
Verzweigungsbefehl aus, weiß, daß das Signal Not Taken ausgegeben
werden sollte (aktiv sein sollte), und aktiviert das Signal Not
Taken, wodurch das dem Befehlsausgabe-Analyseabschnitt 10 mitgeteilt
wird. Der Befehlsausgabe-Analyseabschnitt 10 verhindert
bedingungslos die Ausgabe von Befehlen, die diesem
Verzweigungsbefehl folgen.
Im nächsten Zyklus (Fig. 25B) werden die Befehle im
Verzweigungsverzögerungs-Slot in das Befehlsregister 54 eingelesen.
In diesem Zyklus ist die Ausgabe von Befehlen unterdrückt.
Im nächsten Zyklus (Fig. 25C) laufen Befehle nach dem
Verzweigungsverzögerungs-Slot ein, die im Befehlsregister 54
registriert und anschließend ausgeführt werden.
Wie in den Fig. 25A-C gezeigt ist, wird die Ausgabe von Befehlen für
1 Taktzyklus verhindert, wenn keine Verzweigung ausgeführt wird und
das Signal Not Taken aktiv ist. Das führt zu einer Verschlechterung
der Leistung. Wenn diese Verzweigung nicht ausgeführt wird (das
Signal Not Taken ist aktiv), wird das folgende Verfahren benutzt,
durch das zwei Arten von Verzweigungsbefehlen folgendermaßen
vorbereitet werden, um diese Leistungsverschlechterung zu
verhindern. Dieser Zugang lautet genauer:
- a) einen Verzweigungsverzögerungs-Slot mit Befehlen auf der Seite der Verzweigung (Verzweigungszielseite) zu füllen, und
- b) den Verzweigungsverzögerungs-Slot mit Befehlen auf der Seite ohne Verzweigung zu füllen.
Der erste Zugang (a) wird bei den Ausführungsformen 1 und 2 benutzt.
Der zweite Zugang stimmt mit dem Fall überein, in dem kein Verfahren
mit verzögerter Verzweigung benutzt wird. Mit anderen Worten zieht
der Zugang keinen Vorteil aus einem Verfahren mit verzögerter
Verzweigung. Der erste Zugang (a) leidet unter keiner
Leistungsverschlechterung, wenn eine Verzweigung auftritt, und wird
für einen Verzweigungsbefehl mit hoher Verzweigungswahr
scheinlichkeit benutzt. Der zweite Zugang (b) leidet unter keiner
Leistungsverschlechterung, wenn keine Verzweigung auftritt, und wird
für einen Verzweigungsbefehl mit geringer Verzweigungswahr
scheinlichkeit benutzt. In diesem Fall kann ein Befehlsregister zum
Empfangen der Ausgabe der Befehlswarteschlange in einer ID-Stufe
gebildet sein, oder es kann auch nur die Befehlswarteschlange
benutzt werden.
Fig. 26 zeigt ein Beispiel für die Struktur des in Fig. 23
dargestellten Befehlsausgabe-Analyseabschnitts 10. Die Struktur des
in Fig. 26 gezeigten Befehlsausgabe-Analyseabschnitt ist ähnlich der
in Fig. 21 dargestellten. Dem Ausgabeverhinderungsabschnitt 31 wird
jedoch das Signal Not Taken und über ein Register 35 das
Ausgabeverhinderungssignal issue_stop zugeführt. Das Register 35
besitzt die Funktion, das Signal Not Taken um 1 Taktzyklus zu
verzögern. Die restliche Struktur ist der in Fig. 21 gezeigten
ähnlich. Weil eine Befehlswarteschlange und/oder ein Befehlsregister
für den Ausgabeverhinderungsabschnitt 31 benutzt wird, wie das auch
bei der in Fig. 22 dargestellten Struktur der Fall ist, ist ein
Prioritätscodierer zum Erfassen des Prioritätsverzweigungsbefehls
unter den Befehlen 1-4 und zum Angeben seiner Position gebildet, und
es werden die Strukturen des Maskierungsschaltkreises 46 für
niederwertige Bit und des Addierers 45 verwendet.
Durch die Bildung des Ausgabeanzahl-Berechnungsabschnitts 32 wird
die Ausgabebefehlsanzahl issue_count erzeugt. Befehle mit Adressen
entsprechend der Anzahl ausgegebener Befehle können aus dem
Befehlsspeicher gelesen werden, ohne die Befehlswarteschlange zu
benutzen. Auch wenn das Befehlsregister benutzt wird, kann ein
weiterer Befehlsblock aus dem Befehlsspeicher entnommen werden,
nachdem alle im Register gespeicherten Befehle ausgegeben worden
sind.
Bei den oben angeführten Ausführungsformen 1 und 2 wird ein
Verzweigungsbefehl entsprechend einem Verfahren mit verzögerter
Verzweigung verarbeitet, womit eine Verarbeitung mit hoher
Geschwindigkeit erzielt wird. Als verfahren zur Verarbeitung eines
Verzweigungsbefehls gibt es ein Verfahren mit
Verzweigungsvorhersage. Wenn ein Verzweigungsbefehl existiert wird
entsprechend diesem Verfahren der Verzweigungsvorhersage die
Verzweigungsrichtung vorher vorhergesagt, und ein
Verzweigungszielbefehl wird auf der Basis dieser Vorhersage
ausgeführt. Wenn die Vorhersage korrekt ist, wird entsprechend dem
Verzweigungsvorhersageverfahren die Zeit zum Einlesen eines
Zielbefehls eingespart und daher die Leistungsverschlechterung
reduziert. Nun folgt die Beschreibung einer Struktur entsprechend
diesem Verzweigungsvorhersageverfahren.
Fig. 27 zeigt schematisch die Strukturen einer Befehlseinlesestufe
und einer Befehlsdekodierstufe, die zu dieser dritten
Ausführungsform gehören. In der folgenden Beschreibung der dritten
Ausführungsform werden vier Einheiten für eine
Ganzzahlarithmetikoperation als Funktionseinheiten betrachtet.
Die Befehlswarteschlange 9 liest Befehle aus dem Befehlsspeicher
vorein und speichert die voreingelesenen Befehle. Die
Befehlswarteschlange 9 weist ein Register 14 zum Halten eines
Lesezeigers scope, ein Register 15 zum Halten eines Schreibzeigers
queue_top und eine Warteschlange 13 zum Speichern von Befehlen wie
im Fall der ersten Ausführungsform auf. Die Warteschlange 13
speichert als einen Eintrag einen Befehl, die Adresse des Befehls
(die Adresse im Befehlsspeicher) und ein Flag br_inv (das später
beschrieben wird), das angibt, das der Befehl einen vorhergesagten
Verzweigungsbefehl darstellt.
Ein Befehlsdekoder 66 dekodiert einen Befehl, der aus der
Befehlswarteschlange 9 ausgelesen worden ist und analysiert, welcher
Befehl ausgebbar ist, wie im Fall der oben angeführten
Ausführungsformen. Das Analyseergebnis wird als Flag ausgegeben, das
die Verfügbarkeit des Befehls anzeigt, nämlich als Verfügbarkeits-
Flag flag_inst_avail auf die Signalleitung 91. Bei der in Fig. 27
dargestellten Struktur werden vier Befehle aus der
Befehlswarteschlange 9 ausgelesen, und die Ausgabeanalyse dieser
Befehle wird im Befehlsdekoder 66 ausgeführt. Daher werden vier Bit
an Verfügbarkeits-Flags ausgegeben, und falls ein Befehl ausgebbar
ist wird ein entsprechendes Flag in_inst_avail im Flag id_inst_vail
zu 4 Bit aktiviert.
Der Befehlsdekoder 66 gibt das Ergebnis der Befehlsdekodierung, mit
anderen Worten also einen Operationscode auf eine Signalleitung 97
als Code ID-code aus. Der Operationscode ID-code und das
Verfügbarkeits-Flag inst_avail des Befehls laufen stets zusammen zur
Funktionseinheit. Im folgenden bezeichnet EXC_code einen
Operationscode, der zu einer Ausführungsstufe EXC läuft, und
EXC_inst_avail stellt das Verfügbarkeits-Flag des Befehls in der
Ausführungsstufe EXC dar. Dieselbe Bezeichnung wird für die
Speicherzugriffsstufe MEM benutzt. Der Befehlsdekoder 66 steuert
ferner die Werte der Zeiger scope und queue_top der Register 14 und
15. Die Steuerung wird später beschrieben.
Bei der in Fig. 27 dargestellten Struktur werden die vier aus der
Befehlswarteschlange auf einmal ausgelesenen Befehle in den
Befehlsregistern 65a-65d gespeichert und an den Befehlsdekoder 66
angelegt. Die Befehlsregister 65a-65d weisen jeweils einen
Adreßspeicherbereich, einen Befehlscode-Speicherbereich und einen
Bereich zur Speicherung des Flag br_inv auf.
Der Befehlsdekoder 66 steuert ferner den Wert des Befehlszählers 12.
Ein Zugriff auf einen Befehls-Cache 61 wird entsprechend einem
Zeiger PC ausgeführt, der vom Befehlszähler 12 ausgegeben wird, und
die vier Befehle werden gleichzeitig vom Befehls-Cache 61
eingelesen.
Der Registersatz 69 ist zur Speicherung von Daten verfügbar und kann
von der Befehlsdekodierstufe und den Funktionseinheiten angesprochen
werden.
Ein Scoreboard-Steuerschaltkreis 100 und ein Scoreboard-Schaltkreis
101 sind zur Überwachung der Zustände der Register im Registersatz
69 gebildet. Der Betrieb des Steuerschaltkreises 100 und des
Scoreboard-Schaltkreis 101 wird später detailliert beschrieben.
Ein Verzweigungsbefehl wird folgendermaßen ausgeführt.
Als Beispiel für einen Verzweigungsbefehl wird folgender Befehl
betrachtet: "Wenn das Register R1 den Wert 0 anzeigt erfolgt eine
Verzweigung zu einer Adresse, die durch Addition von 5 zur Adresse
des Verzweigungsbefehls erzeugt wird" (die "5" wird als
Verzweigungs-Offset bezeichnet).
Im Befehlsdekoder 66 wird geprüft, ob der Inhalt des Registers R1,
der aus dem Registersatz 69 ausgelesen wird, gleich "0" ist.
Wenn das Testergebnis "falsch" lautet, wird nichts ausgeführt. Mit
anderen Worten wird keine Verzweigung ausgeführt und der Befehl nach
dem Verzweigungsbefehl wird ausgeführt. Ist das Ergebnis des Tests
"wahr", so wird 5 zur Adresse des Verzweigungsbefehls addiert, und
das Ergebnis der Addition wird im nächsten Zyklus im Befehlszähler
12 der Befehlseinlesestufe (IF-Stufe) eingestellt.
Der oben angeführte Sachverhalt stellt einen allgemeinen Weg dar,
einen Verzweigungsbefehl auszuführen. Nun folgt eine Beschreibung
der Ausführung eines Verzweigungsbefehls entsprechend einer
Verzweigungsvorhersage. Die Ausführung eines Verzweigungsbefehls auf
der Basis einer Verzweigungsvorhersage erfolgt folgendermaßen.
(1) Es wird bestimmt, ob eine Vorhersageverzweigung erfolgen soll.
Es werden die folgenden Bedingungen betrachtet:
IR1: R₁←R2+R3
IR2: IF R1=0 then PC←Adresse+5
IR3: Befehl
IR4: Befehl
IR2: IF R1=0 then PC←Adresse+5
IR3: Befehl
IR4: Befehl
Der oben angegebene Befehl IR2 stellt einen Verzweigungsbefehl dar,
der im vorherigen Beispiel beschrieben worden ist. Der Wert des
Registers R1, das für diesen Verzweigungsbefehl notwendig ist, ist
nicht bestimmt, bis der im Befehl IR1 enthaltene Additionsbefehl
abgeschlossen worden ist. In einem solchen Fall wird der Befehl IR2
als gefährdet bezeichnet. Bei einem herkömmlichen Verfahren zur
Ausführung eines Verzweigungsbefehls nimmt der Befehl IR2 daher
einen Halt-Zustand ein, bis die Addition im Befehl IR1 abgeschlossen
ist. Entsprechend dem Verfahren mit Verzweigungsvorhersage wird der
Verzweigungsbefehl IR2 an diesem Punkt vorhergesagt und entschieden,
daß eine Verzweigung auftreten wird. In den nachfolgenden Zyklen
wird ein Einlesen von Befehlen auf der Basis der
Verzweigungsvorhersage ausgeführt.
Um die Ausführung eines Befehls auf der Basis dieser
Verzweigungsvorhersage anzuzeigen wird das Flag on_pred des
Registers 63 gesetzt. Zur Vorhersage einer Verzweigung werden
verschiedene Verfahren benutzt. Wenn beispielsweise im Fall eines
Verfahrens mittels eines Verzweigungs-Offset der Verzweigungs-Offset
einen positiven Wert aufweist, so wird vorhergesagt, daß keine
Verzweigung auftritt. Weist der Verzweigungs-Offset dagegen einen
negativen Wert auf, so wird vorhergesagt, daß eine Verzweigung
auftritt.
Wenn die Vorhersage angibt "es wird keine Verzweigung vorgenommen",
so passiert nichts und die auf den Verzweigungsbefehl folgenden
Befehle werden ausgeführt. Wenn die Vorhersage "es wird eine
Verzweigung vorgenommen" angibt, so wird 5 zur Adresse des
Verzweigungsbefehls addiert, und der sich ergebende Wert wird im
nächsten Zyklus im Befehlszähler 12 der Befehlseinlesestufe IF
eingestellt.
Das Flag br_inv des Eintrags der Befehlswarteschlange 9, in dem der
Verzweigungsbefehl IR2 gespeichert ist, wird gesetzt. Das gibt an,
daß die Verzweigung vorhergesagt worden ist. Zu diesem Zweck sind
ein Verzweigungsadreßregister 85 und ein Flag-Schreibschaltkreis 86
gebildet. Das Verzweigungsadreßregister 85 speichert die Adresse
br_add eines Verzweigungsbefehls in der Warteschlange 13. Der
Schreibschaltkreis 86 setzt das Flag br_inv einer von der Adresse
br_add in der Warteschlange 13 angegebenen Adresse. In der
Warteschlange 13 wird ein gleichzeitiges Schreiben und Lesen von 4
Befehlen ausgeführt. Daher kann ein getrennter Schreibpfad zum
Setzen oder Schreiben nur des Flag br_inv zu einem Bit gebildet
sein. Ferner kann im Schreibschaltkreis 86 eine Struktur verwendet
werden, die auf der Basis der Adresse br_add nur ein entsprechendes
Flag gleich 1 setzt und gleichzeitig das Flag br_inv zu vier Bit
schreibt.
Wie oben beschrieben worden ist werden entsprechend dem
Verzweigungsvorhersageverfahren der dritten Ausführungsform die
Schritte (1) bis (3) ausgeführt. Nun wird die Ausführung von
Befehlen nach der Ausführung einer Verzweigungsvorhersage
beschrieben. Befehle, die nach der Ausführung einer
Verzweigungsvorhersage ausgeführt werden sollen, werden auf der
Basis der Vorhersage ausgeführt und erfordern daher verschiedene
Mechanismen.
Um anzugeben, daß der an eine Funktionseinheit auszugebende Befehl
ein Befehl nach einem Verzweigungsbefehl ist, der einer
Verzweigungsvorhersage unterworfen wurde, wird er mit einem Flag
inst_pred versehen, das anzeigt, daß es sich um einen Befehl unter
einer Verzweigungsvorhersage handelt, und das Flag wird vom
Befehlsdekoder 66 zu einer Signalleitung 98 übertragen. Das Flag
inst_pred gelangt zusammen mit dem Operationscode in die Pipeline
der Funktionseinheit. Der Befehlsdekoder 66 setzt ein Flag
ID_inst_pred für den Befehl nach einem Verzweigungsbefehl, wenn das
Flag on_pred gesetzt ist.
Ein Verzweigungsbefehl, der bereits einer Verzweigungsvorhersage
unterworfen wurde, darf nicht ausgeführt werden, selbst wenn er
erneut aus der Befehlswarteschlange 9 gelesen und im Befehlsregister
65 gespeichert worden ist, weil seine Ausführung bereits
abgeschlossen ist. Daher wird der Verzweigungsbefehl, der eine
Verzweigungsvorhersage durchlaufen hat, im Befehlsdekoder 66 als
"NOP-Befehl" betrachtet. Genauer gesagt wird der ausgelesene Befehl
mit gesetztem Flag br_inv als NOP-Befehl betrachtet.
Wenn die Gefährdung eines Verzweigungsbefehls, der bereits einer
Verzweigungsvorhersage unterworfen wurde, noch nicht verschwunden
ist, und ein Befehl (mit Large-Adresse) weiter nachfolgend auf
diesen Verzweigungsbefehl ausgegeben wird, wird der
Verzweigungsbefehl gesichert, so daß die Richtung der Verzweigung
später entschieden werden kann, wenn die Gefährdung des
Verzweigungsbefehls verschwindet. Daher wird der Verzweigungsbefehl
in einem Steuerschaltkreis 62 als Befehl br_save gespeichert. Der
Steuerschaltkreis 62 speichert den Verzweigungsbefehl, der einer
Verzweigungsvorhersage unterworfen wurde, und weist ferner eine
Funktion zum Testen und Bestimmen der Verzweigung wie im Fall des
Dekoders 66 auf. Wenn z. B. ein Verzweigungsbefehl anzeigt, daß eine
Verzweigung ausgeführt werden soll, wenn der Wert des Registers R5
im Registersatz 69 gleich 0 ist, speichert der Steuerschaltkreis 62
den Verzweigungsbefehl als Befehl br_save und überwacht den Wert des
Registers R5 im Registersatz 69. Ist der Wert des Registers R5
entschieden, testet der Steuerschaltkreis 62 den Verzweigungsbefehl
unter Verwendung des Wertes im Register R5.
Wenn die Gefährdung eines Verzweigungsbefehls unter der
Verzweigungsvorhersage verschwindet, kann eine Verzweigungsrichtung
entschieden werden. Es können verschiedene Steuerungen erfolgen, je
nachdem, ob die Verzweigungsrichtung mit der auf der Basis der
Vorhersage genommenen Richtung übereinstimmt.
In diesem Fall gibt der Befehlsdekoder 66 ein Signal pred_hit aus,
das angibt, daß die Verzweigungsvorhersage korrekt war. Das Flag
inst_pred der jeweiligen Pipeline-Stufen einer Funktionseinheit wird
gelöscht.
In diesem Fall gibt der Befehlsdekoder 66 ein Signal pred_mis an die
jeweilige Funktionseinheit aus, das anzeigt, daß die
Verzweigungsvorhersage inkorrekt war. In den jeweiligen Pipeline-
Stufen der Funktionseinheit wird ein Befehl mit gesetztem Flag
inst_pred ungültig gemacht. Genauer gesagt wird das Flag inst_avail
gelöscht. Das Löschen des Flags inst_avail verhindert ein Schreiben
in den Registersatz in einer Write-Back-Stufe WB durch einen Befehl.
Ferner wird bei einem Befehl zum Speichern von Daten in den
Datenspeicher die Operation zum Speichern Daten in den Datenspeicher
in der Speicherzugriffsstufe verhindert.
Den oben angeführten Prozeß in einem Logikausdruck zusammenfassend
werden die Verfügbarkeits-Flag-Ausgabe EXC_inst_avail_out und die
Ausgabe des Verzweigungsvorhersage-Ausführungs-Flag
EXC_pred_inst_out von der Ausführungsstufe EXC folgendermaßen
ausgedrückt:
EXC_inst_avail_out = (/EXC_inst_pred+EXC_inst_pred*
(pred_hit+/pred_hit*/Pred_mis))*EXC_inst_avail
EXC_inst_pred_out = EXC_inst_pred*/pred*/pred_hit
EXC_inst_pred_out = EXC_inst_pred*/pred*/pred_hit
Fig. 28 zeigt ein Logikdiagramm einer Schaltkreiskonfiguration, die
den oben angeführten Ausdruck implementiert. In Fig. 28 ist eine
Struktur zur Steuerung des Werts des jeweiligen Flag, wenn ein
Befehl von der Ausführungsstufe EXC zur Speicherzugriffsstufe MEM
übertragen wird, gezeigt. Der durch eine gestrichelte Linie
bezeichnete Block in dieser Ausführungsstufe EXC wird in der
Speicherzugriffsstufe MEM in ähnlicher Weise benutzt. In der
Struktur des jeweiligen Schaltkreises wird die Operation "+" im oben
angeführten Logikausdruck durch einen ODER-Schaltkreis, die
Operation "*" durch ein UND-Gatter und die Operation "/" durch einen
Inverter implementiert. Wie in Fig. 29 dargestellt ist, kann
anstelle der in Fig. 28 gezeigten Struktur eine Struktur benutzt
werden, bei der die Signale pred_mis und pred_hit der jeweiligen
Stufe gemeinsam zugeführt werden, und eine Rückstellung des Latch-
Schaltkreises in der jeweiligen Stufe (ungültig machen eines Flag)
ausgeführt wird.
Die Zeichen LA in Fig. 29 stellen einen Latch-Schaltkreis zum
Verriegeln eines Signals dar, das in Abhängigkeit von einem den
Pipeline-Betrieb taktenden Taktsignal angelegt wird.
Wenn eine Verzweigungsrichtung entschieden ist, wird das Flag
on_pred des Registers 63 (siehe Fig. 27) gelöscht. Das gibt den
Abschluß der Ausführung der Verzweigungsvorhersage an.
In der oben angeführten Beschreibung ist eine Verzweigungsvorhersage
für einen üblichen Verzweigungsbefehl betrachtet worden. Unter den
Verzweigungsbefehlen gibt es einen Befehl, der außerdem die Funktion
einer besonderen Operation mit der Bezeichnung Linkage (Verbindung)
aufweist. Ein solcher Befehl wird im folgenden mit jal bezeichnet.
Der jal-Befehl wird beschrieben als:
jal Ziel.
jal Ziel.
Der jal-Befehl stellt bedingungslos eine Verzweigungszieladresse
"Ziel" im Befehlszähler 63 ein und springt. Ferner schreibt er die
Adresse von sich selbst in ein angegebenes Register.
Der jal-Befehl weist neben der beschriebenen Funktion der Ausführung
einer Verzweigung eine Funktion zum erneuten Schreiben des Inhalts
eines Registers auf. Für den Fall einer Verzweigungsvorhersage wird
ein Befehl selbst ausgeführt, selbst wenn die Befehle, die dem
Befehl vorangehen, nicht ausgegeben werden können. Wenn der jal-
Befehl eine ähnliche Operation ausführt, wird ein erneutes Schreiben
des Inhalts eines Registers ausgeführt, weil die Ausführung der
vorherigen Befehle nicht abgeschlossen ist. Ein solches Ersetzen der
Reihenfolge beim erneuten Schreiben in das Register macht die
Verarbeitung von Unterbrechungen extrem schwierig. Daher wird im
Fall des jal-Befehls bei der Verzweigungsvorhersageausführung nur
ein erneutes Schreiben des Werts des Zeigers PC des Befehlszählers
62 ausgeführt. Eine Operation der Verbindung (Linkage) muß
ausgegeben werden, wenn alle Befehle, die dem Befehl jal vorangehen,
ausgegeben worden sind. Genauer gesagt kann der jal-Befehl eine
Verzweigung auf der Basis einer Verzweigungsvorhersage nehmen, wobei
aber die Verbindung zum Zeitpunkt der Verzweigungsausführung nicht
ausgeführt wird. Der jal-Befehl mit gesetztem Flag br_inv führt
keine Verzweigung aus, sondern löst die Operation einer Verbindung
aus, wenn eine Gefährdung verschwindet, wobei alle vorangegangenen
Befehle ausgegeben worden sind.
Nun folgt eine Beschreibung des Scoreboarding zur Implementierung
dieses Verfahrens zur Verzweigungsvorhersage. Betrachtet sei die
folgende Befehlsreihenfolge:
IR1: R1 ← M (R2)
IR2: R3 ← R1 + R4
IR2: R3 ← R1 + R4
Der Befehl IR1 greift auf den Datenspeicher zu unter Verwendung des
Inhalts von Register R2 als Adresse und speichert die Daten des
angesprochenen Datenspeichers im Register R1. Der Befehl IR2 addiert
die Inhalte von Register R1 und Register R4 und schreibt das
Additionsergebnis in Register R3. Der zweite Befehl IR2 benutzt das
Ergebnis R1 des ersten Befehls IR1. Daher kann der zweite Befehl IR2
nicht ausgegeben werden, bis die Leseoperation des Datenspeichers
durch den ersten Befehl IR1 abgeschlossen ist. Daher ist ein
Mechanismus notwendig, um anzugeben, daß der Inhalt des
Befehlsregisters R1 nicht bestimmt ist, und um eine Steuerung
auszuführen, damit andere Befehle daran gehindert werden, das
Register R1 in inkorrekter Weise zu benutzen.
Wenn der Registersatz 69 aus 32 Worten besteht, wird für jedes Wort
ein Flag gebildet. Wenn das Flag gesetzt ist, gibt es an, daß der
Inhalt des entsprechenden Registers nicht bestimmt ist. Dieses Flag
wird als Scoreboard bezeichnet. Das Scoreboard wird durch
RF_lkf<31:0< ausgedrückt.
Für den Fall der oben angeführten Befehle IR1 und IR2 hat der erste
Befehl IR1 die Aufgabe, den Inhalt des Registers R1 neu zu
schreiben, wenn der Befehl ausgegeben wird. Gleichzeitig wird das 1-
Bit-Flag RF_lkf<1< gesetzt. Wenn Daten aus dem Datenspeicher gelesen
werden, wird das Flag RF_lkf<1< gelöscht.
Zusätzlich zum Flag RF_lkf ist bei der gegenwärtigen Ausführungsform
ein Flag RF_lkf<31:0< gebildet, das angibt, daß der Befehl, der das
Flag des Scoreboard gesetzt hat, das jedem der Register entspricht,
einen Befehl darstellt, der eine Verzweigungsvorhersage erfährt.
Im folgenden wird angenommen, daß der einzige Befehl, der zur
Ausführung eine Steuerung zum Warten unter Verwendung des Scoreboard
(in Fig. 27 durch das Bezugszeichen 101 gekennzeichnet) benötigt, um
den Registerinhalt zu entscheiden, nur ein "Load Memory"
(Speicherwert laden) ist, der auf den Datenspeicher zugreift. In
diesem Fall werden im Scoreboard-Schaltkreis 101 die Bits des Flag
RF_lkf entsprechend dem Schreibregister gesetzt, wenn ein Ladebefehl
ausgegeben wird. Wenn die Ausgabe des Ladebefehls nach einer
Verzweigungsvorhersage (Flag on_pred ist gesetzt) ausgeführt wird,
wird das Flag RF_lkf_pred entsprechend dem zu schreibenden Register
gesetzt.
Wenn sich herausstellt, daß die Verzweigungsvorhersage inkorrekt
ist, löscht das Flag RF_lkf_pred das Flag RF_lkf entsprechend dem
gesetzten Bit. Darüber hinaus wird das Flag RF_lkf_pred für jedes
Register gelöscht.
Nun folgt die Beschreibung eines Logikschaltkreis des Scoreboard-Steuerschaltkreises
101 zur Steuerung des Scoreboards. Der
Befehlsdekoder 66 aktiviert ein Signal issue_load, wenn er einen
Ladebefehl ausgibt. Die Speicherzugriffsstufe MEM der Lade/Speichereinheit
aktiviert ein Signal MEM_load, wenn es Daten aus
einem Daten-Cache (Datenspeicher) lesen kann. Jedes der Bits des
Scoreboards RF_lkf weist ein Schreibaktivierungssignal
RF_lkf_we<31:0< auf. Das Schreiben in ein Register findet nur dann
statt, wenn das Schreibaktivierungssignal aktiv ist. In ähnlicher
Weise ist das Schreibaktivierungssignal RF_lkf_pred_we<31:0< für das
Flag RF_lkf_pred gebildet. Wenn das Signal RF_lkf_pred_reset
aktiviert wird, werden darüber hinaus alle Flags des Scoreboards
RF_lkf_pred für die Vorhersage gesetzt.
Bei der oben beschriebenen Logik kann die Steuerung des Scoreboard
RF_lkf und RF_lkf pred durch eine Wahrheitstafel ausgedrückt werden,
die in Fig. 30 gezeigt ist. Wenn man die in Fig. 30 gezeigte
Wahrheitstafel durch einen Logikschaltkreis ausdrückt, erhält man
die in Fig. 31 dargestellte Schaltkreiskonfiguration. Bei der in
Fig. 31 gezeigten Konfiguration ist nur ein Steuerabschnitt
entsprechend einem Registersatz gezeigt. Ein Dekoder 140 dekodiert
ein Schreibregistersignal (5 Bit) und wählt eine der
Ausgangssignalleitungen aus (zusammen 32 Ausgangssignalleitungen
sind für die Schreibregister gebildet). Das logische Produkt des
Ausgangssignals des Dekoders 140 und des Signals issue_load wird
erzeugt. Daten werden in Abhängigkeit von den
Schreibaktivierungssignalen RF_lkf_we(i) bzw. RF_lkf_pred_we<i< in
die Register 141 und 142 geschrieben. Die Ausgangssignale der
Register 141 und 142 werden zum Befehlsdekoder 66 übertragen.
In Fig. 32 ist eine Funktionsstruktur des Befehlsdekoders 66
gezeigt. Wie in Fig. 32 dargestellt ist, dekodiert der
Befehlsdekoderschaltkreis 160 vier Befehle, nämlich die Befehle #1-
#4, und gibt einen Operationscode ID_code aus. Ein
Ausgabeanalyseabschnitt 161 empfängt diese Befehle #1-#4 und ein
Flag br_inv, analysiert, ob die Befehle ausgebbar sind und gibt ein
Ausgabe-Flag ID_inst_avail aus.
Ein Verzweigungsverarbeitungsabschnitt 164 empfängt die Befehle #1-
#4, erfaßt einen Verzweigungsbefehl und führt den Verzweigungsbefehl
aus. Wenn der Verzweigungsbefehl nicht in einem Zyklus ausgeführt
werden kann, gibt der Verzweigungsverarbeitungsabschnitt 164 ein
Flag pr_ex aus, das angibt, daß eine Verzweigungsvorhersage abläuft.
Der Verzweigungsverarbeitungsabschnitt 164 erzeugt ferner Signale
Taken und Not Taken, die das Vorhandensein bzw. Nicht-Vorhandensein
einer Verzweigung anzeigen, wenn die Ausführung des
Verzweigungsbefehls abgeschlossen ist.
Ein Register 163 empfängt das Signal pr_ex vom
Verzweigungsverarbeitungsabschnitt 164 und speichert es als Flag
on_pred ab.
Ein Vorhersage-Flag-Erzeugungsschaltkreis 162 empfängt das Flag
br_inv, die Signale Taken und Not Taken und das Flag on_pred vom
Verzweigungsverarbeitungsabschnitt 164 und erzeugt ein Vorhersage
Flag ID_inst_pred. Die Signale Taken und Not Taken vom
Verzweigungsverarbeitungsabschnitt 164 werden dem
Ausgabeanalyseabschnitt 161 zugeführt. Der Betrieb der jeweiligen
Schaltkreise stimmt mit dem Betrieb beim oben angeführten
Signalerzeugungsverfahren überein und die Beschreibung wird nicht
wiederholt.
Obwohl bei der oben angeführten Ausführungsform die Anzahl der auf
einmal einzulesenden Befehle und die Anzahl der auf einmal zu
analysierenden Befehle gleich vier ist, ist die Anzahl der Befehle
nicht auf vier beschränkt, sondern kann andere Zahlen annehmen.
Die Besonderheiten des ersten Aspekts der vorliegenden Erfindung
können folgendermaßen zusammengefaßt werden.
- 1) Unter einer Mehrzahl von Befehlen, die einen Verzweigungsbefehl enthalten, bilden die Befehle beginnend mit dem Befehl, der sich eine Adresse hinter dem Verzweigungsbefehl befindet, bis zum Befehl, der als letztes in den Zyklen eingelesen wird, die notwendig sind, um den Verzweigungsbefehl einzulesen und auszuführen, einen Verzweigungsverzögerungs-Slot.
- 2) Der Verzweigungsverzögerungs-Slot wird mit Befehlen beginnend mit einem Befehl einer Verzweigungszieladresse, der ausgeführt wird, wenn eine Verzweigung aufgrund eines Verzweigungsbefehls, der zum Verzweigungsverzögerungs-Slot gehört auftritt, bis zu einem Befehl Verzweigungsbefehl aufgefüllt.
- 3) Im Zyklus, in dem Befehle aus einem Befehlsspeicher voreingelesen und in einem Warteschlangenspeicher gespeichert werden, und in dem ein Verzweigungsbefehl ausgeführt wird, wird bestimmt, ob der Verzweigungsverzögerungs-Slot des Verzweigungsbefehls bereits im Warteschlangenspeicher gespeichert worden ist. Auf der Basis des Bestimmungsergebnisses werden die Schreibadressen und die Leseadressen des Warteschlangenspeichers und auf der Basis der Information, ob eine Verzweigung aufgetreten ist, die aus dem Ergebnis der Ausführung des Verzweigungsbefehls erhalten wird, werden die Schreibadressen und die Leseadressen des Warteschlangenspeichers gesteuert.
- 4) Wenn ein Verzweigungsbefehl ausgeführt wird, und entschieden ist, daß als Ergebnis eine Verzweigung auftritt, wird die Schreibadresse der Warteschlange gleich einer Adresse gesetzt, die durch Addition der Anzahl der eingelesenen Befehle zum aktuellen Wert erzeugt wird, wenn alle Befehle im Verzweigungsverzögerungs- Slot des Verzweigungsbefehls noch nicht im Warteschlangenspeicher gespeichert worden sind.
- 5) Wenn ein Verzweigungsbefehl ausgeführt wird, und entschieden ist, daß als Ergebnis eine Verzweigung auftritt, wird die Schreibadresse der Warteschlange gleich einer Adresse gesetzt, die unmittelbar auf die Warteschlangenadresse folgt, in der der Befehl der letzten Adresse des Verzweigungsverzögerungs-Slot gespeichert ist, wenn alle Befehle im Verzweigungsverzögerungs-Slot des Verzweigungsbefehls im Warteschlangenspeicher gespeichert worden sind.
- 6) Wenn ein Verzweigungsbefehl ausgeführt wird, und entschieden ist, daß als Ergebnis eine Verzweigung auftritt, wird die Leseadresse des Warteschlangenspeichers um die Anzahl der Befehle erhöht, die an Funktionseinheiten ausgegeben werden.
- 7) Wenn ein Verzweigungsbefehl ausgeführt wird, und entschieden ist, daß als Ergebnis keine Verzweigung auftritt, wird die Ausgabe des Befehls nach dem Verzweigungsbefehl, der an die Funktionseinheit ausgegeben werden soll, gestoppt.
- 8) Wenn ein Verzweigungsbefehl ausgeführt wird, und entschieden ist, daß als Ergebnis eine Verzweigung auftritt, wird die Leseadresse des Warteschlangenspeichers gleich einer Adresse unmittelbar nach der Adresse des Warteschlangenspeichers gesetzt, an der der Befehl der letzten Adresse des Verzweigungsverzögerungs-Slot gespeichert ist oder gespeichert werden soll.
- 9) Wenn ein Verzweigungsbefehl ausgeführt wird, und entschieden ist, daß als Ergebnis eine Verzweigung auftritt, wird die Ausgabe eines Befehls gestoppt, bis alle Befehle des Verzweigungsverzögerungs-Slot gespeichert worden sind, wenn alle Befehle des Verzweigungsverzögerungs-Slot des Verzweigungsbefehls noch nicht im Warteschlangenspeicher gespeichert worden sind.
Die Besonderheiten des zweiten Aspekts der vorliegenden Erfindung
können folgendermaßen zusammengefaßt werden.
- 1) Eine Mehrzahl von Befehlen wird aus einem Befehlsspeicher voreingelesen, und es ist ein Warteschlangenspeicher zum Sp 04136 00070 552 001000280000000200012000285910402500040 0002004222776 00004 04017eichern der voreingelesenen Befehle gebildet. Der Warteschlangenspeicher weist eine Mehrzahl von Einträgen auf, in denen jeweils ein Befehl gespeichert wird. Der Eintrag weist ein Feld auf, das angibt, daß der gespeicherte Befehl bereits auf der Basis einer Verzweigungsvorhersage ausgeführt worden ist.
- 2) Auf der Basis des Werts des Feldes, das die Ausführung auf der Basis der Vorhersage angibt, erfolgt eine Steuerung, so daß der im entsprechenden Eintrag gespeicherte Befehl nicht ausgeführt wird.
- 3) Ein Befehl, durch den die Speicherung einer Rückkehradresse im Register eines Registersatzes und die Verzweigung gleichzeitig ausgeführt werden, wird auf der Basis einer Verzweigungsvorhersage ausgeführt, wobei nur die Verzweigung ausgeführt wird, und die Speicherung der Rückkehradresse im Register ausgeführt wird, wenn der Befehl ausführbar wird.
- 4) Befehle jeweils in einer Funktionseinheit (einer Pipeline) weisen ein erstes Flag (inst_pred), das anzeigt, daß der Befehl in einem Zeitraum ausgelöst worden ist, bevor entschieden ist, ob die Vorhersage korrekt ist oder nicht, nachdem eine Verzweigungsvorhersage ausgeführt worden ist, und ein zweites Flag (inst_avail), das anzeigt, daß der Befehl verfügbar ist, auf. Wenn sich die Verzweigungsvorhersage als korrekt erweist, wird das erste Flag (inst_pred) gelöscht, während das zweite Flag eines Befehls mit gesetztem ersten Flag gelöscht wird, wenn sich die Vorhersage als inkorrekt herausstellt, und auch das erste Flag gelöscht wird.
- 5) Ein Registersatz (ein Vielzweckregister) weist ein drittes Flag (RF_lkf), das anzeigt, daß ein Schreiben in das Register Stattfindet, und ein viertes Flag (RF_lkf_pred) auf, das anzeigt, daß der Befehl, der das Flag steuert, in der Zeitspanne nach einer Verzweigungsvorhersage und bevor entschieden ist, ob die Vorhersage korrekt ist oder nicht, ausgegeben worden ist. Ist die Vorhersage korrekt, werden die vierten Flags aller Vielzweckregister zurückgesetzt. Wenn sich die Vorhersage als inkorrekt herausstellt, wird das dritte Flag des Registers, dessen viertes Flag gesetzt ist, gelöscht.
In Übereinstimmung mit der Erfindung kann eine
Leistungsverschlechterung aufgrund der Ausführung eines
Verzweigungsbefehls unabhängig davon verhindert werden, ob eine
Verzweigung auftritt oder nicht, wenn ein Verzweigungsverzögerungs-
Slot, der einem Verzweigungsbefehl zugeordnet ist, mit den Befehlen
auf der Seite der Verzweigung gefüllt wird.
Darüber hinaus werden Befehle aus einem Befehlsspeicher
voreingelesen und in einem Warteschlangenspeicher gespeichert. Ein
Schreibzeiger und ein Lesezeiger in die Warteschlange werden stets
so gesteuert, daß in einer Pipeline keine leere Stufe erzeugt wird,
wenn ein Verzweigungsbefehl ausgeführt wird. Eine
Leistungsverschlechterung aufgrund einer Ausführung des
Verzweigungsbefehls kann dadurch effizient und sicher verhindert
werden.
Darüber hinaus verhindert in einer Struktur, bei der Befehle nicht
voreingelesen werden, das Auffüllen eines Verzweigungsverzögerungs-
Slot mit Befehlen der Verzweigungszielseite eine
Leistungsverschlechterung durch einen Verzweigungsbefehl, wenn vom
Verzweigungsbefehl eine Verzweigung ausgeführt wird.
Entsprechend der vorliegenden Erfindung wird ein Verzweigungsbefehl
auf der Basis einer Verzweigungsvorhersage ausgeführt, bevor eine
Gefährdung verschwindet. Im Fall einer Verzweigung ist daher der
Zyklus, der herkömmlicherweise notwendig ist, um auf das Einlaufen
eines Verzweigungszielbefehls aus einem Befehls-Cache zu warten,
hier unnötig. Ein Zielbefehl wird auf der Basis einer Vorhersage
vorher eingelesen und der Zyklus zum Warten auf den Zielbefehl vom
Befehls-Cache ist nicht mehr notwendig, wodurch in der Pipeline
keine leeren Stufen erzeugt werden. Damit kann die
Leistungsverschlechterung einer Parallelverarbeitungseinheit
aufgrund eines Verzweigungsbefehls verhindert werden.
Claims (22)
1. Parallelverarbeitungseinheit mit einem Befehlsspeicher (1) zum
Speichern von Befehlen und einer Mehrzahl von Funktionseinheiten
(4a, 4b, 6, 7), die parallel betreibbar sind, zum Ausführen von
Befehlen, aufweisend
eine Einleseeinrichtung (2), die von einer Adresse abhängig ist, zum Einlesen einer Mehrzahl von Befehlen auf einmal aus dem Befehlsspeicher,
eine Erfassungseinrichtung (3, 10) zum Erfassen eines Verzweigungsbefehls unter den eingelesenen Befehlen, und eine Bildungseinrichtung (9, 11, 12, 54), die von der Erfassungseinrichtung abhängig ist, zum Bilden eines Verzweigungsverzögerungs-Slot, der alle Befehle enthält, die während eines Zeitraums vom Einlesen des Verzweigungsbefehls bis zur Ausführung des Verzweigungsbefehls eingelesen werden, wobei die Befehle im Verzweigungsverzögerungs-Slot in der Befehlssequenz auf den Verzweigungsbefehl folgen.
eine Einleseeinrichtung (2), die von einer Adresse abhängig ist, zum Einlesen einer Mehrzahl von Befehlen auf einmal aus dem Befehlsspeicher,
eine Erfassungseinrichtung (3, 10) zum Erfassen eines Verzweigungsbefehls unter den eingelesenen Befehlen, und eine Bildungseinrichtung (9, 11, 12, 54), die von der Erfassungseinrichtung abhängig ist, zum Bilden eines Verzweigungsverzögerungs-Slot, der alle Befehle enthält, die während eines Zeitraums vom Einlesen des Verzweigungsbefehls bis zur Ausführung des Verzweigungsbefehls eingelesen werden, wobei die Befehle im Verzweigungsverzögerungs-Slot in der Befehlssequenz auf den Verzweigungsbefehl folgen.
2. Parallelverarbeitungseinheit nach Anspruch 1, dadurch
gekennzeichnet, daß
der Verzweigungsverzögerungs-Slot nur Befehle enthält, die
ausgeführt werden, wenn durch den Verzweigungsbefehl eine
Verzweigung ausgeführt wird.
3. Parallelverarbeitungseinheit nach Anspruch 1, dadurch
gekennzeichnet, daß
die Bildungseinrichtung (9, 12) eine Speichereinheit (13) aufweist,
die eine Mehrzahl von Speicherblöcken zum sequentiellen Speichern
von parallel aus dem Befehlsspeicher eingelesenen Befehlen umfaßt,
wobei der Verzweigungsverzögerungs-Slot Befehle enthält, die im
selben Block wie der Verzweigungsbefehl und in einem Block, der
diesem Block in Ausführungsrichtung benachbart ist, gespeichert
sind.
4. Parallelverarbeitungseinheit nach Anspruch 3, dadurch
gekennzeichnet, daß
ein Block der Speichereinheit Befehle speichert, die der Anzahl nach
der Mehrzahl von Befehlen gleich sind, die aus dem Befehlsspeicher
auf einmal eingelesen werden.
5. Parallelverarbeitungseinheit nach Anspruch 1, dadurch
gekennzeichnet, daß
der Verzweigungsverzögerungs-Slot Befehle derjenigen Befehle von
einem Befehl an einer Verzweigungszieladresse, der ausgeführt wird,
wenn durch den Verzweigungsbefehl eine Verzweigung erfolgt, bis zu
einem Befehl unmittelbar vor einem nächsten Verzweigungsbefehl in
einer Befehlsfolge, enthält.
6. Parallelverarbeitungseinheit nach Anspruch 1, dadurch
gekennzeichnet, daß
die Bildungseinrichtung (9, 12)
eine Speichereinrichtung (13) zum Speichern von Befehlen, die aus dem Befehlsspeicher eingelesen werden,
eine Schreibzeigereinrichtung (15) zum Erzeugen eines Schreibzeigers, der eine Adresse der Speichereinheit anzeigt, an der die eingelesenen Befehle gespeichert werden,
eine Lesezeigereinrichtung (14) zum Erzeugen eines Lesezeigers, der eine Adresse der Speichereinheit anzeigt, an der Befehle ausgelesen werden,
eine Bestimmungseinrichtung (12), die von der Erfassungseinrichtung (10) abhängig ist, zum Bestimmen, ob ein Verzweigungsverzögerungs- Slot für den Verzweigungsbefehl bereits in der Speichereinheit gespeichert worden ist,
eine Entscheidungseinrichtung (11) zum Entscheiden, ob durch den Verzweigungsbefehl eine Verzweigung erfolgt, und
eine Steuereinrichtung (12), die vom Schreibzeiger, Lesezeiger, der Bestimmungseinrichtung und der Entscheidungseinrichtung abhängig ist, zum Steuern des Schreibzeigers der Schreibzeigereinrichtung und des Lesezeigers der Lesezeigereinrichtung, aufweist.
die Bildungseinrichtung (9, 12)
eine Speichereinrichtung (13) zum Speichern von Befehlen, die aus dem Befehlsspeicher eingelesen werden,
eine Schreibzeigereinrichtung (15) zum Erzeugen eines Schreibzeigers, der eine Adresse der Speichereinheit anzeigt, an der die eingelesenen Befehle gespeichert werden,
eine Lesezeigereinrichtung (14) zum Erzeugen eines Lesezeigers, der eine Adresse der Speichereinheit anzeigt, an der Befehle ausgelesen werden,
eine Bestimmungseinrichtung (12), die von der Erfassungseinrichtung (10) abhängig ist, zum Bestimmen, ob ein Verzweigungsverzögerungs- Slot für den Verzweigungsbefehl bereits in der Speichereinheit gespeichert worden ist,
eine Entscheidungseinrichtung (11) zum Entscheiden, ob durch den Verzweigungsbefehl eine Verzweigung erfolgt, und
eine Steuereinrichtung (12), die vom Schreibzeiger, Lesezeiger, der Bestimmungseinrichtung und der Entscheidungseinrichtung abhängig ist, zum Steuern des Schreibzeigers der Schreibzeigereinrichtung und des Lesezeigers der Lesezeigereinrichtung, aufweist.
7. Parallelverarbeitungseinheit nach Anspruch 6, dadurch
gekennzeichnet, daß
die Steuereinrichtung (12) eine Einrichtung (17a) aufweist zum
Einstellen des Schreibzeigers auf einen Wert gleich der Summe des
aktuellen Wertes des Schreibzeigers und der Anzahl der aus dem
Befehlsspeicher eingelesenen Befehle, wenn die
Bestimmungseinrichtung ermittelt, daß der Verzweigungsverzögerungs-
Slot für den Verzweigungsbefehl noch nicht mit Befehlen aufgefüllt
worden ist, die auf den Verzweigungsbefehl folgen, und wenn die
Entscheidungseinrichtung entscheidet, daß eine Verzweigung erfolgt.
8. Parallelverarbeitungseinheit nach Anspruch 6 oder 7, dadurch
gekennzeichnet, daß
die Steuereinrichtung (12) eine Einrichtung (17a) aufweist zum
Einstellen des Schreibzeigers auf den Wert der Adresse, die
unmittelbar auf die letzte Adresse des Verzweigungsverzögerungs-Slot
folgt, wenn die Bestimmungseinrichtung ermittelt, daß der
Verzweigungsverzögerungs-Slot für den Verzweigungsbefehl mit
Befehlen aufgefüllt worden ist, die auf den Verzweigungsbefehl
folgen, und wenn die Entscheidungseinrichtung entscheidet, daß eine
Verzweigung erfolgt.
9. Parallelverarbeitungseinheit nach einem der Ansprüche 6 bis 8,
dadurch gekennzeichnet, daß
die Steuereinrichtung (12) eine Einrichtung (17b) aufweist zum
Einstellen des Lesezeigers auf einen Wert, der um die Anzahl der
Befehle erhöht ist, die an Funktionseinheiten der Mehrzahl von
Funktionseinheiten übergeben worden sind, wenn die
Entscheidungseinrichtung entscheidet, daß die Verzweigung erfolgt.
10. Parallelverarbeitungseinheit nach einem der Ansprüche 6 bis 9,
dadurch gekennzeichnet, daß
die Steuereinrichtung (12) eine Einrichtung (22) aufweist zum
Stoppen der Übergabe von Befehlen, die auf den Verzweigungsbefehl
folgen, wenn die Entscheidungseinrichtung entscheidet, daß durch den
Verzweigungsbefehl keine Verzweigung erfolgt.
11. Parallelverarbeitungseinheit nach einem der Ansprüche 6 bis 10,
dadurch gekennzeichnet, daß
die Steuereinrichtung (12) eine Einrichtung (17b) aufweist zum
Einstellen des Lesezeigers auf den Wert einer Adresse nach der
letzten Adresse des Verzweigungsverzögerungs-Slot, wenn die
Entscheidungseinrichtung entscheidet, daß keine Verzweigung erfolgt.
12. Parallelverarbeitungseinheit nach einem der Ansprüche 6 bis 11,
dadurch gekennzeichnet, daß
die Steuereinrichtung (12) eine Einrichtung (22) aufweist zum
Stoppen der Übergabe von Befehlen an eine Funktionseinheit, wenn die
Bestimmungseinrichtung entscheidet, daß nicht alle Befehle für den
Verzweigungsverzögerungs-Slot in der Speichereinheit gespeichert
sind, wenn die Entscheidungseinrichtung entscheidet, daß durch den
Verzweigungsbefehl keine Verzweigung erfolgt.
13. Parallelverarbeitungseinheit nach Anspruch 1, dadurch
gekennzeichnet, daß
die Bildungseinrichtung (9, 11, 12) eine Speichereinrichtung (13)
aufweist, zum Bilden einer Warteschlange für die Befehle, die aus
dem Befehlsspeicher eingelesen werden.
14. Parallelverarbeitungseinheit nach Anspruch 6, dadurch
gekennzeichnet, daß
die Speichereinrichtung (9) einen Warteschlangenspeicher (13)
aufweist.
15. Parallelverarbeitungseinheit nach Anspruch 1, dadurch
gekennzeichnet, daß
die Bildungseinrichtung (9, 11, 12, 54) eine Mehrzahl von
Befehlsregistern (54) aufweist zum parallelen Speichern der Mehrzahl
von Befehlen, die aus dem Befehlsspeicher eingelesen werden.
16. Parallelverarbeitungseinheit nach Anspruch 15, dadurch
gekennzeichnet, daß
der Verzweigungsverzögerungs-Slot durch Befehle, die gleichzeitig
mit und nach dem Verzweigungsbefehl eingelesen werden, und durch
Befehle, die auf einmal unmittelbar anschließend aus dem
Befehlsspeicher gelesen und in der Mehrzahl von Befehlsregistern
gespeichert werden, gebildet wird.
17. Parallelverarbeitungseinheit mit einer Mehrzahl von
Funktionseinheiten, die parallel betreibbar sind, zum Ausführen von
Befehlen, und einem Befehlsspeicher zum Speichern von Befehlen,
aufweisend,
eine Speichereinrichtung (9) zum Speichern von Befehlen, die aus dem Befehlsspeicher eingelesen werden, wobei die Speichereinrichtung eine Mehrzahl von Einträgen aufweist und jeder der Einträge ein erstes Feld für einen Befehl und ein zweites Feld zum Speichern eines Flag, das anzeigt, daß der zugehörige Befehl unter einer Verzweigungsvorhersage ausgeführt wird, umfaßt,
eine Vorhersageeinrichtung (66) zum Erfassen eines Verzweigungsbefehls unter den Befehlen, die aus der Speichereinrichtung ausgelesen worden sind, und zum Vorhersagen, ob vom Verzweigungsbefehl eine Verzweigung ausgeführt wird,
eine Einstelleinrichtung (85, 86), die von der Vorhersageeinrichtung abhängig ist, zum Einstellen des Werts eines Flag im zweiten Feld, und
eine Steuereinrichtung (Gatter in Fig. 28), die vom Wert des Flag abhängig ist, zum Steuern der Ausführung oder Nicht-Ausführung eines zugehörigen Befehls.
eine Speichereinrichtung (9) zum Speichern von Befehlen, die aus dem Befehlsspeicher eingelesen werden, wobei die Speichereinrichtung eine Mehrzahl von Einträgen aufweist und jeder der Einträge ein erstes Feld für einen Befehl und ein zweites Feld zum Speichern eines Flag, das anzeigt, daß der zugehörige Befehl unter einer Verzweigungsvorhersage ausgeführt wird, umfaßt,
eine Vorhersageeinrichtung (66) zum Erfassen eines Verzweigungsbefehls unter den Befehlen, die aus der Speichereinrichtung ausgelesen worden sind, und zum Vorhersagen, ob vom Verzweigungsbefehl eine Verzweigung ausgeführt wird,
eine Einstelleinrichtung (85, 86), die von der Vorhersageeinrichtung abhängig ist, zum Einstellen des Werts eines Flag im zweiten Feld, und
eine Steuereinrichtung (Gatter in Fig. 28), die vom Wert des Flag abhängig ist, zum Steuern der Ausführung oder Nicht-Ausführung eines zugehörigen Befehls.
18. Parallelverarbeitungseinheit nach Anspruch 17, dadurch
gekennzeichnet, daß
die Steuereinrichtung (Gatter in Fig. 28) eine Einrichtung aufweist,
zum Verhindern der Ausführung eines Befehls, wenn das zugehörige
Flag anzeigt, daß der Befehl entsprechend einer von der
Vorhersageeinrichtung vorhergesagten Verzweigung ausgeführt wird.
19. Parallelverarbeitungseinheit nach Anspruch 17, gekennzeichnet
durch
einen Registersatz (69) mit einer Mehrzahl von Registern, wobei die
Steuereinrichtung eine Einrichtung (100, 101) aufweist zum Speichern
einer Rückkehradresse in einem Register des Registersatzes, wenn der
Verzweigungsbefehl tatsächlich ausgeführt werden kann, falls der
Verzweigungsbefehl einen Befehl zum Speichern der Rückkehradresse im
Register aufweist, die notwendig ist, um von einer ausgeführten
Verzweigung zurückzukehren.
20. Parallelverarbeitungseinheit nach Anspruch 17, dadurch
gekennzeichnet, daß
die Steuereinrichtung eine Ausgabeeinrichtung (160), die eine Mehrzahl von Befehlen aus dem Befehlsspeicher empfängt, gleichzeitig ausführbare Befehle unter den empfangenen Befehlen erfaßt, und die gleichseitig ausführbaren Befehle an zugehörige Funktionseinheiten ausgibt,
eine Vorhersageverifizierungseinrichtung (164) zum Ausführen des Verzweigungsbefehls und zum Bestimmen, ob die Vorhersage der Verzweigung korrekt ist,
eine erste Flag-Erzeugungseinrichtung (162, 163), die von der Vorhersageeinrichtung und der Vorhersageverifizierungseinrichtung abhängig ist, zum Erzeugen eines zweiten Flag für jeden Befehl, das angibt, daß der zugehörige Befehl in einer Zeitspanne an eine zugehörige Funktionseinheit ausgegeben werden soll, nachdem die Vorhersage einer Verzweigung erfolgt, bevor die Bestimmung durch die Vorhersageverifizierungseinrichtung gemacht wird,
eine zweite Flag-Erzeugungseinrichtung (161) zum Erzeugen eines dritten Flag für jeden Befehl, das anzeigt, daß der zugehörige Befehl gültig in einer Funktionseinheit ausgeführt werden kann, wobei das zweite und dritte Flag und der zugehörige Befehl an eine zugehörige Funktionseinheit in Form einer Verbindung ausgegeben werden, und
die Flag-Steuereinrichtung (164), die von der Vorhersageverifizierungseinrichtung abhängig ist, zum Steuern des Werts des zweiten und dritten Flags, die an die Funktionseinheit ausgegeben werden, wobei die Flag-Steuereinrichtung nur das zweite Flag löscht, wenn die Vorhersageverifizierungseinrichtung anzeigt, daß die Vorhersage einer Verzweigung korrekt ist, während die Flag- Steuereinrichtung sowohl das zweite als auch das dritte Flag löscht, wenn ein Befehl ein gesetztes zweites Flag aufweist und die Vorhersageverifizierungseinrichtung angibt, daß die Vorhersage inkorrekt war, aufweist.
die Steuereinrichtung eine Ausgabeeinrichtung (160), die eine Mehrzahl von Befehlen aus dem Befehlsspeicher empfängt, gleichzeitig ausführbare Befehle unter den empfangenen Befehlen erfaßt, und die gleichseitig ausführbaren Befehle an zugehörige Funktionseinheiten ausgibt,
eine Vorhersageverifizierungseinrichtung (164) zum Ausführen des Verzweigungsbefehls und zum Bestimmen, ob die Vorhersage der Verzweigung korrekt ist,
eine erste Flag-Erzeugungseinrichtung (162, 163), die von der Vorhersageeinrichtung und der Vorhersageverifizierungseinrichtung abhängig ist, zum Erzeugen eines zweiten Flag für jeden Befehl, das angibt, daß der zugehörige Befehl in einer Zeitspanne an eine zugehörige Funktionseinheit ausgegeben werden soll, nachdem die Vorhersage einer Verzweigung erfolgt, bevor die Bestimmung durch die Vorhersageverifizierungseinrichtung gemacht wird,
eine zweite Flag-Erzeugungseinrichtung (161) zum Erzeugen eines dritten Flag für jeden Befehl, das anzeigt, daß der zugehörige Befehl gültig in einer Funktionseinheit ausgeführt werden kann, wobei das zweite und dritte Flag und der zugehörige Befehl an eine zugehörige Funktionseinheit in Form einer Verbindung ausgegeben werden, und
die Flag-Steuereinrichtung (164), die von der Vorhersageverifizierungseinrichtung abhängig ist, zum Steuern des Werts des zweiten und dritten Flags, die an die Funktionseinheit ausgegeben werden, wobei die Flag-Steuereinrichtung nur das zweite Flag löscht, wenn die Vorhersageverifizierungseinrichtung anzeigt, daß die Vorhersage einer Verzweigung korrekt ist, während die Flag- Steuereinrichtung sowohl das zweite als auch das dritte Flag löscht, wenn ein Befehl ein gesetztes zweites Flag aufweist und die Vorhersageverifizierungseinrichtung angibt, daß die Vorhersage inkorrekt war, aufweist.
21. Parallelverarbeitungseinheit nach Anspruch 17, gekennzeichnet
durch
einen Registersatz (69) mit einer Mehrzahl von Registern, wobei die Steuereinrichtung
eine Erfassungseinrichtung (66, 160) zum Erfassen eines Befehls, der das Schreiben von Daten in ein Register des Registersatzes erfordert,
eine erste Flag-Speichereinrichtung (141), die für jedes der Register gebildet und von der Erfassungseinrichtung abhängig ist, zum Speichern eines ersten Flag, das anzeigt, daß das zugehörige Register einem Datenschreiben unterworfen wird,
eine zweite Flag-Speichereinrichtung (142), die für jedes der Register gebildet und von der Vorhersageeinrichtung abhängig ist, zum Speichern eines zweiten Flag, das anzeigt, daß der Befehl, der ein Schreiben von Daten erfordert, ein Befehl ist, der nach der Vorhersage einer Verzweigung und bevor die Vorhersage als korrekt oder inkorrekt bestimmt wird, ausgegeben wird, und
eine Flag-Steuereinrichtung (Gatter in Fig. 31), die von der Erfassungseinrichtung und der Vorhersageeinrichtung abhängig ist, zum Steuern des zweiten und dritten Flag, wobei die Flag- Steuereinrichtung alle dritten Flags löscht, wenn die Vorhersage als inkorrekt bestimmt wird, während die Flag-Steuereinrichtung das zweite Flag für ein Register löscht, dessen drittes Flag aktiv ist, wenn die Vorhersage als inkorrekt bestimmt wird und ein aktives drittes Flag anzeigt, daß der Inhalt des zugehörigen Registers nicht verfügbar ist, aufweist.
einen Registersatz (69) mit einer Mehrzahl von Registern, wobei die Steuereinrichtung
eine Erfassungseinrichtung (66, 160) zum Erfassen eines Befehls, der das Schreiben von Daten in ein Register des Registersatzes erfordert,
eine erste Flag-Speichereinrichtung (141), die für jedes der Register gebildet und von der Erfassungseinrichtung abhängig ist, zum Speichern eines ersten Flag, das anzeigt, daß das zugehörige Register einem Datenschreiben unterworfen wird,
eine zweite Flag-Speichereinrichtung (142), die für jedes der Register gebildet und von der Vorhersageeinrichtung abhängig ist, zum Speichern eines zweiten Flag, das anzeigt, daß der Befehl, der ein Schreiben von Daten erfordert, ein Befehl ist, der nach der Vorhersage einer Verzweigung und bevor die Vorhersage als korrekt oder inkorrekt bestimmt wird, ausgegeben wird, und
eine Flag-Steuereinrichtung (Gatter in Fig. 31), die von der Erfassungseinrichtung und der Vorhersageeinrichtung abhängig ist, zum Steuern des zweiten und dritten Flag, wobei die Flag- Steuereinrichtung alle dritten Flags löscht, wenn die Vorhersage als inkorrekt bestimmt wird, während die Flag-Steuereinrichtung das zweite Flag für ein Register löscht, dessen drittes Flag aktiv ist, wenn die Vorhersage als inkorrekt bestimmt wird und ein aktives drittes Flag anzeigt, daß der Inhalt des zugehörigen Registers nicht verfügbar ist, aufweist.
22. Parallelverarbeitungseinheit nach Anspruch 21, dadurch
gekennzeichnet, daß die Speichereinrichtung (9) einen
Warteschlangenspeicher (13) aufweist.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE4244924A DE4244924C2 (de) | 1991-07-12 | 1992-07-10 | Parallelverarbeitungseinheit und Verfahren dafür |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP17220391A JP2875909B2 (ja) | 1991-07-12 | 1991-07-12 | 並列演算処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
DE4222776A1 true DE4222776A1 (de) | 1993-01-21 |
DE4222776C2 DE4222776C2 (de) | 1998-12-03 |
Family
ID=15937500
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE19924222776 Expired - Fee Related DE4222776C2 (de) | 1991-07-12 | 1992-07-10 | Parallelverarbeitungseinheit und Verfahren zum Ausführen von Befehlen |
Country Status (3)
Country | Link |
---|---|
US (1) | US5809294A (de) |
JP (1) | JP2875909B2 (de) |
DE (1) | DE4222776C2 (de) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6367002B1 (en) | 1998-02-12 | 2002-04-02 | Siemens Aktiengesellschaft | Apparatus and method for fetching instructions for a program-controlled unit |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3494489B2 (ja) * | 1994-11-30 | 2004-02-09 | 株式会社ルネサステクノロジ | 命令処理装置 |
US5752259A (en) * | 1996-03-26 | 1998-05-12 | Advanced Micro Devices, Inc. | Instruction cache configured to provide instructions to a microprocessor having a clock cycle time less than a cache access time of said instruction cache |
TW373149B (en) | 1997-07-02 | 1999-11-01 | Matsushita Electric Ind Co Ltd | Program control method |
US7197625B1 (en) | 1997-10-09 | 2007-03-27 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
US5864703A (en) * | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US6256728B1 (en) * | 1997-11-17 | 2001-07-03 | Advanced Micro Devices, Inc. | Processor configured to selectively cancel instructions from its pipeline responsive to a predicted-taken short forward branch instruction |
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 |
US6115808A (en) * | 1998-12-30 | 2000-09-05 | Intel Corporation | Method and apparatus for performing predicate hazard detection |
US6732259B1 (en) | 1999-07-30 | 2004-05-04 | Mips Technologies, Inc. | Processor having a conditional branch extension of an instruction set architecture |
US7242414B1 (en) | 1999-07-30 | 2007-07-10 | Mips Technologies, Inc. | Processor having a compare extension of an instruction set architecture |
US6697832B1 (en) | 1999-07-30 | 2004-02-24 | Mips Technologies, Inc. | Floating-point processor with improved intermediate result handling |
US6631392B1 (en) | 1999-07-30 | 2003-10-07 | Mips Technologies, Inc. | Method and apparatus for predicting floating-point exceptions |
US7346643B1 (en) | 1999-07-30 | 2008-03-18 | Mips Technologies, Inc. | Processor with improved accuracy for multiply-add operations |
US6714197B1 (en) | 1999-07-30 | 2004-03-30 | Mips Technologies, Inc. | Processor having an arithmetic extension of an instruction set architecture |
US6912559B1 (en) | 1999-07-30 | 2005-06-28 | Mips Technologies, Inc. | System and method for improving the accuracy of reciprocal square root operations performed by a floating-point unit |
KR100336773B1 (ko) * | 1999-11-12 | 2002-05-16 | 박종섭 | 지연 분기 구조를 갖는 자바 프로세서 |
US6996596B1 (en) | 2000-05-23 | 2006-02-07 | Mips Technologies, Inc. | Floating-point processor with operating mode having improved accuracy and high performance |
US6859875B1 (en) * | 2000-06-12 | 2005-02-22 | Freescale Semiconductor, Inc. | Processor having selective branch prediction |
US7711763B2 (en) | 2001-02-21 | 2010-05-04 | Mips Technologies, Inc. | Microprocessor instructions for performing polynomial arithmetic operations |
US7181484B2 (en) | 2001-02-21 | 2007-02-20 | Mips Technologies, Inc. | Extended-precision accumulation of multiplier output |
US7599981B2 (en) | 2001-02-21 | 2009-10-06 | Mips Technologies, Inc. | Binary polynomial multiplier |
US7162621B2 (en) | 2001-02-21 | 2007-01-09 | Mips Technologies, Inc. | Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration |
JP2003186938A (ja) * | 2001-12-19 | 2003-07-04 | Canon Inc | スコアボードを用いた検証方法 |
US7000091B2 (en) * | 2002-08-08 | 2006-02-14 | Hewlett-Packard Development Company, L.P. | System and method for independent branching in systems with plural processing elements |
US7000095B2 (en) * | 2002-09-06 | 2006-02-14 | Mips Technologies, Inc. | Method and apparatus for clearing hazards using jump instructions |
WO2004097625A2 (en) * | 2003-04-29 | 2004-11-11 | Koninklijke Philips Electronics N.V. | Zero overhead branching and looping in time-stationary processors |
US7861063B1 (en) * | 2004-06-30 | 2010-12-28 | Oracle America, Inc. | Delay slot handling in a processor |
WO2008072178A1 (en) * | 2006-12-11 | 2008-06-19 | Nxp B.V. | Pipelined processor and compiler/scheduler for variable number branch delay slots |
US8275978B1 (en) * | 2008-07-29 | 2012-09-25 | Marvell International Ltd. | Execution of conditional branch instruction specifying branch point operand to be stored in jump stack with branch destination for jumping to upon matching program counter value |
JP5565228B2 (ja) * | 2010-09-13 | 2014-08-06 | ソニー株式会社 | プロセッサ |
US9229722B2 (en) | 2012-01-31 | 2016-01-05 | International Business Machines Corporation | Major branch instructions with transactional memory |
US9280398B2 (en) | 2012-01-31 | 2016-03-08 | International Business Machines Corporation | Major branch instructions |
US9817666B2 (en) * | 2013-03-15 | 2017-11-14 | Intel Corporation | Method for a delayed branch implementation by using a front end track table |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4755966A (en) * | 1985-06-28 | 1988-07-05 | Hewlett-Packard Company | Bidirectional branch prediction and optimization |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS56129950A (en) * | 1980-03-07 | 1981-10-12 | Hitachi Ltd | Information processor |
JPS60107141A (ja) * | 1983-11-16 | 1985-06-12 | Fujitsu Ltd | プランチ制御方式 |
JPS60168238A (ja) * | 1984-02-10 | 1985-08-31 | Hitachi Ltd | パイプラインデータ処理装置 |
DE3751503T2 (de) * | 1986-03-26 | 1996-05-09 | Hitachi Ltd | Datenprozessor in Pipelinestruktur mit der Fähigkeit mehrere Befehle parallel zu dekodieren und auszuführen. |
US5440704A (en) * | 1986-08-26 | 1995-08-08 | Mitsubishi Denki Kabushiki Kaisha | Data processor having branch predicting function |
US4833599A (en) * | 1987-04-20 | 1989-05-23 | Multiflow Computer, Inc. | Hierarchical priority branch handling for parallel execution in a parallel processor |
JPH01269131A (ja) * | 1988-04-20 | 1989-10-26 | Hitachi Ltd | 命令先行制御方式 |
US5050068A (en) * | 1988-10-03 | 1991-09-17 | Duke University | Method and apparatus for using extracted program flow information to prepare for execution multiple instruction streams |
JP2810068B2 (ja) * | 1988-11-11 | 1998-10-15 | 株式会社日立製作所 | プロセッサシステム、コンピュータシステム及び命令処理方法 |
US5125083A (en) * | 1989-02-03 | 1992-06-23 | Digital Equipment Corporation | Method and apparatus for resolving a variable number of potential memory access conflicts in a pipelined computer system |
JPH02306341A (ja) * | 1989-02-03 | 1990-12-19 | Nec Corp | マイクロプロセッサ |
US5136697A (en) * | 1989-06-06 | 1992-08-04 | Advanced Micro Devices, Inc. | System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache |
US5333280A (en) * | 1990-04-06 | 1994-07-26 | Nec Corporation | Parallel pipelined instruction processing system for very long instruction word |
EP0463965B1 (de) * | 1990-06-29 | 1998-09-09 | Digital Equipment Corporation | Sprungvorhersageeinheit für hochleistungsfähigen Prozessor |
US5261063A (en) * | 1990-12-07 | 1993-11-09 | Ibm Corp. | Pipeline apparatus having pipeline mode eecuting instructions from plural programs and parallel mode executing instructions from one of the plural programs |
US5265213A (en) * | 1990-12-10 | 1993-11-23 | Intel Corporation | Pipeline system for executing predicted branch target instruction in a cycle concurrently with the execution of branch instruction |
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 |
-
1991
- 1991-07-12 JP JP17220391A patent/JP2875909B2/ja not_active Expired - Fee Related
-
1992
- 1992-07-10 DE DE19924222776 patent/DE4222776C2/de not_active Expired - Fee Related
-
1996
- 1996-01-30 US US08/594,358 patent/US5809294A/en not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4755966A (en) * | 1985-06-28 | 1988-07-05 | Hewlett-Packard Company | Bidirectional branch prediction and optimization |
Non-Patent Citations (3)
Title |
---|
HWANG, K., BRIGGS, F.A.: Computer Architecture and Parallel Processing, New York (u.a.): McGraw-Hill Book Company, 1984, S. 187-193 * |
US-Firmenschrift IBM Journal of Research and Development, Vol. 34, No. 1, January 1980, S. 37-58 * |
US-Z.: "IEEE Transactions on Computers", Vol. 39, No. 3, März 1990, S. 349-359 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6367002B1 (en) | 1998-02-12 | 2002-04-02 | Siemens Aktiengesellschaft | Apparatus and method for fetching instructions for a program-controlled unit |
Also Published As
Publication number | Publication date |
---|---|
DE4222776C2 (de) | 1998-12-03 |
US5809294A (en) | 1998-09-15 |
JPH0520067A (ja) | 1993-01-29 |
JP2875909B2 (ja) | 1999-03-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE4222776A1 (de) | Verfahren und anordnung fuer eine verzweigungsbefehlsverarbeitung in einer parallelverarbeitungseinheit | |
DE10084556B4 (de) | Optimierte Ausführung von statisch sehr wahrscheinlich vorhergesagten Verzweigungsbefehlen | |
DE3650413T2 (de) | Verfahren und Vorrichtung zur Annulierung eines Befehls. | |
DE69031991T2 (de) | Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen | |
DE19983860B4 (de) | Ein Verfahren und eine Einrichtung zur verbesserten Prädikatvorhersage | |
DE69133302T2 (de) | Registerabbildung in einem einzigen Taktzyklus | |
DE69805275T2 (de) | Verfahren und Anordnung zur Reduzierung von Störungen in einer Verzweigungsgeschichtstabelle eines Mikroprozessors | |
DE69534113T2 (de) | Kompression der Befehlswörter eines Rechners | |
DE69132675T2 (de) | Parallelfliessband-Befehlsverarbeitungssystem für sehr lange Befehlswörter | |
DE69719235T2 (de) | Prozessor und Verfahren zur spekulativen Ausführung von bedingten Verzweigungsbefehlen unter Verwendung einer von mehreren Verzweigungsvorhersageverfahren | |
DE2855106C2 (de) | Einrichtung zur Durchführung von bedingten Verzweigungen | |
DE69325086T2 (de) | Verfahren und System für spekulative Befehlsausführung | |
DE69433621T2 (de) | Geraet zur verarbeitung von befehlen in einem rechnersystem | |
DE3588182T2 (de) | Vorausschauende Speicherabrufmethode und System für Verzweigung mit Ausführungsbefehlen | |
DE3785897T2 (de) | Steuervorrichtung zum vorabruf von befehlen. | |
DE69028138T2 (de) | Mechanismus zur präzisen Behandlung von Ausnahmebedingungen in einem Prozessor mit gepaarten Befehlen | |
DE69030931T2 (de) | Mehrfachsequenzprozessorsystem | |
DE69327927T2 (de) | Schnelles Vorausholen und Zuteilung von Befehlen mittels vorausschauender Anmerkungen von früher vorausgeholten | |
DE69623146T2 (de) | Verfahren und Vorrichtung zum Koordinieren der Benutzung von physikalischen Registern in einem Mikroprozessor | |
DE69702350T2 (de) | Verzweigungsvorhersageschema für cachespeicherzeile, das von sätzen eines set-assoziativen cachespeichers gemeinsam verwendet wird | |
DE102004013676A1 (de) | Schleifenbetrieb mit null Overhead in einem Mikroprozessor mit Anweisungspuffer | |
DE19855806A1 (de) | Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen | |
DE4345028A1 (de) | Vorrichtung zur Reduzierung von Verzögerungen aufgrund von Verzweigungen | |
DE3781794T2 (de) | Vorrichtung und verfahren zum versehen eines cachespeichers mit einer schreiboperation mit zwei systemtaktzyklen. | |
DE69429762T2 (de) | Verfahren und Vorrichtung zur Befehlsteuerung in einem Pipelineprozessor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law | ||
8172 | Supplementary division/partition in: |
Ref document number: 4244924 Country of ref document: DE |
|
Q171 | Divided out to: |
Ref document number: 4244924 Country of ref document: DE |
|
AH | Division in |
Ref document number: 4244924 Country of ref document: DE |
|
D2 | Grant after examination | ||
AH | Division in |
Ref document number: 4244924 Country of ref document: DE |
|
8364 | No opposition during term of opposition | ||
8328 | Change in the person/name/address of the agent |
Representative=s name: PRUFER & PARTNER GBR, 81545 MUENCHEN |
|
8339 | Ceased/non-payment of the annual fee |