DE4244924C2 - Parallelverarbeitungseinheit und Verfahren dafür - Google Patents

Parallelverarbeitungseinheit und Verfahren dafür

Info

Publication number
DE4244924C2
DE4244924C2 DE4244924A DE4244924A DE4244924C2 DE 4244924 C2 DE4244924 C2 DE 4244924C2 DE 4244924 A DE4244924 A DE 4244924A DE 4244924 A DE4244924 A DE 4244924A DE 4244924 C2 DE4244924 C2 DE 4244924C2
Authority
DE
Germany
Prior art keywords
branch
instruction
flag
command
prediction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE4244924A
Other languages
English (en)
Inventor
Hideki Ando
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from JP17220391A external-priority patent/JP2875909B2/ja
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Application granted granted Critical
Publication of DE4244924C2 publication Critical patent/DE4244924C2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

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

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 eine Parallelverarbeitungseinheit und ein Verfah­ ren zum Ausführen von Befehlen in einer Parallelverarbeitungseinheit.
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: Befehlsdekodierung, 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.
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 Superskalarprozessor beschrieben. Der Superskalarprozessor 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.
    Im Folgenden wird für Superskalarprozessor auch kurz Superskalar geschrieben.
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, 6 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.
Aus SOHI G. S.: Instruction Issue Logic for High-Performance, Interruptible, Multiple Functional Unit, Pipelined Computers; In: IEEE Transactions on Computers, Bd. 39, Nr. 3, 1990, S. 349-359 ist eine Parallelverarbeitungseinheit mit einer Mehrzahl von parallel betreibbaren Funktionseinheiten zum Ausführen von Befehlen, einem Befehlsspeicher zum Speichern von Befehlen und einer Speichereinrichtung zum Speichern von Befehlen, die aus dem Befehlsspeicher geholt sind, bekannt. Eine Verzweigungsvorhersage wird durchgeführt unter Benützung einer Registeraktualisierungseinheit (RUU). Die RUU überwacht, ob die vorhergesagte Richtung nach der Verzweigungsvorhersage richtig ist.
Es ist daher Aufgabe der vorliegenden Erfindung, eine Parallelverarbeitungseinheit und ein Verfahren zum Ausführen von Befehlen in einer Parallelverarbeitungseinheit vorzusehen, die eine effektive Verarbeitung von Befehlen einschließlich von Verzweigungsbefehlen möglich machen.
Diese Aufgabe wird gelöst durch eine Parallelverarbeitungsein­ heit mit den Merkmalen des Anspruchs 1 und ein Verfahren zum Ausführen von Befehlen in einer Parallelverarbeitungseinheit mit den Merkmalen des Anspruchs 9.
Bevorzugte Ausgestaltungen der Erfindung sind in den jeweils zugehörigen Unteransprüchen angegeben.
Es folgt die 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 Zeigersteuerbereichs 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.
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)
qt_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_top = br_block ## O2 + 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 Verzweigungsbefehl 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_stop 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_block ## O2 + 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_block##O2 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, daß 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 id_inst_avail im Flag id_inst_avail 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-Steuerschaltkrels 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).
(1) Test der Verzweigungsbedingungen
Im Befehlsdekoder 66 wird geprüft, ob der Inhalt des Registers R1, der aus dem Registersatz 69 ausgelesen wird, gleich "0" ist.
(2) Verzweigung
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: R1 ← R2 + R3
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.
(2) Verzweigung
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.
(3) Einstellen des Flag br_inv
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.
(1) Setzen eines Vorhersage-Flag inst_pred
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.
(2) Nicht-Ausführung eines Verzweigungsvorhersagebefehls
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.
(3) Komponenten eines Verzweigungsvorhersagebefehls
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.
(4) Entscheiden der Richtung der Verzweigung, die auf der Basis der Vorhersage entschieden wurde, und Stornieren der Pipeline
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.
(a) Falls die Vorhersage richtig war
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.
(b) Falls die Vorhersage nicht richtig war
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.
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.
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.
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 Logikschaltkreises 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 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 Speichern 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.
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 (14)

