DE4222776A1 - Verfahren und anordnung fuer eine verzweigungsbefehlsverarbeitung in einer parallelverarbeitungseinheit - Google Patents

Verfahren und anordnung fuer eine verzweigungsbefehlsverarbeitung in einer parallelverarbeitungseinheit

Info

Publication number
DE4222776A1
DE4222776A1 DE19924222776 DE4222776A DE4222776A1 DE 4222776 A1 DE4222776 A1 DE 4222776A1 DE 19924222776 DE19924222776 DE 19924222776 DE 4222776 A DE4222776 A DE 4222776A DE 4222776 A1 DE4222776 A1 DE 4222776A1
Authority
DE
Germany
Prior art keywords
branch
instruction
instructions
command
flag
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE19924222776
Other languages
English (en)
Other versions
DE4222776C2 (de
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
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to DE4244924A priority Critical patent/DE4244924C2/de
Publication of DE4222776A1 publication Critical patent/DE4222776A1/de
Application granted granted Critical
Publication of DE4222776C2 publication Critical patent/DE4222776C2/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Description

Die Erfindung betrifft Verfahren und Anordnungen für eine Verzweigungsbefehlsverarbeitung in Parallelverarbeitungseinheiten.
In einem Pipeline-Computer werden die Befehle, die sich bereits in der Pipeline befinden, ungültig gemacht, wenn eine Verzweigung auftritt. Diese Ungültigkeitserklärung von in der Pipeline befindlichen Befehlen verschlechtert die Leistung des Pipeline- Computers. Zum besseren Verständnis für diese Situation wird im folgenden ein Prozessor mit einer fünfstufigen Pipeline betrachtet.
IF: Einlesen eines Befehls (Instruction Fetch).
ID: Befehlskodierung, Lesen aus einem Registersatz und Verzweigungsbefehl ausführen (Instruction Decode).
EXC: ein Befehl wird unter Verwendung einer ALU (arithmetische und logische Einheit) ausgeführt.
MEM: auf einen Speicher (Datenspeicher) wird zugegriffen.
WB: Schreiben von Daten in den Registersatz wird ausgeführt.
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 Superskalar beschrieben. Der Superskalar stellt einen Prozessor dar, der die folgenden charakteristischen Besonderheiten aufweist:
  • 1) Einlesen einer Mehrzahl von Befehlen;
  • 2) aufweisen einer Mehrzahl von Funktionseinheiten und gleichzeitiges Ausführen einer Mehrzahl von Befehlen; und
  • 3) Erfassen von gleichzeitig ausführbaren Befehlen aus der eingelesenen Mehrzahl von Befehlen und Verteilen dieser gleichzeitig ausführbaren Befehle an zugehörige Funktionseinheiten.
