-
Die
vorliegende Erfindung bezieht sich auf ein Verfahren zum Einplanen
(scheduling) von Operationen in einem Prozessor, bei dem einzuplanende Operationen
empfangen, in einer Warteschlange gespeichert und für eine Ausführung eingeplant
werden, wenn es keine Abhängigkeiten
von früher
empfangenen Operationen gibt. Ferner bezieht sich die Erfindung
auf eine Schaltungsanordnung zur Durchführung eines solchen Verfahrens.
-
Eine
primäre
Funktion eines Prozessors ist es, einen Strom von Operationen durchzuführen, wie beispielsweise
einen Strom von Computerbefehlen. Einige Prozessoren sind so ausgebildet,
daß sie
eine Operation in dem Strom vollständig ausführen, bevor sie damit beginnen,
die nächste
Operation auszuführen.
Bei diesen "In-der-Reihenfolge"-Prozessoren wird
das Ergebnis einer Operation korrekt durch spätere Operationen, die von ihr "abhängen", verwendet. Es seien
die folgenden Befehle betrachtet:
Lade Speicher-1 → Register-X
Addiere
Register-X Register-Y → Register
Z.
-
Der
erste Befehl lädt
den Inhalt des Speichers-1 in das Register-X. Der zweite Befehl
addiert den Inhalt des Registers-X zu dem Inhalt des Registers-Y
und speichert das Ergebnis im Register-Z. Der zweite Befehl ist
eine "Kind"-Operation, die von
dem ersten Befehl oder der "Eltern"-Operation abhängig ist.
Sofern das Ergebnis des ersten Befehls nicht in dem Register-X gespeichert
wird, bevor der zweite Befehl ausgeführt wird, so wird ein falsches
Ergebnis in dem Register-Z gespeichert. Man beachte, daß eine einzelne
Operation mehr als nur eine Elternoperation und mehr als nur eine
Kindoperation haben kann und daß sie
sowohl Eltern- als auch Kind-Operation in Bezug auf verschiedene
Operationen sein kann. Um die Leistung eines Prozessors zu verbessern,
können
Operationen "außer-der- Reihe" ausgeführt werden.
Wenn beispielsweise die Daten für
einen Befehl in einem Strom zu einem bestimmten Zeitpunkt nicht
bereit sind, kann der Prozessor einen anderen Befehl ausführen, der
sich an einem späteren
Ort in dem Strom befindet. In diesem Fall kann ein "Einplaner" ("Scheduler") Befehle derart
einplanen, daß ein
Kind-Befehl nicht vor seinem Eltern-Befehl ausgeführt wird. Dies verbessert die
Prozessorleistung, da der Prozessor nicht untätig bleibt, bis die Daten eines
ersten Befehls bereitstehen.
-
Computerbefehle
sind nicht die einzigen Operationen, die derartige Abhängigkeiten
aufweisen. Beispielsweise ist es möglich, daß Speicheroperationen derart
eingeplant werden, daß Informationen
in einen Speicherplatz eingespeichert werden, bevor Informationen
aus diesem Speicherplatz durch eine spätere Operation gelesen werden.
Andere Beispiele umfassen Einplanungsoperationen auf der Grundlage
begrenzter Ausführungsressourcen,
Speicherressourcen, Registerressourcen, einer Verfügbarkeit
von Zeitschlitzen oder einer Busverfügbarkeit. Im Sinne eines Beispiels
wird hier die Einplanung von Mikrobefehlen, die auch als "μops" oder "uops" bekannt
sind, verwendet, um bekannte Einplanungstechniken zu beschreiben.
-
1 ist eine Übersicht über ein
bekanntes System zum Verarbeiten von Befehlen und uops. Das System
enthält
eine Befehlsabruf- und -dekodiermaschine 110, die einen
Befehlsstrom in eine Serie von in einer Reihenfolge befindlichen
ops dekodiert, die den Datenfluß des
Befehlsstrom repräsentiert.
Die Befehle können
beispielsweise in uops mit zwei logischen Quellen und einem logischen
Bestimmungsort (Destination) dekodiert werden. Die uops werden aus der
Befehlsabruf- und
Dekodiermaschine 110 an eine Umbenennungs- und Zuweisungseinheit 120 "ausgegeben". Sofern ein Prozessor
nur eine begrenzte Anzahl von physikalischen Registern aufweist,
bildet die Umbenennungs- und Zuweisungseinheit 120 logische
Registerreferenzen auf physikalische Registerreferenzen ab.
-
Die
uops werden dann an einen Einplaner 130 gesendet, welcher
verschiedene anhängige uops
speichert und aus dieser Gruppe und/oder "Warteschlange" diejenige uop oder diejenigen uops auswählt, die
als nächstes
ausgeführt
wird bzw. werden. Der Einplaner 130 wählt uops derart aus, daß eine Kind-uop
nicht vor ihrer Eltern-uop ausgeführt wird. Das heißt, der
Einplaner 130 entscheidet, ob jedes Quellregister, das
von einer uop verwendet wird, bereit ist, verwendet zu werden. Wenn
sämtliche Quellen
der uop bereit sind und wenn die Ausführungsressourcen verfügbar sind,
wird die uop an eine Ausführungsressource 140 gesendet
oder "abgefertigt" ("dispatched"), in der die Operation
durchgeführt wird.
Somit werden uops auf der Grundlage von Datenflußeinschränkungen und einer Ressourcenverfügbarkeit
und nicht in der ursprünglichen
Reihenfolge des Stroms abgefertigt.
-
Bekannte
Einplaner basieren typischerweise auf dem "Tomasulo"-Einplaner. 2, eine Blockdarstellung eines derartigen
Tomasulo-Einplaners, zeigt zwei ausgegebene uops, Add1 und Add2,
die von einem Einplaner 200 empfangen worden sind. Jeder uop
weist zwei Quellen und einen Bestimmungsort auf. Add1 summiert die
Inhalte des Registers 1 (r1) zu den Inhalten von r2. Das Ergebnis
wird in r3 gespeichert. Add2 summiert den Inhalt von r3 mit dem Inhalt
von r2 und speichert das Ergebnis in r4. Wie zu sehen ist, hängt Add2
von Add1 ab und ist deren Kind. Der Einplaner 200 enthält eine
10-Bit-Anzeigetafel (Scoreboard) 210, die verwendet wird,
um zu verfolgen, welche Register bereit sind. Jedes Bit repräsentiert
ein Register, und beispielsweise eine "0" zeigt
an, daß das
Register nicht bereit ist, während eine "1" anzeigt, daß das Register bereit ist.
Sofern Add1 nicht ausgeführt
worden ist, wird das r3 zugegeordnete Bit in der Anzeigetafel 210 auf "0" gesetzt, um anzuzeigen, daß r3 nicht
bereit ist.
-
Der
aktive Einplaner 220 verwendet die Anzeigetafel 210 um
zu bestimmen, ob eine uop zur Abfertigung bereit ist. Beispielsweise
sieht der aktive Einplaner 220 bei den r3 und r2 zugeordneten
Bits nach, wenn er Add2 betrachtet. Sofern die Anzeigetafel 210 wiedergibt,
daß beide
Quellen bereit sind, fertigt der aktive Einplaner 220 die
uop zur Ausführung
ab. Wenn eine der Quellen nicht verfügbar ist, wird die uop nicht abgefertigt.
Nachdem die uop ausgeführt
ist, wird die Anzeigetafel 210 derart aktualisiert, daß sie nunmehr
wiedergibt, daß r4
jetzt bereit ist.
-
3 veranschaulicht eine Schaltung,
die einem Tomasulo-Einplaner zugeordnet ist. Wenn eine uop in den
Tomasulo-Einplaner
eingeschrieben oder zugewiesen wird, werden ihre Quellen aus der Anzeigetafel 210 gelesen.
Sofern die Anzeigetafel 210 anzeigt, daß die Quellen bereit sind,
ist die uop zur Einplanung bereit. Quellen, die in der Anzeigetafel 210 bereit
sind, werden in dem Einplaner als bereit markiert. Quellen, die
nicht bereit sind, überwachen den
Ergebnisbus. Der Wert eines Quellregisters 310 einer anhängigen uop
wird mit dem Wert der abgeschlossenen uops auf dem Bestimmungsort
oder Ziel-Bus unter Verwendung einer Gruppe von Komparatoren 320 verglichen.
Die Ausgangssignale aus der Gruppe der Komparatoren 320 werden
einem breiten ODER-Gatter 330 eingegeben, und der Ausgang
des breiten ODER wird als Bereit-Bit 340 für die erste
Quelle gespeichert. Eine ähnliche
(nicht in 3 gezeigte)
Logik wird ausgeführt,
um ein Bereit-Bit für
die zweite Quelle der anhängigen
uop zu erzeugen. Wenn sämtliche
Quellen der anhängigen uop
bereit sind, wie es von den Ausgangssignalen der logischen Gatter 350 bestimmt
wird, ist die uop zur Abfertigung bereit. Diese Logik wird für jede anhängige uop,
wie beispielsweise die Einträge
1 bis n wiederholt. Wenn mehrere uops bereit sind, abgefertigt zu
werden, bestimmt eine Prioritätslogik 360,
welche uop abgefertigt wird. Es wird ein Nachschlagen durchgeführt, um
das Bestimmungsregister 370 der gerade abgefertigten uop
zu bestimmen, und dieser Wert wird auf einen Ergebnisbus ausgegeben.
-
Der
Tomasulo-Einplaner verwendet eine enge Einplanungsschleife, wie
es in 4 gezeigt ist.
Für jede
anhängige
uop überwacht
der Einplaner den Ergebnisbus und vergleicht den Bestimmungsort ausgeführter uops
mit den Quellen anhängiger
uops bei 410. Als nächstes
führt der
Einplaner eine Bereit-Bestimmungs-Logik 420 aus, um die
Abfertigungsbereitschaft der anhängigen
uop zu bestimmen. Für
jede von der anhängigen
uop verwendete Quelle werden die Ergebnisse der bei 410 durchgeführten Vergleiche
bei 430 ODER-verknüpft. Die
Ergebnisse für
jede Quelle werden dann bei 440 UND-verknüpft. Nur
dann, wenn jede Quelle bereit ist, bestimmt der Einplaner, daß die uop
zur Abfertigung bereit ist.
-
Es
können
jeweils verschiedene uops zu einem Zeitpunkt zur Abfertigung bereit
sein. Wenn mehr als eine uop bereit ist, wird bei 450 eine
Priorisierung durchgeführt,
um zu bestimmen, welche der bereiten uops als erste abgefertigt
werden sollte. Schließlich
wird die anhängige
uop bei 460 abgefertigt. Wenn eine uop abgefertigt ist,
wiederholt der Einplaner die oben beschriebenen Aktivitäten, die
zu der engen Einplanungsschleife führen, die bestimmt, wann anhängige uops
zur Ausführung
bereit sind.
-
Ein
Stand der Technik, wie er anhand der 2 bis 4 beschrieben worden ist,
ist beispielweise in der US-Patentschrift Nr. 5,745,726 offenbart.
Aus der US-Patentschrift 5,710,902 ist ferner ein Verfahren und
eine Vorrichtung bekannt, die Abhängigkeiten in einer Sequenz
von Befehlen mit Hilfe eines Abhängigkeitskettendetektors
(DCD; dependency chain detector) erfaßt. Zu jedem Befehl wird ein
Vektor erstellt, in dem bestimmte Bits anzeigen, ob dieser Befehl
von früheren
Befehlen abhängig
ist. Die Druckschrift läßt allerdings
offen, wie diese Vektoranzeigen verwendet werden sollen. Darüber hinaus
eignet sich die dort offenbarte Struktur nicht für eine Einrichtung, die eine
Entscheidung über
die als nächstes
einzuplanenden Befehle treffen kann, die also diejenigen Befehle
einplant, bei denen keine Abhängigkeiten vorhanden
sind oder diejenigen Beffehle, von denen sie abhängen, bereits ausgeführt worden
sind.
-
Es
gibt jedoch eine Reihe von Nachteilen bei bekannten Einplanungstechniken.
Beispielsweise ist die Grundmotivation für eine Erhöhung der Taktfrequenz die Verringerung
der Befehlsverzögerung.
Angenommen, ein Abschnitt eines Programms enthält eine Sequenz von N Befehlen
I1, I2, ..., IN. Dieser Teil des Programms kann darüber hinaus
irgendwelche weiteren Befehle enthalten. Ferner sei angenommen, daß jeder
Befehl als Eingabe das Ergebnis des vorhergehenden Befehls erfordert.
Ein derartiges Programm kann nicht in einer geringeren Zeit als
T = L1 + L2 + ...
+ LN ausgeführt werden, wobei Ln die Verzögerung (Latenz) eines Befehls
In ist, selbst dann, wenn der Prozessor
in der Lage wäre,
eine sehr große
Anzahl von Befehlen parallel auszuführen. Somit besteht der einzige
Weg, das Programm schneller auszuführen, darin, die Verzögerungen
der Befehle zu verringern.
-
Darüber hinaus
muß dann,
wenn jede uop in einem Strom von der vorhergehenden uop abhängig ist,
ein Einplaner eine vollständige
Iteration der Einplanungsschleife für jede abgefertigte uop ausführen. Dies
wird zur minimalen "Verzögerung" jeder uop. Die Verzögerung einer
uop kann als diejenige Zeit definiert werden, die von dem Zeitpunkt,
wenn ihre Eingangsoperanden bereit sind, bis zu dem Zeitpunkt, zu
dem ihr Ergebnis bereit ist, durch eine andere uop verwendet zu
werden, vergeht. Darüber
hinaus ist die Geschwindigkeit eines Befehls durch das in 1 gezeigte mehrstufige System
durch die Geschwindigkeit der langsamsten Einheit oder des "schwächsten Gliedes" in der Kette beschränkt.
-
Die
Geschwindigkeit eines Prozessors in uops pro Sekunde oder S kann
ausgedrückt
werden durch S = P/L, wobei P die mittlerere Parallelität und L
die durchschnittliche uop-Verzögerung in
Sekunden ist. Ein Schlüsselvorteil
eines Einplaners besteht darin, daß er den Wert P erhöht, was
die Leistung des Prozessors verbessert. Jedoch ist eine Ausführungseinheit
typischerweise in der Lage, eine übliche uop, wie beispielsweise
eine Addition, mit einer Verzögerung
auszuführen,
die geringer ist, als die Verzögerung
der engen Einplanungsschleife. Folglich erhöht die Verwendung des Einplaners
auch den Wert von L, was die Leistung des Prozessors einschränkt.
-
Beispielsweise
kann das Vergleichen des Zielregisters der abgefertigten uops mit
sämtlichen Quellen
aller anhängigen
uops eine lange Zeit erfordern, wie beispielsweise die für 4–6 Gatteroperationen.
Diese – zusätzlich zu
der Bereit-Bestimmungslogik,
welche 1 oder 2 Gatter benötigen
kann, der Priorisierung, welche weitere 1 oder 2 Gatter benötigen kann, und
dem Bestimmungsort-Nachschlagen von 2 bis 3 Gattern – führt zu einer
engen Schleife, die zwischen 8 und 13 Gatteroperationen benötigt. Darüber hinaus
kann es sein, daß der
Einplaner eine Anzahl verschiedener Ergebnisbusse überwachen
muß, welches
die Menge des Vergleichens, das ausgeführt werden muß, erhöht. Die
wachsende Anzahl der Register, die in den Prozessoren verwendet
werden, sowie die sich erhöhenden
Frequenzen der Prozessoroperation machen das gegenwärtige System
der Einplanungsoperationen unausführbar.
-
Aufgabe
der Erfindung ist es, die bei dem bekannten Einplaner („Tomasulo-Einplaner") auftretenden Verzögerungen
zu vermeiden und somit eine schnellere Abfertigung zu erreichen.
-
Diese
Aufgabe wird erfindungsgemäß durch ein
Verfahren mit den Merkmalen des Anspruchs 1 bzw. einen Einplaner
mit den Merkmalen des Anspruchs 5 gelöst. Bevorzugte Weiterbildungen
des erfindungsgemäßen Verfahrens
sind in den Unteransprüchen
2 bis 4 gekennzeichnet.
-
Im
folgenden wird die Erfindung anhand eines in den Zeichnungen dargestellten
bevorzugten Ausführungsbeispiels
näher erläutert.
-
1 ist
eine Übersicht
eines bekannten Systems zum Verarbeiten von Befehlen und uops.
-
2 ist
eine Blockdarstellung eines bekannten Tomasulo-Einplaners, der Operationen
in einem Prozessor einplant.
-
3 veranschaulicht
eine einem Tomasulo-Einplaner zugeordnete Schaltung.
-
4 ist
ein Ablaufdiagramm eines bekannten Verfahrens zum Einplanen von
Operationen in einem Prozessor.
-
5 zeigt
einen Matrixeinplaner gemäß einem
Ausführungsbeispiel
der vorliegenden Erfindung.
-
6A bis 6C veranschaulichen
die Verwendung einer Abhängigkeitsmatrix
zum Einplanen von Operationen gemäß einem Ausführungsbeispiel
der vorliegenden Erfindung.
-
7 ist
eine Blockdarstellung der Einplanungsschaltung gemäß einem
Ausführungsbeispiel der
vorliegenden Erfindung.
-
8 veranschaulicht
eine Fünf-Stufen-Pipeline
für einen
Matrixeinplaner gemäß einem Ausführungsbeispiel
der vorliegenden Erfindung.
-
9 ist
ein Ablaufdiagramm eines Verfahrens zum Einplanen von Operationen
gemäß einem Ausführungsbeispiel
der vorliegenden Erfindung.
-
Ein
Ausführungsbeispiel
der vorliegenden Erfindung ist auf ein Verfahren und eine Einrichtung zum
Einplanen von Operationen unter Verwendung einer Abhängigkeitsmatrix
gerichtet. Es wird jetzt im Detail auf die Zeichnungen Bezug genommen,
in denen gleiche Teile durchgängig
mit gleichen Bezugszeichen gekennzeichnet sind. 5 zeigt
einen Matrixeinplaner 500 gemäß einem Ausführungsbeispiel der
vorliegenden Erfindung. Jede uop, die in den Matrixeinplaner 500 eintritt,
wird in eine Position oder einen Eintrag in einer Einplanungswarteschlange 510 gebracht.
Der in 5 gezeigte Matrixeinplaner weist 4 derartige Einträge auf,
die mit "0" bis "3" bezeichnet sind. Jeder Eintrag enthält ein Gültig-Bit, das
anzeigt, ob es eine uop in dieser Position gibt oder nicht. Wie
es durch ein "V" in 5 angezeigt ist,
enthält
die Position 1 uopB. Es ist klar, daß "V" beispielsweise
ein Bit mit einem Wert von "1" repräsentieren
könnte.
In ähnlicher
Weise enthält
die Position 3 uopA, und die Positionen 0 und 2 sind leer. Die Einplanungswarteschlange 510 enthält darüber hinaus
für jeden
Eintrag ein Bestimmungsort- oder Ziel-Register, und die Sammlung
der Bestimmungsregister wird als "Bestimmungsregistersatz" bezeichnet. Wie
es in 5 gezeigt ist, wird das Ergebnis der uopB in das
Register 1 (r1) gebracht, und das Ergebnis der uopA wird in Register
r3 gebracht.
-
Der
Strom der eintretenden uops befindet sich in der ursprünglichen
Reihenfolge, so daß eine Elternoperation
einer eintretenden uop entweder in dem Matrixeinplaner 500 anhängig ist
oder bereits abgefertigt worden ist. Das heißt, eine Eltern-uop betritt
den Matrixeinplaner 500 niemals nach ihrem Kind. Wenn Abhängigkeiten
zwischen den Einträgen in
der Einplanungswarteschlange 510 auf einfache Weise eingerichtet
und gehalten werden, können
die zeitaufwendigen Vergleichsoperationen in der Einplanungsschleife,
wie sie unter Bezugnahme auf 4 beschrieben
worden sind, beseitigt werden. Gemäß einem Ausführungsbeispiel
der vorliegenden Erfindung wird dies unter Verwendung einer Abhängigkeitsmatrix 520 ausgeführt.
-
Jedes
Bit oder Element in der Abhängigkeitsmatrix 520 entspricht
der Abhängigkeit
einer uop in einer Warteschlangenposition von einer uop in einer anderen
Warteschlangenposition. Beispielsweise zeigt "D" in
Zeile 1, Spalte 3 an, daß die
uop im Eintrag 1 oder die uopB, von dem Ergebnis abhängig ist, was
von der uop im Eintrag 3 oder der uopA erzeugt wird. Das heißt, die
uopB verwendet den Bestimmungsort von uopA beziehungsweise r3 als
Quelle. Es ist klar, daß "D" beispielsweise ein Bit mit einem Wert "1" repräsentieren könnte. Da eine uop nicht von
sich selbst abhängen
kann, ist jeder Kasten entlang der Diagonalen der Abhängigkeitsmatrix 520 mit einem "x" markiert. Während hier eine Abhängigkeitsmatrix
mit "Zeilen" und "Spalten" mit einer speziellen
Beziehung zu Abhängigkeiten
als Beispiel verwendet wird, ist zu beachten, daß stattdessen andere Strukturen,
wie beispielsweise eine Matrix, bei welcher die Begriffe "Zeilen" und "Spalten" ausgetauscht sind,
verwendet werden können.
-
Wenn
eine neue uop die Einplanungswarteschlange 510 betritt,
bestimmt eine Zuweisungslogik, welche verfügbare Position verwendet werden
sollte. Die eintretende uop wird dann in diese Position unter Verwendung
von (nicht in 5 gezeigten) Schreib-Ports eingeschrieben,
und die Quellen der eintretenden uop werden mit dem Bestimmungsregistersatz
unter Verwendung von Vergleichs(CAM)-Ports (die ebenfalls nicht
in 5 gezeigt sind) verglichen. Eine Übereinstimmung
zwischen einer Quelle einer eintretenden uop und einem Bestimmungsort
einer anhängigen
uop zeigt an, daß die
eintretende uop von dem anhängigen
Eintrag abhängig
ist, und es wird ein "D" an der richtigen
Position in der Abhängigkeitsmatrix 520 gespeichert.
-
Auf
diese Weise spiegelt die Abhängigkeitsmatrix 520 wieder,
welche uops bereit sind, abgefertigt zu werden. Eine uop, bei der
irgendein Abhängigkeitsbit
gesetzt ist, muß darauf
warten, daß die
diesem Bit zugeordnete Elternoperation abgefertigt wird. Wie es
in 5 gezeigt ist, ist uopA bereit, abgefertigt zu
werden, weil es kein "D" in Zeile 3 gibt, aber
uopB ist nicht bereit, weil es darauf warten muß, daß eine Abhängigkeit von uopA aufgelöst wird,
wie es durch das "D" in Zeile 1, Spalte
3 gezeigt ist. Der Abfertigungsstatus jedes Eintrags in dem Matrixeinplaner 500,
wie er durch die Bereit-Bestimmungslogik festgestellt wird, kann
als Abfertigungslogikbit 530 gespeichert werden. Sofern
eine Reihe von uops zu einem Zeitpunkt zur Abfertigung bereit ist,
kann eine Prioritätslogik
verwendet werden, um zu bestimmen, welche uop zuerst abgefertigt
wird. Schließlich bestimmt
eine Logik zur Aufhebung der Zuweisung, welche Einträge in der
Einplanungswarteschlange 510 "freigegeben" werden müssen, oder welche Positionen
in der Warteschlange jetzt leer und bereit sind, erneut verwendet
zu werden.
-
Wenn
eine uop abgefertigt wird, wird die entsprechende Spalte in der
Abhängigkeitsmatrix 520 gelöscht, da
irgendein Bit, das in dieser Spalte gesetzt war, einer uop entspricht,
die von der abgefertigten uop abhängig war. Wie es durch einen
Pfeil in 5 gezeigt ist, wird Spalte 3
gelöscht,
wenn uopA abgefertigt wird. Dies löscht das "D" in
Zeile 1, Spalte 3 und setzt die Stufe für uopB auf Abfertigung im nächsten Zyklus.
Dies ist die Einplanungsschleife für den Matrixeinplaner 500,
und sie ist schneller als der herkömmliche Tomasulo-Einplaner,
da die Vergleichs- und Bestimmungsortnachschlageoperationen, die
in 4 gezeigt sind, beide beseitigt worden sind. Die
Bereit-Bestimmungslogik, welche bloß überprüft, ob eine vollständige Zeile
gelöscht ist, kann
als einfache Struktur eines verdrahteten ODER in Dominologik implementiert
werden. Eine derartige Schaltung kann für sehr hohe Frequenzen ausgebildet
sein.
-
6A bis 6C veranschaulichen,
wie uops durch einen Einplaner mit einer Abhängigkeitsmatrix 620 gemäß einem
Ausführungsbeispiel
der vorliegenden Erfindung hindurchlaufen. Wie es in 6A gezeigt
ist, enthält
der Einplaner eine Außer-der-Reihe-Einplanungswarteschlange 610 mit
8 Positionen, die mit "0" bis "7" bezeichnet sind, wobei aber eine beliebige
Anzahl von Positionen verwendet werden kann. Jede Position in der
Einplanungswarteschlange 610 enthält eine Gültigkeitsanzeige und Informationen über die
uop, die den Bestimmungsort (Destination) der uop einschließen. Zum
Zeitpunkt T = 0 weist die Einplanungswarteschlange 610 fünf Einträge auf,
deren Gültigkeitsbit
auf "V" (= Valid) gesetzt
ist. So ist beispielsweise die Warteschlangenposition 0 leer und
die Warteschlangenposition 1 enthält einen Eintrag, welcher Register
11 als Bestimmungsort verwendet.
-
Jede
Zeile in der Abhängigkeitsmatrix 620 entspricht
einer Position in der Einplanungswarteschlange 610. Jede
Spalte in der Abhängigkeitsmatrix 620 ist
einer Abhängigkeit
von einer Position in der Einplanungswarteschlange 610 zugeordnet.
Wie zuvor ist deshalb, weil eine uop nicht von sich selbst abhängig sein
kann, jeder Kasten entlang der Diagonale der Abhängigkeitsmatrix 620 mit
einem "x" markiert. Das "D" in Zeile 1, Spalte 7 zeigt an, daß die uop
in der Warteschlangenposition 1 von der uop in der Warteschlangenposition
7 abhängig
ist. Das heißt,
die Operation in der Warteschlangenposition 1 ist das Kind der Operation
in der Warteschlangenposition 7. Von den 5 Einträgen in der Einplanungswarteschlange 610 hängt nur
der Eintrag in der Warteschlangenposition 7 von keinem anderen Eintrag
ab. Somit ist nur der Eintrag in der Warteschlangenposition 7 mit "Bereit" bezeichnet und kann
durch den Einplaner abgefertigt werden.
-
Nun
seien zwei neu ausgegebene uops betrachtet, die bereit sind, in
die Einplanungswarteschlange 610 gebracht zu werde. Die
erste Quelle der ersten uop (S11) ist Register
11 und die zweite Quelle (S12) ist Register
2. Der Bestimmungsort der ersten uop (D1)
ist Register 17. Das heißt,
die erste uop verwendet Register 11 und 2, um einen Wert zu erzeugen,
der in Register 17 gebracht wird. Die erste Quelle der zweiten uop
(S21) ist Register 14, die zweite Quelle
(S22) ist Register 12 und das Ziel (D2) ist Register 19. Die Einplanungswarteschlange 610 und
die Abhängigkeitsmatrix 620,
die in 6A gezeigt sind, verwenden aus
Gründen
der Veranschaulichung einen superskalaren Prozessor, der zwei uops
gleichzeitig verarbeiten kann. Auf diese weise können zwei uops in dem Einplaner
zugewiesen werden, und zwei uops können in einem beliebigen Zyklus
eingeplant werden. Die erste uop wird in die Warteschlangenposition
0 gebracht, obwohl sie stattdessen in die Warteschlangenposition
3 gebracht werden könnte.
Die zweite uop wird in die Warteschlangenposition 6 gebracht.
-
Es
wird jetzt auf 6B Bezug genommen; zum Zeitpunkt
T = 1 wurde der Eintrag in der Warteschlangenposition 7 abgefertigt,
und die Position ist jetzt leer. Man beachte, daß die Spalte in der Abhängigkeitsmtrix 620,
die der Warteschlangenposition 7 zugeordnet ist, oder die Spalte
7 ebenfalls gelöscht worden
ist, und daß "D" in den Zeilen 1 und 4 entfernt worden
ist. Dies beruht darauf, daß irgendeine
Kindoperation, die von der abgefertigten uop abhängig ist, nicht länger darauf
zu warten braucht, daß dieser
Bestimmungsort bereit wird. Somit wird jedes Mal dann, wenn ein
Eintrag in der Warteschlange abgefertigt wird, die gesamte Spalte
in der Matrix, die diesem Eintrag zugeordnet ist, gelöscht. Da
Spalte 7 gelöscht
worden ist, sind jetzt zwei neue Einträge in den Zeilen 1 und 4 zur
Abfertigung bereit.
-
Wenn
eine uop in den Einplaner eintritt, wird die Abhängigkeit in der Form der Abhängigkeitsmatrix 620 aufgezeichnet.
Da die uop, die in die Warteschlangenposition 0 gebracht wurde,
Register 11 als Quelle hat, wird das Bit in der Matrix, das der
Warteschlangenposition 1 zugeordnet ist, auf "D" gesetzt. Die
beruht darauf, daß die
Warteschlangenposition 1 Register 11 als ihren Bestimmungsort aufweist,
und folglich die uop in Position 0, welche den Wert des Registers
11 verwenden muß,
nicht vor der uop in Position 1 ausgeführt werden sollte. Die uop,
die in die Warteschlangenposition 0 eingegeben wurde, weist darüber hinaus
Register 2 als Quelle auf, aber kein Eintrag in der Warteschlange
weist Register 2 als Bestimmungsort auf. Folglich ist der Wert im
Register 2 stets gültig
und es wird keine Abhängigkeit
erzeugt. Bezüglich
der uop, die in die Warteschlangenposition 6 eingegeben wurde, werden
die Kästen
in den Spalten 2 und 4 gekennzeichnet, um die Abhängigkeit
von den Registern 14 bzw. 12 anzumerken.
-
Der
Zeitpunkt T = 2 ist in 6C gezeigt. Die uops in den
Warteschlangenpositionen 1 und 4 wurden abgefertigt und die zwei
diesen Einträgen
zugeordneten Spalten wurden gelöscht.
Die uop, die in die Warteschlangenposition 0 gebracht wurde, ist
folglich zur Abfertigung bereit. Die uops, die in die Warteschlangenpositionen
5 und 6 gebracht wurden, hängen
jedoch noch von dem Eintrag in der Warteschlangenposition 2 ab,
da sie den Wert im Register 14 als Quelle benötigen.
-
Man
beachte, daß bei
einem superskalaren Prozessor, bei dem zwei uops gleichzeitig an
dem Einplaner eintreffen können,
Vorsorge für
den Fall getroffen werden muß,
bei dem eine Elternoperation in einem Kanal zum gleichen Zeitpunkt
eintrifft, zu dem ihr Kind in dem anderen Kanal eintrifft. In diesem Fall
findet die eintretende Kind-uop ihre Eltern-uop nicht in der Einplanungswarteschlange 610,
aber diese Information wird noch benötigt, um die Abhängigkeitsmatrix 620 korrekt
einzurichten. In diesem Fall ist es erforderlich, Abhängigkeitsüberprüfungen zwischen
gleichzeitigen uops auszuführen,
wenn sie in die Abhängigkeitsmatrix 620 gebracht
werden. Die Programmreihenfolge garantiert, daß nur die Quellen der späteren uop
mit dem Bestimmungsort der früheren
uop verglichen werden müssen,
so daß der
Vergleich nicht in beiden Richtungen ausgeführt werden muß. Das Ergebnis
des Vergleichs oder Gleichzeitigkeitsbit kann dann berücksichtigt
werden, wenn die Abhängigkeitsmatrix 620 eingerichtet
wird.
-
7 ist
eine Blockdarstellung der Einplanungsschaltung gemäß einem
Ausführungsbeispiel der
vorliegenden Erfindung. Die Schaltung enthält eine Abhängigkeitsmatrix 710,
die mit einer Bereit-Bestimmungseinheit 720 gekoppelt ist.
Die Bereit-Bestimmungseinheit 720 erfaßt, wenn sämtliche Bits in einer Zeile
gelöscht
sind. Wenn die Bereit-Bestimmungseinheit 720 erfaßt, daß sämtliche
Bits einer Zeile gelöscht
sind, ist die dieser Zeile zugeordnete Operation zur Abfertigung
bereit. Wenn mehr als eine Operation bereit ist, bestimmt die Prioritätslogik 730,
welche der bereiten Operationen eingeplant werden sollte. Die abgefertigten
Operationen löschen darüber hinaus
die zugehörige
Spalte in der Abhängigkeitsmatrix 710,
da weitere Einträge
nicht länger auf
den abgefertigten Eintrag warten müssen.
-
Es
wird jetzt auf 8 Bezug genommen, welche eine
Fünf-Stufen-Pipeline
für einen
Matrixeinplaner gemäß einem
Ausführungsbeispiel
der vorliegenden Erfindung veranschaulicht. Die erste Stufe der
Pipeline weist uops den Warteschlangenpositionen in dem Einplaner
zu. Leere Schlitze (Slots) werden auf der Grundlage der Freigabe
(Deallocation) von Positionen in dem vorgehenden Zyklus bestimmt und
es wird entschieden, wie viele uops, sofern vorhanden, zugewiesen
werden können.
Eingehende uops werden freien Positionen in der Warteschlange zugewiesen
und geeignete Schreib-Vektoren werden erzeugt, um in der nächsten Stufe
der Pipeline verwendet zu werden.
-
In
der zweiten Stufe der Pipeline werden die Quellen der eingehenden
uops mit dem vorhandenen Bestimmungsregistersatz verglichen, und
die Ergebnisse der Vergleiche werden zu Verwendung in der nächsten Stufe
gespeichert. Gleichzeitig werden die Bestimmungsorte in die zugewiesenen
Einträge
unter Verwendung der Schreibvektoren, die während der letzten Stufe erzeugt
worden sind, geschrieben. Da die Gültig-Bits für die neu eingeschriebenen
Bestimmungsorte nicht geschrieben worden sind, können Quellen nicht mit neu
eingeschriebenen Bestimmungsorten verglichen werden.
-
In
der dritten Stufe der Pipeline werden Vergleichsergebnisse verwendet,
um die Matrix für
die neu eingeschriebenen Einträge
einzurichten. Die Gültig-Bits
werden dann geschrieben, um eine Bewertung der Matrix in dem nächsten Zyklus
zu ermöglichen.
-
Die
vierte Stufe der Pipeline ist die Einplanungsschleife. Irgendwelche
Spaltenlöschungen,
die von abgefertigten uops verursacht sind, werden zu den Matrixbits
weitergeleitet. Jede Zeile wird dann hinsichtlich der Bereitschaft
bewertet. Sofern eine uop nicht bereit ist, wird die Bewertung im
nächsten Zyklus
erneut durchgeführt.
Sofern eine uop bereit ist, wird sie gegenüber anderen zur Abfertigung
bereiten uops priorisiert. Sobald die uop zur Abfertigung bereit
ist, wird ein Abfertigungsvektor an den Registersatz gesendet, um
die erforderlichen Informationen zu lesen und den Eintrag freizugeben
(deallocate). Dies erzeugt darüber
hinaus ein Signal, das die zugehörigen
Spalten in der Matrix löscht,
was es irgendwelchen Kindern oder abhängigen uops ermöglicht,
sich auf eine Abfertigung in nachfolgenden Zyklen vorzubereiten.
-
Die
fünfte
Stufe der Pipeline ist die Freigabe (Deallocation) der zuvor abgefertigten
Einträge
aus dem Einplaner. Diese Stufe liest darüber hinaus gleichzeitig erforderliche
Informationen aus einem Registersatz, die an die Ausführungseinheiten
gesendet werden sollen. Diese Informationen können beispielsweise Operanden,
Quellen, Bestimmungsregister, Direktwerte und Identifizierer umfassen.
-
9 ist
ein Ablaufdiagramm eines Verfahrens zum Einplanen von Operationen
gemäß einem Ausführungsbeispiel
der vorliegenden Erfindung. Anfänglich
wird festgestellt, welche Einträge
in dem Einplaner leer sind oder verfügbar sind, um eine eingehende
uop zu speichern, wie es bei 910 angezeigt ist. Dies kann
beispielsweise der ersten Stufe der Pipeline, die in 8 gezeigt
ist, entsprechen.
-
Es
wird wieder auf 9 Bezug genommen; die Quellen
der neuen uops werden mit den Bestimmungsorten der gültigen Einträge, die
sich bereits in der Einplanungswarteschlange befinden, bei 920 verglichen,
und die Vergleichsergebnisse oder Treffer werden für die weitere
Verarbeitung protokolliert. Wie es bei 922 angezeigt ist,
werden die Bestimmungs- oder
Ergebnisregister ebenfalls in den zugewiesenen Eintrag eingeschrieben.
Diese Aktionen können
der zweiten Stufe der in 8 gezeigten Pipeline entsprechen.
Die Matrix wird dann bei 930 eingerichtet, und die Gültig-Bits
werden bei 932 unter Verwendung dieser zuvor berechneten
Bits eingeschrieben. Diese Aktionen können der dritten Stufe der
in 8 gezeigten Pipeline entsprechen.
-
Die
Matrix wird bewertet, wie es bei 940 gezeigt ist, indem
die Abhängigkeitsbits
in der Abhängigkeitsmatrix
in jedem Zyklus überwacht
werden. Sofern nicht sämtliche
Bits in einer Zeile einer uop gelöscht sind, wird die Bewertung
fortgesetzt. Wenn sämtliche
Bits in einer Zeile gelöscht
sind, ist die uop bereit, abgefertigt zu werden, und bei 942 wird
die Priorisierung ausgeführt.
Die uop wird bei 944 abgefertigt, und die zugehörigen Spalten
in der Abhängigkeitsmatrix
werden gelöscht.
Dies wiederum kann es weiteren uops ermöglichen, abgefertigt zu werden. Diese
Aktionen bilden eine Einplanungsschleife in Übereinstimmung mit einem Ausführungsbeispiel
der vorliegenden Erfindung und können
der vierten Stufe der in 8 gezeigten Pipeline entsprechen.
Als nächstes
wird bei 950 die uop freigegeben (deallocated) und das
Gültig-Bit
wird zurückgesetzt,
was eine erneute Verwendung des Eintrags ermöglicht. Bei 952 werden
die Informationen der abgefertigten uop zur Ausgabe an die Ausführungseinheit
ausgelesen. Dies kann der fünften
Stufe der in 8 gezeigten Pipeline entsprechen.
-
Obwohl
hier verschiedene Ausführungsbeispiele
speziell veranschaulicht und beschrieben sind, ist es klar, daß Modi fikationen
und Variationen der vorliegenden Erfindung von den obigen Lehren
abgedeckt werden und innerhalb des Schutzumfangs der anhängigen Ansprüche liegen,
ohne vom Geist und beabsichtigten Umfang der Erfindung abzuweichen. Obwohl
beispielsweise ein Einplaner für
uops verwendet wurde, um ein Ausführungsbeispiel der vorliegenden
Erfindung zu veranschaulichen, ist es klar, daß Einplaner für andere
Arten von Operationen ebenfalls in den Umfang der Erfindung hineinfallen. Es
sollte in ähnlicher
Weise klar sein, daß die
oben beschriebenen speziellen Architekturen nur der Veranschaulichung
dienen. Andere Matrixeinplanerarchitekturen fallen ebenfalls in
den Umfang der vorliegenden Erfindung. Obwohl die Erfindung unter
Bezugnahme auf eine spezielle Prozessorarchitektur beschrieben worden
ist, ist sie darüber
hinaus bei einer beliebigen Anzahl alternativer Architekturen mit jeweils
einer großen
Vielzahl von Mikroarchitekturen nützlich. Obwohl Software oder
Hardware zum Steuern bestimmter Funktionen beschrieben wurde, können schließlich solche
Funktionen unter Verwendung entweder von Software, Hardware oder
Kombinationen von Soft- und Hardware ausgeführt werden, wie es im Stand
der Technik gut bekannt ist. Wie es ebenfalls bekannt ist, kann
Software auf ein Medium, wie beispielsweise einer Festplatte oder
einer Diskette oder einer CD-ROM in Form von Befehlen, die von einem
Prozessor ausgeführt
werden können,
gespeichert werden. Die Befehle können auf dem Medium in einem
komprimierten und/oder verschlüsselten Format
gespeichert werden. In der hier verwendeten Weise sollen die Worte "ausgebildet, um durch
einen Prozessor ausgeführt
zu werden" sich
auch auf Befehle erstrecken, die in einem komprimierten und/oder
verschlüsselten
Format gespeichert sind, sowie auf Befehle, die compiliert oder
von einem Installierer installiert werden müssen, bevor sie durch den Prozessor
ausgeführt
werden können.