1. Parallelverarbeitungseinheit mit:
  • (ii) einer Mehrzahl von parallel betreibbaren Funktionsein­ heiten (4a, 4b, 6, 7) zum Ausführen von Befehlen aus dem Be­ fehlsspeicher (1);
  • (i) einem Befehlsspeicher (1) zum Speichern von Befehlen;
  • (iii) einer Speichereinrichtung (9) zum Speichern von Befeh­ len, die aus dem Befehlsspeicher (1) geholt sind und an die Funktionseinheiten (4a, 4b, 6, 7) auszugeben sind, wobei die Speichereinrichtung (9) eine Mehrzahl von Einträgen aufweist und jeder Eintrag ein erstes Feld für einen Befehl und ein zweites Feld zum Speichern eines ersten Flag (br_inv), das anzeigt, ob der zugehörige Befehl ein unter einer Vorhersage stehender Ver­ zweigungsbefehl ist, umfaßt;
  • (iv) einer Steuereinrichtung (66) zum Erkennen eines Ver­ zweigungsbefehls unter den Befehlen, die aus der Speicherein­ richtung (1) geholt worden sind, und zum Vorhersagen, ob von ei­ nem Verzweigungsbefehl eine Verzweigung ausgeführt wird;
  • (v) einer von der Steuereinrichtung (66) abhängigen Ein­ stelleinrichtung (85, 86) zum Einstellen des Wertes des ersten Flag (br_inv) in dem zweiten Feld des Eintrages, in dem ein un­ ter Vorhersage stehender Verzweigungsbefehl gespeichert ist; und
  • (vi) einer von dem Wert des ersten Flag (br_inv) abhängigen Logikschaltung (Gatter in Fig. 28) zum Steuern der Ausführung oder Nichtausführung eines zugehörigen Befehls. (Fig. 27)
2. Parallelverarbeitungseinheit nach Anspruch 1, bei der die Logikschaltung (Gatter in Fig. 28) eine Einrichtung aufweist zum Verhindern der Ausführung eines Befehls, wenn das zugehörige er­ ste Flag (br_inv) anzeigt, daß der Befehl entsprechend einer von der Steuereinrichtung (66) vorhergesagten Verzweigung ausgeführt wird.
3. Parallelverarbeitungseinheit nach Anspruch 1 oder 2, mit ei­ nem Registersatz (69) mit einer Mehrzahl von Registern, wobei die Steuereinrichtung (66) eine Einrichtung (100, 101) aufweist zum Speichern einer Rückkehradresse in einem Register des Regi­ stersatzes (69), wenn der Verzweigungsbefehl tatsächlich ausge­ führt werden kann, falls der Verzweigungsbefehl einen Befehl zum Speichern der Rückkehradresse im Register aufweist, die notwen­ dig ist, um von einer ausgeführten Verzweigung zurückzukehren.
4. Parallelverarbeitungseinheit nach einem der Ansprüche 1 bis 3, bei der die Steuereinrichtung (66) aufweist:
  • - eine Ausgabeeinrichtung (160), die eine Mehrzahl von Befeh­ len aus dem Befehlsspeicher (1) empfängt, gleichzeitig aus­ führbare Befehle unter den empfangenen Befehlen erfaßt und gleichzeitig ausführbare Befehle an zugehörige Funktionsein­ heiten (4a, 4b, 6, 7) 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 Steuereinrichtung (66) und der Vorhersageverifizierungs­ einrichtung (164) abhängig ist, zum Erzeugen eines zweiten Flag (inst_pred) für jeden Befehl, das angibt, daß der zuge­ hörige Befehl in einer Zeitspanne an eine zugehörige Funkti­ onseinheit (4a, 4b, 6, 7) ausgegeben werden soll, nachdem die Vorhersage einer Verzweigung erfolgt, bevor die Bestim­ mung durch die Vorhersageverifizierungseinrichtung (164) ge­ macht wird,
  • - eine zweite Flag-Erzeugungseinrichtung (161) zum Erzeugen eines dritten Flag (inst_avail) für jeden Befehl, das an­ zeigt, daß der zugehörige Befehl gültig in einer Funktions­ einheit (4a, 4b, 6, 7) ausgeführt werden kann, wobei das zweite und dritte Flag und der zugehörige Befehl an eine zu­ gehörige Funktionseinheit in Form einer Verbindung ausgege­ ben werden, und
  • - eine erste Flag-Steuereinrichtung, die von der Vorhersageve­ rifizierungseinrichtung (164) abhängig ist, zum Steuern des Wertes des zweiten und dritten Flags (inst_pred, inst_avail), die an die Funktionseinheit (4a, 4b, 6, 7) aus­ gegeben werden, wobei die erste Flag-Steuereinrichtung nur das zweite Flag (inst_pred) löscht, wenn die Vorhersageveri­ fizierungeinrichtung (164) anzeigt, daß die Vorhersage einer Verzweigung richtig ist, während die erste Flag-Steuerein­ richtung sowohl das zweite (inst_pred) als auch das dritte (inst_avail) Flag löscht, wenn ein Befehl ein gesetztes zweites Flag (inst_pred) aufweist und die Vorhersageverifi­ zierungseinrichtung (164) angibt, daß die Vorhersage falsch war. (Fig. 32)