Die allgemeine Struktur eines Superskalars ist in Fig. 3 gezeigt. Wie in Fig. 3 dargestellt ist, weist der Superskalar einen Befehlsspeicher 1 zum Speichern von Befehlen, eine Befehlseinlesestufe (IF-Stufe) 2 zum Übertragen der Adressen der einzulesenden Befehle an den Befehlsspeicher 1, eine Befehlsdekodierstufe (ID-Stufe) 3 zum Ausführen der Dekodierung der eingelesenen Mehrzahl von Befehlen, Lesen aus einem (nicht dargestellten) Registersatz und Verzweigungsbefehlen, Funktionseinheiten 4a, 4b, 6 und 7 jeweils zum Ausführen einer vorbestimmten Operation und einen Datenspeicher 8 zum Speichern von Daten auf.
Die Befehlsdekodierstufe 3 erfaßt auch gleichzeitig ausführbare Befehle in der dekodierten Mehrzahl von Befehlen und verteilt diese gleichzeitig ausführbaren Befehle an die Funktionseinheiten 4a, 4b, 6 und 7.
Die Funktionseinheiten 4a und 4b führen eine Ganzzahladdition etc. aus. Die Funktionseinheit 6 führt ein Laden oder Speichern von Daten vom/in den Datenspeicher 8 aus. Die Funktionseinheit 7 führt eine Gleitkommaaddition etc. aus.
Die Funktionseinheiten 4a, 4b, 6 und 7 weisen jeweils eine Mehrzahl von Pipeline-Stufen auf. Die Funktionseinheiten 4a und 4b weisen eine Ausführungsstufe EXC zum Ausführen eines gegebenen Befehls und eine Registersatz-Schreibstufe WB zum Schreiben des Ausführungsergebnisses in einen (nicht dargestellten) Registersatz auf. Die Funktionseinheit 6 weist eine Adreßberechnungsstufe ADR zum Berechnen einer Adresse, um den Datenspeicher 8 vom gegebenen Befehl anzusprechen, eine Speicherzugriffsstufe MEM zum Zugreifen auf den Datenspeicher entsprechend der berechneten Adresse, und eine Registersatz-Schreibstufe WB zum Schreiben von Daten, die vom Datenspeicher 8 geladen werden, in den Registersatz, auf.
Die Funktionseinheit 7 weist drei Ausführungsstufen EXC1, EXC2 und EXC3 sowie eine Registersatz-Schreibstufe WB zum Schreiben des Ausführungsergebnisses in den Registersatz auf. Im Superskalar, wie er in Fig. 3 dargestellt ist, wird eine Mehrzahl von Befehlen gleichzeitig aus dem Befehlsspeicher 1 eingelesen, und eine Mehrzahl von Befehlen wird parallel in den Funktionseinheiten 4a, 4b, 7 und 7 ausgeführt. Daher wird eine verbesserte Verarbeitungsgeschwindigkeit im Vergleich zu einem herkömmlichen Prozessor mit nur einer Pipeline erzielt.
In Fig. 4 ist der Betrieb einer Pipeline dargestellt, wenn in einem Superskalar eine Verzweigung auftritt. In Fig. 4 ist der Betrieb der Pipeline im Superskalar gezeigt, wenn zwei Befehle gleichzeitig eingelesen werden und maximal zwei Ganzzahlbefehle gleichzeitig ausgeführt werden können. Unter der Annahme, daß der Befehl i+3 einen Verzweigungsbefehl darstellt, ist daß es bekannt ist, daß eine Verzweigung auftritt, wenn der Befehl i+3 die ID-Stufe (Befehlsdekodierstufe) erreicht hat. Zu diesem Zeitpunkt befinden sich die Befehle i+4 und i+5 bereits in der IF-Stufe (Befehlseinlesestufe). Diese Befehle i+4 und i+5 werden storniert, wenn die Erzeugung der Verzweigung bekannt ist.
Ab dem Zeitpunkt (Takt) T+3 wird ein Verzweigungszielbefehl, der Befehl j, gestartet. Wie in Fig. 4 gezeigt ist, wird im Superskalar eine Mehrzahl von Befehlen gleichzeitig ausgeführt, es existiert eine Mehrzahl von zu stornierenden Befehlen, und die Leistungsfähigkeit wird stärker beeinflußt wie bei einem Prozessor mit nur einer Pipeline.
Wenn ein Verfahren mit verzögerter Verzweigung benutzt wird, bei dem der Verzweigungsverzögerungs-Slot nach diesem Verzweigungsbefehl erledigt wird, sollte eine Mehrzahl von Befehlen als Verzweigungsverzögerungs-Slot vorhanden sein.
Entsprechend dem Vortrag "Computer Architecture: A Quantitative Approach" von J. Hennessy, D.A. Patterson, S. 276, Fig. 6.22 ist die Wahrscheinlichkeit, daß ein Verzweigungsverzögerungs-Slot von einem Befehl aufgefüllt wird, der von einem Compiler verschoben worden ist, etwa gleich 50%. Üblicherweise werden NOP-Befehle etc. in die Verzweigungsverzögerungs-Slots eingesetzt, die nicht mit einem signifikanten Befehl gefüllt werden können. Daher ist in einem Superskalar, in dem eine Mehrzahl von Verzweigungsverzögerungs-Slots existiert, die Wahrscheinlichkeit sehr gering, daß alle Verzweigungsverzögerungs-Slots mit verschobenen Befehlen gefüllt werden.
Auch können im Superskalar Befehle, die in Verzweigungsverzögerungs- Slots verschoben werden können, zur Ausführung zusammen mit anderen Befehlen als gleichzeitig ausführbare Befehle verschoben werden, bevor sie zum Auffüllen der Verzweigungsverzögerungs-Slots benutzt werden. Entsprechend ist es beim Superskalar schwierig, die Leistungsfähigkeit entsprechend einem herkömmlichen Verfahren mit verzögerter Verzweigung zu verbessern.
Aufgabe der Erfindung ist es, ein Verfahren und eine Anordnung für eine Verzweigungsbefehlsverarbeitung in einer Parallelverarbeitungseinheit zu schaffen, durch die die Leistung der Einheit nicht verschlechtert wird, wenn eine Verzweigung auftritt.
Bei einem Verfahren und einer Anordnung für eine Verzweigungsbefehlsverarbeitung nach einem ersten Aspekt wird ein Verzweigungsverzögerungs-Slot als alle Befehle einschließlich dem Befehl, der einem Verzweigungsbefehl am nächsten ist, und den Befehlen, die während der Zyklen zum Einlesen und Ausführen des Verzweigungsbefehls eingelesen worden sind, definiert.
Bei einem Verfahren und einer Anordnung für eine Verzweigungsbefehlsverarbeitung nach einem ersten Aspekt ist ein Warteschlangenspeicher (Queue-Speicher) für das Befehlsvoreinlesen (Befehls-Prefetch) zum Voreinlesen (Prefetching) eines Befehls aus einem Befehlsspeicher und zum Speichern des voreingelesenen Befehls gebildet. Im Warteschlangenspeicher ist ein Feld gebildet zum Angeben im jeweiligen Eintrag des Warteschlangenspeichers, daß der im zugehörigen Eintrag gespeicherte Befehl entsprechend einer Verzweigungsvorhersage ausgeführt worden ist, und die Ausführung/Verhinderung der Ausführung eines Befehls wird auf der Basis des Wertes des Feldes gesteuert.
Beim ersten Aspekt ist der Befehl, der in einem Zyklus nach dem Zyklus eingelesen werden soll, in dem ein Verzweigungsbefehl ausgeführt wird, für einen Verzweigungsverzögerungs-Slot bestimmt, wenn das Ausführungsergebnis eines Verzweigungsbefehls keine Verzweigung ergibt, und daher wird der Befehl ohne Verzögerung aufgrund einer Verzweigung ausgeführt.
Wenn das Ausführungsergebnis des Verzweigungsbefehls eine Verzweigung ergibt, wird als nächstes ein Befehl ausgeführt, der im Zyklus nach dem Zyklus eingelesen wird, in dem der Verzweigungsbefehl ausgeführt wird. Wenn dieser Befehl in einen Warteschlangenspeicher voreingelesen worden ist, kann ein Verzweigungszielbefehl ohne Verzögerung aufgrund der Verzweigung ausgeführt werden, indem einfach der Lesezeiger des Warteschlangenspeichers verschoben wird.
Beim zweiten Aspekt ist jeder Befehl mit einem Feld verbunden, das angibt, ob die Ausführung auf der Basis einer Verzweigungsvorhersage erfolgt ist oder nicht, und falls die Verzweigungsvorhersage korrekt ist wird der Verzweigungsvorhersagebefehl ausgeführt, wodurch die Zeit eingespart wird, um einen weiteren Verzweigungszielbefehl einzulesen, so daß die Verschlechterung der Leistung gemildert wird.
Weitere Merkmale und Zweckmäßigkeiten der Erfindung ergeben sich aus der Beschreibung von Ausführungsbeispielen anhand der Figuren. Von den Figuren zeigen:
Fig. 1 eine Tabelle zur Darstellung einer herkömmlichen Verzweigungsverzögerungsoperation;
Fig. 2(A), 2(B), 2(C) eine Darstellung, wie ein Verzweigungsverzögerungs-Slot mit einem Befehl aufgefüllt wird;
Fig. 3 die allgemeine Struktur eines Superskalars;
Fig. 4 eine Tabelle zur Darstellung einer Verzweigungsverzögerungsoperation in einem Superskalar;
Fig. 5 ein Blockdiagramm der Struktur einer Befehlsdekodierstufe nach einer Ausführungsform der Erfindung;
Fig. 6 eine Darstellung des grundlegenden Betriebs der in Fig. 5 gezeigten Befehlswarteschlange;
Fig. 7 eine Darstellung zur Erläuterung der Definition eines Verzweigungsverzögerungs-Slot;
Fig. 8 eine Darstellung, die den Betrieb einer Befehlswarte­ schlange zeigt, wenn durch einen Verzweigungsbefehl eine Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot noch nicht eingelesen worden ist;
Fig. 9 den Zustand eines Zyklus, der der in Fig. 8 gezeigten Befehlswarteschlange am nächsten ist;
Fig. 10 den Zustand eines Zyklus, der dem in Fig. 9 gezeigten Zyklus am nächsten ist;
Fig. 11 eine Darstellung, die den Betrieb einer Befehlswarte­ schlange zeigt, wenn durch einen Verzweigungsbefehl eine Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot bereits eingelesen worden ist;
Fig. 12 eine Darstellung, die den Betrieb einer Befehlswarte­ schlange zeigt, wenn durch einen Verzweigungsbefehl eine Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot bereits eingelesen worden ist;
Fig. 13 eine Darstellung, die den Betrieb einer Befehlswarte­ schlange zeigt, wenn durch einen Verzweigungsbefehl eine Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot bereits eingelesen worden ist;
Fig. 14 eine Darstellung, die den Betrieb einer Befehlswarte­ schlange zeigt, wenn durch einen Verzweigungsbefehl keine Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot bereits eingelesen worden ist;
Fig. 15 eine Darstellung, die den Betrieb einer Befehlswarte­ schlange zeigt, wenn durch einen Verzweigungsbefehl keine Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot noch nicht eingelesen worden ist;
Fig. 16 eine Darstellung, die den Betrieb einer Befehlswarte­ schlange zeigt, wenn durch einen Verzweigungsbefehl keine Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot noch nicht eingelesen worden ist;
Fig. 17 eine Darstellung, die den Betrieb einer Befehlswarte­ schlange zeigt, wenn durch einen Verzweigungsbefehl keine Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot bereits eingelesen worden ist;
Fig. 18 eine Darstellung, die den Betrieb einer Befehlswarte­ schlange zeigt, wenn durch einen Verzweigungsbefehl keine Verzweigung erfolgt und der Verzweigungsverzögerungs-Slot bereits eingelesen worden ist;
Fig. 19 eine Tabelle, die die Logik im Zeigersteuerbereich von Fig. 1 darstellt;
Fig. 20(A), 20(B) ein Logikdiagramm der Struktur des Zeigersteuerbereich von Fig. 1;
Fig. 21 ein Blockdiagramm der Struktur eines Befehlsausgabe- Analyseabschnitts nach einer ersten Ausführungsform der Erfindung;
Fig. 22 ein Logikdiagramm der Struktur des Ausgabeverhinderungs­ abschnitts von Fig. 21;
Fig. 23 ein Blockdiagramm der Struktur einer Befehlsdekodier­ einrichtung, die in einer zweiten Ausführungsform benutzt wird;
Fig. 24(A), 24(B), 24(C): eine Darstellung des Betriebs eines Befehlsregisters, wenn in der Struktur der Befehlsdekodierstufe von Fig. 23 von einem Verzweigungsbefehl eine Verzweigung ausgeführt wird;
Fig. 25 eine Darstellung des Betriebs des Befehlsregisters von Fig. 23, wenn vom Verzweigungsbefehl keine Verzweigung ausgeführt wird;
Fig. 26 ein Blockdiagramm der Struktur des Befehlsausgabe- Analysebereichs von Fig. 23;
Fig. 27 ein Blockdiagramm der Strukturen einer Befehlseinlesestufe und einer Befehlsdekodierstufe, die entsprechend dem zweiten Aspekt der Erfindung benutzt werden;
Fig. 28 eine Darstellung der Struktur zur Steuerung auf der Basis eines Befehlsgültigkeits-Flag und eines Verzweigungsvorhersage-Flag in einer Ausführungsstufe EXC und dem Vorhandensein oder Nicht-Vorhandensein einer Verzweigung;
Fig. 29 eine schematische Darstellung der Struktur von Fig. 28;
Fig. 30 eine Wahrheitstafel für die Steuersignale eines Scoreboard zur Überwachung des Inhalts eines Registersatzes;
Fig. 31 ein Diagramm der Struktur der Logikschaltung zur Implementierung der in Fig. 30 gezeigten Wahrheitstafel; und
Fig. 32 ein Diagramm der Struktur des Befehlsdekoders von Fig. 27.
Die Struktur des wesentlichen Teils einer Befehlsdekodierstufe in einer Parallelverarbeitungseinheit nach einer Ausführungsform der Erfindung ist in Fig. 5 dargestellt. Wie in Fig. 5 gezeigt ist, weist die Befehlsdekodierstufe eine Befehlswarteschlange 9, einen Befehlsausgabe-Analyseabschnitt 10, einen Zeigersteuerbereich 12 und einen Verzweigungsverarbeitungsbereich 11 auf.
Die Befehlswarteschlange 9 liest eine Mehrzahl von Befehlen (Befehle 1-4) aus einem Befehlsspeicher 1 (siehe Fig. 3) vorein und speichert die voreingelesenen Befehle. Die Warteschlange 9 weist einen Speicherabschnitt (Warteschlange) 13 zum Speichern der Befehle, einen Lesezeiger 14 zum Halten einer Leseadresse scope und einen Schreibzeiger 15 zum Halten einer Schreibadresse queue_top auf.
Der Befehlsausgabe-Analyseabschnitt 10 analysiert, welcher Befehl unter den von der Befehlswarteschlange 9 gelesenen Befehle ausgebbar ist. Das Analyseergebnis vom Befehlsausgabe-Analyseabschnitt 10 wird zur Ausgabe jedem Befehl in Form eines Signals inst_avail beigefügt. Wenn das Signal inst_avail aktiv ist, ist der entsprechende Befehl ein ausgebbarer Befehl und soll ausgeführt werden. Bei der in Fig. 5 gezeigten Struktur werden vier Befehle beginnend von der Leseadresse scope aus der Befehlswarteschlange 9 auf einmal ausgelesen, und die Ausgabeanalyse wird im Befehlsausgabe-Analyseabschnitt 10 ausgeführt. Für das Signal inst_avail zu 4 Bit wird ein entsprechendes Signal inst_avail aktiviert, wenn ein Befehl ausgebbar ist. Der Befehlsausgabe-Analyseabschnitt 10 erzeugt auf der Basis des Signals inst_avail ein Signal issue_count, das die Anzahl der ausgebbaren Befehle angibt, und übermittelt das erzeugte Signal an den Zeigersteuerbereich 12.
Wenn in einem vorgegebenen Befehl ein Verzweigungsbefehl enthalten ist, übermittelt der Befehlsausgabe-Analyseabschnitt 10 auch einen Wert br_block, der die niederwertigen 2 Bit der Adresse der Befehlswarteschlange 9, die den Verzweigungsbefehl speichert, ignoriert oder abschneidet.
Wenn die aus der Befehlswarteschlange 9 ausgelesenen Befehle Verzweigungsbedingungen aufweisen (im Fall eines bedingten Sprungbefehls), prüft der Verzweigungsverarbeitungsbereich 11 die Verzweigungsbedingung und entscheidet, ob eine Verzweigung vorgenommen werden soll oder nicht. Wenn eine Verzweigung erfolgen soll, aktiviert der Verzweigungsverarbeitungsbereich 11 ein Signal Taken, und wenn keine Verzweigung vorgenommen werden soll, ein Signal Not Taken.
Der Zeigersteuerbereich 12 steuert die Werte des Lesezeigers scope und des Schreibzeigers queue_top der Zeiger 14 und 15 der Befehlswarteschlange 9. Der Zeigersteuerbereich 12 erzeugt ein Signal issue_stop, das die Ausgabe der Befehle von der Befehlsdekodierstufe ID an Pipelines insgesamt verhindert, und legt das erzeugte Signal an den Befehlsausgabe-Analyseabschnitt 10 an.
Bei der Struktur eines solchen Superskalars, bei der vier Befehle auf einmal aus dem Befehlsspeicher gelesen und die vier Befehle auf einmal dekodiert werden, werden die vom Befehlsspeicher 1 zugeführten Befehle (Befehle 1-4) in vier Adressen der Warteschlange 13 gespeichert, und zwar beginnend mit der Schreibadresse queue_top. Im nächsten Zyklus wird vier zum Schreibzeiger queue_top addiert.
Die vier Befehle, die in den vier Adressen der Warteschlange 13 beginnend mit dem Lesezeiger scope gespeichert sind, werden aus der Warteschlange 13 ausgelesen, und dem Befehlsausgabe-Analyseabschnitt 10 und einem (nicht dargestellten) Dekodierschaltkreis zugeführt, um analysiert und dekodiert zu werden. Als Ergebnis dieser Analyse wird dem Wert des Lesezeigers scope im nächsten Zyklus n hinzuaddiert, wenn n Befehle ausgegeben sind.
Fig. 6 zeigt den Betrieb der Befehlswarteschlange 9. Wie in Fig. 6 dargestellt ist, ist die Größe (Anzahl der Einträge) der Warteschlange 13 auf 16 eingestellt.
Im Zyklus T stellt die Schreibadresse queue_top 8 dar. Die vier aus dem Befehlsspeicher ausgelesenen Befehle werden in die Adressen 8, 9, 10 und 11 geschrieben.
Der Lesezeiger scope gibt 3 an, und es werden Befehle in den Adressen 3, 4, 5 und 6 der Warteschlange 13 ausgelesen. Es wird angenommen, daß in diesem Zyklus T zwei Befehle an Funktionseinheiten verteilt werden. Mit anderen Worten ist die Anzahl der ausgegebenen Befehle (issue_count) gleich 2. In diesem Fall wird im nächsten Zyklus T+1 der Wert des Lesezeigers scope um 2 auf 5 erhöht. Der Schreibzeiger queue_top wird um 4 auf 12 erhöht. Die Warteschlange 13 kann 4 Befehle auf einmal schreiben und 4 Befehle auf einmal lesen. Diese Schreib- und Leseoperationen können asynchron ausgeführt werden.
Um einen Verzweigungsverzögerungs-Slot zu entscheiden wird ein Befehlsblock definiert. Die folgenden vier Befehle werden als Befehlsblock bezeichnet:
Befehle, deren Adressen in einer Befehlswarteschlange 4n, 4n+1, 4n+2 und 4n+3 (n: ganze Zahl) lauten.
Ein Verzweigungsverzögerungs-Slot ist so definiert, daß er im Bereich von einem Slot unmittelbar nach einem Verzweigungsbefehl bis zum letzten Slot eines Befehlsblocks unmittelbar nach einem Befehlsblock mit einem Verzweigungsbefehl liegt. Fig. 7 zeigt einen Befehlsblock und einen Verzweigungsverzögerungs-Slot. Wie in Fig. 7 dargestellt ist, ist der Bereich von einem Slot unmittelbar nach dem Verzweigungsbefehl bis zum letzten Slot des nächsten Blocks B2, der diesem Block B1 benachbart ist, als Verzweigungsverzögerungs-Slot (in Fig. 7 durch schräge Linien bezeichnet) definiert, wenn ein Verzweigungsbefehl in einem Block B1 enthalten ist. Für den Fall der Fig. 7 ist die Anzahl der im Verzweigungsverzögerungs-Slot enthaltenen Befehle (die Anzahl der Slots) gleich 5.
Der Verzweigungsverzögerungs-Slot wird mit Befehlen auf der Seite der Verzweigung gefüllt (Befehle, die nach einer Verzweigung ausgeführt werden sollen). Befehle, um den Verzweigungsverzögerungs- Slot zu füllen, müssen nur Befehle auf der Seite der Verzweigung und andere Befehle als ein Verzweigungsbefehl sein. Genauer gesagt kann jeder Befehl im Bereich von der Adresse eines Verzweigungszielbefehls bis zu einer Adresse, die einem als nächstes auszuführenden Verzweigungsbefehl um eine Adresse vorangeht, benutzt werden. Bei einem herkömmlichen Verzweigungsverzögerungsverfahren wird ein Befehl ausgewählt, durch den ein korrektes Ergebnis unabhängig von der Richtung, in die eine Verzweigung führt (Vorhandensein/Nicht-Vorhandensein einer Verzweigung), erzeugt wird, um einen Verzweigungsverzögerungs-Slot aufzufüllen.
Entsprechend der vorliegenden Erfindung wird der Verzweigungsverzögerungs-Slot nur mit Befehlen auf der Seite der Verzweigung aufgefüllt. Wenn das Ergebnis der Ausführung eines Verzweigungsbefehls angibt, daß keine Verzweigung vorgenommen werden soll und das Signal Not Taken aktiviert wird, führt die Hardware eine Steuerung so aus, daß die Befehle, die den Verzweigungsverzögerungs-Slot füllen, nicht ausgeführt werden. Nun folgt eine Beschreibung des Betriebs einer Befehlswarteschlange, wenn ein Verzweigungsbefehl ausgeführt wird.
"Wenn eine Verzweigung erfolgt: Signal Taken ist aktiv" Es wird angenommen, daß der Wert einer Adresse in der Warteschlange 13, an der ein Verzweigungsbefehl gespeichert ist und deren 2 niederwertige Bit weggelassen sind, gleich br_block ist, und daß der Wert der Schreibadresse queue_top, deren 2 niederwertige Bit weggelassen sind, gleichzeitig gleich qt_block ist. Ein Block, in dem ein Verzweigungsbefehl gespeichert ist (ein Block in der Warteschlange 13), und ein Block, in dem ein Befehl zu diesem Zeitpunkt geschrieben wird, werden beide jeweils durch Weglassen der zwei niederwertigen Bit dargestellt.
Wenn die Blockadressen br_block und qt_block gleich sind, so zeigt das an, daß noch kein Verzweigungsverzögerungs-Slot in die Befehlswarteschlange 9 eingelesen worden ist. In diesem Fall sollte der Verzweigungsverzögerungs-Slot im nächsten Zyklus eingelesen werden. Ein vorbestimmter Befehl wird gerade in den nächsten Block in der Warteschlange 13 geschrieben. Daher wird 4 zum Schreibzeiger queue_top addiert. Das wird durch die folgenden Ausdrücke dargestellt.
br_block=(Adresse einer Warteschlange, an der ein Verzweigungsbefehl gespeichert ist) (3. . .2)
gt_block=queue_top (3. . .2)
If br_block=qt_block
then queue_top=queue_top+4
wobei qt_block=queue_block (3. . .2) die Ersetzung des zweiten und dritten Bit in qt_block durch die Bit des Schreibzeigers queue_top angibt (äquivalent dem Weglassen der 2 niederwertigen Bit 0 und 1). Die Warteschlange 13 weist 16 Einträge auf, und der Schreibzeiger und Lesezeiger der Warteschlange wird durch 4 Bit dargestellt. Daher wird ein Block in der Warteschlange durch Überwachen der 2 höherwertigen Bit 2 und 3 identifiziert. Im oben angeführten Ausdruck gibt "=" an, daß der Wert der rechten und linken Seite übereinstimmt.
Wenn br_block und qt_block nicht gleich sind, so zeigt das an, daß der Verzweigungsverzögerungs-Slot bereits eingelesen und in der Befehlswarteschlange 9 gespeichert worden ist. In diesem Fall wird eine Adresse in der Warteschlange 13 zum Speichern eines Verzweigungszielbefehls, mit anderen Worten also eine Adresse nach einer Warteschlangenadresse, an der wiederum der Verzweigungsverzögerungs-Slot gespeichert ist, im Schreibzeiger queue_top eingestellt. Genauer gesagt gilt
If br_block!=qt_block
then queue_br_block O²+8
In diesem Ausdruck gibt "!=" an, daß die Werte der rechten und linken Seite nicht gleich sind. "" zeigt an, daß der rechte und linke Term kombiniert werden. Xn gibt an, daß die Operation X n-mal wiederholt wird. Daher gibt der oben angeführte Ausdruck O2 an, daß der Wert br_block gleich den 2 höherwertigen Bit gesetzt und den 2 niederwertigen Bit 0 hinzuaddiert wird. Durch diese Operation wird der Kopf oder die Startadresse eines Blocks erzeugt, in dem ein Verzweigungsbefehl enthalten ist. Die Addition von 8 zu dieser Kopfadresse erzeugt die Kopfadresse des Blocks, der auf den nächsten Block folgt.
Darüber hinaus wird in diesem Fall im nächsten Zyklus, nachdem der Verzweigungsbefehl ausgeführt worden ist, kein Verzweigungszielbefehl aus dem Befehlsspeicher (siehe Fig. 4) übertragen. Daher wird im nächsten Zyklus, nachdem der Verzweigungsbefehl ausgeführt worden ist, der Schreibzeiger queue_top gleich dem Wert gesetzt, als der Verzweigungsbefehl ausgeführt wurde.
Der Lesezeiger scope wird in derselben Weise aktualisiert wie in den anderen Fällen außer dem Fall, wenn ein Verzweigungsbefehl ausgeführt wird, und zwar unabhängig davon, ob ein Verzweigungsverzögerungs-Slot bereits eingelesen worden ist oder nicht.
Unter Bezugnahme auf die Zeichnungen folgt nun eine detaillierte Beschreibung der oben angeführten Operation. In den Fig. 8 bis 10 ist der Betrieb einer Warteschlange dargestellt, wenn in einem Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird, der Verzweigungsverzögerungs-Slot noch nicht eingelesen worden ist.
Fig. 8 zeigt ein Beispiel für den Zustand der Befehlswarteschlange 9 im Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird. Der Lesezeiger scope und der Schreibzeiger queue_top werden beide auf dem Wert 0 gehalten. Es wird angenommen, daß in der Adresse 2 der Warteschlange 13 ein Verzweigungsbefehl existiert, und daß dieser Verzweigungsbefehl im nächsten Zyklus ausgeführt wird.
Beim in Fig. 9 dargestellten nächsten Zyklus wird aufgrund des Ausdrucks br_block==qt_block der Schreibzeiger queue_top um 4 erhöht und nimmt den Wert 4 an. In die Adressen 4, 5, 6 und 7 der Warteschlange 13 werden die Befehle des Verzögerungs-Slot geschrieben. Gleichzeitig wird entsprechend einer Verzweigungszieladresse auf den Befehlsspeicher zugegriffen.
Im nächsten Zyklus wird der Schreibzeiger queue_top um 4 auf 8 erhöht, wie in Fig. 10 dargestellt ist. Der Befehl des Verzweigungsziels wird vom Befehlsspeicher übertragen. Die Adressen 8, 9, 10 und 11 der Warteschlange 13 werden mit dem Befehl des Verzweigungsziels beschrieben. Die Befehle im Verzögerungs-Slot, die durch den Lesezeiger scope bezeichnet werden, der eine Änderung entsprechend einem ausgegebenen Befehl erfuhr, sind Befehle auf der Seite der Verzweigung. Nach der Ausgabe eines Befehls im Verzweigungsverzögerungs-Slot werden die eingelesenen Verzweigungszielbefehle zu einer Dekodierstufe übertragen. Wenn ein Verzweigungsverzögerungs-Slot im Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird, noch nicht eingelesen worden ist, wird daher keine Leistungsverschlechterung (Leerstellen in einer Pipeline) aufgrund der ausgeführten Verzweigung erzeugt.
Die Fig. 11 bis 13 stellen die Zustände der Befehlswarteschlange 9 dar, wenn im Zyklus, in dem ein Verzweigungsbefehls ausgeführt wird, ein Verzweigungsverzögerungs-Slot bereits eingelesen worden ist.
Fig. 11 zeigt ein Beispiel für den Zustand der Warteschlange 13 im Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird. Der Lesezeiger scope gibt 0 an, und der Schreibzeiger queue_top zeigt 12 an. Nun wird ein Fall betrachtet, in dem an der Adresse 2 der Warteschlange 13 ein Verzweigungsbefehl existiert und der Verzweigungsbefehl in diesem Zyklus ausgeführt wird.
Beim nächsten in Fig. 12 dargestellten Zyklus wird der Schreibzeiger queue_top gleich 8, um die nächste Adresse des Verzweigungsverzögerungs-Slot zu speichern. In diesem Zyklus ist ein Befehl, der aus dem Befehlsspeicher kommt, ein unnötiger Befehl. Mit anderen Worten stellt er einen Befehl auf einer anderen Verzweigungszielseite als dem Verzögerungs-Slot dar (ein Befehl, der ausgeführt wird, wenn keine Verzweigung vorgenommen wird). Daher wird im nächsten Zyklus, der in Fig. 13 dargestellt ist, der Wert des Schreibzeigers queue_top nicht aktualisiert. Dieser unnötige Befehl kann in die Warteschlange 13 geschrieben werden. Dieser Befehl soll im nächsten Zyklus nur durch einen Verzweigungszielbefehl ersetzt werden.
Beim in Fig. 12 gezeigten Zyklus wird entsprechend einer Verzweigungszieladresse auf den Befehlsspeicher zugegriffen.
Beim in Fig. 13 dargestellten Zyklus wird vom Befehlsspeicher ein Verzweigungszielbefehl übertragen. Der Schreibzeiger queue_top hält den nächsten Wert des Verzweigungsverzögerungs-Slot. Daher werden die Warteschlangenadressen 8, 9, 10 und 11 mit Verzweigungszielbefehlen beschrieben. Wie aus dem Betrieb, der in den Fig. 11 bis 13 dargestellt ist, klar ersichtlich ist, wird durch die Ausführung einer Verzweigung keine Leistungsverschlechterung verursacht, wenn im Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird, ein Verzweigungsverzögerungs-Slot bereits eingelesen worden ist.
"Wenn keine Verzweigung erfolgt: Not Taken ist aktiv"
Unter den aus der Befehlswarteschlange 9 ausgelesenen und dekodierten Befehlen wird der Befehl nach dem Verzweigungsbefehl ungültig gemacht. Der Grund dafür ist, daß die Befehle nach dem Verzweigungsbefehl einem Verzweigungsverzögerungs-Slot entsprechen und der Verzweigungsverzögerungs-Slot nur Befehle auf der Seite der Verzweigung enthält. Wie oben beschrieben worden ist, stellt ein Befehl auf der Seite der Verzweigung, der sich in einem Verzweigungsverzögerungs-Slot befindet, einen Befehl der Verzweigungszielseite dar, der ausgeführt werden soll, wenn durch diesen Verzweigungsbefehl eine Verzweigung ausgeführt werden soll. Genauer gesagt reichen die Befehle auf der Seite der Verzweigung von einem Befehl einer Verzweigungszieladresse, der ausgeführt wird, wenn durch einen zu diesem Verzweigungsverzögerungs-Slot gehörenden Verzweigungsbefehl eine Verzweigung ausgeführt wird, bis zu einem Befehl in einem Adreßbefehl, der dem als nächstes auszuführenden Verzweigungsbefehl um einen Befehl vorangeht. Wenn eine Verzweigung ausgeführt wird, ist daher der Befehl, der in einen Verzweigungsziel-Befehlsblock eingeführt wird, ein Befehl, der nach den Befehlen ausgeführt werden soll, die den Verzögerungs-Slot bilden.
Wenn keine Verzweigung ausgeführt wird und das Signal Not Taken aktiv ist, darf der Befehl im Verzweigungsverzögerungs-Slot im nächsten Zyklus nicht ausgeführt werden. Der Befehl im Verzweigungsverzögerungs-Slot wird übergangen und der nächste Befehl sollte ausgeführt werden. Daher wird der Lesezeiger scope durch den folgenden Ausdruck dargestellt:
scope=br_blockO²+8
Wenn ein Befehlsblock nach dem Verzweigungsverzögerungs-Slot bereits eingelesen worden ist, ist der auszuführende Befehl bereits im Zyklus nach dem Zyklus, in dem der Verzweigungsbefehl ausgeführt wird, eingelesen worden. Daher wird durch die Ausführung des Verzweigungsbefehls keine Leistungsverschlechterung verursacht.
Wenn der Verzweigungsverzögerungs-Slot noch nicht eingelesen worden ist, wenn mit anderen Worten die Zeiger br_block und qt_block gleich sind, ist der auszuführende Befehl im Zyklus nach dem Zyklus, in dem der Verzweigungsbefehl ausgeführt wird, noch nicht eingelesen worden. Um auf das Einlesen des auszuführenden Befehls zu warten sollte die Pipeline für einen Zyklus angehalten werden. Wenn die Zeiger br_block und qt_block gleich sind, wird im nächsten Zyklus genauer gesagt die Ausgabe eines Befehls verhindert.
Unabhängig davon, ob der Verzweigungsverzögerungs-Slot bereits eingelesen worden ist oder nicht, wird der Schreibzeiger queue_top in derselben Weise aktualisiert wie für den Fall, daß ein Verzweigungsbefehl ausgeführt worden ist.
Die Fig. 14 bis 16 zeigen den Betrieb der Befehlswarteschlange, wenn das Signal Not Taken aktiv und der Verzweigungsverzögerungs-Slot noch nicht eingelesen worden ist. Unter Bezugnahme auf die Fig. 14 bis 16 folgt nun eine Beschreibung des Betriebs der Befehlswarteschlange, wenn durch einen Verzweigungsbefehl eine Verzweigung vorgenommen wird und der Verzweigungsverzögerungs-Slot noch nicht eingelesen worden ist.
Fig. 14 zeigt ein Beispiel für den Zustand der Warteschlange 13 im Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird. Der Lesezeiger scope und der Schreibzeiger queue_top geben beide 0 an. Es wird angenommen, daß in der Adresse 2 der Warteschlange 13 ein Verzweigungsbefehl existiert und der Verzweigungsbefehl in diesem Zyklus ausgeführt wird.
Im Zyklus nach der Ausführung des Verzweigungsbefehls, der in Fig. 15 dargestellt ist, wird dem Schreibzeiger queue_top 4 hinzuaddiert, so daß er den Wert 4 annimmt. Die Adressen 4, 5, 6 und 7 der Warteschlange 13 werden mit den Befehlen eines Verzögerungs-Slot beschrieben. Die auszuführenden Befehle werden nicht unter den Adressen 8, 9, 10 und 11 der Warteschlange 13 gespeichert. Die Ausgabe eines Befehls in diesem Zyklus wird verhindert. Genauer gesagt wird ein Ausgabeverhinderungssignal issue_stop an den in Fig. 15 gezeigten Befehlsausgabe-Analysebereich 10 übertragen und die Ausgabe von Befehlen verhindert.
Im nächsten Zyklus (Fig. 16) wird dem Schreibzeiger queue_top 4 hinzuaddiert, so daß er den Wert 8 annimmt. Zu diesem Zeitpunkt wird der vom Befehlsspeicher übertragene Befehlsblock gleichzeitig ausgelesen und dem Befehlsdekoder übergeben, weil der Lesezeiger scope 8 angibt.
Die Stufen des Superskalars arbeiten mit nicht-überlappenden 2- Phasen-Taktsignalen (T-Taktsignal und L-Taktsignal), die Eingangsstufe einer jeden Stufe weist einen Latch-Schaltkreis auf, der vom T-Taktsignal abhängig ist, zum Verriegeln eines zugeführten Signals, und der Ausgangsabschnitt weist ein L-Latch auf, das vom L- Taktsignal abhängig ist, zum Verriegeln eines angelegten Signals. Zu diesem Zeitpunkt wird das Schreiben von Daten in die Warteschlange 13 in Abhängigkeit vom T-Taktsignal ausgeführt, während das Lesen der Daten in Abhängigkeit vom L-Taktsignal ausgeführt wird. Daher wird das Schreiben eines Befehls, der vom Befehlsspeicher 13 zugeführt wird, in die Warteschlange 13 und deren Übertragung in den Befehlsdekoder gleichzeitig implementiert. Dieses Schreiben und Lesen von Daten kann in Abhängigkeit vom T-Taktsignal ausgeführt werden, wobei die Datenlesetaktung bezüglich der Datenschreibtaktung verzögert ist, und die Daten der Warteschlange 13 können ausgelesen werden, wenn das notwendig ist.
Für den Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird, wird unter Bezugnahme auf die Fig. 17 und 18 der Betrieb der Warteschlange beschrieben, wenn der Verzweigungsverzögerungs-Slot bereits eingelesen worden ist.
Fig. 17 zeigt ein Beispiel für den Zustand der Befehlswarteschlange 9 im Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird.
Der Lesezeiger scope gibt 0 an, der Schreibzeiger queue_top 8. Es wird angenommen, daß in der Adresse 2 der Warteschlange 13 ein Verzweigungsbefehl existiert, und der Verzweigungsbefehl im Zyklus der Fig. 17 ausgeführt wird.
Beim in Fig. 18 dargestellten Zyklus wird der Lesezeiger scope gleich 8, um die Adresse nach dem Verzögerungs-Slot anzugeben. Der Schreibzeiger queue_top wird um 4 erhöht und wird gleich 12 wie im üblichen Fall.
Wenn ein Verzweigungsverzögerungs-Slot bereits in dem Zyklus eingelesen worden ist, in dem ein Verzweigungsbefehl ausgeführt wird, erfolgt wie oben beschrieben keine Verschlechterung der Leistung aufgrund der Ausführung des Verzweigungsbefehls. Wenn kein Verzweigungsverzögerungs-Slot eingelesen ist, wird eine Einleseverzögerung um einen Zyklus verursacht, wenn keine Verzweigung erfolgt. Wenn die Bandbreite des Befehlseinlesens (die Anzahl der in einem Zyklus eingelesenen Befehle) größer als die mittlere Geschwindigkeit der Befehlsausgabe (die mittlere Anzahl von Befehlen, die in einem Zyklus ausgegeben werden) eingestellt wird, ist die Wahrscheinlichkeit hoch, daß ein Verzögerungs-Slot in dem Zyklus, in dem ein Verzweigungsbefehl ausgeführt wird, bereits eingelesen worden ist. Daher hält diese Struktur die Wahrscheinlichkeit sehr gering, daß die Leistung der Verarbeitungseinheit durch die Ausführung eines Verzweigungsbefehls verschlechtert wird.
Fig. 19 zeigt eine Liste von Logiken (oben beschrieben), die vom Zeigersteuerbereich 12 erzielt werden. In Fig. 19 gibt "X" einen beliebigen Wert an. "-" zeigt an, daß der Wert nicht angegeben ist.
Die Struktur des Zeigersteuerbereichs ist in den Fig. 20A und 20B gezeigt. In den Fig. 20A und 20B gibt 16a einen Addierer zum Addieren der Ausgabe eines Registers 15 und der Zahl 4, 16b einen Addierer zum Addieren der Ausgabe des Zeigers scope eines Registers 14 und der ausgegebenen Befehlsinformation issue_count, 16c einen Addierer zum Addieren der Kopfadresse br_blockO2 eines Blocks mit einem Verzweigungsbefehl (einem Block in einer Warteschlange) und der Zahl 8, 17a einen Selektor zum Auswählen der Ausgabe queue_top des Registers 15, der Ausgabe des Addierers 16a oder der Ausgabe des Addierers 16c und zum Schreiben des Auswahlergebnisses in das Register 15, 17b einen Selektor zum Auswählen der Ausgabe des Addierers 16b oder der Ausgabe des Addierers 16c und zum Schreiben des Auswahlergebnisses in das Register 14, 18 einen Komparator zum Vergleichen des Zeigers br_block und des Zeigers qt_block, 21 einen Inverter zum Invertieren der Ausgabe des Komparators 18, 22 einen UND-Schaltkreis zum Erzeugen des logischen Produkts der Ausgabe des Komparators 18 und des Signals Not Taken, 23 einen Inverter zum Invertieren des Signals Not Taken, 24 einen UND-Schaltkreis zum Erzeugen des logischen Produkts der Ausgabe des Inverters 21 und des Signals Taken, 19 ein Register zum Halten (Verzögern) der Ausgabe des UND-Schaltkreises 24 für einen Takt, und 25 einen NOR- Schaltkreis zum Erzeugen der negativen logischen Summe der Ausgabe des UND-Schaltkreises 24 und der im Register 19 gehaltenen Daten an.
Das Ausgabeverhinderungssignal issue_stop wird vom UND-Schaltkreis 22 erzeugt. Die Signale sel_c, sel_a und sel_b sind Signale zum Auswählen entsprechender Eingaben des Selektors 17a.
Die Signale sel_d sel_e sind Signale zum Auswählen entsprechender Eingaben des Selektors 17b.
Fig. 21 zeigt die Struktur des in Fig. 5 gezeigten Befehlsausgabe- Analyseabschnitts 10. Wie in Fig. 21 dargestellt ist, weist der Befehlsausgabe-Analyseabschnitt 10 einen Gefahranalyseabschnitt 30, einen Ausgabeverhinderungsabschnitt 31, einen Ausgabeanzahl- Berechnungsabschnitt 32 und ein Gatter 33 zum Steuern eines Verfügbarkeitssignals inst_avail entsprechend dem Ausgabeverhinderungssignal issue_inhibit auf.
Der Gefahranalyseabschnitt 30 analysiert eine Gefährdung zwischen Befehlen. Vier Befehle, nämlich die Befehle 1-4, werden in den Gefahranalyseabschnitt 30 eingegeben. Wenn unter den eingegebenen Befehlen der i-te Befehl von jeder Gefährdung frei ist, wird das i- te Signal ia (Verfügbarkeitssignal) aktiviert. "Gefährdung" gibt den Zustand an, in dem der Wert eines von einem Befehl zu benutzenden Registers (in einem Registersatz) nicht bestimmt ist. Diese Gefährdungsanalyse wird entsprechend dem Scoreboard des Registersatzes (das später beschrieben wird) ausgeführt.
Der Ausgabeverhinderungsabschnitt 31 empfängt die Befehle 1-4 und erzeugt ein Signal, das die niederwertigen 2 Bit der Adresse scope der Warteschlange ignoriert, in der ein Verzweigungsbefehl gespeichert ist. Der Ausgabeverhinderungsabschnitt 31 erzeugt mit anderen Worten eine Blockadresse br_block für die Befehlswarteschlange, zu der der Verzweigungsbefehl gehört. Der Ausgabeverhinderungsabschnitt 31 aktiviert auch ein entsprechendes Ausgabeverhinderungssignal issue_inhibit, um die Ausgabe eines Befehls zu verhindern, der außer bei einer Gefährdung unter allen Umständen verhindert werden sollte. Das Ausgabeverhinderungssignal issue_inhibit wird vom Ausgabestopsignal issue_stop aktiviert, das vom Zeigersteuerbereich 12 übertragen wird, oder es wird für die Befehle aktiviert, die einem Verzweigungsbefehl folgen, wenn das Signal Not Taken aktiv ist.
Das Gatter 33 weist einen Inverter zum Invertieren des Ausgabeverhinderungssignals issue_inhibit vom Ausgabeverhinderungsabschnitt 31 und einen UND-Schaltkreis zum Empfangen dieses Inverterausgangssignals und des Signals ia vom Gefährdungsanalyseabschnitt 30 auf. Der Inverter und der UND- Schaltkreis sind entsprechend Befehlen gebildet. Die Verfügbarkeitssignale inst_avail werden vom Gatter 33 entsprechend den Befehlen erzeugt. Genauer gesagt ist das Signal inst_avail das logische Produkt des Signals ia und des Signals/issue_inhibit (logisches nicht_issue_inhibit).
Der Ausgabeanzahl-Berechnungsabschnitt 32 empfängt die Signale inst_avail vom Gatter 33, berechnet die Anzahl der ausgegebenen Befehle und erzeugt ein Signal issue_count, das die Anzahl der ausgegebenen Befehle angibt.
Fig. 22 zeigt ein Logikdiagramm des Ausgabeverhinderungsabschnitts von Fig. 21. Wie in Fig. 22 gezeigt ist, ist ein Verzweigungserfassungsschaltkreis 43 entsprechend jedem der Befehle 1-4 gebildet. Der Verzweigungserfassungsschaltkreis 43 erfaßt, ob ein zugeführter Befehl einen Verzweigungsbefehl darstellt oder nicht und aktiviert das Ausgangssignal, wenn der zugeführte Befehl ein Verzweigungsbefehl ist.
Das Ausgangssignal des Verzweigungserfassungsschaltkreises 43 wird an einen Prioritätscodierer 44 angelegt. Der Prioritätscodierer 44 erfaßt die Position des Verzweigungsbefehls mit kleinster Adresse. Ein Signal (2-Bit-Wert), das die Position des Prioritätsverzweigungsbefehls anzeigt, wird vom Prioritätscodierer 44 abgegeben. Das Ausgangssignal des Prioritätscodierers 44 wird an den Addierer 45 angelegt. Der Addierer 45 addiert die Ausgabe des Prioritätscodierers und den Lesezeiger scope. Das Ausgangssignal des Addierers 45 gibt die Adresse der Verzweigungsbefehls in der Warteschlange an. Das Ausgangssignal des Addierers 45 wird einem Maskierungsschaltkreis 46 zur Maskierung niederwertiger Bit zugeführt. Der Maskierungsschaltkreis 46 schneidet die 2 niederwertigen Bit der Ausgabe ab (setzt sie auf "0") und gibt damit einen Zeiger br_block aus.
Die ODER-Gatter OR1-OR5 und die UND-Gatter AN1-AN3 sind gebildet, um die Verhinderung der Ausgabe von Befehlen zu steuern. Wenn ein Befehl 1 einen Verzweigungsbefehl darstellt, wird ein Eingang eines jeden UND-Gatters AN1-AN3 auf "H" gezogen. Wenn das Signal Not Taken gleichzeitig den Pegel "H" erreicht, wird keine Verzweigung ausgeführt und die Ausgabe der Befehle 2-4 wird verhindert. Das führt zu einem aktiven Zustand des Signals issue_inhibit. Wenn das Signal Not Taken inaktiv ist, ist auch das Ausgabeverhinderungssignal issue_inhibit für jeden der Befehle 2-4 inaktiv und daher werden die Befehle ausgegeben. Wenn einer der Befehle 2-4 einen Verzweigungsbefehl darstellt, wird die Position des Ausgabeverhinderungssignals issue_inhibit im jeweiligen Ausgabeabschnitt gerade um 1 verschoben. Wenn das Signal issue_stop aktiviert wird, wird die Ausgabe der Befehle 1-4 verhindert.
Bei der oben beschriebenen Ausführungsform 1 wird der Befehl in die Befehlswarteschlange 9 voreingelesen. Nun wird eine Struktur beschrieben, die ein übliches Befehlsregister benutzt und den Befehl nicht voreinliest.
Die Fig. 23 zeigt die wesentliche Struktur einer Befehlsdekodierstufe, die in der zweiten Ausführungsform verwendet wird. Wie in Fig. 23 dargestellt ist, weist die Befehlsdekodierstufe ein Befehlsregister 54 zum Speichern zugeführter Befehle (Befehle 1- 4), einen Verzweigungsverarbeitungsabschnitt 11 zum Empfangen eines Befehls vom Befehlsregister 54, Erfassen eines Verzweigungsbefehls und Bestimmen, ob eine Verzweigung erfolgen soll oder nicht, und einen Befehlsausgabe-Analyseabschnitt 10 zum Empfangen eines Signals Not Taken vom Verzweigungsverarbeitungsbereich 11 und eines Befehls vom Befehlsregister 54 und zum Analysieren des zugeführten Befehls dahingehend, ob der Befehl ausgegeben werden soll oder nicht, auf. Bei der in Fig. 23 gezeigten Struktur ohne Befehlswarteschlange ist keine Struktur zur Steuerung des Zeigers einer Befehlswarteschlange gebildet. Bei der in Fig. 23 dargestellten Struktur ist die Definition eines Verzweigungsverzögerungs-Slot gleich wie bei der Beschreibung von Ausführungsform 1.
In Fig. 24 ist der Betrieb des Befehlsregisters gezeigt, wenn von einem Verzweigungsbefehl eine Verzweigung ausgeführt wird. Unter den Befehlen, die in das Befehlsregister 54 aufgenommen worden sind, sei der zweite Befehl ein Verzweigungsbefehl (Fig. 24A). Im Verzweigungsverarbeitungsbereich 11 ist bekannt, daß eine Verzweigung auf der Basis einer Ausführung dieses Verzweigungsbefehls ausgeführt werden soll, das Signal Taken wird aktiviert, und eine Verzweigungszieladresse wird zum Befehlsspeicher übertragen. Der Befehlsausgabe-Analyseabschnitt 10 analysiert, ob der im Befehlsregister 54 gespeicherte Befehl an eine Funktionseinheit ausgegeben werden kann oder nicht, und aktiviert das Signal inst_avail auf der Basis des Analyseergebnisses. Es wird angenommen, daß vier Befehle ausgegeben werden.
Im nächsten Zyklus, der in Fig. 24B dargestellt ist, werden die Befehle in einem Verzweigungsverzögerungs-Slot in das Befehlsregister 54 eingelesen. Diese Befehle werden in Funktionseinheiten eingegeben.
Im nächsten Zyklus (Fig. 24C) wird ein Befehl auf der Seite des Verzweigungsziels, der vom Befehlsspeicher zugeführt wird, im Registerspeicher 54 gespeichert und anschließend ausgeführt.
Im Fall der in Fig. 24 gezeigten Struktur, die die Befehle auf der Seite der Verzweigung als Verzweigungsverzögerungs-Slot benutzt, wird durch eine Verzweigung keine Verschlechterung der Leistung verursacht, wenn bei der Verzweigung das Signal Taken aktiv ist.
Fig. 25 zeigt den Betrieb des Befehlsregisters, wenn keine Verzweigung ausgeführt wird, das Signal Not Taken ist mit anderen Worten aktiv. Unter Bezugnahme auf die Fig. 25 wird nun der Betrieb des Befehlsregisters beschrieben, wenn das Signal Not Taken aktiv ist.
Es wird angenommen, daß unter den in das Register 54 eingelesenen Befehlen der zweite Befehl einen Verzweigungsbefehl darstellt (Fig. 25A). Der Verzweigungsverarbeitungsbereich 11 führt diesen Verzweigungsbefehl aus, weiß, daß das Signal Not Taken ausgegeben werden sollte (aktiv sein sollte), und aktiviert das Signal Not Taken, wodurch das dem Befehlsausgabe-Analyseabschnitt 10 mitgeteilt wird. Der Befehlsausgabe-Analyseabschnitt 10 verhindert bedingungslos die Ausgabe von Befehlen, die diesem Verzweigungsbefehl folgen.
Im nächsten Zyklus (Fig. 25B) werden die Befehle im Verzweigungsverzögerungs-Slot in das Befehlsregister 54 eingelesen. In diesem Zyklus ist die Ausgabe von Befehlen unterdrückt.
Im nächsten Zyklus (Fig. 25C) laufen Befehle nach dem Verzweigungsverzögerungs-Slot ein, die im Befehlsregister 54 registriert und anschließend ausgeführt werden.
Wie in den Fig. 25A-C gezeigt ist, wird die Ausgabe von Befehlen für 1 Taktzyklus verhindert, wenn keine Verzweigung ausgeführt wird und das Signal Not Taken aktiv ist. Das führt zu einer Verschlechterung der Leistung. Wenn diese Verzweigung nicht ausgeführt wird (das Signal Not Taken ist aktiv), wird das folgende Verfahren benutzt, durch das zwei Arten von Verzweigungsbefehlen folgendermaßen vorbereitet werden, um diese Leistungsverschlechterung zu verhindern. Dieser Zugang lautet genauer:
  • a) einen Verzweigungsverzögerungs-Slot mit Befehlen auf der Seite der Verzweigung (Verzweigungszielseite) zu füllen, und
  • b) den Verzweigungsverzögerungs-Slot mit Befehlen auf der Seite ohne Verzweigung zu füllen.
