-
FELD DER ERFINDUNG
-
Die
vorliegende Erfindung bezieht sich auf die Architektur von Prozessoren
für sehr
lange Befehlswörter
(Very Long Instruction Words; VLIW) und insbesondere auf ein Gerät, um Befehle
für VLIW-Prozessoren
zu entsenden.
-
HINTERGRUND DER ERFINDUNG
-
Sprunghaft
steigende Ansprüche
an eine erhöhte
Computerverarbeitungsleistung haben zur Einführung höchst paralleler Computerarchitekturen
geführt,
bei denen mehrere Operationen gleichzeitig ausgeführt werden.
Dafür konzipiert,
die höheren Programmsprachen
inhärente
feinkörnige
Parallelität auszunutzen,
umfasst ein VLIW-Prozessor
mehrere parallele Funktionseinheiten, die durch ein sehr langes
Befehlswort (d.h. 100 oder mehr Bits) auf einer Zyklus-für-Zyklus-Basis
gesteuert werden. Sehr lange Befehlswörter haben eine Verkettung
von Feldern oder Ausgabeschlitzen (engl. issue slots), die jeweils unabhängig voneinander
die Operation einer Funktionseinheit spezifizieren. VLIW-Prozessoren
werden in einer Vielzahl von Anwendungen eingesetzt, unter anderem
in Supercomputern und Großrechnern, Workstations
und Personal Computern, sowie spezielle Prozessoren in Audio- und
Video-Unterhaltungselektronikprodukten.
-
1 veranschaulicht
einen herkömmlichen VLIW-Prozessor 100.
Bei jedem Maschinenzyklus werden sehr lange Befehlswörter aus
einem Befehlsspeicher 110 in ein Befehlsausgaberegister 120 geladen
oder „ausgegeben". Üblicherweise
wird ein Befehlsspeicher 110, der ein Direktzugriffsspeicher (RAM)
oder ein Festwertspeicher (ROM) sein kann, fließbandverarbeitet und durch
einen Befehlscache (nicht gezeigt) ergänzt, um den Ausführungsdurchsatz
zu erhöhen.
Jedes in das Befehlsausgaberegister 120 geladene Befehlswort
enthält
eine Anzahl von Ausgabeschlitzen 121–127, wobei jeder
Ausgabeschlitz 121–127 eine
entsprechende Funktionseinheit 131–137 im VLIW-Prozessor 100 steuert.
Im Allgemeinen kann ein VLIW-Prozessor jede nützliche Kombination aus Funktionseinheiten
umfassen, und 1 veranschaulicht eine derartige
Kombination. Je nach der speziellen Implementierung kann es mehr
oder weniger Funktionseinheiten geben, und es können Funktionseinheiten unterschiedlicher
Art vorhanden sein. Funktionseinheiten können eine Vielzahl von Operationen
ausführen,
die durch einen Operationscode (Opcode) ausgewählt werden; beispielsweise
kann eine arithmetisch-logische Funktionseinheit zwei Werte addieren
und subtrahieren.
-
Jeder
Ausgabeschlitz 121–127 innerhalb
eines in das Befehlsausgaberegister 120 geladenen Befehlsworts
spezifiziert eine Operation, die im aktuellen Taktzyklus für die entsprechende
Funktionseinheit 131–137 zu
starten ist. Insbesondere enthält
jeder Ausgabeschlitz 121–127 üblicherweise
einen Opcode und Operanden für
die entsprechende Funktionseinheit 131–137. Der Opcode ist
nützlich
für Funktionseinheiten,
die eine Vielzahl unterschiedlicher Operationen ausführen. Operanden
für die Funktionseinheiten 131–137 werden
aus einer gemeinsamen Registerdatei 140 mit mehreren Anschlüssen gelesen,
und Ergebnisse von der Funktionseinheit 131–137 werden
in die Registerdatei 140 geschrieben. Der hierin verwendete
Ausdruck „Spezifizierung
einer Operation" bezieht
sich auf eine Kombination eines Opcodes, soweit erforderlich, und Operanden,
soweit erforderlich, die verwendet werden, um eine Operation einer
Funktionseinheit zu spezifizieren. Somit enthält jeder Ausgabeschlitz 121–127 eine
Spezifizierung einer von einer entsprechenden Funktionseinheit 131–137 auszuführenden Operation.
-
Bezug
nehmend auf 2 enthält ein Ausgabeschlitz 121 eine
Spezifizierung der Operation 210 der Konstantenerzeugungseinheit 131,
nämlich einen
konstanten Wert CONSTANT und ein Register RD, um den konstanten
Wert aufzunehmen. Die Spezifizierung der in entsprechenden Ausgabeschlitzen 122 und 123 enthaltenen
Operation 220 arithmetisch-logischer Einheiten (ALU) 132 und 133 enthält einen
ALU-Opcode, zwei Quellenregister RA und RB sowie ein Zielregister
RD für
die jeweilige Operation. Typische ALU-Opcodes geben Operationen
wie Addition, Subtraktion, Negation, Logisch Und, Logisch Oder,
Logisch Ausschließlich
oder Logische Komplementbildung und dergleichen an. Ausgabeschlitz 124 enthält eine
Spezifizierung 240 mit einem MUL-Opcode für Multiplikation,
Division oder Quadratwurzel, Quellenregister RA und RB sowie ein
Zielregister RD für
die Multiplizierereinheit 134. Ausgabeschlitz 125 beinhaltet
eine Spezifizierung 250 mit einem FPU-Opcode (z.B. Addition,
Subtraktion und Vergleich), Quellenregister RA und RB sowie ein
Zielregister RD für
die Gleitkommaeinheit 135. Eine Datenspeichereinheit 136 wird
durch Ausgabeschlitz 126 gesteuert, der eine Spezifizierung 260 mit
einem MEM-Opcode, welcher eine Lade- oder Speicheroperation angibt,
Adressenregister RA und RB sowie ein Datenregister RD enthält. Die
Sprungsteuereinheit 137 mit Bezug auf die Spezifizierung 270 im
entsprechenden Ausgabeschlitz 127 verwendet Register RA
und RB, um einen Bedingungswert und eine Sprungzieladresse innerhalb
eines Befehlsspeichers 110 anzugeben; die Spezifizierung 270 enthält ferner einen
JPM-Opcode, der spezifiziert, ob immer zu springen ist (unbedingter
Sprung), ob zu springen ist, wenn das Bedingungswertregister wahr
ist, ob zu springen ist, wenn das Bedingungswertregister unwahr
ist, oder ob überhaupt
nicht zu springen ist (NOP). Die Inhalte der Ausgabeschlitze 121–127,
die Operation der Funktionseinheiten 131–137 und
das Format der Spezifizierungen 210–270 sind als beispielhaft
zu betrachten und können
an jede brauchbare Konfiguration angepasst werden.
-
Damit
ein Softwareprogramm auf einem VLIW-Rechner läuft, muss eine „feinkörnige parallele" oder „befehlsebenenparallele" Übersetzung gefunden werden.
Dies wird durch einen Kompilierer erreicht, der eine konventionelle
höhere
Programmiersprache, wie beispielsweise ANSI-C, in VLIW-Befehle übersetzt.
Solche Kompilierer werden in John R. Ellis, BULLDOG: A Compiler
for VLIW Achitectures, MIT Press 1985, ISBN 0-262-05034-X, beschrieben. Funktionseinheiten
in herkömmlichen
VLIW-Prozessoren werden durch genau einen Ausgabeschlitz im Befehlswort
gesteuert. Der in 1 dargestellte VLIW-Prozessor 100 enthält beispielsweise
sieben Ausgabeschlitze 121–127, die den jeweiligen
sieben Funktionseinheiten 131–137 entsprechen.
Somit geben Kompilierer für
herkömmliche
VLIW-Prozessoren Befehle aus, in denen eine Funktionseinheit durch
Werte in einem Signalausgabeschlitz gesteuert wird.
-
Hochleistungsprozessoren,
einschließlich VLIW-Prozessoren,
unterliegen dem durch die Befehlsspeicherlatenz verursachten so
genannten „branch
delay" (Verzweigungsverzögerung)-Problem,
welches die Zeit in Rechnerzyklen zwischen der Übertragung einer Befehlsadresse
an einen Befehlsspeicher und dem Empfang des entsprechenden Befehlswortes
zur Ausführung
ist. Während
einer sequentiellen Ausführung
kann die Adresse des nächsten
Befehls vorausgesagt werden, so dass der Befehlsspeicher für eine wirksame
Befehlsspeicherlatenz von einem Rechnerzyklus fließbandverarbeitet werden
kann. Bei bedingten Sprüngen
kann die Adresse des nächsten
Befehls jedoch nicht vorausgesagt werden, weil die Zieladresse vom
Ergebnis der Bewertung eines bedingten Ausdrucks abhängt. Demzufolge
stellt die Verzweigungsverzögerung
eine Anzahl von Rechnerzyklen dar, in denen das Befehlswort an der
Zieladresse aufgrund der Bewertung des bedingten Ausdrucks und der
Befehlsspeicherlatenz nicht verfügbar
ist. Da Funktionseinheiten immer schneller werden, beispielsweise
durch aggressive Fließbandverarbeitung,
nimmt diese La tenz zu. In einer extrem schnellen Fließbandarchitektur
ist es sehr unerwünscht,
am Ziel des Sprungbefehls auf das aus dem Befehlsspeicher abzurufende
Befehlswort zu warten, bevor die Ausführung der Befehle fortgesetzt wird.
-
Eine
Lösung
für das
Problem der Verzweigungsverzögerung
wurde von P. Y-T. Hsu, „Highly Concurrent
Scalar Processing",
Thesis, University of Illinois at Urbana-Champaign, 1986, vorgeschlagen, bei
der während
der Verzweigungsverzögerungsperiode
weiterhin Befehle für
alle möglichen
Problempfade parallel ausgegeben werden, soweit dies die begrenzte
Anzahl von Funktionseinheiten zulässt. Jede Operation wird jedoch
durch einen booleschen Ausdruck „überwacht", so dass nur diejenigen Operationen
ausgeführt
werden dürfen,
die den booleschen Ausdruck oder „Schutzwert" (engl. guard value)
erfüllen.
Diese Schutzwerte werden vom Kompilierer auf eine solche Weise konstruiert,
dass sichergestellt ist, dass nur die Operationen auf dem vorgesehenen Programmpfad
ausgeführt
werden.
-
Ein
Nachteil bei aktuellen VLIW-Prozessoren wird deutlich, wenn zwei
oder mehr der parallelen Programmpfade in der Verzweigungsverzögerungsperiode
Operationen enthalten, die zu derselben Funktionseinheit gehören, wie
beispielsweise eine Gleitkommaeinheit 135. Da jede Funktionseinheit durch
genau einen Ausgabeschlitz im Befehlswort gesteuert wird, müssen Operationen
für dieselbe Funktionseinheit
entlang unterschiedlicher Programmpfade in separaten Befehlen ausgegeben werden.
Beispielsweise können
beide Programmpfade eines numerischen Analyseprogramms nach einer
bedingten Verzweigung Gleitkommaoperationen anwenden. Bei einem
VLIW-Prozessor mit einer Gleitkommaeinheit 135 kann in
jedem Befehl nur eine Gleitkommaoperation ausgegeben werden. Daher müssen die
Gleitkommaoperationen entlang eines Pfades, beispielsweise des Pfades „Bedingung
wahr, in anderen Befehlen ausgegeben werden als die Gleitkommaoperationen
entlang des anderen Pfades, beispielsweise des Pfades „Bedingung
unwahr". Folglich
müssen
zusätzliche
Befehle vom Kompilierer festgelegt werden, wodurch die Codegröße gesteigert
und die Ausführungszeiten
verkürzt
werden.
-
Wie
in 1 veranschaulicht besteht ein herkömmlicher
Ansatz zur Verringerung dieses Nachteils darin, eine weitere Implementierung
derselben Funktionseinheit zu schaffen. Beispielsweise enthält der konventionelle
VLIW-Prozessor 100 zwei arithmetisch-logische Einheiten 132 und 133.
Obwohl eine zweite arithmetisch-logische Einheit nicht unerschwinglich
teuer sein muss, ist es aufwändig, eine
zweite Gleitkommaeinheit erneut auf einer monolithischen Halbleiteranordnung
zu implementieren, was den Platzbe darf und die Leistung betrifft.
Andere komplexe Funktionseinheiten wie Multiplizierer, Schiebelogikschaltung
und sogar Datenspeichereinheiten sind ebenfalls teuer zu duplizieren.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Dementsprechend
besteht ein Bedarf an einem Befehlzuteilungsverfahren und einem
Mechanismus, der entlang entsprechender Programmpfade in einem einzelnen
Befehl eine Vielzahl von Operationen für eine Funktionseinheit ausgeben
kann. Ferner besteht ein Bedarf an einem kostengünstigen Verfahren und Mechanismus,
um in einem einzelnen Befehl zwei oder mehr Operationen für eine gemeinsame
Funktionseinheit auszugeben.
-
Diese
und andere Anforderungen werden von der vorliegenden Erfindung nach
Anspruch 1 erfüllt,
bei der eine aus der Vielzahl überwachter
Operationen, die in einem einzelnen Befehlswort spezifiziert werden,
basierend auf Schutzwerten, die mit den Operationen zusammenhängen, einer
gemeinsamen Funktionseinheit zugeleitet wird. Folglich können Kompilierer
Befehle ausgeben, bei denen mehr als ein Ausgabeschlitz eine gemeinsame
Funktionseinheit bedingt steuert. Tatsächlich kann ein Befehlswort
eine größere Anzahl
von Ausgabeschlitzen haben als Funktionseinheiten vorhanden sind.
-
Ein
Aspekt der vorliegenden Erfindung ist ein VLIW-Prozessor zum Ausführen einer
Sequenz sehr langer Befehlswörter,
die mehrere parallel auszuführende
Operationen spezifizieren. Der VLIW-Prozessor umfasst mehrere Funktionseinheiten,
um mindestens einige der durch ein sehr langes Befehlswort spezifizierten
Operationen auszuführen.
Ein Befehlsregister speichert das sehr lange Befehlswort, das mehrere
Felder hat, wobei jedes Feld Folgendes enthält: einen Identifizierer zum
Auswählen
einer der Funktionseinheiten, eine Spezifizierung einer durch die
gewählte
Funktionseinheit auszuführenden
Operation, und einen Schutzwert, um anzugeben, ob die Operation
zu unterbinden ist oder nicht. Eine Leitschaltung leitet die Spezifizierung
der auszuführenden
Operation gemäß dem zugehörigen Schutzwert von
dem Befehlsregister an die ausgewählte Funktionseinheit, z.B.
nur, wenn der Schutzwert angibt, dass die Operation nicht unterbunden
wird.
-
Ein
weiterer Aspekt der vorliegenden Erfindung ist ein VLIW-Prozessor
zum Ausführen
einer Sequenz sehr langer Befehlswörter, die mehrere parallel
auszuführende
Operationen spezifizieren. Der VLIW-Prozessor umfasst mehrere Funktionseinheiten,
um die Operationen parallel auszuführen, sowie ein Befehlsregister,
um das sehr lange Befehlswort zu speichern. Das sehr lange Befehlswort
hat mehrere Felder, deren Anzahl grö ßer ist als die Anzahl der Funktionseinheiten.
Eine Leitschaltung leitet Inhalte eines der Felder im Befehl vom
Befehlsregister zu den zugehörigen
Funktionseinheiten. Beispielsweise kann jedes Feld eine Spezifizierung
einer von einer zugehörigen
Funktionseinheit auszuführenden
Operation sowie einen Schutzwert enthalten, der angibt, ob die Operation
und das Steuern der Leitschaltung zu unterbinden ist oder nicht.
-
Noch
ein weiterer Aspekt der vorliegenden Erfindung ist ein Verfahren
zum Zuteilen von Befehlen in einem VLIW-Prozessor, das den Schritt
des Ausgebens eines sehr langen Befehlsworts mit mehreren Feldern
umfasst. Jedes Feld enthält
einen Identifzierer, um eine von mehreren Funktionseinheiten auszuwählen, eine
Spezifizierung einer durch die ausgewählte Funktionseinheit auszuführenden
Operation und einen Schutzwert, um anzugeben, ob die Operation zu
unterbinden ist oder nicht. Basierend auf den Schutzwerten werden
die Spezifizierungen innerhalb der Felder den zugehörigen Funktionseinheiten
zugeführt
und die durch die gelenkte Spezifizierung spezifizierte Operation
ausgeführt.
-
Noch
ein weiterer Aspekt der vorliegenden Erfindung ist ein Verfahren
zum Zuteilen von Befehlen in einem VLIW-Prozessor, das den Schritt
des Ausgebens eines sehr langen Befehlsworts mit mehreren Feldern
umfasst. Die Inhalte der Felder werden den zugehörigen Funktionseinheiten zugeführt, deren
Anzahl geringer als die Anzahl der Felder in dem sehr langen Befehlswort
ist, und die durch den gelenkten Inhalt spezifizierte Operation
wird ausgeführt. Jedes
Feld kann eine Spezifizierung einer Operation enthalten, die von
einer zugehörigen
Funktionseinheit unter den mehreren Funktionseinheiten auszuführen ist,
sowie einen Schutzwert, um anzugeben, ob die Operation und das Steuern,
wie die Feldinhalte zu lenken sind, zu unterbinden sind oder nicht.
-
Aus
der folgenden detaillierten Beschreibung werden leicht noch weitere
Aufgaben und Vorteile der vorliegenden Erfindung offensichtlich
werden, indem einfach die beste in Betracht kommende Weise zum Ausführen der
Erfindung veranschaulicht wird. Wie man feststellen wird, kann die
Erfindung andere und unterschiedliche Ausführungsformen haben, und ihre verschiedenen
Details können
in verschiedener, nahe liegender Hinsicht modifiziert werden, ohne
insgesamt von der Erfindung abzuweichen. Dementsprechend sind die
Zeichnung und Beschreibung als veranschaulichend und nicht als einschränkend zu betrachten.
-
KURZE BESCHREIBUNG DER
ZEICHUNGEN
-
Die
vorliegende Erfindung wird in den Figuren der begleitenden Zeichnun gen
anhand von Beispielen und nicht in einschränkender Weise veranschaulicht,
wobei sich gleiche Bezugszeichen auf gleiche Teile beziehen. Es
zeigen:
-
1 einen
herkömmlichen
VLIW-Prozessor;
-
2 Formate
herkömmlicher
VLIW-Ausgabeschlitze;
-
3 einen
VLIW-Prozessor gemäß einer Ausführungsform
der vorliegenden Erfindung;
-
4 Formate
von VLIW-Ausgabeschlitzen gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
5 einen
VLIW-Prozessor gemäß einer anderen
Ausführungsform
der vorliegenden Erfindung;
-
6 Formate
von VLIW-Ausgabeschlitzen gemäß einer
anderen Ausführungsform
der vorliegenden Erfindung.
-
BESCHREIBUNG DER BEVORZUGTEN
AUSFÜHRUNGSFORM
-
Beschrieben
werden ein verbessertes Zuteilungsverfahren und ein verbesserter
Zuteilungsmechanismus für
VLIW-Befehle. In der folgenden Beschreibung werden zum Zwecke der
Erläuterung zahlreiche
spezifische Details dargelegt, um ein umfassendes Verständnis für die vorliegende
Erfindung zu schaffen. Für
den Fachkundigen wird es jedoch offensichtlich sein, dass die vorliegende
Erfindung auch ohne diese Details genutzt werden kann. In anderen
Fällen
werden bekannte Strukturen und Vorrichtungen in Form eines Blockdiagramms
gezeigt, um eine unnötige
Verundeutlichung der vorliegenden Erfindung zu vermeiden.
-
Die
vorliegende Erfindung behandelt und löst Probleme in Verbindung mit
einer unflexiblen Operationsplanung während der Verzweigungsverzögerung in
herkömmlichen
VLIW-Prozessoren, indem die Eingänge
basierend auf den Schutzwerten von mehr als einem Ausgabeschlitz
zu Funktionseinheiten multiplexiert werden. Die Schutzwerte geben
separate Programmpfade nach einer Verzweigungsbedingung an. Da jeder
Ausgabeschlitz einen Schutzwert enthält, werden Operationen in Ausgabeschlitzen
nach einer Verzweigungsbedingung mit einem Programmpfad verknüpft. Wenn
die Schutzwerte von zwei Ausgabeschlitzen in einem einzelnen Befehlswort
für eine
gemeinsame Funktionseinheit sich gegenseitig ausschließende Programmpfade
angeben, dann stehen die beiden Ausgabeschlitze nicht in Konkurrenz
zueinander, weil einer der Ausgabeschlitze durch seinen Schutzwert
blockiert wird, während
der andere nicht durch seinen Schutzwert blockiert wird. Folglich
können
Befehle ausgegeben werden, die die gemeinsame Funktionseinheit in zwei
oder mehr Ausgabeschlitzen entlang sich gegenseitig ausschließender Programmpfade
steuern. Dieser Ansatz ist wirtschaftlich, weil ein zusätzlicher Multiplexer üblicherweise
viel günstiger
zu implementieren ist als eine zweite Funktionseinheit, wie beispielsweise
eine Datenspeichereinheit, eine Gleitkommaeinheit, ein Multiplizierer
und eine Schiebelogikschaltung.
-
Gemäß einer
Ausführungsform
der vorliegenden Erfindung werden bestimmten Funktionseinheiten
zusätzliche
Ausgabeschlitze zugeteilt. Somit enthält ein Befehlsausgaberegister
mehr Ausgabeschlitze als Funktionseinheiten vorhanden sind. Bezug
nehmend auf 3 wird ein VLIW-Prozessor 300 dargestellt,
bei dem die Ausgabeschlitze 321–327 hinsichtlich
ihrer Lage entsprechenden Funktionseinheiten 331–337 zugeordnet
werden, d.h. bestimmte Positionen innerhalb des Befehlsausgaberegisters 320 sind
bestimmten Funktionseinheiten zugeordnet. In 3 sind sieben
Funktionseinheiten 331–337 dargestellt,
nämlich
eine Konstantenerzeugungseinheit 331, eine erste arithmetischlogische
Einheit 332, eine zweite arithmetisch-logische Einheit 333,
ein Multiplizierer 335, eine Gleitkommaeinheit 335,
eine Datenspeichereinheit 336 und eine Verzweigungssteuerungseinheit 337,
die jeweils den oben beschriebenen Funktionseinheiten 131–137 entsprechen.
-
Jeder
dieser sieben Funktionseinheiten 131–137 sind neun Ausgabeschlitze 321–327 zugeordnet,
wobei eine Gleitkommaeinheit 335 zwei Ausgabeschlitzen 325a und 325b zugeordnet
ist und eine Datenspeichereinheit 336 zwei Ausgabeschlitzen 326a und 326b zugeordnet
ist. Bezug nehmend auf 4 enthalten die Ausgabeschlitze 321–327 Operationspakete 410–470,
die einen Schutzwert G und eine Spezifizierung der Operation enthalten
(z.B. einen Opcode und Operanden, soweit erforderlich). Der Schutzwert
G gibt an, auf welchem Programmpfad die Operation auszuführen ist.
Eine Implementierung von Schutzwerten wird in der gemeinsam zugewiesenen
US-amerikanischen Patentschrift 5.450.556, ausgegeben am 12. September
1995 an Slavenburg et. al, beschrieben, worin der Schutzwert einen
Pfadausdruck spezifiziert, der mit Pfadinformationen übereinstimmt,
die von der Verzweigungssteuerungseinheit 137 erzeugt werden.
Wenn die Verzweigungssteuerungseinheit 137 beispielsweise 3-Wege-Verzweigungen
implementiert, dann lässt sich
ein Programmpfad in einem Schutzwert durch zwei Bits ausdrücken. Schutzwerte
können
auch bedingte Programmpfade aufgrund einer nachfolgenden Verzweigung
in der Verzweigungsverzögerungsperiode
durch Verkettung ausdrücken.
Die Spezifizierung der Operation innerhalb von Operationspaketen 410–470 enthält ähnliche
Unterfelder, wie beispielsweise Opcodes und Operanden, wie oben
unter Bezugnahme auf die Spezifizierungen 210–270 in 2 beschrieben.
Die Inhalte dieser Ausgabeschlitze 321–327, die Operation
der Funktionseinheiten 331–337 und das Format
der Spezifizierungen in Operationspaketen 410–470 sind
als beispielhaft zu betrachten und können an jede nützliche
Konfiguration angepasst werden.
-
Der
Multiplexer 355 hat Eingänge, die an den Ausgabeschlitzen 325a und 325b mit
dem Befehlsregister 320 gekoppelt sind. Der Ausgang des
Multiplexers 355 ist mit der Gleitkommaeinheit 335 gekoppelt.
Somit leitet der Multiplexer 355 einen Opcode und Operanden
von einem der Ausgabeschlitze 325a und 325b an
die Gleitkommaeinheit 335 weiter. Ähnlich hat ein Multiplexer 356 Eingänge, die
an den Ausgabeschlitzen 326a und 326b mit dem
Befehlsregister 320 gekoppelt sind, und der Ausgang des
Multiplexers 356 ist mit der Datenspeichereinheit 336 gekoppelt.
Dadurch leitet der Multiplexer 356 einen Opcode und Operanden
von einem der Ausgabeschlitze 326a und 326b zur
Datenspeichereinheit 336.
-
Beide
Multiplexer 355 und 356 werden durch Schutzwerte
geschaltet, die von den zugehörigen Ausgabeschlitzen 325a/325b bzw. 326a/326b abgeleitet
werden, so dass der Opcode und Operanden für den nicht blockierten Ausgabeschlitz
an die zugehörige
Funktionseinheit weitergeleitet werden. Gemäß einer Implementierung werden
die Schutzwerte mit dem aktuellen, von der Verzweigungssteuerungseinheit 337 aufrechterhaltenen
Programmpfad verglichen. Beispielsweise enthält der Ausgabeschlitz 325a einen
Schutzwert „1", der eine wahre
Bedingung in einem Verzweigungspfad angibt, während der Ausgabeschlitz 325b einen
Schutzwert „0" enthält, der
eine unwahre Bedingung in einem Verzweigungspfad angibt. Wenn also
der Verzweigungspfad mit der wahren Bedingung gewählt wird,
dann wird der aktuelle Programmpfad zu einer „1" und der Multiplexer 355 wählt den
Opcode und Operanden von dem Ausgabeschlitz, der einen mit dem aktuellen Programmpfad übereinstimmenden
Schutzwert hat, nämlich
Ausgabeschlitz 325a. Wenn andererseits der Verzweigungspfad
mit der unwahren Bedingung gewählt
wird, dann wird der aktuelle Programmpfad zu einer „0" und der Multiplexer 355 wählt den
Opcode und Operanden vom anderen Ausgabeschlitz 325b. Folglich
kann ein Befehl vom Befehlsspeicher 310 in das Befehlsausgaberegister 320 so
ausgegeben werden, dass eine gemeinsame Funktionseinheit, wie beispielsweise
eine Gleitkommaeinheit 335, entlang jedes Verzweigungspfades
gesteuert werden kann. In diesem Fall kann ein Kompilierer Befehle
mit Aus gabeschlitzen ausgeben, die eine gemeinsame Funktionseinheit
insofern steuern, als sich die Schutzwerte für die Ausgabeschlitze gegenseitig ausschließen.
-
Während der
Operation wird ein sehr langes Befehlswort aus dem Befehlsspeicher 310 abgerufen,
der ein mit einem RAM oder ROM gekoppelter, fließbandverarbeiteter Zwischenspeicher
(Cache) sein kann, und im Befehlsausgaberegister 320 gespeichert.
Das Befehlsausgaberegister 320 enthält eine Vielzahl von Feldern
für die
Ausgabeschlitze 321–327,
die einer Funktionseinheit 331–337 entsprechen.
Einige der Ausgabeschlitze, z.B. die Ausgabeschlitze 325a und 325b,
entsprechen einer gemeinsamen Funktionseinheit, z.B. der Gleitkommaeinheit 335,
in welchem Fall ein Multiplexer 355 dafür konfiguriert ist, die Spezifizierung
einer von der Gleitkommaeinheit 335 auszuführenden
Operation von einem der Ausgabeschlitze 325a und 325b zu
leiten. Der Multiplexer 355 ist außerdem dafür konfiguriert, basierend auf
den jeweiligen darin gespeicherten Schutzwerten einen Opcode und
Operanden von einem der Ausgabeschlitze 325a und 325b auszuwählen. Als
ein weiteres Beispiel entsprechen die Ausgabeschlitze 325a und 325b der
Datenspeichereinheit 336, und der Multiplexer 356 ist
dafür konfiguriert,
die Spezifizierung einer von der Datenspeichereinheit 336 auszuführenden
Operation von einem der Ausgabeschlitze 326a und 326b zu
leiten. Der Multiplexer 356 ist außerdem dafür konfiguriert, basierend auf
den jeweiligen darin gespeicherten Schutzwerten einen Opcode und
Operanden von einem der Ausgabeschlitze 326a und 326b auszuwählen. Folglich kann
ein einzelnes während
der Verzweigungsverzögerung
ausgeführtes
Befehlswort eine gewählte Funktionseinheit,
z.B. die Gleitkommaeinheit 335 und die Datenspeichereinheit 336,
entlang jedes sich gegenseitig ausschließenden Programmpfads wirksam
nutzen. Wenn die Funktionseinheiten während eines Rechnerzyklus betätigt werden,
werden Daten aus der Registerdatei 340 abgerufen, und die
Ergebnisse werden basierend auf Operanden, die von den Ausgabeschlitzen 321–327 des
Befehlsausgaberegisters 320 zu den entsprechenden Funktionseinheiten 331–337 geleitet
werden, zurück
in die Registerdatei 340 geschrieben.
-
Wie
zuvor hierin beschrieben, erweitert die in 4 veranschaulichte
Ausführungsform
der vorliegenden Erfindung die Größe des Befehlsworts, um zusätzliche
Ausgabeschlitze für
gewünschte
Funktionseinheiten zuzuweisen. In einigen Implementierungsumgebungen
unterliegt diese Ausführungsform der
vorliegenden Erfindung jedoch einigen Nachteilen. Bei einer sequentiellen
Operation beispielsweise wird nur einer der Ausgabeschlitze für eine gegebene Funktionseinheit
benutzt, wodurch die Bandbreitenanforderungen steigen, um den VLIW-Prozessor
auf oder nahe der Maximalleistung zu hal ten. Darüber hinaus steigert die erhöhte Größe des Befehlsworts
die Kosten für
Befehlsspeicher, Zwischenspeicher (Caches) und Busse. Schließlich ist
der kompilierte Code für
ein VLIW-kompiliertes Programm größer, was das Preis/Leistungs-Verhältnis des
Programms insgesamt reduziert.
-
Ein
Ansatz, diese Schwierigkeiten anzugehen, beschrieben in der gemeinsam
zugewiesenen US-amerikanischen Patentschrift 5.862.399, besteht darin,
einen Funktionseinheitidentifizierer in jedem Ausgabeschlitz zuzuordnen.
Gemäß einer
weiteren Ausführungsform
der vorliegenden Erfindung, veranschaulicht in 5,
verwendet ein VLIW-Prozessor 500 Befehlswörter mit
nur drei Ausgabeschlitzen 521–523 im Befehlsausgaberegister 520,
wobei jeder Ausgabeschlitz 521–523. Der VLIW-Prozessor 500 enthält eine
Leitschaltung mit Multiplexern 551–557, die an jedem
Ausgabeschlitz 521–523 mit
dem Befehlsausgaberegister 520 gekoppelt sind und darin enthaltene
Operanden zur identifizierten Funktionseinheit 531–537 liefern.
Sieben derartige Funktionseinheiten 531–537 sind in 5 dargestellt:
eine Konstantenerzeugungseinheit 531, eine erste arithmetischlogische
Einheit 532, eine zweite arithmetisch-logische Einheit 533,
ein Multiplizierer 535, eine Gleitkommaeinheit 535,
eine Datenspeichereinheit 536 und eine Verzweigungssteuerungseinheit 537, die
den jeweiligen zuvor hierin beschriebenen Funktionseinheiten 131–137 entsprechen.
-
Bezug
nehmend auf 6 enthalten die Ausgabeschlitze 521–523 Operationspakete 610–670,
die einen Schutzwert G, einen Funktionseinheitenidentifizierer FU
und eine Spezifizierung der Operation (z.B. einen Opcode und Operanden,
soweit erforderlich) enthalten. Wie oben ausführlicher beschrieben gibt der
Schutzwert G an, auf welchem Programmpfad die Operation auszuführen ist.
Ein Funktionseinheitenidentifizierer FU kann ein ganzzahliger oder
anderer skalarer Wert sein, beispielsweise eine 3-Bit-Zahl von 0–7, wobei
ein Wert von „1" die Konstantenerzeugungseinheit 531 aus 5 angibt.
Die Spezifizierung der Operation innerhalb der Operationspakete 610–670 enthält ähnliche
Unterfelder, wie beispielsweise Opcodes und Operanden wie oben unter
Bezugnahme auf die Spezifizierungen 210–270 in 2 beschrieben.
Die Inhalte dieser Ausgabeschlitze 521–523, die Operation
der Funktionseinheiten 531–537 und das Format
der Spezifizierungen in den Operationspaketen 610–670 sind als
beispielhaft zu betrachten und können
an jede nützliche
Konfiguration angepasst werden.
-
Basierend
auf den darin enthaltenen Schutzwerten und Funktionseinheitenidentifizierern
wählt jeder
Multiplexer 531–337 einen
der Ausgabeschlitze 521–323 und gibt die
Inhalte eines ausgewählten Ausgabeschlitzes 521–523 an
eine entsprechende Funktionseinheit 531–537 aus. Der Multiplexer 551 ist
beispielsweise der Konstantenerzeugungseinheit 531 zugeordnet
und gibt dorthin einen ausgewählten Ausgabeschlitz 521–523 aus.
Genauer gesagt wählen
die Multiplexer 551–557 die
Inhalte von nur denjenigen Ausgabeschlitzen 521–523 aus,
die einen Funktionseinheitenidentifizierer der zugehörigen Funktionseinheit 531–537 enthalten.
Darüber
hinaus wählen
die Multiplexer 551–557 im
Gegensatz zu der in der US-amerikanischen Patentschrift 5.862.399 beschriebenen
Anordnung die Inhalte von nur denjenigen Ausgabeschlitze 521–523 aus,
die einen Schutzwert enthalten, der angibt, dass der aktuelle Programmpfad
nicht blockiert ist. Die Multiplexer 551–557 können als
zwei in Reihe geschaltete Multiplexer ausgeführt sein: der erste Multiplexer
wählt unter
den Ausgabeschlitzen, die mit der Funktionseinheit übereinstimmen,
basierend auf einem Vergleich der Funktionseinheitenidentifizierer
FU, und der zweite Multiplexer wählt
unter den verbleibenden Ausgaben, die mit dem aktuellen Programmpfad übereinstimmen,
basierend auf einem Vergleich der Schutzwerte G.
-
Der
Multiplexer 551 ist beispielsweise dafür konfiguriert, unter allen
drei Ausgabeschlitzen 521–523 für ein Operationspaket
auszuwählen,
das für
die Konstantenerzeugungseinheit 531 bestimmt ist. Genauer
gesagt trifft der Multiplexer 551 die Auswahl unter den
Ausgabeschlitzen 521–523 basierend darauf,
ob die Ausgabeschlitze 521–523 einen Funktionseinheitenidentifizierer
haben, der die Konstantenerzeugungseinheit 531 identifiziert.
In dem Beispiel werden nur diejenigen Ausgabeschlitze 521–523 ausgewählt, in
denen der darin enthaltene Funktionseinheitenidentifizierer FU1,
FU2 bzw. FU3 eine „1" ist, weil die Konstantenerzeugungseinheit 531 durch
die Ziffer „1" identifiziert ist.
Außerdem
trifft der Multiplexer 551 eine Auswahl unter den Ausgabeschlitzen 521–523 basierend
darauf, ob der Schutzwert angibt, dass der aktuelle Programmpfad nicht
blockiert ist. Gemäß einer
Implementierung werden die Schutzwerte mit dem von der Verzweigungssteuerungseinheit 537 aufrechterhaltenen
aktuellen Programmpfad verglichen. Der Ausgabeschlitz 521 enthält beispielsweise
einen Schutzwert G1 von " 1 ", der eine unwahre
Bedingung in einem Verzweigungspfad angibt, sowie einen Funktionseinheitenidentifizierer
FU1 von „1", um die Konstantenerzeugungseinheit 531 anzugeben.
Der Ausgabeschlitz 522 hat einen Schutzwert G2 von „0", der eine unwahre
Bedingung in einem Verzweigungspfad angibt, sowie einen Funktionseinheitenidentifizierer FU2
von „1", und der Ausgabeschlitz 523 hat
einen Schutzwert G3 von „1" und einen Funktionseinheitenidentifizierer
FU3 von „ 2". Beim Multiplexer 551 wird der
Ausgabeschlitz 523 nicht ausgewählt, weil sein Funk tionseinheitenidentifizierer
FU3 von „ 2" nicht mit dem der
entsprechenden Funktionseinheit 531 zugeordneten Identifizierer „1" übereinstimmt. Wenn der Verzweigungspfad
mit der wahren Bedingung gewählt
wird, dann wird der aktuelle Programmpfad zu einer „1" und der Multiplexer 551 wählt den
Opcode und Operanden vom verbleibenden Ausgabeschlitz, der einen
mit dem aktuellen Programmpfad übereinstimmenden
Schutzwert hat, nämlich
Ausgabeschlitz 521. Wenn andererseits der Verzweigungspfad
mit der unwahren Bedingung gewählt
wird, dann wird der aktuelle Programmpfad zu einer „0" und der Multiplexer 551 wählt den
Opcode und Operanden vom anderen Ausgabeschlitz 552.
-
Damit
also ein Ausgabeschlitz 521–523 von einem Multiplexer 551–557 ausgewählt wird,
muss sowohl der Funktionseinheitenidentifizierer mit der zum Multiplexer 551–557 gehörenden Funktionseinheit 531–537 übereinstimmen
als auch der Schutzwert angeben, dass der aktuelle Programmpfad
nicht blockiert ist. Zwei oder mehr Ausgabeschlitze 521–523 können Funktionseinheitenidentifizierer
für dieselbe
Funktionseinheit 531–537 enthalten,
wenn ihr jeweiliger Schutzwert sich gegenseitig ausschließende Programmpfade angibt. Beispielsweise können beide
Ausgabeschlitze 521 und 522 einen Funktionseinheitenidentifizierer
für die
Konstantenerzeugungseinheit 531, jedoch Schutzwerte für unterschiedliche
und sich gegenseitig ausschließende Programmpfade
enthalten. Somit kann die Konstantenerzeugungseinheit 531 durch
einen einzelnen geschützten
Befehl betrieben werden, ungeachtet dessen, welcher Programmpfad
momentan ausgeführt wird.
-
Während der
Operation wird ein sehr langes Befehlswort aus dem Befehlsspeicher 510 abgerufen,
der ein mit einem RAM oder ROM gekoppelter, fließbandverarbeiteter Zwischenspeicher
(fache) sein kann, und im Befehlsausgaberegister 520 gespeichert.
Das Befehlsausgaberegister 320 enthält eine Vielzahl von Feldern
für Ausgabeschlitze 521–523,
wobei jedes Feld einen Funktionseinheitenidentifizierer und einen
Schutzwert enthält.
Mit jedem Ausgabeschlitz 521–523 des Befehlsausgaberegisters 320 sind
Multiplexer 551–557 verbunden, die
jeweils einer entsprechenden Funktionseinheit 531–537 zugeordnet
und mit dieser gekoppelt sind. Die Multiplexer 551–557 wählen die
Inhalte von einem der Ausgabeschlitze 521–523,
wenn der Funktionseinheitenidentifizierer für den Ausgabeschlitz 521–523 die
jeweilige Funktionseinheit 531–537 identifiziert
und der Schutzwert nicht blockiert ist. Folglich kann ein einzelnes,
während
der Verzweigungsverzögerung
ausgeführtes
Befehlswort eine gewählte
Funktionseinheit, z.B. die Konstantenerzeugungseinheit 531,
entlang jedes sich gegenseitig ausschließendes Programmpfads wirksam
nutzen. Wenn die Funktionseinheiten während eines Rechnerzyklus betätigt werden,
werden Daten aus der Registerdatei 340 abgerufen, und die
Ergebnisse werden basierend auf Operanden, die von den Ausgabeschlitzen 521–523 des
Befehlsausgaberegisters 520 zu den entsprechenden Funktionseinheiten 531–537 geleitet
werden, zurück
in die Registerdatei 540 geschrieben.
-
Obwohl
diese Erfindung in Verbindung mit dem beschrieben wurde, was derzeit
als die praktischsten und bevorzugten Ausführungsformen betrachtet wird,
versteht es sich, dass sich die Erfindung nicht auf die dargelegten
Ausführungsformen beschränkt, sondern
im Gegenteil verschiedene Abwandlungen und äquivalente Anordnungen abdecken
soll, die im Rahmen der angehängten
Ansprüche
liegen.