-
Die Erfindung bezieht sich auf Datenverarbeitungssysteme und
insbesondere auf ein Datenverarbeitungssystem mit einer Mehrzahl
von Verarbeitungseinheiten, die eine einzige Abfolge von
Befehlen ausführen.
-
Ein allgemeines Problem, das in modernen
Von-Neumann-Architekturen angetroffen wird, ist der Zugriff auf Befehle und Daten
aus demselben Speicher. In modernen Datenverarbeitungssystemen
ist der Zugriff auf Speicher sehr zeitaufwendig im Vergleich zur
Befehlsausführung innerhalb einer Verarbeitungseinheit. Das
Problem des Zeitaufwands im Hinblick auf den Speicherzugriff wurde
zu einem gewissem Grad durch die Verwendung eines CACHE-
Speichers erleichtert, einem sehr schnellen Speicher, der mit dem
Datenverarbeitungssystem verbunden ist, um häufig benutzte
Informationen zu speichern. Wenn jedoch die abzurufende
Information im CACHE-Speicher nicht verfügbar ist, ist zusätzliche Zeit
erforderlich, um auf den Hauptspeicher zuzugreifen. In einem
herkömmlichen Pipeline-Datenverarbeitungssystem werden Befehle
der Reihe nach, aber quasi-parallel ausgeführt. Jeder Befehl
wird in mehreren Schritten ausgeführt, und während ein Schritt
eines Befehls gerade ausgeführt wird, werden andere Schritte von
anderen Befehlen parallel dazu ausgeführt. Die
Pipelineverarbeitung führt also dazu, daß Befehle ordnungsgemäß gleichzeitig
verarbeitet werden, während die folgerichtige Beziehung der
Befehle untereinander gewahrt bleibt. Wenn ein Befehl Daten aus
dem Speicher erfordert, wird gewöhnlich jedoch die
Pipelineverarbeitung angehalten, während die Daten aus dem Speicher geholt
werden, wobei dann viele der Vorteile der gleichzeitigen oder
parallelen Befehlsausführung der Pipelineverarbeitung zunichte
gemacht werden. Die Aufgabe der vorliegenden Erfindung besteht
darin, diesen Nachteil, der durch das Zugreifen auf den Speicher
verursacht wird, zu minimieren.
-
In der Vergangenheit wurde dieses Problem durch die
Kennzeichnung des Zielregisters einer anstehenden Ladeoperation (d.h.,
des Registers, das Daten aus dem Speicher erhalten soll) gelöst.
Diese Technik wird in der europäischen Patentschrift
EP-A-0163148 diskutiert (U.S. Patent No. 4 630 195, ursprünglich
angemeldet am 31. Mai 1984). Nach dieser Lehre umfaßt jedes
Prozessorregister eine Möglichkeit der Speicherkennzeichnung. Wenn
Befehle ausgeführt werden, die keine Daten aus dem
gekennzeichneten Register erfordern, darf die Befehlsausführung fortgesetzt
werden. Wird jedoch ein Befehl ausgeführt, der von Daten
abhängig ist, die in ein gekennzeichnetes Register eingeschrieben
werden sollen, und das Register die Daten, wie es vom
Kennzeichen angezeigt wird, nicht erhalten hat, wird der Befehl nicht
ausgeführt.
-
Gemäß der vorliegenden Erfindung wird nun ein
Datenverarbeitungssystem angegeben mit einem Hauptspeicher, mit
Befehlsmitteln zum Ausführen von Rechen- und Ladebefehlen, wobei letztere
benutzt werden, um die Daten aus dem Hauptspeicher auszulesen,
die für die Ausführung der Rechenbefehle benötigt werden, mit
Mitteln zum Zwischenspeichern, in denen die Befehle vor der
Ausführung hintereinander gespeichert werden, und mit Mitteln zur
Kennzeichensteuerung, dadurch gekennzeichnet, daß das System
Decodierungsmittel umfaßt, um die Befehle zu decodieren und um
die Rechenbefehle in eine erste Warteschlange in den Mitteln zum
Zwischenspeichern sowie die Ladebefehle in eine zweite
Warteschlange im Zwischenspeicher aufzuteilen, daß es einen ersten
Prozessor umfaßt, um die Rechenbefehle zu bearbeiten sowie einen
zweiten Prozessor, um die Ladebefehle asynchron zu den
Rechenbefehlen zu bearbeiten, daß es die Mittel zur Kennzeichensteuerung
umfaßt, um ein Kennzeichen für jeden Rechenbefehl in der ersten
Warteschlange abzuspeichern, der das Laden von Daten durch einen
Ladebefehl in der zweiten Warteschlange erfordert, und um die
Kennzeichen eines jeden der Rechenbefehle zu löschen, wenn die
Daten für diesen Befehl ausgelesen wurden, wobei der erste
Prozessor
derart ausgebildet ist, daß er die Rechenbefehle
ausführt, die kein abgespeichertes Kennzeichen aufweisen.
-
Demzufolge gibt die vorliegende Erfindung einen
Nennzeichenmechanismus für ein Datenverarbeitungssystem an, das mehrere
Prozessoren umfaßt, wobei die Ausführung eines Befehls in einem
ersten Prozessor durchgeführt wird, während Daten für den Befehl
von einem zweiten Prozessor geholt werden. Dies erlaubt eine
sequentielle Befehlsausführung durch eine ordnungsgemäße
Pipelineverarbeitung mit Speicherzugriff.
Offenbarung der Erfindung
-
Gemäß der vorliegenden Erfindung wird ein
Datenverarbeitungssystem angegeben, das eine Befehlsausführungseinheit umfaßt, die
eine erste Art Befehle ausführt. Eine Ausleseeinheit wird
angegeben, um Befehle aus dem Speicher auszulesen und um Daten aus
einem Speicher auszulesen, die von einer zweiten Art Befehle
angefragt werden. Es umfaßt außerdem einen Befehlsdecoder, der
die ausgelesenen Befehle decodiert und die Befehle der ersten
Art einer Befehlswarteschlange und Befehle der zweiten Art in
die Ausleseeinheit übergibt. Die Befehlswarteschlange speichert
decodierte Befehle der ersten Art und kennzeichnet diese Befehle
der ersten Art, wenn die Daten, die für deren Ausführung
erforderlich sind, noch nicht ausgelesen wurden. Das Kennzeichen
dieser Befehle wird gelöscht, wenn die Daten, die für die
Ausführung erforderlich sind, ausgelesen wurden. Die
Befehlswarteschlange liefert der Reihe nach nicht gekennzeichnete Befehle
der Befehlsausführungseinheit zur Ausführung.
-
In der bevorzugten Ausführungsform wird ein Multiprozessorsystem
angegeben, worin der Speicher sowohl Befehle als auch Daten
enthält. Diese bevorzugte Ausführungsform umfaßt zwei Prozessoren,
um Befehle der Befehlssteuerungseinrichtung auszuführen. In
dieser bevorzugten Ausführungsform sind die Befehle der ersten Art
Gleitkommabefehle, die nur von einem Gleitkommaprozessor
ausgeführt werden können. Die Befehle der zweiten Art sind
Ladebefehle,
um Gleitkommadaten den Registern des Gleitkommaprozessors zu
übergeben, und sie werden von einem Festkommaprozessor
ausgeführt. Der Festkommaprozessor berechnet genau die Adressen, die
auf dem Bus zum Speicher geführt sind, um auf die
Gleitkommadaten zuzugreifen. Weiterhin wird in dieser bevorzugten
Ausführungsform eine erste Warteschlange angegeben, um
Register-Register-Befehle und Register-Speicher-Befehle zu speichern sowie
die zweite Warteschlange, die die Speicher-Register-Befehle
speichert. Die Befehlsdecodiermittel der bevorzugten
Ausführungsform umfassen die Fähigkeit, mehrere Befehle parallel zu
decodieren. Die Ladebefehle sind in einer Befehlswarteschlange
(der Speicher-Register-Warteschlange), getrennt von den anderen
Gleitkommarechenbefehlen (die in der anderen Warteschlange
abgespeichert sind), abgespeichert. Wenn ein Gleitkommarechenbefehl
Daten erfordert, die zufolge eines Ladebefehls geladen werden,
wird dieser Gleitkommarechenbefehl in seiner
Befehlswarteschlange gekennzeichnet. Wenn ein Befehl kein Kennzeichen aufweist,
wird er dem Gleitkommaprozessor zur Ausführung übergeben.
-
In den Zeichnungen ist:
-
Fig. 1 gemäß der Erfindung ein Blockdiagramm des
Datenverarbeitungssystems,
-
Fig. 2 ein Blockdiagramm, das Befehlswarteschlangen darstellt,
die in einer Gleitkommaeinheit im System nach Fig. 1 angeordnet
sind;
-
Fig. 3 ein Blockdiagramm, das eine Befehlsdecodierlogik
darstellt, die mit der Befehlswarteschlange in der
Gleitkommaeinheit nach Fig. 2 verbunden ist;
-
Fig. 4 ein Flußdiagramm, das eine Kennzeichenprozedur darstellt;
-
Fig. 5 ein Zustandsdiagramm, das den Befehlsfluß durch die
Kennzeichenprozedur darstellt;
-
Fig. 6A eine erste Abfolge von Befehlen;
-
Fig. 6B ein Zeitdiagramm, das die Pipelineverarbeitung der
Befehlsabfolge nach Fig. 6A darstellt;
-
Fig. 7A eine zweite Befehlsabfolge;
-
Fig. 6B ein Zeitdiagramm, das die Pipelineverarbeitung der
Befehlsabfolge nach Fig. 6A darstellt;
-
Fig. 8A eine dritte Befehlsabfolge; und
-
Fig. 8B ein Zeitdiagramm, das die Pipelineverarbeitung der
Befehlsfolge nach Fig. 8A darstellt.
-
Fig. 1 zeigt ein Blockdiagramm, das das Datenverarbeitungssystem
mit einem Speicher 10 darstellt, der mit einer Befehlseinheit 12
verbunden ist. Die Ausgabe der Befehlseinheit 12 sind zwei
Befehle, die der Festkommaeinheit 14 oder der Gleitkommaeinheit 16
zugeführt werden können. Die Festkommaeinheit umfaßt eine
Befehlswarteschlange 27, bezeichnet als "sequentielle
Befehlsausführung". Die Gleitkommaeinheit 16 umfaßt eine
Befehlswarteschlange 34 von synchronen Befehlen, die von der Festkommaeinheit
14 ausgeführt werden, und eine zweite Warteschlange 30, die
Befehle umfaßt, die als "asynchrone Befehle" bezeichnet werden.
-
Die Ausführung der Befehle durch die Gleitkommaeinheit 16 ist
unabhängig von der Ausführung der Befehle durch die
Festkommaeinheit 14, mit Ausnahme der "synchronen Befehle". Die
"synchronen Befehle" umfassen Datenladebefehle, die Daten aus dem
Speicher 20 den Registern der Gleitkommaeinheit 16 zuführen. Die
Adressenberechnung dieser Ladebefehle wird durch die
Festkommaeinheit 14 durchgeführt, genauso wie die Festkommaberechnung
eines indizierten Ladebefehls. Das Auslesen der Daten aus dem
Speicher 10 wird ausgelöst durch die Festkommaeinheit 14. Die
Daten werden dann über den Daten-Cache-Speicher 18 den Registern
der Gleitkommaeinheit 16 zugeführt. Datenladebefehle für die
Gleitkommaeinheit 16 sind in beiden Warteschlangen 34 und 27
enthalten. Die Ladebefehlsspeicherung wird durch die Verbindung
29 koordiniert.
-
Fig. 2 zeigt ein Blockdiagramm, das Befehlswarteschlangen und
eine Gleitkommaeinheit 16 darstellt. Die Befehle werden durch
die Prefetch-Puffersteuerung 20 auf Gültigkeit hin untersucht.
Ist ein Befehl gültig, wird er in der
Gleitkommabefehlswarteschlange 22 abgespeichert. Jeweils zwei dieser Befehle werden dann
gleichzeitig in den Decodern 26 und 28 unter der Steuerung der
Decodierlogik 24 decodiert. Die decodierten Befehle werden dann
den Befehlswarteschlangen 30 und 34 zugeführt und in den
erstverfügbaren Pufferspeicher abgelegt. Die Rechenbefehle der
Gleitkommaeinheit werden anders als die Datenladebefehle in der
Befehlswarteschlange 30 abgespeichert. Dies umfaßt alle
Register-Register- und Register-Speicher-Operationen der
Gleitkommaeinheit. Die Speicher-Register-Operation für
Gleitkommaeinheit 16 (die Datenladebefehle) werden in der
Befehlswarteschlange 34 abgespeichert. Diese Befehle der Warteschlangen 30 und 34
werden durch die Ausführungssteuereinheit 32 zu gegebener Zeit
verteilt.
-
Während der Operation können die Befehle in der
Befehlswarteschlange 30 die Speicherung von Daten in den Registern der
Gleitkommaeinheit erfordern. Diese Daten müssen gespeichert
werden, bevor die Befehle zur Ausführung weitergeleitet werden.
Eine angemessene Verwaltung dieser Befehle muß sicherstellen,
daß die erforderlichen Daten bei der Verteilung der Befehle in
den Registern gespeichert werden.
-
Fig. 3 zeigt die Kennzeicheneinheit in der Gleitkommaeinheit 16.
In der Gleitkommaeinheit 16 speichern die Decode-0-Register 26
und die Decode-1-Register 28 die zu decodierenden Befehle.
Während des Decodierungsprozesses werden mittels der Vergleicher
40, 42, 44, 46, und 48 Vergleiche angestellt, um festzustellen
ob einer der zu decodierenden Befehle von der Ausführung eines
in der Ladebefehlsschlange 34 gespeicherten Ladebefehls abhängig
ist, wie in Fig. 3 als Warteposition 70 und 72 dargestellt.
Beide
Wartepositionen 70 und 72 enthalten einen Sechs-Bit
"T"-Deskriptor, der die Adresse des Registers in der durch den
Ladebefehl geladenen Gleitkommaeinheit 16 bildet. Diese Register-
Adressen bilden die Eingabe der Vergleicher 40, 42, 44, 46, und
48 und sollen mit den durch die Befehle der Decodierungseinheit
26 und 28 spezifizierten Registern verglichen werden. Dies ist
so zu verstehen, daß in der bevorzugten Ausführungsform ein
Gleitkommaverarbeitungsbefehl bis zu drei Quellregister und ein
Zielregister enthält. Die Quellregister lauten "A", "B" und "C".
Das Zielregister lautet "T". In der bevorzugten Ausführungsform
liefert die Gleitkommaeinheit 16 die Ausführung eines Befehls,
der sowohl Multiplikation als auch Addition oder "A*B+C"
durchführt. Entsprechend dem Format wird das Ergebnis der
Multiplikations-/Additions-Operation im Zielregister "T" abgelegt. Fällt
ein Vergleich eines der Register mit den Registerkennzeichnungen
in den zu decodierenden Befehlen positiv aus, wird das
entsprechende Kennzeichen beim Speichern des Befehls im
Befehlspufferspeicher 62 gesetzt. Das Kennzeichen wird in einem
Zwei-Bit-Pufferspeicher 64 unter der Steuerung durch die
Kennzeichensteuerungseinheit 68 gespeichert. Die Pufferspeicher 50, 54, 58 und
62 entsprechen der Befehlswarteschlange 30 in Fig. 2. Bei der
Decodierung jedes Befehls wird dieser im nächstverfügbaren
Pufferspeicher abgelegt. Deshalb werden alle asynchronen Befehle
(Befehle, die in der Gleitkommaeinheit 16 unabhängig von der
Ausführung der Befehle in der Festkommaeinheit 14 ausgeführt
werden) zuerst im Pufferspeicher 50 gespeichert. Ebenso werden
die den in den Pufferspeichern 50, 54, 58 und 62 gespeicherten
Befehlen entsprechenden Kennzeichen im Kennzeichenspeicher 52,
56, 60 und 64 gespeichert. Wird der Befehl abgeschickt, wird er
an die Ausführungseinheit 66 gesandt. Die
Nennzeichensteuerungslogik 68 ist damit verbunden, um das Daten-Bereit-Signal vom
Speicherbus 8 zu empfangen. Bei Empfang des Daten-Bereit-Signals
wird das entsprechende Kennzeichen auf Null gesetzt. Ebenso wird
die Kennzeichensteuerungslogik den Befehl auf dem
Pufferspeicherplatz 62 weiterleiten, wenn beide Kennzeichenbits am
Pufferspeicherplatz 64 Null sind. So wird die Befehlsabfolge in der
Befehlswarteschlange organisiert, um sicherzustellen, daß die
Daten für die Ausführung des Befehls korrekt abgerufen wurden
und bereitstehen, bevor der Befehl tatsächlich zur Ausführung
weitergeleitet wird.
-
Fig. 4 beschreibt die Kennzeichenprozedur in Form eines
Flußdiagramms. In Schritt 100 wird entschieden, ob sich ein gültiger
Befehl in der Decodierungseinrichtung befindet. Ist dies nicht
der Fall verweilt die Steuerung solange in einer Schleife, bis
ein gültiger Befehl da ist. Als nächstes wird in Schritt 102
bestimmt, ob ein gültiger Befehl in der Ladewarteschlange 1
vorhanden ist. Ist kein gültiger Befehl in Ladewarteschlange 1
vorhanden, verzweigt die Steuerung zurück zum Anfang von Schritt
102. Wenn ein gültiger Befehl in Schlange 1 vorhanden ist,
verzweigt die Steuerung weiter zu Schritt 106 um festzustellen, ob
der abzurufende Operand der richtige Operand für die
Befehlsdecodierung ist. Ist dies der Fall, so verzweigt die Steuerung zu
Schritt 110, um das Befehlskennzeichnungsbit 1 gleich 1 zu
setzen. Ist es nicht der Fall, fährt die Steuerung mit Schritt 112
fort, um das Befehlskennzeichen Bit 1 auf 0 zu setzen. Parallel
dazu bestimmt die Steuerung in Schritt 104, ob der Befehl in der
Ladewarteschlange 0 ein gültiger Befehl ist. Ist dies nicht der
Fall, geht die Steuerung zurück zum Anfang von Schritt 104. Ist
dort ein gültiger Ladebefehl vorhanden, verzweigt die Steuerung
zu Schritt 108 um zu bestimmen, ob der abgerufene Operand der
Operand für den zu decodierenden Befehl ist. Ist dies der Fall,
wird das Befehlskennzeichnungsbit 0 in Schritt 114 auf 1
gesetzt. Ist dies nicht der Fall, wird das
Befehlskennzeichnungsbit 0 in Schritt 116 auf 0 gesetzt.
-
In Bezug auf Fig. 3 sollte verstanden werden, daß es möglich
ist, daß ein Befehl, der in einem der vier Befehlspufferspeicher
50, 54, 58 oder 62 gespeichert ist, das Laden von Operanden
erfordert, die über zwei Ladebefehle geladen werden, die in den
Pufferspeichern 72 und 70 gespeichert sind. In diesem Fall
enthalten beide Bits in den Bitpufferspeichern 52, 56, 60 oder 64
für ihren entsprechenden Befehlspufferspeicher 50, 54, 58 oder
62 eine 1. Wenn die Ladeoperation im Pufferspeicher 72 in die
Ausführungseinheit 74 transferiert wird, bewegt sich die
Operation in Pufferspeicher 70 herunter nach 72, und das am weitesten
links stehende Bit in den Kennzeichenpufferspeichern 52, 56, 60
oder 64 bewegt sich zu der am weitesten rechts gelegenen
Bitposition. Wenn beide Bitpositionen auf 1 gesetzt sind, bedeutet
dies deshalb, daß beide in den Befehlspufferspeichern 70 und 72
gespeicherten Ladebefehle noch ausstehende Datenanforderungen
aufweisen. Ebenso gilt, daß wenn beide Bitpositionen auf 0
stehen, keine Abhängigkeit besteht von irgendwelchen zu ladenden
Daten und daß der Befehl zur Ausführung weitergeleitet werden
kann.
-
Fig. 5 zeigt ein Zustandsdiagramm, das die Abfolge des
Kennzeichens und des Zurückhaltens der Befehle von der Ausführung
darstellt. Im ersten Zustand 120 ist das Kennzeichen auf 1X
gesetzt, wobei "X" ignorieren bedeutet, wenn ein Befehl von einem
im Ladepufferspeicher I 70 auszuführenden Ladebefehl abhängig
ist. An diesem Punkt wird der Ausführungszustand auf 0 gesetzt,
was bedeutet, daß der Befehl nicht zur Ausführung weitergeleitet
werden kann. Solange das Daten-Bereit-Signal für den Operanden 0
ist, wird der Prozeß in diesem Zustand verharren. Sobald das
Daten-Bereit-Signal für den Operanden erhalten worden ist, fährt
der Prozeß mit Zustand 122 fort. Dies ist unabdingbar für den
Transfer des Ladebefehls vom Ladebefehlspufferspeicher 70 zum
Ladebefehlspufferspeicher 72 in Fig. 3. Wieder bleibt der Prozeß
im Zustand 122 bis das nächste Daten-Bereit-Signal empfangen
wird, dann fährt der Prozeß mit Zustand 124 fort, wo das
Kennzeichen auf 00 gesetzt und der Ausführungszustand auf 1 geändert
wird, was anzeigt, daß der Befehl zur Ausführung weitergeleitet
worden ist.
-
Fig. 6A stellt eine Befehlsabfolge dar. In der Operation einer
normalen, sequentiell ausgeführten Pipelineverarbeitung wäre der
erste Befehl LD (der ein Laden des Registers 0 angibt) der erste
Befehl, der zur Ausführung weitergeleitet wird. Alle folgenden
Befehle würden die Vollendung des Ladens von Register 0
abwarten. Als nächstes ist ein Multiplikationsbefehl angegeben der
den Inhalt von Register 2 multipliziert mit dem Inhalt von
Register 3 und das Ergebnis in Register 2 speichert. Dem
Multiplikationsbefehl folgt ein Ladebefehl, der Register 1 lädt. Zuletzt
erfolgt ein Additionsbefehl, der den Inhalt von Register 0 zu
dem Inhalt von Register 1 addiert und das Ergebnis in Register 4
speichert.
-
Zum Zweck dieser Beispiele setzen wir voraus, daß die Register 2
und 3 vorab geladen wurden. Mit Bezug auf Fig. 3 ist der
Ladebefehl für Register 0 in das DECODE-0-Register 26 und der
Multiplikationsbefehl in das DECODE-1-Register 28 im Zyklus 0
(Fig. 6B) geladen. Im Zyklus 1 ist der Ladebefehl für Register 0
in das Register 72 der Warteschlange 0 für ausstehende
Ladebefehle transferiert, und der Multiplikationsbefehl wird durch die
asynchronen Befehlspufferspeicher 50, 54, 58 und 62 in die
Ausführungseinheit 66 zur Ausführung eingespeist, da dort keine
Datenabhängigkeiten vorlagen.
-
Im Zyklus 1 wird der Ladebefehl für Register 1 im
DECODE-0-Register 26 abgelegt und der Additionsbefehl im DECODE-1-Register
28. Im Zyklus 2 bleibt der Ladebefehl für Register 0 in Register
72 der Warteschlange 0 für ausstehende Ladebefehle, und der
Ladebefehl für Register 1 wird in Register 72 der Warteschlange 1
für ausstehende Ladebefehle abgelegt. Der Additionsbefehl ist in
Register 62 des Pufferspeichers 0 abgelegt und das
Kennzeichenregister 64 ist auf 11 gesetzt, was darauf hinweist, daß der
Additionsbefehl von der Vervollständigung beider in den
Registern 70 und 72 gespeicherten Ladebefehle abhängig ist. Im
Zyklus 3 wird ein Daten-Bereit-Signal empfangen, wie in der Daten-
Bereit-Zeile 150 angezeigt. Dies zeigt an, daß Daten der
Gleitkommaeinheit 16 zur Speicherung im entsprechenden Register
zugeführt werden. Die Ladebefehle bleiben in ihren entsprechenden
Registern 70 und 72 der Warteschlangen für ausstehende
Ladebefehle gespeichert, und der Additionsbefehl bleibt im Register 62
zusammen mit seinen Kennzeichen im Kennzeichenspeicher 64
gespeichert. Im Zyklus 4 wird der Ladebefehl für Register 0 aus
Register 72 entfernt, da er ausgeführt wurde, und wird ersetzt
durch den Ladebefehl für Register 1 aus Register 70. Während der
Additionsbefehl in Register 62 bleibt, wird das Kennzeichen in
Register 64 wieder auf 01 zurückgesetzt, was darauf hinweist,
daß ein Ladebefehl ausgeführt wurde und das ausstehende Laden,
von dem der Befehl abhängt, jetzt in Register 72 abgelegt ist.
Im Zyklus 5 wird ein zweites Daten-Bereit-Signal in Zeile 150
empfangen. Im Zyklus 6 wird das Additionskennzeichen auf 00
gesetzt und der Additionsbefehl in die Ausführungseinheit 66
weitergeleitet, da die Gleitkommaeinheit den zweiten Teil der Daten
empfangen hat.
-
Fig. 7A zeigt die zweite Folge von Befehlen ähnlich der Folge
von Befehlen in Fig. 6A. Jedoch enthält die Befehlsfolge in
Fig. 7A einen Divisionsbefehl im Gegensatz zu einem
Multiplikationsbefehl. Die Bedeutung des Divisionsbefehls liegt darin, daß
er weitaus mehr Zyklen als der Multiplikationsbefehl zur
Vollendung benötigt. In Fig. 6B wurde der Multiplikationsbefehl in
einem einzigen Zyklus vollendet. In dem Beispiel in Fig. 7B
braucht der Divisionsbefehl zur Vollendung sieben Zyklen.
-
In Zyklus 0 werden sowohl der Lade- als auch der Divisionsbefehl
in den Decodier-Registern 26 und 28 wie zuvor (Fig. 6A und 6B)
abgelegt. Im Zyklus 1 wird der Divisionsbefehl vom
Decodier-Register 28 direkt in der Ausführungseinheit 66 abgelegt. Der
Ladebefehl für Register 0 wird in Register 72 der Warteschlange 0
für ausstehende Ladebefehle abgelegt. Ebenso werden der
Ladebefehl für Register 1 in das DECODE-0-Register 26 und der
Additionsbefehl in das DECODE-1-Register 28 plaziert. In Zyklus 2
ist der Ladebefehl für Register 1 in Register 70 der
Warteschlange für ausstehende Ladebefehle und der Additionsbefehl in
das Register 62 des Pufferspeichers 1 plaziert. Zu diesem
Zeitpunkt setzt die Kennzeichensteuerungslogik 68 das Kennzeichen
auf die Vollendung beider Ladebefehle in den Registern 70 und
72. Im Zyklus 3 wird ein Daten-Bereit-Signal empfangen wie in
Zeile 152 angegeben.
-
Im Zyklus 4 wird der Ladebefehl für Register 0 gelöscht, da er
vollendet ist und die Daten in die entsprechenden Register der
Gleitkommaeinheit geladen wurden. Der Ladebefehl für Register 1
wird dann von Register 70 nach Register 72 transferiert. Die
Kennzeichensteuerungslogik 68 setzt dann das Nennzeichen im
Kennzeichenspeicher 64 auf 01, was darauf hinweist, daß
Abhängigkeit von nur einem Ladebefehl besteht und daß der Ladebefehl
in Register 72 gespeichert ist. Im Zyklus 5 wird ein zweites
Daten-Bereit-Signal empfangen. In Zyklus 6 wird der
Lade-1-Befehl in Register 72 gelöscht, da er vollendet wurde und die
Daten ordnungsgemäß in die Gleitkommaeinheit geladen wurden. Die
Kennzeichensteuerungslogik 68 hat das temporär im
Kennzeichenspeicher 64 abgelegte Kennzeichen auf 00 zurückgesetzt, was
darauf hinweist, daß keine Datenabhängigkeit für den im Register 58
gespeicherten Additionsbefehl besteht. Der Divisionsbefehl wird
jedoch weiter ausgeführt. Im Zyklus 7 wird der Divisionsbefehl
weiter ausgeführt, und deshalb kann der Additionsbefehl im
Pufferspeicher 1 von Register 62 nicht in die Ausführungseinheit 66
weitergeleitet werden. Im Zyklus 8 wird der Divisionsbefehl
endgültig vollendet und der Additionsbefehl weitergeleitet, was
gegenüber einer rein sequentiellen Ausführung insgesamt 3 Zyklen
spart.
-
Fig. 8A umfaßt eine dritte Befehlsfolge, bei der zwei
Ladebefehle decodiert werden und denen ein Additions- und ein
Multiplikationsbefehl folgen. Ziel dieser Befehlsfolge ist es aufzuzeigen,
daß Befehle ohne Datenabhängigkeit (unabhängig von einem zu
vollendenden ausstehenden Laden) in die Ausführungseinheit
befördert werden können. In Fig. 8B werden der Ladebefehl für
Register 0 und der Ladebefehl für Register 1 in das
DECODE-0-Register 26 bzw. das DECODE-1-Register 28 geleitet. Im Zyklus 1 wird
der Ladebefehl für Register 1 in Register 72 der Warteschlange 0
für ausstehende Befehle abgelegt. Der Ladebefehl für Register 1
ist plaziert in Register 70 der Warteschlange 1 für ausstehende
Befehle abgelegt. Die Additions- und Multiplikationsbefehle
werden im DECODE-0-Register 26 bzw. DECODE-1-Register 28 abgelegt.
Man beachte, daß sowohl der Additions- als auch der
Multiplikationsbefehl von Daten abhängen, die ins Register 0 geladen
werden.
Für den Zweck dieses Beispiels wird angenommen, daß andere
für diese Befehle notwendige Daten (in den Registern 5 und 7)
bereits bereitgestellt wurden. Im Zyklus 2 verbleiben der
Ladebefehl für Register 1 und der Ladebefehl für Register 2 in den
Registern 70 bzw. 72, während der Multiplikationsbefehl im
Register 58 des Pufferspeichers 1 und der Additionsbefehl in
Register 62 des Pufferspeichers 0 abgelegt wurde. Da sowohl der
Additions- als auch der Multiplikationsbefehl von der Vollendung
der Ladebefehle in Register 72 abhängig sind, sind beide
Kennzeichen auf 01 gesetzt. Diese Kennzeichen sind für ihre
entsprechenden Befehle in den Registern 60 und 64 gespeichert. Im
Zyklus 3 wurde ein Daten-Bereit-Signal in Zeile 154 empfangen. Im
Zyklus 4 wird das Kennzeichen des Additionsbefehls im temporären
Speicher 64 auf 00 zurückgesetzt und der Additionsbefehl zur
Ausführung an die Befehlsausführungseinheit 66 abgeschickt.
Währenddessen wird der Multiplikationsbefehl in Register 62 des
Pufferspeichers 0 transferiert, und sein Kennzeichen folgt vom
Kennzeichenspeicher 60 in den Kennzeichenspeicher 64. Wie beim
Additionsbefehl wird das Kennzeichen für den
Multiplikationsbefehl auf 00 zurückgesetzt, was darauf hinweist, daß keine
Datenabhängigkeiten vorliegen. Ebenso wird im Zyklus 4 der jetzt
vollendete Ladebefehl 0 gelöscht. Der Ladebefehl für Register 1
wurde in Register 72 der Warteschlange 1 für ausstehende Befehle
transferiert. Im Zyklus 5 wird der Multiplikationsbefehl in die
Ausführungseinheit 66 abgeschickt, während der Ladebefehl für
Register 1 auf Vollendung wartet. Schließlich wird, im Zyklus 8,
ein Daten-Bereit-Signal in Zeile 154 empfangen, was darauf
hinweist, daß der Ladebefehl für Register 1 vollendet wurde.