Der erste Zugang (a) wird bei den Ausführungsformen 1 und 2 benutzt. Der zweite Zugang stimmt mit dem Fall überein, in dem kein Verfahren mit verzögerter Verzweigung benutzt wird. Mit anderen Worten zieht der Zugang keinen Vorteil aus einem Verfahren mit verzögerter Verzweigung. Der erste Zugang (a) leidet unter keiner Leistungsverschlechterung, wenn eine Verzweigung auftritt, und wird für einen Verzweigungsbefehl mit hoher Verzweigungswahr­ scheinlichkeit benutzt. Der zweite Zugang (b) leidet unter keiner Leistungsverschlechterung, wenn keine Verzweigung auftritt, und wird für einen Verzweigungsbefehl mit geringer Verzweigungswahr­ scheinlichkeit benutzt. In diesem Fall kann ein Befehlsregister zum Empfangen der Ausgabe der Befehlswarteschlange in einer ID-Stufe gebildet sein, oder es kann auch nur die Befehlswarteschlange benutzt werden.
Fig. 26 zeigt ein Beispiel für die Struktur des in Fig. 23 dargestellten Befehlsausgabe-Analyseabschnitts 10. Die Struktur des in Fig. 26 gezeigten Befehlsausgabe-Analyseabschnitt ist ähnlich der in Fig. 21 dargestellten. Dem Ausgabeverhinderungsabschnitt 31 wird jedoch das Signal Not Taken und über ein Register 35 das Ausgabeverhinderungssignal issue_stop zugeführt. Das Register 35 besitzt die Funktion, das Signal Not Taken um 1 Taktzyklus zu verzögern. Die restliche Struktur ist der in Fig. 21 gezeigten ähnlich. Weil eine Befehlswarteschlange und/oder ein Befehlsregister für den Ausgabeverhinderungsabschnitt 31 benutzt wird, wie das auch bei der in Fig. 22 dargestellten Struktur der Fall ist, ist ein Prioritätscodierer zum Erfassen des Prioritätsverzweigungsbefehls unter den Befehlen 1-4 und zum Angeben seiner Position gebildet, und es werden die Strukturen des Maskierungsschaltkreises 46 für niederwertige Bit und des Addierers 45 verwendet.
Durch die Bildung des Ausgabeanzahl-Berechnungsabschnitts 32 wird die Ausgabebefehlsanzahl issue_count erzeugt. Befehle mit Adressen entsprechend der Anzahl ausgegebener Befehle können aus dem Befehlsspeicher gelesen werden, ohne die Befehlswarteschlange zu benutzen. Auch wenn das Befehlsregister benutzt wird, kann ein weiterer Befehlsblock aus dem Befehlsspeicher entnommen werden, nachdem alle im Register gespeicherten Befehle ausgegeben worden sind.
Bei den oben angeführten Ausführungsformen 1 und 2 wird ein Verzweigungsbefehl entsprechend einem Verfahren mit verzögerter Verzweigung verarbeitet, womit eine Verarbeitung mit hoher Geschwindigkeit erzielt wird. Als verfahren zur Verarbeitung eines Verzweigungsbefehls gibt es ein Verfahren mit Verzweigungsvorhersage. Wenn ein Verzweigungsbefehl existiert wird entsprechend diesem Verfahren der Verzweigungsvorhersage die Verzweigungsrichtung vorher vorhergesagt, und ein Verzweigungszielbefehl wird auf der Basis dieser Vorhersage ausgeführt. Wenn die Vorhersage korrekt ist, wird entsprechend dem Verzweigungsvorhersageverfahren die Zeit zum Einlesen eines Zielbefehls eingespart und daher die Leistungsverschlechterung reduziert. Nun folgt die Beschreibung einer Struktur entsprechend diesem Verzweigungsvorhersageverfahren.
Fig. 27 zeigt schematisch die Strukturen einer Befehlseinlesestufe und einer Befehlsdekodierstufe, die zu dieser dritten Ausführungsform gehören. In der folgenden Beschreibung der dritten Ausführungsform werden vier Einheiten für eine Ganzzahlarithmetikoperation als Funktionseinheiten betrachtet.
Die Befehlswarteschlange 9 liest Befehle aus dem Befehlsspeicher vorein und speichert die voreingelesenen Befehle. Die Befehlswarteschlange 9 weist ein Register 14 zum Halten eines Lesezeigers scope, ein Register 15 zum Halten eines Schreibzeigers queue_top und eine Warteschlange 13 zum Speichern von Befehlen wie im Fall der ersten Ausführungsform auf. Die Warteschlange 13 speichert als einen Eintrag einen Befehl, die Adresse des Befehls (die Adresse im Befehlsspeicher) und ein Flag br_inv (das später beschrieben wird), das angibt, das der Befehl einen vorhergesagten Verzweigungsbefehl darstellt.
Ein Befehlsdekoder 66 dekodiert einen Befehl, der aus der Befehlswarteschlange 9 ausgelesen worden ist und analysiert, welcher Befehl ausgebbar ist, wie im Fall der oben angeführten Ausführungsformen. Das Analyseergebnis wird als Flag ausgegeben, das die Verfügbarkeit des Befehls anzeigt, nämlich als Verfügbarkeits- Flag flag_inst_avail auf die Signalleitung 91. Bei der in Fig. 27 dargestellten Struktur werden vier Befehle aus der Befehlswarteschlange 9 ausgelesen, und die Ausgabeanalyse dieser Befehle wird im Befehlsdekoder 66 ausgeführt. Daher werden vier Bit an Verfügbarkeits-Flags ausgegeben, und falls ein Befehl ausgebbar ist wird ein entsprechendes Flag in_inst_avail im Flag id_inst_vail zu 4 Bit aktiviert.
Der Befehlsdekoder 66 gibt das Ergebnis der Befehlsdekodierung, mit anderen Worten also einen Operationscode auf eine Signalleitung 97 als Code ID-code aus. Der Operationscode ID-code und das Verfügbarkeits-Flag inst_avail des Befehls laufen stets zusammen zur Funktionseinheit. Im folgenden bezeichnet EXC_code einen Operationscode, der zu einer Ausführungsstufe EXC läuft, und EXC_inst_avail stellt das Verfügbarkeits-Flag des Befehls in der Ausführungsstufe EXC dar. Dieselbe Bezeichnung wird für die Speicherzugriffsstufe MEM benutzt. Der Befehlsdekoder 66 steuert ferner die Werte der Zeiger scope und queue_top der Register 14 und 15. Die Steuerung wird später beschrieben.
Bei der in Fig. 27 dargestellten Struktur werden die vier aus der Befehlswarteschlange auf einmal ausgelesenen Befehle in den Befehlsregistern 65a-65d gespeichert und an den Befehlsdekoder 66 angelegt. Die Befehlsregister 65a-65d weisen jeweils einen Adreßspeicherbereich, einen Befehlscode-Speicherbereich und einen Bereich zur Speicherung des Flag br_inv auf.
Der Befehlsdekoder 66 steuert ferner den Wert des Befehlszählers 12. Ein Zugriff auf einen Befehls-Cache 61 wird entsprechend einem Zeiger PC ausgeführt, der vom Befehlszähler 12 ausgegeben wird, und die vier Befehle werden gleichzeitig vom Befehls-Cache 61 eingelesen.
Der Registersatz 69 ist zur Speicherung von Daten verfügbar und kann von der Befehlsdekodierstufe und den Funktionseinheiten angesprochen werden.
Ein Scoreboard-Steuerschaltkreis 100 und ein Scoreboard-Schaltkreis 101 sind zur Überwachung der Zustände der Register im Registersatz 69 gebildet. Der Betrieb des Steuerschaltkreises 100 und des Scoreboard-Schaltkreis 101 wird später detailliert beschrieben.
Ein Verzweigungsbefehl wird folgendermaßen ausgeführt.
Als Beispiel für einen Verzweigungsbefehl wird folgender Befehl betrachtet: "Wenn das Register R1 den Wert 0 anzeigt erfolgt eine Verzweigung zu einer Adresse, die durch Addition von 5 zur Adresse des Verzweigungsbefehls erzeugt wird" (die "5" wird als Verzweigungs-Offset bezeichnet).
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: R₁←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 Logikschaltkreis des Scoreboard-Steuerschaltkreises 101 zur Steuerung des Scoreboards. Der Befehlsdekoder 66 aktiviert ein Signal issue_load, wenn er einen Ladebefehl ausgibt. Die Speicherzugriffsstufe MEM der Lade/Speichereinheit aktiviert ein Signal MEM_load, wenn es Daten aus einem Daten-Cache (Datenspeicher) lesen kann. Jedes der Bits des Scoreboards RF_lkf weist ein Schreibaktivierungssignal RF_lkf_we<31:0< auf. Das Schreiben in ein Register findet nur dann statt, wenn das Schreibaktivierungssignal aktiv ist. In ähnlicher Weise ist das Schreibaktivierungssignal RF_lkf_pred_we<31:0< für das Flag RF_lkf_pred gebildet. Wenn das Signal RF_lkf_pred_reset aktiviert wird, werden darüber hinaus alle Flags des Scoreboards RF_lkf_pred für die Vorhersage gesetzt.
Bei der oben beschriebenen Logik kann die Steuerung des Scoreboard RF_lkf und RF_lkf pred durch eine Wahrheitstafel ausgedrückt werden, die in Fig. 30 gezeigt ist. Wenn man die in Fig. 30 gezeigte Wahrheitstafel durch einen Logikschaltkreis ausdrückt, erhält man die in Fig. 31 dargestellte Schaltkreiskonfiguration. Bei der in Fig. 31 gezeigten Konfiguration ist nur ein Steuerabschnitt entsprechend einem Registersatz gezeigt. Ein Dekoder 140 dekodiert ein Schreibregistersignal (5 Bit) und wählt eine der Ausgangssignalleitungen aus (zusammen 32 Ausgangssignalleitungen sind für die Schreibregister gebildet). Das logische Produkt des Ausgangssignals des Dekoders 140 und des Signals issue_load wird erzeugt. Daten werden in Abhängigkeit von den Schreibaktivierungssignalen RF_lkf_we(i) bzw. RF_lkf_pred_we<i< in die Register 141 und 142 geschrieben. Die Ausgangssignale der Register 141 und 142 werden zum Befehlsdekoder 66 übertragen.
In Fig. 32 ist eine Funktionsstruktur des Befehlsdekoders 66 gezeigt. Wie in Fig. 32 dargestellt ist, dekodiert der Befehlsdekoderschaltkreis 160 vier Befehle, nämlich die Befehle #1- #4, und gibt einen Operationscode ID_code aus. Ein Ausgabeanalyseabschnitt 161 empfängt diese Befehle #1-#4 und ein Flag br_inv, analysiert, ob die Befehle ausgebbar sind und gibt ein Ausgabe-Flag ID_inst_avail aus.
Ein Verzweigungsverarbeitungsabschnitt 164 empfängt die Befehle #1- #4, erfaßt einen Verzweigungsbefehl und führt den Verzweigungsbefehl aus. Wenn der Verzweigungsbefehl nicht in einem Zyklus ausgeführt werden kann, gibt der Verzweigungsverarbeitungsabschnitt 164 ein Flag pr_ex aus, das angibt, daß eine Verzweigungsvorhersage abläuft. Der Verzweigungsverarbeitungsabschnitt 164 erzeugt ferner Signale Taken und Not Taken, die das Vorhandensein bzw. Nicht-Vorhandensein einer Verzweigung anzeigen, wenn die Ausführung des Verzweigungsbefehls abgeschlossen ist.
Ein Register 163 empfängt das Signal pr_ex vom Verzweigungsverarbeitungsabschnitt 164 und speichert es als Flag on_pred ab.
Ein Vorhersage-Flag-Erzeugungsschaltkreis 162 empfängt das Flag br_inv, die Signale Taken und Not Taken und das Flag on_pred vom Verzweigungsverarbeitungsabschnitt 164 und erzeugt ein Vorhersage­ Flag ID_inst_pred. Die Signale Taken und Not Taken vom Verzweigungsverarbeitungsabschnitt 164 werden dem Ausgabeanalyseabschnitt 161 zugeführt. Der Betrieb der jeweiligen Schaltkreise stimmt mit dem Betrieb beim oben angeführten Signalerzeugungsverfahren überein und die Beschreibung wird nicht wiederholt.
Obwohl bei der oben angeführten Ausführungsform die Anzahl der auf einmal einzulesenden Befehle und die Anzahl der auf einmal zu analysierenden Befehle gleich vier ist, ist die Anzahl der Befehle nicht auf vier beschränkt, sondern kann andere Zahlen annehmen.
Die Besonderheiten des ersten Aspekts der vorliegenden Erfindung können folgendermaßen zusammengefaßt werden.
  • 1) Unter einer Mehrzahl von Befehlen, die einen Verzweigungsbefehl enthalten, bilden die Befehle beginnend mit dem Befehl, der sich eine Adresse hinter dem Verzweigungsbefehl befindet, bis zum Befehl, der als letztes in den Zyklen eingelesen wird, die notwendig sind, um den Verzweigungsbefehl einzulesen und auszuführen, einen Verzweigungsverzögerungs-Slot.
  • 2) Der Verzweigungsverzögerungs-Slot wird mit Befehlen beginnend mit einem Befehl einer Verzweigungszieladresse, der ausgeführt wird, wenn eine Verzweigung aufgrund eines Verzweigungsbefehls, der zum Verzweigungsverzögerungs-Slot gehört auftritt, bis zu einem Befehl Verzweigungsbefehl aufgefüllt.
  • 3) Im Zyklus, in dem Befehle aus einem Befehlsspeicher voreingelesen und in einem Warteschlangenspeicher gespeichert werden, und in dem ein Verzweigungsbefehl ausgeführt wird, wird bestimmt, ob der Verzweigungsverzögerungs-Slot des Verzweigungsbefehls bereits im Warteschlangenspeicher gespeichert worden ist. Auf der Basis des Bestimmungsergebnisses werden die Schreibadressen und die Leseadressen des Warteschlangenspeichers und auf der Basis der Information, ob eine Verzweigung aufgetreten ist, die aus dem Ergebnis der Ausführung des Verzweigungsbefehls erhalten wird, werden die Schreibadressen und die Leseadressen des Warteschlangenspeichers gesteuert.
  • 4) Wenn ein Verzweigungsbefehl ausgeführt wird, und entschieden ist, daß als Ergebnis eine Verzweigung auftritt, wird die Schreibadresse der Warteschlange gleich einer Adresse gesetzt, die durch Addition der Anzahl der eingelesenen Befehle zum aktuellen Wert erzeugt wird, wenn alle Befehle im Verzweigungsverzögerungs- Slot des Verzweigungsbefehls noch nicht im Warteschlangenspeicher gespeichert worden sind.
  • 5) Wenn ein Verzweigungsbefehl ausgeführt wird, und entschieden ist, daß als Ergebnis eine Verzweigung auftritt, wird die Schreibadresse der Warteschlange gleich einer Adresse gesetzt, die unmittelbar auf die Warteschlangenadresse folgt, in der der Befehl der letzten Adresse des Verzweigungsverzögerungs-Slot gespeichert ist, wenn alle Befehle im Verzweigungsverzögerungs-Slot des Verzweigungsbefehls im Warteschlangenspeicher gespeichert worden sind.
  • 6) Wenn ein Verzweigungsbefehl ausgeführt wird, und entschieden ist, daß als Ergebnis eine Verzweigung auftritt, wird die Leseadresse des Warteschlangenspeichers um die Anzahl der Befehle erhöht, die an Funktionseinheiten ausgegeben werden.
  • 7) Wenn ein Verzweigungsbefehl ausgeführt wird, und entschieden ist, daß als Ergebnis keine Verzweigung auftritt, wird die Ausgabe des Befehls nach dem Verzweigungsbefehl, der an die Funktionseinheit ausgegeben werden soll, gestoppt.
  • 8) Wenn ein Verzweigungsbefehl ausgeführt wird, und entschieden ist, daß als Ergebnis eine Verzweigung auftritt, wird die Leseadresse des Warteschlangenspeichers gleich einer Adresse unmittelbar nach der Adresse des Warteschlangenspeichers gesetzt, an der der Befehl der letzten Adresse des Verzweigungsverzögerungs-Slot gespeichert ist oder gespeichert werden soll.
  • 9) Wenn ein Verzweigungsbefehl ausgeführt wird, und entschieden ist, daß als Ergebnis eine Verzweigung auftritt, wird die Ausgabe eines Befehls gestoppt, bis alle Befehle des Verzweigungsverzögerungs-Slot gespeichert worden sind, wenn alle Befehle des Verzweigungsverzögerungs-Slot des Verzweigungsbefehls noch nicht im Warteschlangenspeicher gespeichert worden sind.