5. Parallelverarbeitungseinheit nach einem der Ansprüche 1 bis 4 mit einem Registersatz (69) mit einer Mehrzahl von Regi­ stern, wobei die Steuereinrichtung (66) aufweist:
  • - eine Erkennungseinrichtung (140) zum Erkennen eines Befehls, der das Schreiben von Daten in ein Register des Register­ satzes (69) erfordert,
  • - eine erste Flag-Speichereinrichtung (141), die für jedes der Register gebildet und von der Erkennungseinrichtung (140) abhängig ist, zum Speichern eines vierten Flag (RF_lkf), 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 Steuereinrichtung (66) ab­ hängig ist, zum Speichern eines fünften Flag (RF_lkf_pred), das anzeigt, daß der Befehl, der ein Schreiben von Daten er­ fordert, ein Befehl ist, der nach der Vorhersage einer Ver­ zweigung und bevor die Vorhersage als richtig oder falsch bestimmt wird, ausgegeben wird, und
  • - eine zweite Flag-Steuereinrichtung (Gatter in Fig. 31), die von der Erkennungseinrichtung (140) und der Steuereinrichtung (66) abhängig ist, zum Steuern des vierten und fünften Flag, wobei die zweite Flag-Steuereinrichtung alle fünften Flags löscht, wenn die Vorhersage als falsch bestimmt wird, während die zweite Flag-Steuereinrichtung als vierte Flag für ein Register löscht, dessen fünftes Flag aktiv ist, wenn die Vorhersage als falsch bestimmt wird und ein aktives fünftes Flag anzeigt, daß der Inhalt des zugehörigen Registers nicht verfügbar ist. (Fig. 31)
6. Parallelverarbeitungseinheit nach einem der Ansprüche 1 bis 5, bei der die Speichereinrichtung (9) einen Warteschlangen­ speicher (13) aufweist.
7. Parallelverarbeitungseinheit nach einem der Ansprüche 1 bis 6, bei der die Einstelleinrichtung eine auf die Steuerein­ richtung (66) reagierende Einrichtung (85, 86) zum Erfassen eines Verzweigungsbefehles zum Setzen des ersten Flag (br_inv) in dem zweiten Feld aufweist, das mit dem Verzweigungsbefehl verknüpft ist, der von der Steuereinrichtung (66) erfaßt ist.
8. Parallelverarbeitungseinheit nach einem der Ansprüche 1 bis 7, bei der ein Befehl mit einem zugehörigen ersten Flag (br_inv) in dem zweiten Feld, das durch die Einstelleinrich­ tung (85, 86) gesetzt ist, als NOP-Befehl dient, der keine Operation nötig hat.
9. Verfahren zum Ausführen von Befehlen in einer Parallel­ verarbeitungseinheit mit einem Befehlsspeicher (1) und einer Mehrzahl von parallel betätigbaren Funktionseinheiten (4a, 4b, 6, 7) zum Ausführen von Befehlen aus dem Befehlsspeicher (1), mit den Schritten:
  • (I) Holen einer Mehrzahl von Befehlen aus dem Befehls­ speicher (1);
  • (II) Speichern der geholten Befehle in entsprechenden Einträgen in einer Speichereinheit (9), während ein erstes Flag (br_inv) mit dem Befehl verknüpft ist, wobei das erste Flag anzeigt, daß ein zugehöriger Befehl sich auf das Vorhersagen einer Verzweigung bezieht;
  • (III) Auslesen einer Mehrzahl von Befehlen aus der Spei­ chereinheit (9);
  • (IV) Erkennen eines Verzweigungsbefehles unter den ausge­ lesenen Befehlen und Vorhersagen, ob die Verzweigung von dem Verzweigungsbefehl ausgeführt wird;
  • (V) Setzen eines ersten Flag (br_inv) in die Speicher­ einheit (9) in Abhängigkeit von der Erkennung des Verzweigungsbefehles, das mit einem Befehl verknüpft ist, der sich auf das Vorhersagen der Verzweigung durch den Verzweigungsbefehl bezieht; und
  • (VI) Stoppen des Ausführens oder Nichtausführens des zu­ gehörigen Befehles in Abhängigkeit von dem Wert des ersten Flag (br_inv).
10. Verfahren nach Anspruch 9, bei dem der Schritt (V) den Schritt aufweist:
  • (V1) Setzen des mit dem erfaßten Verzweigungsbefehl verknüpften ersten Flag (br_inv).