Die Besonderheiten des zweiten Aspekts der vorliegenden Erfindung können folgendermaßen zusammengefaßt werden.
  • 1) Eine Mehrzahl von Befehlen wird aus einem Befehlsspeicher voreingelesen, und es ist ein Warteschlangenspeicher zum Sp 04136 00070 552 001000280000000200012000285910402500040 0002004222776 00004 04017eichern der voreingelesenen Befehle gebildet. Der Warteschlangenspeicher weist eine Mehrzahl von Einträgen auf, in denen jeweils ein Befehl gespeichert wird. Der Eintrag weist ein Feld auf, das angibt, daß der gespeicherte Befehl bereits auf der Basis einer Verzweigungsvorhersage ausgeführt worden ist.
  • 2) Auf der Basis des Werts des Feldes, das die Ausführung auf der Basis der Vorhersage angibt, erfolgt eine Steuerung, so daß der im entsprechenden Eintrag gespeicherte Befehl nicht ausgeführt wird.
  • 3) Ein Befehl, durch den die Speicherung einer Rückkehradresse im Register eines Registersatzes und die Verzweigung gleichzeitig ausgeführt werden, wird auf der Basis einer Verzweigungsvorhersage ausgeführt, wobei nur die Verzweigung ausgeführt wird, und die Speicherung der Rückkehradresse im Register ausgeführt wird, wenn der Befehl ausführbar wird.
  • 4) Befehle jeweils in einer Funktionseinheit (einer Pipeline) weisen ein erstes Flag (inst_pred), das anzeigt, daß der Befehl in einem Zeitraum ausgelöst worden ist, bevor entschieden ist, ob die Vorhersage korrekt ist oder nicht, nachdem eine Verzweigungsvorhersage ausgeführt worden ist, und ein zweites Flag (inst_avail), das anzeigt, daß der Befehl verfügbar ist, auf. Wenn sich die Verzweigungsvorhersage als korrekt erweist, wird das erste Flag (inst_pred) gelöscht, während das zweite Flag eines Befehls mit gesetztem ersten Flag gelöscht wird, wenn sich die Vorhersage als inkorrekt herausstellt, und auch das erste Flag gelöscht wird.
  • 5) Ein Registersatz (ein Vielzweckregister) weist ein drittes Flag (RF_lkf), das anzeigt, daß ein Schreiben in das Register Stattfindet, und ein viertes Flag (RF_lkf_pred) auf, das anzeigt, daß der Befehl, der das Flag steuert, in der Zeitspanne nach einer Verzweigungsvorhersage und bevor entschieden ist, ob die Vorhersage korrekt ist oder nicht, ausgegeben worden ist. Ist die Vorhersage korrekt, werden die vierten Flags aller Vielzweckregister zurückgesetzt. Wenn sich die Vorhersage als inkorrekt herausstellt, wird das dritte Flag des Registers, dessen viertes Flag gesetzt ist, gelöscht.
In Übereinstimmung mit der Erfindung kann eine Leistungsverschlechterung aufgrund der Ausführung eines Verzweigungsbefehls unabhängig davon verhindert werden, ob eine Verzweigung auftritt oder nicht, wenn ein Verzweigungsverzögerungs- Slot, der einem Verzweigungsbefehl zugeordnet ist, mit den Befehlen auf der Seite der Verzweigung gefüllt wird.
Darüber hinaus werden Befehle aus einem Befehlsspeicher voreingelesen und in einem Warteschlangenspeicher gespeichert. Ein Schreibzeiger und ein Lesezeiger in die Warteschlange werden stets so gesteuert, daß in einer Pipeline keine leere Stufe erzeugt wird, wenn ein Verzweigungsbefehl ausgeführt wird. Eine Leistungsverschlechterung aufgrund einer Ausführung des Verzweigungsbefehls kann dadurch effizient und sicher verhindert werden.
Darüber hinaus verhindert in einer Struktur, bei der Befehle nicht voreingelesen werden, das Auffüllen eines Verzweigungsverzögerungs- Slot mit Befehlen der Verzweigungszielseite eine Leistungsverschlechterung durch einen Verzweigungsbefehl, wenn vom Verzweigungsbefehl eine Verzweigung ausgeführt wird.
Entsprechend der vorliegenden Erfindung wird ein Verzweigungsbefehl auf der Basis einer Verzweigungsvorhersage ausgeführt, bevor eine Gefährdung verschwindet. Im Fall einer Verzweigung ist daher der Zyklus, der herkömmlicherweise notwendig ist, um auf das Einlaufen eines Verzweigungszielbefehls aus einem Befehls-Cache zu warten, hier unnötig. Ein Zielbefehl wird auf der Basis einer Vorhersage vorher eingelesen und der Zyklus zum Warten auf den Zielbefehl vom Befehls-Cache ist nicht mehr notwendig, wodurch in der Pipeline keine leeren Stufen erzeugt werden. Damit kann die Leistungsverschlechterung einer Parallelverarbeitungseinheit aufgrund eines Verzweigungsbefehls verhindert werden.

Claims (22)

1. Parallelverarbeitungseinheit mit einem Befehlsspeicher (1) zum Speichern von Befehlen und einer Mehrzahl von Funktionseinheiten (4a, 4b, 6, 7), die parallel betreibbar sind, zum Ausführen von Befehlen, aufweisend
eine Einleseeinrichtung (2), die von einer Adresse abhängig ist, zum Einlesen einer Mehrzahl von Befehlen auf einmal aus dem Befehlsspeicher,
eine Erfassungseinrichtung (3, 10) zum Erfassen eines Verzweigungsbefehls unter den eingelesenen Befehlen, und eine Bildungseinrichtung (9, 11, 12, 54), die von der Erfassungseinrichtung abhängig ist, zum Bilden eines Verzweigungsverzögerungs-Slot, der alle Befehle enthält, die während eines Zeitraums vom Einlesen des Verzweigungsbefehls bis zur Ausführung des Verzweigungsbefehls eingelesen werden, wobei die Befehle im Verzweigungsverzögerungs-Slot in der Befehlssequenz auf den Verzweigungsbefehl folgen.
2. Parallelverarbeitungseinheit nach Anspruch 1, dadurch gekennzeichnet, daß der Verzweigungsverzögerungs-Slot nur Befehle enthält, die ausgeführt werden, wenn durch den Verzweigungsbefehl eine Verzweigung ausgeführt wird.
3. Parallelverarbeitungseinheit nach Anspruch 1, dadurch gekennzeichnet, daß die Bildungseinrichtung (9, 12) eine Speichereinheit (13) aufweist, die eine Mehrzahl von Speicherblöcken zum sequentiellen Speichern von parallel aus dem Befehlsspeicher eingelesenen Befehlen umfaßt, wobei der Verzweigungsverzögerungs-Slot Befehle enthält, die im selben Block wie der Verzweigungsbefehl und in einem Block, der diesem Block in Ausführungsrichtung benachbart ist, gespeichert sind.
4. Parallelverarbeitungseinheit nach Anspruch 3, dadurch gekennzeichnet, daß ein Block der Speichereinheit Befehle speichert, die der Anzahl nach der Mehrzahl von Befehlen gleich sind, die aus dem Befehlsspeicher auf einmal eingelesen werden.
5. Parallelverarbeitungseinheit nach Anspruch 1, dadurch gekennzeichnet, daß der Verzweigungsverzögerungs-Slot Befehle derjenigen Befehle von einem Befehl an einer Verzweigungszieladresse, der ausgeführt wird, wenn durch den Verzweigungsbefehl eine Verzweigung erfolgt, bis zu einem Befehl unmittelbar vor einem nächsten Verzweigungsbefehl in einer Befehlsfolge, enthält.
6. Parallelverarbeitungseinheit nach Anspruch 1, dadurch gekennzeichnet, daß
die Bildungseinrichtung (9, 12)
eine Speichereinrichtung (13) zum Speichern von Befehlen, die aus dem Befehlsspeicher eingelesen werden,
eine Schreibzeigereinrichtung (15) zum Erzeugen eines Schreibzeigers, der eine Adresse der Speichereinheit anzeigt, an der die eingelesenen Befehle gespeichert werden,
eine Lesezeigereinrichtung (14) zum Erzeugen eines Lesezeigers, der eine Adresse der Speichereinheit anzeigt, an der Befehle ausgelesen werden,
eine Bestimmungseinrichtung (12), die von der Erfassungseinrichtung (10) abhängig ist, zum Bestimmen, ob ein Verzweigungsverzögerungs- Slot für den Verzweigungsbefehl bereits in der Speichereinheit gespeichert worden ist,
eine Entscheidungseinrichtung (11) zum Entscheiden, ob durch den Verzweigungsbefehl eine Verzweigung erfolgt, und
eine Steuereinrichtung (12), die vom Schreibzeiger, Lesezeiger, der Bestimmungseinrichtung und der Entscheidungseinrichtung abhängig ist, zum Steuern des Schreibzeigers der Schreibzeigereinrichtung und des Lesezeigers der Lesezeigereinrichtung, aufweist.
7. Parallelverarbeitungseinheit nach Anspruch 6, dadurch gekennzeichnet, daß die Steuereinrichtung (12) eine Einrichtung (17a) aufweist zum Einstellen des Schreibzeigers auf einen Wert gleich der Summe des aktuellen Wertes des Schreibzeigers und der Anzahl der aus dem Befehlsspeicher eingelesenen Befehle, wenn die Bestimmungseinrichtung ermittelt, daß der Verzweigungsverzögerungs- Slot für den Verzweigungsbefehl noch nicht mit Befehlen aufgefüllt worden ist, die auf den Verzweigungsbefehl folgen, und wenn die Entscheidungseinrichtung entscheidet, daß eine Verzweigung erfolgt.
8. Parallelverarbeitungseinheit nach Anspruch 6 oder 7, dadurch gekennzeichnet, daß die Steuereinrichtung (12) eine Einrichtung (17a) aufweist zum Einstellen des Schreibzeigers auf den Wert der Adresse, die unmittelbar auf die letzte Adresse des Verzweigungsverzögerungs-Slot folgt, wenn die Bestimmungseinrichtung ermittelt, daß der Verzweigungsverzögerungs-Slot für den Verzweigungsbefehl mit Befehlen aufgefüllt worden ist, die auf den Verzweigungsbefehl folgen, und wenn die Entscheidungseinrichtung entscheidet, daß eine Verzweigung erfolgt.
9. Parallelverarbeitungseinheit nach einem der Ansprüche 6 bis 8, dadurch gekennzeichnet, daß die Steuereinrichtung (12) eine Einrichtung (17b) aufweist zum Einstellen des Lesezeigers auf einen Wert, der um die Anzahl der Befehle erhöht ist, die an Funktionseinheiten der Mehrzahl von Funktionseinheiten übergeben worden sind, wenn die Entscheidungseinrichtung entscheidet, daß die Verzweigung erfolgt.
10. Parallelverarbeitungseinheit nach einem der Ansprüche 6 bis 9, dadurch gekennzeichnet, daß die Steuereinrichtung (12) eine Einrichtung (22) aufweist zum Stoppen der Übergabe von Befehlen, die auf den Verzweigungsbefehl folgen, wenn die Entscheidungseinrichtung entscheidet, daß durch den Verzweigungsbefehl keine Verzweigung erfolgt.
11. Parallelverarbeitungseinheit nach einem der Ansprüche 6 bis 10, dadurch gekennzeichnet, daß die Steuereinrichtung (12) eine Einrichtung (17b) aufweist zum Einstellen des Lesezeigers auf den Wert einer Adresse nach der letzten Adresse des Verzweigungsverzögerungs-Slot, wenn die Entscheidungseinrichtung entscheidet, daß keine Verzweigung erfolgt.
12. Parallelverarbeitungseinheit nach einem der Ansprüche 6 bis 11, dadurch gekennzeichnet, daß die Steuereinrichtung (12) eine Einrichtung (22) aufweist zum Stoppen der Übergabe von Befehlen an eine Funktionseinheit, wenn die Bestimmungseinrichtung entscheidet, daß nicht alle Befehle für den Verzweigungsverzögerungs-Slot in der Speichereinheit gespeichert sind, wenn die Entscheidungseinrichtung entscheidet, daß durch den Verzweigungsbefehl keine Verzweigung erfolgt.
13. Parallelverarbeitungseinheit nach Anspruch 1, dadurch gekennzeichnet, daß die Bildungseinrichtung (9, 11, 12) eine Speichereinrichtung (13) aufweist, zum Bilden einer Warteschlange für die Befehle, die aus dem Befehlsspeicher eingelesen werden.
14. Parallelverarbeitungseinheit nach Anspruch 6, dadurch gekennzeichnet, daß die Speichereinrichtung (9) einen Warteschlangenspeicher (13) aufweist.
15. Parallelverarbeitungseinheit nach Anspruch 1, dadurch gekennzeichnet, daß die Bildungseinrichtung (9, 11, 12, 54) eine Mehrzahl von Befehlsregistern (54) aufweist zum parallelen Speichern der Mehrzahl von Befehlen, die aus dem Befehlsspeicher eingelesen werden.
16. Parallelverarbeitungseinheit nach Anspruch 15, dadurch gekennzeichnet, daß der Verzweigungsverzögerungs-Slot durch Befehle, die gleichzeitig mit und nach dem Verzweigungsbefehl eingelesen werden, und durch Befehle, die auf einmal unmittelbar anschließend aus dem Befehlsspeicher gelesen und in der Mehrzahl von Befehlsregistern gespeichert werden, gebildet wird.
17. Parallelverarbeitungseinheit mit einer Mehrzahl von Funktionseinheiten, die parallel betreibbar sind, zum Ausführen von Befehlen, und einem Befehlsspeicher zum Speichern von Befehlen, aufweisend,
eine Speichereinrichtung (9) zum Speichern von Befehlen, die aus dem Befehlsspeicher eingelesen werden, wobei die Speichereinrichtung eine Mehrzahl von Einträgen aufweist und jeder der Einträge ein erstes Feld für einen Befehl und ein zweites Feld zum Speichern eines Flag, das anzeigt, daß der zugehörige Befehl unter einer Verzweigungsvorhersage ausgeführt wird, umfaßt,
eine Vorhersageeinrichtung (66) zum Erfassen eines Verzweigungsbefehls unter den Befehlen, die aus der Speichereinrichtung ausgelesen worden sind, und zum Vorhersagen, ob vom Verzweigungsbefehl eine Verzweigung ausgeführt wird,
eine Einstelleinrichtung (85, 86), die von der Vorhersageeinrichtung abhängig ist, zum Einstellen des Werts eines Flag im zweiten Feld, und
eine Steuereinrichtung (Gatter in Fig. 28), die vom Wert des Flag abhängig ist, zum Steuern der Ausführung oder Nicht-Ausführung eines zugehörigen Befehls.
18. Parallelverarbeitungseinheit nach Anspruch 17, dadurch gekennzeichnet, daß die Steuereinrichtung (Gatter in Fig. 28) eine Einrichtung aufweist, zum Verhindern der Ausführung eines Befehls, wenn das zugehörige Flag anzeigt, daß der Befehl entsprechend einer von der Vorhersageeinrichtung vorhergesagten Verzweigung ausgeführt wird.
19. Parallelverarbeitungseinheit nach Anspruch 17, gekennzeichnet durch einen Registersatz (69) mit einer Mehrzahl von Registern, wobei die Steuereinrichtung eine Einrichtung (100, 101) aufweist zum Speichern einer Rückkehradresse in einem Register des Registersatzes, wenn der Verzweigungsbefehl tatsächlich ausgeführt werden kann, falls der Verzweigungsbefehl einen Befehl zum Speichern der Rückkehradresse im Register aufweist, die notwendig ist, um von einer ausgeführten Verzweigung zurückzukehren.
20. Parallelverarbeitungseinheit nach Anspruch 17, dadurch gekennzeichnet, daß
die Steuereinrichtung eine Ausgabeeinrichtung (160), die eine Mehrzahl von Befehlen aus dem Befehlsspeicher empfängt, gleichzeitig ausführbare Befehle unter den empfangenen Befehlen erfaßt, und die gleichseitig ausführbaren Befehle an zugehörige Funktionseinheiten ausgibt,
eine Vorhersageverifizierungseinrichtung (164) zum Ausführen des Verzweigungsbefehls und zum Bestimmen, ob die Vorhersage der Verzweigung korrekt ist,
eine erste Flag-Erzeugungseinrichtung (162, 163), die von der Vorhersageeinrichtung und der Vorhersageverifizierungseinrichtung abhängig ist, zum Erzeugen eines zweiten Flag für jeden Befehl, das angibt, daß der zugehörige Befehl in einer Zeitspanne an eine zugehörige Funktionseinheit ausgegeben werden soll, nachdem die Vorhersage einer Verzweigung erfolgt, bevor die Bestimmung durch die Vorhersageverifizierungseinrichtung gemacht wird,
eine zweite Flag-Erzeugungseinrichtung (161) zum Erzeugen eines dritten Flag für jeden Befehl, das anzeigt, daß der zugehörige Befehl gültig in einer Funktionseinheit ausgeführt werden kann, wobei das zweite und dritte Flag und der zugehörige Befehl an eine zugehörige Funktionseinheit in Form einer Verbindung ausgegeben werden, und
die Flag-Steuereinrichtung (164), die von der Vorhersageverifizierungseinrichtung abhängig ist, zum Steuern des Werts des zweiten und dritten Flags, die an die Funktionseinheit ausgegeben werden, wobei die Flag-Steuereinrichtung nur das zweite Flag löscht, wenn die Vorhersageverifizierungseinrichtung anzeigt, daß die Vorhersage einer Verzweigung korrekt ist, während die Flag- Steuereinrichtung sowohl das zweite als auch das dritte Flag löscht, wenn ein Befehl ein gesetztes zweites Flag aufweist und die Vorhersageverifizierungseinrichtung angibt, daß die Vorhersage inkorrekt war, aufweist.
21. Parallelverarbeitungseinheit nach Anspruch 17, gekennzeichnet durch
einen Registersatz (69) mit einer Mehrzahl von Registern, wobei die Steuereinrichtung
eine Erfassungseinrichtung (66, 160) zum Erfassen eines Befehls, der das Schreiben von Daten in ein Register des Registersatzes erfordert,
eine erste Flag-Speichereinrichtung (141), die für jedes der Register gebildet und von der Erfassungseinrichtung abhängig ist, zum Speichern eines ersten Flag, das anzeigt, daß das zugehörige Register einem Datenschreiben unterworfen wird,
eine zweite Flag-Speichereinrichtung (142), die für jedes der Register gebildet und von der Vorhersageeinrichtung abhängig ist, zum Speichern eines zweiten Flag, das anzeigt, daß der Befehl, der ein Schreiben von Daten erfordert, ein Befehl ist, der nach der Vorhersage einer Verzweigung und bevor die Vorhersage als korrekt oder inkorrekt bestimmt wird, ausgegeben wird, und
eine Flag-Steuereinrichtung (Gatter in Fig. 31), die von der Erfassungseinrichtung und der Vorhersageeinrichtung abhängig ist, zum Steuern des zweiten und dritten Flag, wobei die Flag- Steuereinrichtung alle dritten Flags löscht, wenn die Vorhersage als inkorrekt bestimmt wird, während die Flag-Steuereinrichtung das zweite Flag für ein Register löscht, dessen drittes Flag aktiv ist, wenn die Vorhersage als inkorrekt bestimmt wird und ein aktives drittes Flag anzeigt, daß der Inhalt des zugehörigen Registers nicht verfügbar ist, aufweist.
22. Parallelverarbeitungseinheit nach Anspruch 21, dadurch gekennzeichnet, daß die Speichereinrichtung (9) einen Warteschlangenspeicher (13) aufweist.
DE19924222776 1991-07-12 1992-07-10 Parallelverarbeitungseinheit und Verfahren zum Ausführen von Befehlen Expired - Fee Related DE4222776C2 (de)