11. Verfahren nach Anspruch 9 oder 10, bei dem der Schritt (VI) den Schritt aufweist:
  • (VI1) Nichtbeachten des zugehörigen Befehles, wenn das erste Flag (br_inv) gesetzt ist.
12. Verfahren nach einem der Ansprüche 9 bis 11, bei dem die Verarbeitungseinheit ein Registerfile (69) mit einer Mehrzahl von Registern aufweist und bei dem der Schritt (VI) den Schritt aufweist:
  • (VI2) Speichern einer Rückkehradresse in einem Register des Registerfiles (69), wenn der Verzweigungsbe­ fehl tatsächlich ausgeführt werden kann, wenn der Verzweigungsbefehl einen Befehl zum Speichern der Rückkehradresse enthält, die zum Rückkehren von der genommenen Verzweigung in das Register nötig ist.
13. Verfahren nach einem der Ansprüche 9 bis 12, weiter mit den Schritten:
  • (VII) Empfangen einer Mehrzahl von Befehlen von der Speichereinheit (9), gleichzeitiges Erkennen gleichzeitig ausführbarer Befehle der empfangenen Befehle und Liefern der gleichzeitig ausführbaren Befehle zu zugehörigen Funktionseinheiten (4a, 4b, 6, 7);
  • (VIII) Bestätigen der Vorhersage durch Ausführen des Ver­ zweigungsbefehles und Bestimmen, ob die Vorhersage der Verzweigung richtig ist;
  • (IX) Anzeigen als Reaktion auf die Vorhersage und die Bestätigung der Vorhersage zum Erzeugen eines zweiten Flag (inst_pred) für jeden Befehl, daß ein zugehöriger Befehl an eine zugehörige Funktions­ einheit (4a, 4b, 6, 7) abzugeben ist in einer Zeitdauer, nachdem die Vorhersage einer Verzwei­ gung gemacht worden ist vor der Bestimmung der Vorhersagenbestätigung;
  • (X) Erzeugen eines dritten Flag (inst_avail) für jeden Befehl, der anzeigt, daß ein zugehöriger Befehl gültig ist, um in einer Funktionseinheit (4a, 4b, 6, 7) ausgeführt zu werden, wobei der zweite und dritte Flag und der zugehörige Befehl in eine zu­ gehörige Funktionseinheit in verbundener Weise ausgegeben werden;
  • (XI) Steuern als Reaktion auf das Resultat der Vorher­ sagebestätigung eines Wertes des zweiten und drit­ ten Flags (inst_pred, inst_avail), die in eine Funktionseinheit (4a, 4b, 6, 7) ausgegeben sind, so daß nur der zweite (inst_pred) Flag anzeigt, ob das Resultat der Vorhersagenbestätigung anzeigt, daß die Vorhersage der Verzweigung richtig ist, während zweiter und dritter Flag nicht aktiv für einen Befehl gemacht werden, dessen zweiter Flag (inst_pred) aktiv ist, wenn die Vorhersagenbestä­ tigung anzeigt, daß die Vorhersage falsch ist.
14. Verfahren nach einem der Ansprüche 9 bis 13, bei dem die Verarbeitungseinheit weiter ein Registerfile (69) mit einer Mehrzahl von Registern aufweist, wobei das Verfahren weiter die Schritte aufweist:
  • (XII) Erfassen eines Befehles, der Schreiben von Daten in ein Register des Registerfiles (69) benötigt, in den ausgelesenen Befehlen;
  • (XIII) Setzen eines vierten Flag (RF_lkf) in Abhängigkeit von der Erfassung, daß ein Befehl Datenschreiben benötigt, der anzeigt, daß ein zugehöriges Regi­ ster (141) dem Datenschreiben unterliegt, wobei das vierte Flag für die entsprechenden Register vorgesehen wird;
  • (XIV) Anzeigen als Reaktion auf das vorhergesagte Resul­ tat zum Setzen eines fünften Flag (RF_lkf_pred), daß der Befehl, der das Schreiben von Daten benö­ tigt, ein Befehl ist, der ausgegeben ist, nachdem die Vorhersage der Verzweigung gemacht ist, bevor die Vorhersage bestimmt ist, ob sie richtig oder nicht richtig ist, wobei der fünfte Flag für die entsprechenden Register (142) vorgesehen wird; und
  • (XV) Steuern als Reaktion auf das Erfassen des Befeh­ les, der Datenschreiben nötig macht, und des Re­ sultates der Vorhersage der Verzweigung des vier­ ten und fünften Flag so, daß alle fünften Flag nicht aktiv gemacht werden, wenn die Vorhersage als richtig bestimmt wird, während die vierte Flag nicht aktiv gemacht wird für ein Register, wobei der fünfte Flag aktiv ist, wenn die Vorhersage als falsch bestimmt wird, wobei ein aktiver fünfter Flag anzeigt, daß der Inhalt eines zugehörigen Re­ gisters nicht verfügbar ist.