Priority Applications (1)

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

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP17220391A JP2875909B2 (ja) 1991-07-12 1991-07-12 並列演算処理装置

Publications (2)

Publication Number Publication Date
DE4222776A1 true DE4222776A1 (de) 1993-01-21
DE4222776C2 DE4222776C2 (de) 1998-12-03

Family

ID=15937500

Family Applications (1)

Application Number Title Priority Date Filing Date
DE19924222776 Expired - Fee Related DE4222776C2 (de) 1991-07-12 1992-07-10 Parallelverarbeitungseinheit und Verfahren zum Ausführen von Befehlen

Country Status (3)

Country Link
US (1) US5809294A (de)
JP (1) JP2875909B2 (de)
DE (1) DE4222776C2 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6367002B1 (en) 1998-02-12 2002-04-02 Siemens Aktiengesellschaft Apparatus and method for fetching instructions for a program-controlled unit

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3494489B2 (ja) * 1994-11-30 2004-02-09 株式会社ルネサステクノロジ 命令処理装置
US5752259A (en) * 1996-03-26 1998-05-12 Advanced Micro Devices, Inc. Instruction cache configured to provide instructions to a microprocessor having a clock cycle time less than a cache access time of said instruction cache
TW373149B (en) 1997-07-02 1999-11-01 Matsushita Electric Ind Co Ltd Program control method
US7197625B1 (en) 1997-10-09 2007-03-27 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US5864703A (en) * 1997-10-09 1999-01-26 Mips Technologies, Inc. Method for providing extended precision in SIMD vector arithmetic operations
US6256728B1 (en) * 1997-11-17 2001-07-03 Advanced Micro Devices, Inc. Processor configured to selectively cancel instructions from its pipeline responsive to a predicted-taken short forward branch instruction
US6026488A (en) * 1998-02-20 2000-02-15 International Business Machines Corporation Method for conditional hedge fetching into cache storage
US6035392A (en) * 1998-02-20 2000-03-07 International Business Machines Corporation Computer with optimizing hardware for conditional hedge fetching into cache storage
US6115808A (en) * 1998-12-30 2000-09-05 Intel Corporation Method and apparatus for performing predicate hazard detection
US6732259B1 (en) 1999-07-30 2004-05-04 Mips Technologies, Inc. Processor having a conditional branch extension of an instruction set architecture
US7242414B1 (en) 1999-07-30 2007-07-10 Mips Technologies, Inc. Processor having a compare extension of an instruction set architecture
US6697832B1 (en) 1999-07-30 2004-02-24 Mips Technologies, Inc. Floating-point processor with improved intermediate result handling
US6631392B1 (en) 1999-07-30 2003-10-07 Mips Technologies, Inc. Method and apparatus for predicting floating-point exceptions
US7346643B1 (en) 1999-07-30 2008-03-18 Mips Technologies, Inc. Processor with improved accuracy for multiply-add operations
US6714197B1 (en) 1999-07-30 2004-03-30 Mips Technologies, Inc. Processor having an arithmetic extension of an instruction set architecture
US6912559B1 (en) 1999-07-30 2005-06-28 Mips Technologies, Inc. System and method for improving the accuracy of reciprocal square root operations performed by a floating-point unit
KR100336773B1 (ko) * 1999-11-12 2002-05-16 박종섭 지연 분기 구조를 갖는 자바 프로세서
US6996596B1 (en) 2000-05-23 2006-02-07 Mips Technologies, Inc. Floating-point processor with operating mode having improved accuracy and high performance
US6859875B1 (en) * 2000-06-12 2005-02-22 Freescale Semiconductor, Inc. Processor having selective branch prediction
US7711763B2 (en) 2001-02-21 2010-05-04 Mips Technologies, Inc. Microprocessor instructions for performing polynomial arithmetic operations
US7181484B2 (en) 2001-02-21 2007-02-20 Mips Technologies, Inc. Extended-precision accumulation of multiplier output
US7599981B2 (en) 2001-02-21 2009-10-06 Mips Technologies, Inc. Binary polynomial multiplier
US7162621B2 (en) 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
JP2003186938A (ja) * 2001-12-19 2003-07-04 Canon Inc スコアボードを用いた検証方法
US7000091B2 (en) * 2002-08-08 2006-02-14 Hewlett-Packard Development Company, L.P. System and method for independent branching in systems with plural processing elements
US7000095B2 (en) * 2002-09-06 2006-02-14 Mips Technologies, Inc. Method and apparatus for clearing hazards using jump instructions
WO2004097625A2 (en) * 2003-04-29 2004-11-11 Koninklijke Philips Electronics N.V. Zero overhead branching and looping in time-stationary processors
US7861063B1 (en) * 2004-06-30 2010-12-28 Oracle America, Inc. Delay slot handling in a processor
WO2008072178A1 (en) * 2006-12-11 2008-06-19 Nxp B.V. Pipelined processor and compiler/scheduler for variable number branch delay slots
US8275978B1 (en) * 2008-07-29 2012-09-25 Marvell International Ltd. Execution of conditional branch instruction specifying branch point operand to be stored in jump stack with branch destination for jumping to upon matching program counter value
JP5565228B2 (ja) * 2010-09-13 2014-08-06 ソニー株式会社 プロセッサ
US9229722B2 (en) 2012-01-31 2016-01-05 International Business Machines Corporation Major branch instructions with transactional memory
US9280398B2 (en) 2012-01-31 2016-03-08 International Business Machines Corporation Major branch instructions
US9817666B2 (en) * 2013-03-15 2017-11-14 Intel Corporation Method for a delayed branch implementation by using a front end track table

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4755966A (en) * 1985-06-28 1988-07-05 Hewlett-Packard Company Bidirectional branch prediction and optimization

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS56129950A (en) * 1980-03-07 1981-10-12 Hitachi Ltd Information processor
JPS60107141A (ja) * 1983-11-16 1985-06-12 Fujitsu Ltd プランチ制御方式
JPS60168238A (ja) * 1984-02-10 1985-08-31 Hitachi Ltd パイプラインデータ処理装置
DE3751503T2 (de) * 1986-03-26 1996-05-09 Hitachi Ltd Datenprozessor in Pipelinestruktur mit der Fähigkeit mehrere Befehle parallel zu dekodieren und auszuführen.
US5440704A (en) * 1986-08-26 1995-08-08 Mitsubishi Denki Kabushiki Kaisha Data processor having branch predicting function
US4833599A (en) * 1987-04-20 1989-05-23 Multiflow Computer, Inc. Hierarchical priority branch handling for parallel execution in a parallel processor
JPH01269131A (ja) * 1988-04-20 1989-10-26 Hitachi Ltd 命令先行制御方式
US5050068A (en) * 1988-10-03 1991-09-17 Duke University Method and apparatus for using extracted program flow information to prepare for execution multiple instruction streams
JP2810068B2 (ja) * 1988-11-11 1998-10-15 株式会社日立製作所 プロセッサシステム、コンピュータシステム及び命令処理方法
US5125083A (en) * 1989-02-03 1992-06-23 Digital Equipment Corporation Method and apparatus for resolving a variable number of potential memory access conflicts in a pipelined computer system
JPH02306341A (ja) * 1989-02-03 1990-12-19 Nec Corp マイクロプロセッサ
US5136697A (en) * 1989-06-06 1992-08-04 Advanced Micro Devices, Inc. System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache
US5333280A (en) * 1990-04-06 1994-07-26 Nec Corporation Parallel pipelined instruction processing system for very long instruction word
EP0463965B1 (de) * 1990-06-29 1998-09-09 Digital Equipment Corporation Sprungvorhersageeinheit für hochleistungsfähigen Prozessor
US5261063A (en) * 1990-12-07 1993-11-09 Ibm Corp. Pipeline apparatus having pipeline mode eecuting instructions from plural programs and parallel mode executing instructions from one of the plural programs
US5265213A (en) * 1990-12-10 1993-11-23 Intel Corporation Pipeline system for executing predicted branch target instruction in a cycle concurrently with the execution of branch instruction
US5287467A (en) * 1991-04-18 1994-02-15 International Business Machines Corporation Pipeline for removing and concurrently executing two or more branch instructions in synchronization with other instructions executing in the execution unit

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4755966A (en) * 1985-06-28 1988-07-05 Hewlett-Packard Company Bidirectional branch prediction and optimization

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
HWANG, K., BRIGGS, F.A.: Computer Architecture and Parallel Processing, New York (u.a.): McGraw-Hill Book Company, 1984, S. 187-193 *
US-Firmenschrift IBM Journal of Research and Development, Vol. 34, No. 1, January 1980, S. 37-58 *
US-Z.: "IEEE Transactions on Computers", Vol. 39, No. 3, März 1990, S. 349-359 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6367002B1 (en) 1998-02-12 2002-04-02 Siemens Aktiengesellschaft Apparatus and method for fetching instructions for a program-controlled unit

Also Published As

Publication number Publication date
DE4222776C2 (de) 1998-12-03
US5809294A (en) 1998-09-15
JPH0520067A (ja) 1993-01-29
JP2875909B2 (ja) 1999-03-31

Similar Documents

Publication Publication Date Title
DE4222776A1 (de) Verfahren und anordnung fuer eine verzweigungsbefehlsverarbeitung in einer parallelverarbeitungseinheit
DE10084556B4 (de) Optimierte Ausführung von statisch sehr wahrscheinlich vorhergesagten Verzweigungsbefehlen
DE3650413T2 (de) Verfahren und Vorrichtung zur Annulierung eines Befehls.
DE69031991T2 (de) Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen
DE19983860B4 (de) Ein Verfahren und eine Einrichtung zur verbesserten Prädikatvorhersage
DE69133302T2 (de) Registerabbildung in einem einzigen Taktzyklus
DE69805275T2 (de) Verfahren und Anordnung zur Reduzierung von Störungen in einer Verzweigungsgeschichtstabelle eines Mikroprozessors
DE69534113T2 (de) Kompression der Befehlswörter eines Rechners
DE69132675T2 (de) Parallelfliessband-Befehlsverarbeitungssystem für sehr lange Befehlswörter
DE69719235T2 (de) Prozessor und Verfahren zur spekulativen Ausführung von bedingten Verzweigungsbefehlen unter Verwendung einer von mehreren Verzweigungsvorhersageverfahren
DE2855106C2 (de) Einrichtung zur Durchführung von bedingten Verzweigungen
DE69325086T2 (de) Verfahren und System für spekulative Befehlsausführung
DE69433621T2 (de) Geraet zur verarbeitung von befehlen in einem rechnersystem
DE3588182T2 (de) Vorausschauende Speicherabrufmethode und System für Verzweigung mit Ausführungsbefehlen
DE3785897T2 (de) Steuervorrichtung zum vorabruf von befehlen.
DE69028138T2 (de) Mechanismus zur präzisen Behandlung von Ausnahmebedingungen in einem Prozessor mit gepaarten Befehlen
DE69030931T2 (de) Mehrfachsequenzprozessorsystem
DE69327927T2 (de) Schnelles Vorausholen und Zuteilung von Befehlen mittels vorausschauender Anmerkungen von früher vorausgeholten
DE69623146T2 (de) Verfahren und Vorrichtung zum Koordinieren der Benutzung von physikalischen Registern in einem Mikroprozessor
DE69702350T2 (de) Verzweigungsvorhersageschema für cachespeicherzeile, das von sätzen eines set-assoziativen cachespeichers gemeinsam verwendet wird
DE102004013676A1 (de) Schleifenbetrieb mit null Overhead in einem Mikroprozessor mit Anweisungspuffer
DE19855806A1 (de) Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen
DE4345028A1 (de) Vorrichtung zur Reduzierung von Verzögerungen aufgrund von Verzweigungen
DE3781794T2 (de) Vorrichtung und verfahren zum versehen eines cachespeichers mit einer schreiboperation mit zwei systemtaktzyklen.
DE69429762T2 (de) Verfahren und Vorrichtung zur Befehlsteuerung in einem Pipelineprozessor

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8172 Supplementary division/partition in:

Ref document number: 4244924

Country of ref document: DE

Q171 Divided out to:

Ref document number: 4244924

Country of ref document: DE

AH Division in

Ref document number: 4244924

Country of ref document: DE

D2 Grant after examination
AH Division in

Ref document number: 4244924

Country of ref document: DE

8364 No opposition during term of opposition
8328 Change in the person/name/address of the agent

Representative=s name: PRUFER & PARTNER GBR, 81545 MUENCHEN

8339 Ceased/non-payment of the annual fee