DE4244924A 1991-07-12 1992-07-10 Parallelverarbeitungseinheit und Verfahren dafür Expired - Fee Related DE4244924C2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP17220391A JP2875909B2 (ja) 1991-07-12 1991-07-12 並列演算処理装置
DE19924222776 DE4222776C2 (de) 1991-07-12 1992-07-10 Parallelverarbeitungseinheit und Verfahren zum Ausführen von Befehlen

Publications (1)

Publication Number Publication Date
DE4244924C2 true DE4244924C2 (de) 1999-02-11

Family

ID=25916493

Family Applications (1)

Application Number Title Priority Date Filing Date
DE4244924A Expired - Fee Related DE4244924C2 (de) 1991-07-12 1992-07-10 Parallelverarbeitungseinheit und Verfahren dafür

Country Status (1)

Country Link
DE (1) DE4244924C2 (de)

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
SOHI, G.S.: Instruction Issue Logic for High- Performance, Interruptible, Multiple Functional Unit, Pipelined Computers. In: IEEE Transactions on Computers, Vol. 39, No. 3, 1990, S. 349-359 *

Similar Documents

Publication Publication Date Title
DE4222776A1 (de) Verfahren und anordnung fuer eine verzweigungsbefehlsverarbeitung in einer parallelverarbeitungseinheit
DE69031991T2 (de) Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen
DE69133302T2 (de) Registerabbildung in einem einzigen Taktzyklus
DE69325086T2 (de) Verfahren und System für spekulative Befehlsausführung
DE19983860B4 (de) Ein Verfahren und eine Einrichtung zur verbesserten Prädikatvorhersage
DE69028138T2 (de) Mechanismus zur präzisen Behandlung von Ausnahmebedingungen in einem Prozessor mit gepaarten Befehlen
DE10084556B4 (de) Optimierte Ausführung von statisch sehr wahrscheinlich vorhergesagten Verzweigungsbefehlen
DE69534113T2 (de) Kompression der Befehlswörter eines Rechners
DE69805275T2 (de) Verfahren und Anordnung zur Reduzierung von Störungen in einer Verzweigungsgeschichtstabelle eines Mikroprozessors
DE69132675T2 (de) Parallelfliessband-Befehlsverarbeitungssystem für sehr lange Befehlswörter
DE68928677T2 (de) Verfahren und digitaler Computer zur Vorverarbeitung mehrerer Befehle
DE3650232T2 (de) Rechnersteuerung mit Verzweigung in einem einzigen Zyklus.
DE69719235T2 (de) Prozessor und Verfahren zur spekulativen Ausführung von bedingten Verzweigungsbefehlen unter Verwendung einer von mehreren Verzweigungsvorhersageverfahren
DE3116100C2 (de) Datenverarbeitungseinheit
DE69130858T2 (de) Überlappende Serienverarbeitung
DE69534148T2 (de) Rechnersystem zur Ausführung von Verzweigungsbefehlen
DE69623146T2 (de) Verfahren und Vorrichtung zum Koordinieren der Benutzung von physikalischen Registern in einem Mikroprozessor
DE69030931T2 (de) Mehrfachsequenzprozessorsystem
DE69418146T2 (de) Temporärer Registersatz für einen superpipeline-superskalaren Prozessor
DE2855106A1 (de) Einrichtung zur durchfuehrung von instruktionsverzweigungen
DE102004013676A1 (de) Schleifenbetrieb mit null Overhead in einem Mikroprozessor mit Anweisungspuffer
DE19855806A1 (de) Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen
DE68924400T2 (de) Fliessbanddatenverarbeitungsvorrichtung.
DE3854142T2 (de) Vektorrechner.
DE69429762T2 (de) Verfahren und Vorrichtung zur Befehlsteuerung in einem Pipelineprozessor

Legal Events

Date Code Title Description
Q172 Divided out of (supplement):

Ref country code: DE

Ref document number: 4222776

8110 Request for examination paragraph 44
AC Divided out of

Ref country code: DE

Ref document number: 4222776

Format of ref document f/p: P

AC Divided out of

Ref country code: DE

Ref document number: 4222776

Format of ref document f/p: P

D2 Grant after examination
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee