DE4217012C2 - Mit einer Vielzahl von Befehlsströmen und statischer Verschachtelung arbeitender Mikroprozessor - Google Patents
Mit einer Vielzahl von Befehlsströmen und statischer Verschachtelung arbeitender MikroprozessorInfo
- Publication number
- DE4217012C2 DE4217012C2 DE4217012A DE4217012A DE4217012C2 DE 4217012 C2 DE4217012 C2 DE 4217012C2 DE 4217012 A DE4217012 A DE 4217012A DE 4217012 A DE4217012 A DE 4217012A DE 4217012 C2 DE4217012 C2 DE 4217012C2
- Authority
- DE
- Germany
- Prior art keywords
- instruction
- command
- streams
- horizontal
- stream
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
- 230000003068 static effect Effects 0.000 title description 12
- 239000000872 buffer Substances 0.000 claims description 24
- 230000015654 memory Effects 0.000 claims description 20
- 238000000034 method Methods 0.000 claims description 19
- 238000013507 mapping Methods 0.000 claims description 9
- 238000005516 engineering process Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 7
- 102100024348 Beta-adducin Human genes 0.000 description 6
- 101000689619 Homo sapiens Beta-adducin Proteins 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 230000003111 delayed effect Effects 0.000 description 5
- 241001522296 Erithacus rubecula Species 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 238000013468 resource allocation Methods 0.000 description 3
- 238000005056 compaction Methods 0.000 description 2
- 101001077374 Oryza sativa subsp. japonica UMP-CMP kinase 3 Proteins 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 210000003608 fece Anatomy 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
Description
Die vorliegende Erfindung betrifft ein Prozessorsystem, bei dem Mehr
fachverarbeitungstechniken auf Funktionseinheitsniveau Anwendung finden.
Genauer gesagt bezieht sich die vorliegende Erfindung auf eine Bauart
eines Mikroprozessors auf der Basis eines sehr langen Befehlswortes
(VLIW), bei der gleichzeitig eine Vielzahl von Befehlsströmen
(instructions threads) ausgeführt werden kann. Eine statische
Verschachtelungstechnik wird benutzt, um der Vielzahl der Befehlsströme
Hardware-Ressourcen zuzuordnen. Insbesondere ist jede Funktionseinheit
im Prozessor so zugeordnet, daß sie einen Befehl eines speziellen
Befehlsstromes in einem festen vorgegebenen Zeit-Slot in einem festen
vorgegebenen Wiederholungsmuster von Zeit-Slots ausführen kann. Diese
Hardware-Ressourcenzuordnung wird einem Post-Pass-Parallelcompiler
ausgesetzt. Der Post-Pass-Parallelcompiler optimiert jeden Strom der
Befehlsausführungssequenz und berücksichtigt sowohl Datenabhängigkeiten
in den Befehlen als auch die Zuordnung der Hardware-Ressourcen.
Das Betriebsverhalten von Mikroprozessoren wurde durch Herabsetzung der
Befehlsausführungszeit und durch die gleichzeitige Ausführung von mehr
als einem Befehl pro Zyklus, wie dies viele RISC-Superscaler-
Mikroprozessoren von heute durchführen, beträchtlich
verbessert. Die handelsüblichen Mikroprozessoren von
heute haben bereits einen guten Anteil des durch
Supercomputer-Systeme gebotenen Betriebsniveaus erreicht.
Darüber hinaus wird die Mikroprozessortechnologie durch
den in der nahen Zukunft erwarteten signifikanten Anstieg
in der Takt-Rate und der Tor-Zahlen zu einem äußerst
geeigneten Werkzeug zum Erhalten von zusätzlicher
Superrechenkraft in einer kostenwirksamen Art und Weise.
Durch die bei den momentanen Superscaler-
Mikroprozessoren, beispielsweise dem i860 und dem
MC88100, verwendete einstromige Pipeline-
Befehlsausgabetechnik wird jedoch die Rechenleistung
nicht mehr signifikant erhöht. Der Grad an Parallelität,
der in einem einzigen Befehlsstrom vorhanden ist, wird
durch die Daten- und Steuerabhängigkeiten unter den
Befehlen begrenzt. Diese Abhängigkeiten verlangsamen die
Befehlsausgabegeschwindigkeit und führen zu einer
schlechten Ausnutzung der Funktionseinheiten im
Prozessor. Während sich eine Funktionseinheit im Betrieb
befindet, können andere außer Betrieb sein und auf die
Ergebnisse der im Betrieb befindlichen Einheit warten.
Eine Art und Weise zur Verbesserung der Ausnutzung der
Funktionseinheiten besteht darin, eine Vielzahl von
unterschiedlichen Befehlsströmen zu verschachteln. Bei
diesem Versuch wird eine Vielzahl von Befehlsströmen
gleichzeitig ausgeführt.
In "Computer Architecture and Parallel Processing", Kai
Hwang u. Fayé A. Briggs, Mc Graw Hill Book Comp. 1984, S.
20-40 wird im Rahmen der Beschreibung einer
Klassifizierung von Computern entsprechend der Ein- bzw.
Vielzahl von Befehls- und Datenströmen auch auf Computer
eingegangen, die eine Vielzahl von Befehlsströmen
verarbeiten. Die Befehle werden aus Speichermodulen
ausgelesen, von einer Steuereinheit decodiert und zu den
verwendeten Prozessoren für die Ausführung der Befehle
weitergeleitet. Jeder Befehlsstrom wird dabei von einer
unabhängigen Steuereinheit generiert. Jeder Prozessor
erhält seine eigenen Befehle, wobei Interaktionen
zwischen den Prozessoren notwendig sind, da alle
Prozessoren Datenströme von dem gleichen Datenspeicher,
der von allen Prozessoren geteilt wird, erhalten.
Die EP 0 433 864 A2 beschreibt für Computer, die
insbesondere zum Kompilieren eine "Pipeline" einsetzten,
mittels derer gleichzeitig verschiedene Stufen
verschiedener Befehle ausgeführt werden können, eine
Möglichkeit zur Minimierung von Pipeline-Unterbrechungen.
Solche Unterbrechungen können aufgrund von Konflikten
zwischen den einzelnen Befehlen auftreten. Die
Druckschrift sieht eine Reduzierung von Unterbrechungen
durch die Verwendung von bestimmten Software-Techniken
während des Kompilierens vor, durch die die Objekt-Code-
Befehle umgeordnet werden, um Konflikte zwischen
benachbarten Befehlen zu vermeiden.
Ein Befehlsstrom (instruction thread) kann als Satz von
Befehlen definiert werden, die in einem speziellen
Zusammenhang stehen. Beispielsweise ist ein Befehlsstrom
unabhängig von anderen Befehlsströmen. Die Ströme können
aus einem einzigen Programm erzeugt werden, das einen
ausreichenden Parallelismus besitzt, oder von
unterschiedlichen Programmen. Die Daten- und
Steuerabhängigkeiten
zwischen den Befehlen in einem einzigen Strom verhindern die
gleichzeitige Ausgabe von Befehlen an sämtliche Funktionseinheiten. Die
Befehle von unterschiedlichen Strömen sind jedoch unabhängig voneinander
und können gleichzeitig an eine Vielzahl von Funktionseinheiten
abgegeben werden.
Bei einer auf einer Vielzahl von Befehlsströmen basierenden
Mikroprozessorbauart sind mehrere Texte so durch die Hardware gestützt,
daß mehrere Befehlsströme gleichzeitig ohne eine Kontext-Umschaltung
ausgeführt werden können. Da kein Kontext-Switch-Overhead unter den
Strömen, die zur gleichen Zeit ausgeführt werden, existiert, kann sowohl
ein Intra-thread- als auch ein Inter-thread-Befehlslevelparallelismus
ausgenutzt werden, um die Ausführungsgeschwindigkeit und den
Prozessordurchsatz zu verbessern.
Viele Multi-thread-Bauarten sind vorgeschlagen worden, um ein besseres
Betriebsverhalten und eine bessere Ausnutzung der Ressourcen in einem
Einchip-Mikroprozessor zu erreichen. In der Veröffentlichung von R. G.
Prasadh und C. L. Wu "A Benchmark Evaluation of a Multi-threaded RISC
Processor Architecture", Proc. of the International Conference on
Parallel Processing, 1991 wird eine Superscaler-Bauart auf der Basis
eines VLIW-Modells vorgeschlagen, um das Betriebsverhalten einer
Multi-thread-Bauart zu nutzen. Es wird eine dynamische Verschachtelungs
technik vorgeschlagen, um das Ressourcenkonkurrenzproblem zu lösen. In
der Veröffentlichung von G. E. Daddis, Jr. und H. C. Tong "The
Concurrent Execution of Multiple Instruction Streams on Superscaler
Processors", Proc. of the International Conference on Parallel
Processing, 1991 ist ein System offenbart, bei dem eine gleichzeitige
Verarbeitung von zwei Befehlsströmen auf einem Superscaler-Prozessor
durchgeführt wird und ein Befehlsüberwachungs-Stack verwendet wird, um
Befehle zur Laufzeit zusammenzustellen. Eine dynamische
Registerzuordnungstechnik findet Anwendung, um sowohl den
Intra-thread- als auch den Inter-thread-
Befehlsniveauparallelismus auszunutzen.
Bei diesen Systemen des Standes der Technik werden
dynamische Verschachtelungs- und Zuordnungstechniken
angewendet, um das Problem der Konkurrenz der Ressourcen
unter den Befehlsströmen zu lösen.
Die dynamische Verschachtelungstechnik wird nunmehr in
Einzelheiten erläutert. Fig. 1 zeigt schematisch einen
Mikroprozessor 10, der unter Anwendung der dynamischen
Verschachtelungstechnik gleichzeitig mehrere
Befehlsströme ausführt.
Der Mikroprozessor 10 umfaßt eine Vielzahl von
Funktionseinheiten 14. Diese Funktionseinheiten sind mit
FU-1, FU-2, . . ., FU-N bezeichnet. Beispielsweise sind
acht solche Funktionseinheiten vorgesehen. Diese umfassen
eine Eingabe/Speichereinheit, die Speicherlese- und
Schreibvorgänge durchführt, eine Ganzzahleinheit, die
Datenbewegungs- und Ganzzahladditions- und
Subtraktionsvorgänge durchführt, eine Logikeinheit, die
für bit-Feld-Vorgänge verantwortlich ist, eine
Ganzzahl/Gleitpunktumwandlungseinheit, um Datentyp
umwandlungen durchzuführen, eine Gleitpunktaddiereinheit,
eine Gleitpunktmultipliziereinheit, eine Gleitpunkt
dividiereinheit und eine Verzweigungseinheit. Sämtliche
Einheiten sind in der Pipelinetechnik ausgebildet und in
der Lage, in jedem Zyklus einen neuen Befehl zu
empfangen. Beispielsweise handelt es sich in Fig. 1 bei
der Einheit FU-1 um eine Eingabe/Speichereinheit, die
Zugriff auf einen Datenpufferspeicher (nicht gezeigt)
hat. Die Funktionseinheiten 14 sind über ein
Verbindungsnetzwerk 16 mit der Registerdatei 18
verbunden. Jede vom Prozessor 10 aufgeführte Befehlsform
besitzt eine private
Registerbank in der Registerdatei 18. Der Prozessor 10
führt T Befehlsströme mit den Bezeichnungen 1, 2, . . ., T
aus. Somit umfaßt die Registerdatei 18 T Registerbänke,
und zwar eine für jeden Befehlsstrom.
Beispielsweise umfaßt jede Registerbank zweiunddreißig
32-bit-Ganzzahlregister und sechzehn 64-bit-Gleitpunkt
register. Die Ganzzahl-, Logik-, Eingabe/Speicher- und
Zweigeinheiten haben nur auf die Ganzzahlregister
Zugriff, während die Gleitpunkteinheiten auf die
Benutzung der Gleitpunktregister beschränkt sind. Nur
die Ganzzahl/Gleitpunktumformungseinheit hat Zugriff auf
die Register eines jeden Typs. Sämtliche Daten
übertragungen zwischen den Ganzzahl- und Gleitpunkt
registern werden von der Ganzzahl/Gleitpunkt
umformungseinheit durchgeführt.
Bei dem vom Mikroprozessor 10 der Fig. 1 benutzten
Befehlssatz handelt es sich um einen Untersatz des RISC-
Befehlssatzes, der für den Distributed Instruction Set
Computer entwickelt wurde (siehe L. Wang und C. L. Wu
"Distributed Instruction Set Computer Architecture", IEEE
Trans. on Computer, 1991; und L. Wang "Distributed
Instruction Set Computer", Ph. D. Dissertation, Univ.
Texas, Austin, Dez. 1989 (diese Veröffentlichungen werden
hiermit durch Bezugnahme eingearbeitet). Der Befehlssatz
besteht aus 49 Maschinenbefehlen, die orthogonal in drei
Formaten definiert sind: 3-operand, 2-operand und 1-operand.
Beispielsweise besitzen die Maschinenbefehle
eine Länge von 32 bits.
Der Mikroprozessor 10 der Fig. 1 betätigt einen
Compiler. Der Compiler umfaßt zwei Teile. Der erste Teil
verarbeitet einen Befehl einer Hochsprache, der
beispielsweise in der C-Programmiersprache geschrieben
ist, auf eine Sequenz von Maschinenbefehlen, die aus dem
Befehlssatz genommen sind, der vorstehend beschrieben
wurde. Der zweite Teil des Compilers
überführt den sequentiellen Code in Horizontalbefehls
worte (HIWs). Ein Horizontalbefehlswort umfaßt eine
Vielzahl von Sektionen oder Feldern, wobei jedes Feld
einer entsprechenden Funktionseinheit entspricht und in
der Lage ist, einen Maschinenbefehl zu enthalten, der
durch diese spezielle Funktionseinheit ausgeführt werden
soll. Jeder Befehlsstrom, der vom Prozessor 10 der Fig. 1
ausgeführt werden soll, besteht aus diesen Horizontal
befehlsworten. Der Compiler erzeugt die Horizontal
befehlsworte, indem er Maschinenbefehle kombiniert,
zwischen denen keine Datenabhängigkeiten existieren.
Somit umfaßt ein Horizontalbefehlswort datenunabhängige
Befehle, die im gleichen Taktzyklus ausgegeben werden
können. Wenn kein Befehl für eine spezielle Funktions
einheit in einem Horizontalbefehlswort vorhanden ist,
fügt der Compiler einen NOOP (keine Betätigung) -Befehl
in die geeignete Sektion des Horizontalbefehlswortes ein.
Bei dem Mikroprozessor 10 der Fig. 1 werden die
Horizontal-befehlsworte eines jedes Befehlsstromes in
einem individuellen Befehlspufferspeicher 20 gespeichert.
Jeder Befehlspufferspeicher 20 enthält die Horizontal-befehls
worte eines Befehlsstromes, wie sie vom Compiler
in der vorstehend beschriebenen Weise compiliert wurden.
Der Prozessor 10 der Fig. 1 umfaßt ferner Befehls
holeinheiten 24, die Befehle von den entsprechenden
Befehlspufferspeichern unter der Steuerung der
dynamischen Verschachtelungseinheit 26 holen.
Jeder Befehl passiert drei Hauptpipelinestufen:
- 1. eine Befehlsholeinheit 24, in der ein Befehl aus seinem Pufferspeicher geholt wird,
- 2. eine Befehlsverschachtelungs/Dekodierstufe, in der ein Befehl, wenn möglich, mit anderen Befehlen von anderen Strömen durch die dynamische Verschachtelungs einheit 26 verschachtelt wird, durch eine Befehls dekodiereinheit 27 dekodiert wird und an die geeignete Funktionseinheit 14 ausgegeben wird, und
- 3. eine Ausführungsstufe, in der der Befehl durch eine Funktionseinheit 14 ausgeführt wird, wobei die Ergebnisse in die Registerdatei 18 zurückgeschrieben werden. Der Compiler vermeidet Konkurrenzen zwischen Funktionseinheiten über eine gerechte Codezuordnung.
Bei der dynamischen Verschachtelung wählt die dynamische
Verschachtelungseinheit 26 einen Strom nach einem
Prioritätsschema, beispielsweise einem Round-Robin-Schema
aus. Die dynamische Verschachtelungseinheit 26 prüft das
nächste Horizontalbefehlswort dieses Stromes und ersetzt,
wenn möglich, jeden der NOOP-Befehle (eingeführt vom
Compiler) durch einen entsprechenden Non-NOOP-Befehl von
einem anderen Befehlsstrom. Die einzelnen Befehle des neu
zusammengestellten Horizontalbefehlswortes werden nunmehr
an die geeigneten Befehlsdekodierer 27 gegeben.
Der Befehlsdekodierer 27 an jeder Funktionseinheit 14
identifiziert den Befehlsstrom, zu dem sein Befehl
gehört, und erzeugt die geeigneten Steuersignale.
Die Fig. 2A, 2B, 2C und 2D zeigen ein Ausführungs
beispiel einer dynamischen Verschachtelung (dynamic
interleaving). Wie in Fig. 2A gezeigt, sind gemäß diesem
Beispiel vier Funktionseinheiten vorgesehen:
FU-1, bei der es sich um eine Ganzzahl addier/Subtrahiereinheit handelt,
FU-2, die eine Logikeinheit ist, FU-3 bei der es sich um eine Gleitpunkt/Ganzzahlumwandlungseinheit handelt, und
FU-4, die eine Gleitpunktaddier/Subtrahiereinheit ist.
FU-1, bei der es sich um eine Ganzzahl addier/Subtrahiereinheit handelt,
FU-2, die eine Logikeinheit ist, FU-3 bei der es sich um eine Gleitpunkt/Ganzzahlumwandlungseinheit handelt, und
FU-4, die eine Gleitpunktaddier/Subtrahiereinheit ist.
Es sind ferner drei Befehlsströme mit den Bezeichnungen
1, 2 und 3 vorgesehen, die in
entsprechenden Befehlspufferspeichern vorgesehen sind.
Wie in Fig. 2A gezeigt, enthält jeder
Befehlspufferspeicher zwei Horizontalbefehlsworte und
jedes Horizontalbefehlswort eine einer Funktionseinheit
entsprechende Sektion.
Die in den Befehlspufferspeichern gezeigten Befehle
werden durch den Compiler statisch geordnet. Das Beispiel
setzt eine Round-Robin-Strategie bei der Auswahl der
Befehlsströme zum Verschachteln voraus und geht davon
aus, daß jeder Befehlsstrom seinen eigenen Registersatz
besitzt. Wie in Fig. 2B gezeigt, werden bei CK = 1
(d. h. bei einem ersten Taktzyklus) die ersten
Horizontalbefehlsworte von den drei Befehlsströmen aus
den Befehlspufferspeichern geholt und auf die dynamische
Verschachtelungseinheit übertragen. Der Strom 1 wird
zuerst gewählt (in Fig. 2B fettgedruckt gezeigt). Der
ADD2-Befehl dieses Stromes wird zum Ganzzahladdier
einheitsdekodierer geschickt. Es sind keine weiteren
Befehle im Strom 1 vorhanden. Nunmehr wird Befehlsstrom 2
gewählt. Da der ADD2-Befehl des Befehlsstromes 1 bereits
an die Ganzzahladdiereinheit abgegeben worden ist, wird
die Ausgabe des ADD2-Befehls des Stromes 2 bis zum
nächsten Taktzyklus verzögert. Die Logikeinheit ist
jedoch frei. Daher wird der SHLL2-Befehl des Stromes 2
zum Dekodierer der Logikeinheit gesandt. Da keine
weiteren Befehle in diesem Befehlsstrom vorhanden sind,
wird der dritte Befehlsstrom ausgewählt. Der FMOVEF-
Befehl des dritten Befehlsstromes wird zum Dekodierer der
Gleitpunkt/ Ganzzahlumwandlungseinheit abgegeben, da diese
frei ist. Keine weiteren Befehle können nunmehr
ausgegeben werden. Somit werden bei CK = 1 ein ADD2-
Befehl vom Strom 1, ein SHLL2-Befehl vom Strom 2 und ein
FMOVEF-Befehl vom Strom 3 gleichzeitig an die Dekodierer
der Funktionseinheiten abgegeben.
Am Ende des ersten Taktzyklus besitzen die Ströme 1 und 3
keine Befehle
mehr in der dynamischen Verschachtelungseinheit 26.
Daher werden die nächsten Horizontalbefehlsworte von
diesen Strömen von ihren entsprechenden Befehlspuffer
speichern 20 geholt und in die dynamische
Verschachtelungseinheit 26 übertragen. Andererseits
besitzt der Strom 2 noch einen ADD2-Befehl, der
ausgegeben werden muß, so daß daher das nächste
Horizontalbefehlswort des Stromes 2 nicht geholt wird.
Die drei Horizontalbefehlsworte, die sich bei CK = 2 in
der dynamischen Verschachtelungseinheit 26 befinden, sind
in Fig. 2C gezeigt. Bei CK = 2 wird zuerst der Strom 2
gewählt, wonach die Round-Robin-Strategie folgt.
Sein ADD2-Befehl wird zum Befehlsdekodierer der
Ganzzahladdiereinheit gesandt. Als nächstes wird der
Strom 3 gewählt, und die SHLL2- und FSUB-Befehle von
diesem Strom werden an die Logikeinheit und die
Gleitpuntaddier/Subtrahiereinheit abgegeben. Schließlich
wird Strom 1 gewählt; hiervon kann jedoch kein Befehl
ausgegeben werden, da die erforderlichen Befehls
dekodierer 27 der Funktionseinheiten 14 besetzt sind.
Der Prozeß setzt sich in entsprechender Weise im dritten
Taktzyklus CK 3 fort. Die im dritten Taktzyklus in der
dynamischen Verschachtelungseinheit 26 gespeicherten
Befehle sind in Fig. 2D gezeigt. Desweiteren sind
dort die an die Funktionseinheit 14 im dritten Taktzyklus
ausgegebenen Befehle gezeigt. Am Ende des dritten
Taktzyklus sind sämtliche Befehle von den drei
Befehlsströmen ausgegeben. Wenn keine dynamische
Verschachtelung durchgeführt würde, würde man sechs
Taktzyklen benötigen, um die Befehle in diesem
Ausführungsbeispiel auszugeben. Durch die dynamische
Verschachtelung wird somit die Befehlsausgaberate
bei diesem Ausführungsbeispiel um einen Faktor von 2
verbessert.
Der in der dynamischen Verschachtelungseinheit 26
durchgeführte grundlegende Vorgang besteht im partiellen
Dekodieren eines Befehles, um zu erkennen, ob es sich
hierbei um einen NOOP-Befehl handelt. Wenn ein Befehl
kein NOOP-Befehl ist, wird der Befehl zum
Befehlsdekodierer 27 der
Funktionseinheit 14 ausgegeben, wo die erforderlichen
Steuersignale erzeugt werden. Wenn der Befehl ein NOOP-
Befehl ist, dann muß der nächste Befehl von einem
Befehlsstrom niedrigerer Priorität überprüft werden. Die
Überprüfung wird fortgesetzt (auf Dominoweise), bis ein
NON-NOOP-Befehl angetroffen wird oder bis sämtliche
Befehlsströme erschöpft sind. Der ganze Vorgang muß in
einem Taktzyklus durchgeführt werden. Fig. 3 zeigt
eine Logikschaltung, um dies zu verwirklichen. In Fig. 3
handelt es sich bei SW1 und SW2 um Logikschalter, deren
Funktionen dargestellt sind. Das Signal ND ist das "NOOP-de
tektiert"-Signal, das Ergebnis der partiellen
Befehlsdekodierung. P ist das Prioritätssignal. In einem
Taktsignal besitzt nur ein Befehlsstrom ein hochpegliges
Prioritätssignal; die anderen Prioritätssignale besitzen
einen niedrigen Pegel. Bei dem Signal IS handelt es sich
um das Befehlsausgabesignal. Bei hohem Pegel zeigt es an,
daß der-Befehl vom entsprechenden Befehlsstrom zum
Befehlsdekodierer 27 der Funktionseinheit 14 ausgegeben
wird. Die dynamische Verschachtelungseinheit 26 besitzt
eine Logikschaltung, wie die in Fig. 3 gezeigte, für
jede Funktionseinheit.
Obwohl man mit einer dynamischen Verschachtelung eine
bessere Ausnutzung der Funktionseinheiten 14 erreichen
kann, verbleiben einige Probleme. Als erstes muß die
Hardware eine höhere Befehlsholbandbreite stützen, die
von der NOOP-Austausch-Technik benötigt wird. Ferner wird
zur Verwirklichung einer dynamischen Verschachtelungs
einheit komplexe Hardware einschließlich Spezialhardware
benötigt, um das Ende eines Horizontalbefehlswortes eines
Befehlsstromes zu detektieren, so daß das nächste
Horizontalbefehlswort geholt und ausgeführt werden kann.
Da nicht garantiert werden kann, daß sämtliche Befehle im
gleichen Befehlswort im gleichen Taktzyklus ausgegeben
werden, können zwei Befehle, die eine Write-after-Read-
Abhängigkeit besitzen, nicht in das gleiche
Horizontalbefehlswort eingegeben werden. Auch können zwei
aufeinanderfolgende Horizontalbefehlsworte in nicht
aufeinanderfolgenden Zyklen ausgegeben werden, so daß
Befehle nicht in Verzweigungsverzögerungs-Slots (branch
delay slots) gegeben werden können. Diese Einschränkungen
führen zu einer niedrigeren Befehlsausgaberate für eine
auf einer Vielzahl von Befehlsströmen basierende Bauart.
Der Erfindung liegt die Aufgabe zugrunde, ein
Mikroprozessorsystem der eingangs genannten Art
dahingehend zu verbessern, daß die bei einem
Mikroprozessor, der auf der Basis einer Vielzahl von
Befehlsströmen mit einem sehr langen Befehlswort
arbeitet, auftretenden Probleme beseitigt werden.
Diese Aufgabe wird erfindungsgemäß durch die Merkmale des
Patentanspruchs 1 gelöst. Bei einer derartigen statischen
Verschachtelungstechnik ist jede Funktionseinheit im
Prozessor angewiesen, einen Maschinenbefehl von einem
speziellen Befehlsstrom in einem festen vorgegebenen
Zeit-Slot in einem festen vorgegebenen
Wiederholungsmuster von Zeit-Slots auszuführen. Das feste
vorgegebene Muster von Zeit-Slots, in dem spezielle
Funktionseinheiten Befehlen von speziellen Befehlsströmen
in speziellen Zeit-Slots zugeordnet sind, gibt die
Ressourcen-Beschränkungen wieder, denen die Hardware
ausgesetzt ist, um die Probleme hinsichtlich der
Rechenressourcen zu lösen. Diese Strategie einer
Ressourcenzuordnung wird einem Parallelcompiler
zugewiesen, der für jeden Befehlsstrom eine Sequenz von
Maschinenbefehlen in Horizontalbefehlsworte organisiert,
um Datenabhängigkeiten unter den Befehlsworten
aufrechtzuerhalten und die feste vorgegebene Zuordnung
der Hardware-Ressourcen zu berücksichtigen.
Im Vergleich zu einem Mikroprozessor des Standes der
Technik, der von
der dynamischen Verschachtelung Gebrauch macht, besitzt ein mit
statischer Verschachtelung arbeitender Mikroprozessor eine verringerte
Hardware-Komplexität. Darüber hinaus wird durch die statische
Verschachtelungstechnik die Codegröße eines Programms beträchtlich
reduziert.
Die Erfindung wird nachfolgend anhand eines Ausführungsbeispiels in
Verbindung mit der Zeichnung im einzelnen erläutert. Es zeigen:
Fig. 1 in schematischer Weise die Bauart eines auf der Basis einer
Vielzahl von Befehlsströmen arbeitenden Mikroprozessors, der
mit dynamischer Verschachtelung arbeitet; die
Fig. 2A, 2B, 2C und 2D
die Funktionsweise der dynamischen Verschachtelungstechnik;
Fig. 3 eine dynamische Verschachtelungseinheit, die beim Mikro
prozessor der Fig. 1 Verwendung findet;
Fig. 4A das Muster der Zeit-Slots, das bei der statischen Verschach
telungstechnik der vorliegenden Erfindung Verwendung findet;
Fig. 4B ein Muster von Horizontalbefehlsworten, das bei einem Post-
Pass-Parallelcompiler gemäß der Erfindung Verwendung findet;
Fig. 5 einen Mikroprozessor, der in erfindungsgemäßer Weise von der
statischen Verschachtelung Gebrauch macht;
Fig. 6 ein Ablaufdiagramm, das die Schritte zum Kompilieren und
Ausführen eines Programmes gemäß der vorliegenden Erfindung
zeigt; die
Fig. 7A, 7B und 7C
die Kompilierung einer kleinen Sequenz von Befehlen gemäß
der Erfindung;
Fig. 8 eine bei der Kompilierung eines Programms gemäß der Erfin
dung verwendete Latenztabelle; und die
Fig. 9A, 9B
eine Sequenz von Maschinenbefehlen und die aus der Sequenz
der Befehle erfindungsgemäß erzeugten Horizontalbefehls
worte.
Bei der statischen Verschachtelungstechnik wird jede Funktionseinheit
einem Befehlsstrom auf Round-Robin-Weise zugeordnet. Wenn eine
Funktionseinheit vom ausgewählten Befehlsstrom nicht benutzt wird, wird
ein NOOP-Befehl von der Funktionseinheit ausgegeben.
Allgemein gesagt kann die statische Verschachtelungstechnik durch einen
Zuordnungsvektor (Allocation Vector) (AV) charakterisiert werden. Der AV
enthält einen Eintrag AVi für jede Funktionseinheit FUi, wobei 1 ≦ AVi ≦ T
und wobei T die Zahl der von der Hardware gestützten Befehlsströme ist.
Während der Programmausführung wird zum Zeitpunkt t FUi einem
Befehlsstrom τ, τ = 1, 2, . . ., T zugeordnet, der durch die folgende
Gleichung wiedergegeben wird:
τ = 1 + (t + T - AVi) mod T (1).
Es wird eine Bauart mit vier Befehlsströmen und vier Funktionseinheiten
FU1, FU2, FU3 und FU4 angenommen. Mit AV = [1, 4, 2, 2]
ist die Zuordnung der Funktionseinheiten zu speziellen
Befehlsströmen in 4A gezeigt. In Fig. 4A gibt jeder
Tabelleneintrag die Nummer der Reihenfolge der
Befehlsströme, die die entsprechende Funktionseinheit im
speziellen Zeit-Slot gemäß dem AV verwenden können an.
Die Zuordnung dem Zeit-Slots zu Funktionseinheiten bildet
ein Muster, das sich selbst wiederholt. In Fig. 4A
wiederholt sich das Muster alle vier Zeit-Slots. Ein
Algorithmus zur Ermittlung eines optimalen AV wird
nachfolgend im einzelnen erläutert.
Fig. 4B zeigt schematisch, wie die Zuordnung der durch
den Zuordnungsvektor spezifizierten Hardware-Ressourcen
dem Post-Pass-Parallelcompiler zugewiesen wird, um die
Befehle eines jeden Befehlsstromes zu ordnen. Fig. 4B
zeigt eine Liste von Horizontalbefehlsworten mit den
Ziffern 1, 2, 3, . . . Jedes Horizontalbefehlswort umfaßt
vier Sektionen, wobei eine Sektion einer jeden
Funktionseinheit entspricht. Erfindungsgemäß kann der
Parallelcompiler nur die schattierten Sektionen mit durch
die entsprechenden Funktionseinheiten auszuführenden
Maschinenbefehlen füllen. Nicht schattierte Sektionen
empfangen NOOP-Befehle. Das Muster der Horizontal
befehlsworte mit den speziellen schattierten Sektionen
wiederholt sich alle T Befehlsworte, wobei T die Zahl der
Befehlsströme darstellt. Wie nachfolgend im einzelnen
erläutert wird, wird jedes Befehlsmuster, das beim
Ausführungsbeispiel der Fig. 4B vier HIWs umfaßt, durch
den Parallelcompiler in ein einziges Horizontal
befehlswort kompaktiert. Das gleiche Muster an
Horizontalbefehlsworten wird vom Compiler verwendet, um
die Befehle eines jeden Befehlsstromes individuell zu
ordnen.
Das Muster der Horizontalbefehlsworte in Fig. 4B ist von
dem Zuordnungsvektor abgeleitet, der in diesem Fall
AV = [1, 4, 2, 2) beträgt. Insbesondere ist bei einem
Horizontalbefehlswort mit der Zahl
Hk das der Funktionseinheit FUi entsprechende Feld schattiert, wenn
(Hk + T - 1) mod T + 1 gleich AVi ist, wobei im vorliegenden
Ausführungsbeispiel T = 4 ist.
Mit anderen Worten, die Ressourcenbeschränkungen, die von der in der
Hardware verwendeten Ressourcenzuordnungsstrategie auferlegt werden,
werden durch eine Sequenz von Befehlsmustern im Parallelcompiler
wiedergegeben. Jeder Befehlsstrom wird zuerst sequentiell compiliert, und
der erzeugte sequentielle Code wird gemäß diesem Muster in
Horizontalbefehlsworte geordnet. Im Parallelcompiler werden die vom
sequentiellen Compiler für jeden Befehlsstrom erzeugten Befehle derart
in einem Muster geordnet, daß die Datenabhängigkeiten und Befehls
abhängigkeiten unter den Befehlen bewahrt werden. Der Satz von
Horizontalbefehlsworten, der jedes Muster bildet, wird dann kompaktiert,
um ein einziges Horizontalbefehlswort zu erzeugen. Der Kompaktierungs
schritt wird nachfolgend in Einzelheiten erläutert.
Wenn alle Befehlsströme nach dem Muster der Fig. 4B kompiliert worden
sind, können die Befehlsströme in der in Fig. 4A gezeigten Weise
verschachtelt werden. In Abhängigkeit von dem verwendeten Zuordnungs
vektor wird die Startzeit des Befehlsstromes # τ um (τ - 1) Zyklen
verzögert, so daß die Ressourcenkonkurrenz unter den Befehlsströmen
beseitigt wird.
Fig. 5 zeigt einen Prozessor 100, der die statische Verschachtelungs
technik gemäß der vorliegenden Erfindung durchführt. Beispielsweise
besteht der Prozessor 100 der Fig. 5 aus einem einzigen Halbleiterchip.
Er umfaßt vier Funktionseinheiten FU1, FU2, FU3, FU4. Beispielsweise
handelt es sich bei der Funktionseinheit FU1 um eine arithmetische
Einheit, bei der Einheit FU2 um eine Logikeinheit, bei der Einheit FU3
um eine Eingabe/Speichereinheit und bei der Einheit FU4 um eine
Verzweigungseinheit. Der Prozessor 100 führt gleichzeitig vier
Befehlsströme mit den Bezeichnungen 1, 2, 3, 4 aus. Ein getrennter
Befehlspufferspeicher 120 ist für jeden dieser Befehlsströme vorgesehen,
so daß vier Pufferspeicher 1, 2, 3 und 4 vorhanden sind. Jeder
Pufferspeicher 120 speichert die Horizontalbefehlsworte, die seinen
zugehörigen Befehlsstrom bilden. Eine Registerbank 130 ist vorgesehen,
um Operanden für die einzelnen Befehlsströme zu speichern. Die
Registerbänke sind ebenfalls mit 1, 2, 3 und 4 bezeichnet. Wenn ein
Befehl von einem speziellen Befehlsstrom ausgeführt wird, kann eine
Funktionseinheit Operanden von der geeigneten Registerbank holen und
nach der Ausführung des Befehls die Operanden zur Registerbank
zurückführen. Die Funktionseinheiten 110 haben über den Bus 131 Zugriff
auf die Registerbank 130.
Jeder Funktionseinheit 110 ist eine Warteschlange 140 zugeordnet. Die
Warteschlangen 140 dienen dazu, die vom Zuordnungsvektor definierte
Ressourcenzuordnung zu verwirklichen. Hiermit ist gemeint, daß die
Warteschlangen sicherstellen, daß an jede Funktionseinheit ein Befehl
von einem speziellen Befehlsstrom in dem fixierten vorgegebenen
Zeit-Slot, das für diesen Befehlsstrom im Muster der Zeit-Slots
reserviert ist, abgegeben wird.
Bei dem vorstehend beschriebenen Ausführungsbeispiel beträgt der
Zuordnungsvektor AV = [1, 4, 2, 2]. Somit besitzt die FU1 zugeordnete
Warteschlange eine Verzögerung von 1 Taktzyklus, die FU2 zugeordnete
Warteschlange eine Verzögerung von 4, die FU3 zugeordnete Warteschlange
eine Verzögerung von 2 und die FU4 zugeordnete Warteschlange eine
Verzögerung von 2.
Horizontalbefehlsworte werden aus den Pufferspeichern 120
abwechselnd in einer vorgegebenen Reihenfolge geholt,
wobei die Befehlsholeinheiten 121 verwendet werden.
Beispielsweise werden die Horizontalbefehlsworte aus den
Pufferspeichern in einer Round-Robin-Reihenfolge geholt,
wobei mit dem Pufferspeicher 1 begonnen wird. Für jedes
geholte Horizontalbefehlswort werden die darin
enthaltenen einzelnen Maschinenbefehle in die der
Funktionseinheit, die den Befehl ausführt, zugeordnete
Warteschlange eingegeben. Die Maschinenbefehle werden
über den Bus 132 auf die Warteschlangen 140 übertragen.
Jeder einzelne Maschinenbefehl wird erst an die geeignete
Funktionseinheit ausgegeben, nachdem er durch die feste
vorgegebene Verzögerung der Warteschlangen verzögert
worden ist. Durch die Verwendung von Warteschlangen mit
ersten Verzögerungen, die durch den Zuordnungsvektor
bestimmt werden, in Kombination mit dem Holen von
Horizontalbefehlsworten in einer vorgegebenen
Reihenfolge, die gemäß einem vom Zuordnungsvektor
abgeleiteten Muster kompiliert worden sind, wird
sichergestellt, daß einzelne Maschinenbefehle von
speziellen Befehlsströmen in den festen vorgegebenen
Zeit-Slots, die für den speziellen Befehlsstrom
reserviert sind, an spezielle Funktionseinheiten
ausgegeben werden.
Ein Hauptvorteil der statischen Verschachtelungstechnik
besteht darin, daß die Vollendungszeit eines Befehles zur
Kompilierungszeit bekannt ist, so daß daher eine
Parallelkompiler die Ausführungssequenz der Befehle
optimieren kann.
Fig. 6 ist ein Ablaufdiagramm 200, das die
erfindungsgemäß benutzten Schritte zum Kompilieren und
Ausführen eines Programms zeigt. Zuerst wird ein
Quellenprogramm 210, das in einer Hochsprache,
beispielsweise der C-Programmiersprache, geschrieben ist,
in einem sequentiellen Compiler kompiliert (Schritt 220).
Der sequentielle Compiler formt die
Befehle der Hochsprache in eine Sequenz von Maschinen
befehlen um. Dann reorganisiert ein Parallelcompiler die
Sequenz der Maschinenbefehle in horizontale Befehlsworte
(Schritt 230). Dies wird in zwei Schritten verwirklicht.
In einem ersten Schritt (Schritt 231) wird jedem
Maschinenbefehl an einer Stelle in einem Muster von
Befehlen, das eine Vielzahl von Horizontalbefehlsworten
umfaßt, angeordnet. Die Stelle eines jeden Maschinen
befehles in einem Muster von Befehlen hängt von der
Zuordnung der Hardware-Ressourcen ab, wie sie vom
Zuordnungsvektor festgelegt worden ist, und von den
Datenabhängigkeiten unter den Befehlen. In einem zweiten
Schritt (Schritt 232) werden die Horizontalbefehlsworte
eines jeden Musters in ein einziges Horizontalbefehlswort
kompaktiert, um einen Befehlsstrom zu erzeugen. Nach der
Verarbeitung durch den Parallelcompiler werden die
kompaktierten Horizontalbefehlsworte eines Befehlsstromes
in einem Pufferspeicher gespeichert und durch die
Funktionseinheiten (Schritt 240 in Fig. 6) in der
vorstehend in Verbindung mit Fig. 5 beschriebenen Art
und Weise ausgeführt.
Die Fig. 7A, 7B und 7C zeigen den Kompilierungsprozeß
für den Fall, bei dem der Zuordnungsvektor AV = 1, 4, 2,
2 ist und bei dem die Funktionseinheiten FU1, FU2, FU3,
FU4 eine arithmetische Einheit, Logikeinheit, Eingabe/Speicher
einheit und eine Verzweigungseinheit sind.
Fig. 7A zeigt ein Stück eines sequentiellen Codes, der
vier Maschinenbefehle umfaßt (beispielsweise bedeutet der
"LOAD2"-Befehl, daß der Inhalt des vom Inhalt des
Registers r2 plus 1000 adressierten Speichers in das
Register r4 eingegeben wird. In entsprechender Weise
bedeutet der "cbras"-Befehl, daß zum ersten Befehl
zurückgekehrt wird, wenn der Inhalt des Registers r1
kleiner ist als der Inhalt des Registers r6).
Fig. 7B zeigt, wie die vier Befehle der Fig. 7A im Muster der vier
Horizontalbefehlsworte gemäß Fig. 4B angeordnet werden. Die Sequenz der
Befehle der Fig. 7A wird in den schattierten Sektionen der HIWs 1-4 der
Fig. 4B angeordnet. Nicht schattierte Sektionen von HIWs 1-4 der Fig. 4B
empfangen NOOP-Befehle. Fig. 7C zeigt, wie das Muster der vier
Befehlsworte der Fig. 7B in ein einziges horizontales Befehlswort
kompaktiert wird. Durch die Kompaktion wird die Codegröße reduziert,
indem eine Menge NOOP-Befehle eliminiert werden.
Ein Maschinenbefehl Ij in der Sequenz der vom sequentiellen Compiler
erzeugten Befehle wird in einem speziellen Horizontalbefehlswort mit der
Zahl Hj (siehe Fig. 4B) in der nachfolgenden Weise untergebracht. Jeder
Maschinenbefehl Ij wird mit sämtlichen vorher geordneten Befehlen
verglichen, um Datenabhängigkeiten zu ermitteln. Der Befehl Ij wird
soweit wie möglich bis zum Beginn der Sequenz oder bis zu dem Punkt
bewegt, an dem ein Befehl Ii gefunden wird, bei dem eine Datenabhängig
keit zwischen Ij und Ii besteht. Dann beträgt das Horizontalbefehlswort,
in das Ij eingegeben werden kann,
Hj = Hi + L[D][Ti][Tj] (2)
worin bedeuten:
Hi die HIW-Zahl, wo Ii eingegeben wurde
Hj die HIW-Zahl, in die Ij eingegeben werden kann
Ti der Typ des Befehles Ii
Tj der Typ des Befehles Ij
D der Datenabhängigkeitstyp zwischen Ii und Ij;
entweder read-after-write (RAW) oder write-after-read (WAR)
L die Latenztabelle für den speziellen AV.
Hi die HIW-Zahl, wo Ii eingegeben wurde
Hj die HIW-Zahl, in die Ij eingegeben werden kann
Ti der Typ des Befehles Ii
Tj der Typ des Befehles Ij
D der Datenabhängigkeitstyp zwischen Ii und Ij;
entweder read-after-write (RAW) oder write-after-read (WAR)
L die Latenztabelle für den speziellen AV.
Wenn Ij in Ressourcenkonkurrenz mit einem Befehl in HIW Hj
steht, dann wird Ij um T Zyklen verzögert, wobei T die
Zahl der von der Hardware gestützten Befehlsströme ist.
Wenn wiederum Konkurrenz auftritt, wird Ij um weitere T
Zyklen verzögert;. Dieser Suchvorgang wird wiederholt, bis
ein HIW gefunden wird, in den Ij eingegeben werden kann.
Bei der Berechnung von Hj wird eine Latenztabelle L
verwendet, um die Latenz zwischen Ij und Ii festzustellen.
Wenn D, Ti, Tj und FU_LATENCY, wobei es sich hierbei um
die Ausführungszeit eines jeden Befehlstyps, definiert in
Hardware, handelt, vorhanden sind, dann werden
L[D][Ti][Tj] wie in dem nachfolgenden C-Programm gezeigt
errechnet:
Bei temp1 und temp2 handelt es sich um temporäre
Variablen. Die berechnete Latenz unterscheidet sich von
der in Hardware definierten Ausführungszeit. Bei der
Berechnung der Latenztabelle werden der Abhängigkeitstyp
(d. h. RAW, wobei D=1 ist, oder WAR, wobei D=2 ist), die
Ausführungszeit eines jeden Befehles und der AV
berücksichtigt. Wenn einmal die Latenztabelle berechnet
worden ist, kann sie der
Parallelcompiler verwenden, um die Lage eines jeden Befehles im
Befehlsschema unter Verwendung von Gleichung (2) zu ermitteln.
Fig. 8 zeigt ein Beispiel der Latenztabelle L[1][Ti][j] für AV =
[1, 4, 2, 2], FU_LATENCY[Ti] = 1 und D = 1 (d. h. für eine RAW-Datenab
hängigkeit). In diesem Fall können die Befehlstypen Ti und Tj durch die
Funktionseinheiten FUi und FUj identifiziert werden, die diese Befehle
ausführen. Somit beträgt beispielsweise gemäß der Tabelle der Fig. 8
die Latenz zwischen einem Befehl Ii, der durch FU3 ausgeführt wird, und
einem Ij, der durch FU2 ausgeführt wird, 2 Zyklen.
Die Fig. 9A, 9B zeigen eine Sample-Kompilierung. Fig. 9A zeigt die
Sequenz der Maschinenbefehle, die vom sequentiellen Compiler für ein
Bubble-Sort-Programm erzeugt wurden. Fig. 9B zeigt die
Horizontalbefehlsworte, die vom Post-Pass-Parallelcompiler nach der
Kompaktion erzeugt wurden.
Die Auswahl des Zuordnungsvektors ist wichtig für die statische
Verschachtelungstechnik der vorliegenden Erfindung. Eine Art und Weise
zum Auswählen des Zuordnungsvektors besteht darin, einen
Zuordnungsvektor zu wählen, der die Latenz der am häufigsten
auftretenden read-after-write (RAW)-Abhängigkeiten reduziert. Wenn man
eine Verteilung von RAW-Abhängigkeiten unter den Befehlen in einem oder
mehreren Benchmark-Programmen voraussetzt, wird der AV so gewählt, daß
die nachfolgende Gleichung minimiert werden kann
wobei
M die Zahl der Funktionseinheiten der Bauart
L die durch ein AV definierte Latenztabelle und
W[i][j] die Möglichkeit einer RAW-Abhängigkeit zwischen den Befehlstypen i und j ist.
M die Zahl der Funktionseinheiten der Bauart
L die durch ein AV definierte Latenztabelle und
W[i][j] die Möglichkeit einer RAW-Abhängigkeit zwischen den Befehlstypen i und j ist.
Claims (9)
1. Mikroprozessorsystem auf der Basis eines sehr langen
Befehlswortes und mit einer Vielzahl von Befehlsströmen,
das in der Lage ist, gleichzeitig eine Vielzahl von
Befehlsströmen auszuführen, gekennzeichnet durch:
einen Prozessor (100) mit einer Vielzahl von Funktionseinheiten (FUj) (110),
einen Pufferspeicher (120) zum Speichern von Horizontalbefehlsworten, die eine Vielzahl von Befehlsströmen bilden, wobei jede der Funktionseinheiten (FUj) (110) an den mehreren Befehlsströmen beteiligt ist und wobei jedes Horizontalbefehlswort einen oder mehrere Maschinenbefehle enthält, die von speziellen Funktionseinheiten (110) auszuführen sind,
eine Befehlsholeinheit (121) zum Holen von Horizontalbefehlsworten, die zu unterschiedlichen Befehlsströmen gehören, zu vorgegebenen Zeiten und in einer vorgegebenen Reihenfolge aus der Speichereinrichtung (120) und
eine Einrichtung zur Zuweisung einer jeden Funktionseinheit (FUj) (110) für die Durchführung eines Maschinenbefehls von einem speziellen Befehlsstrom in einem fest vorgegebenem Zeit-Slot in einem fest vorgegebenen Wiederholungsmuster von Zeit-Slots.
einen Prozessor (100) mit einer Vielzahl von Funktionseinheiten (FUj) (110),
einen Pufferspeicher (120) zum Speichern von Horizontalbefehlsworten, die eine Vielzahl von Befehlsströmen bilden, wobei jede der Funktionseinheiten (FUj) (110) an den mehreren Befehlsströmen beteiligt ist und wobei jedes Horizontalbefehlswort einen oder mehrere Maschinenbefehle enthält, die von speziellen Funktionseinheiten (110) auszuführen sind,
eine Befehlsholeinheit (121) zum Holen von Horizontalbefehlsworten, die zu unterschiedlichen Befehlsströmen gehören, zu vorgegebenen Zeiten und in einer vorgegebenen Reihenfolge aus der Speichereinrichtung (120) und
eine Einrichtung zur Zuweisung einer jeden Funktionseinheit (FUj) (110) für die Durchführung eines Maschinenbefehls von einem speziellen Befehlsstrom in einem fest vorgegebenem Zeit-Slot in einem fest vorgegebenen Wiederholungsmuster von Zeit-Slots.
2. Mikroprozessorsystem nach Anspruch 1, dadurch
gekennzeichnet, daß die Zuweisungseinrichtung eine
Warteschlange (140) zur Erzeugung einer festen
vorgegebenen Verzögerung für jeden Maschinenbefehl in
jedem der Horizontalbefehlsworte in den Befehlsströmen
aufweist, so daß jeder Maschinenbefehl in dem geeigneten
zugeordneten Zeit-Slot an die geeignete Funktionseinheit
(FUj) (110) gelegt wird.
3. Mikroprozessorsystem nach Anspruch 1 oder 2, dadurch
gekennzeichnet, daß spezielle Zeit-Slots in dem Muster
von Zeit-Slots speziellen Funktionseinheiten (FUj) (110)
zur Ausführung von Maschinenbefehlen von speziellen
Befehlsströmen zugeordnet sind, um die Latenz der
read-after-write-Abhängigkeiten in den Maschinenbefehlen
zu minimieren.
4. Mikroprozessorsystem nach einem der vorangehenden
Ansprüche, dadurch gekennzeichnet, daß die
Befehlsholeinheit (121) Horizontalbefehlsworte aus der
Pufferspeichereinrichtung (120) einer Round-Robin-
Reihenfolge holt.
5. Mikroprozessorsystem nach Anspruch 1, dadurch
gekennzeichnet, daß die Pufferspeichereinrichtung (120)
eine Vielzahl von einzelnen Pufferspeichern umfaßt, von
denen jeweils einer für einen Befehlsstrom vorgesehen
ist.
6. Verfahren zum Kompilieren und Ausführen eines
Befehlsstromes aus einer Vielzahl von Befehlsströmen in
einem Mehrstrom-Prozessorsystem, das einen Prozessor mit
einer Vielzahl von Funktionseinheiten aufweist, denen
gemäß einem Zuordnungsvektor die Ausführung von Befehlen
von speziellen Befehlsströmen in speziellen festen
vorgegebenen Zeit-Slots in einem festen vorgegebenen
Wiederholungsmuster von Zeit-Slots zugewiesen ist,
gekennzeichnet durch die folgenden Schritte:
Verwenden eines sequentiellen Compilers zum Kompilieren eines Quellenprogramms in eine Sequenz von Maschinenbefehlen, die durch spezielle Funktionseinheiten im Prozessorsystem ausgeführt werden können,
Verwenden eines Parallelcompilers zum Reorganisieren der Sequenz von Maschinenbefehlen in eine Sequenz von Befehlsmustern, wobei jeder Befehl eine Stelle in einem Befehlsmuster aufweist, die von seiner Datenabhängigkeit von einem vorhergehenden Befehl in der Befehlssequenz und von dem Zuordnungsvektor abhängt, der die Zeit-Slots definiert, in denen die geeignete Funktionseinheit zur Ausführung des Befehles zur Verfügung steht,
Verwenden des Parallelcompilers zum Kompaktieren der Befehle eines jeden Befehlsmusters zu einem Horizontalbefehlswort, um den einen Befehlsstrom auszubilden,
Speichern der Befehle des einen Befehlsstromes in einem Pufferspeicher und
Ausführen der Befehle des einen Befehlsstromes unter Verwendung der Funktionseinheiten.
Verwenden eines sequentiellen Compilers zum Kompilieren eines Quellenprogramms in eine Sequenz von Maschinenbefehlen, die durch spezielle Funktionseinheiten im Prozessorsystem ausgeführt werden können,
Verwenden eines Parallelcompilers zum Reorganisieren der Sequenz von Maschinenbefehlen in eine Sequenz von Befehlsmustern, wobei jeder Befehl eine Stelle in einem Befehlsmuster aufweist, die von seiner Datenabhängigkeit von einem vorhergehenden Befehl in der Befehlssequenz und von dem Zuordnungsvektor abhängt, der die Zeit-Slots definiert, in denen die geeignete Funktionseinheit zur Ausführung des Befehles zur Verfügung steht,
Verwenden des Parallelcompilers zum Kompaktieren der Befehle eines jeden Befehlsmusters zu einem Horizontalbefehlswort, um den einen Befehlsstrom auszubilden,
Speichern der Befehle des einen Befehlsstromes in einem Pufferspeicher und
Ausführen der Befehle des einen Befehlsstromes unter Verwendung der Funktionseinheiten.
7. Verfahren zum gleichzeitigen Ausführen einer Vielzahl
von Befehlsströmen in einem Mehrstromprozessor, der eine
Vielzahl von Funktionseinheiten und ein
Pufferspeichersystem zum Speichern von Horizontal
befehlsworten, die jeden der Befehlsströme umfassen,
aufweist, wobei jedes Horizontalbefehlswort einen oder
mehrere Befehle enthält, die durch spezielle
Funktionseinheiten auszuführen sind, gekennzeichnet durch
die folgenden Schritte:
Holen von dem Pufferspeichersystem Horizontalbefehls worte, die zu unterschiedlichen Befehlsströmen gehören, zu vorgegebenen Zeiten und in einer vorgegebenen Reihenfolge,
Zuweisen einer jeden Funktionseinheit die Ausführung eines Befehles von einem speziellen Befehlsstrom in einem festen vorgegebenen Zeit-Slot in einem festen vorgegebenen Wiederholungsmuster von Zeit-Slots und
Ausführen des Befehles in den Horizontalbefehlsworten durch die Funktionseinheiten in den zugeordneten Zeit-Slots.
Holen von dem Pufferspeichersystem Horizontalbefehls worte, die zu unterschiedlichen Befehlsströmen gehören, zu vorgegebenen Zeiten und in einer vorgegebenen Reihenfolge,
Zuweisen einer jeden Funktionseinheit die Ausführung eines Befehles von einem speziellen Befehlsstrom in einem festen vorgegebenen Zeit-Slot in einem festen vorgegebenen Wiederholungsmuster von Zeit-Slots und
Ausführen des Befehles in den Horizontalbefehlsworten durch die Funktionseinheiten in den zugeordneten Zeit-Slots.
8. Verfahren nach Anspruch 6 oder 7, dadurch
gekennzeichnet, daß die Horizontalbefehlsworte eines
jeden Befehlsstromes durch einen Compiler kompiliert
werden, der eine Sequenz von Maschinenbefehlen in eine
Sequenz von Mustern von Befehlen, die eine Vielzahl von
Horizontalbefehlsworten umfassen, reorganisiert, wobei
jeder Maschinenbefehl eine Stelle in einem Muster
aufweist, die von
seinen Datenabhängigkeiten mit anderen Maschinenbefehlen abhängt, und die speziellen Zeit-Slots speziellen Funktionseinheiten (FUj) zur Ausführung der Befehle von speziellen Befehlsströmen zugeordnet sind.
seinen Datenabhängigkeiten mit anderen Maschinenbefehlen abhängt, und die speziellen Zeit-Slots speziellen Funktionseinheiten (FUj) zur Ausführung der Befehle von speziellen Befehlsströmen zugeordnet sind.
9. Verfahren nach Anspruch 8, dadurch gekennzeichnet, daß
jeder der Befehlsströme durch die folgenden Schritte
kompiliert wird:
Verwenden eines sequentiellen Compilers zum Kompilieren eines Quellenprogrammes in eine Sequenz von Maschinenbefehlen, die durch spezielle Funktionseinheiten im Prozessor ausgeführt werden können,
Verwenden eines Parallelcompilers zum Reorganisieren der Sequenz der Maschinenbefehle in eine Sequenz von Befehlsmustern, wobei jeder Befehl eine Stelle in einem Befehlsmuster aufweist, die von seiner Datenabhängigkeit von einem vorhergehenden Befehl in der Sequenz der Befehle und von einem Zuordnungsvektor abhängt, der die Zeit-Slots definiert, in denen die geeignete Funktionseinheit zur Ausführung des Befehles zur Verfügung steht, und
Verwenden des Parallelcompilers zum Kompaktieren der Befehle eines jeden Befehlsmusters zu einem Horizontalbefehlswort, um den einen Befehlsstrom zu erzeugen.
Verwenden eines sequentiellen Compilers zum Kompilieren eines Quellenprogrammes in eine Sequenz von Maschinenbefehlen, die durch spezielle Funktionseinheiten im Prozessor ausgeführt werden können,
Verwenden eines Parallelcompilers zum Reorganisieren der Sequenz der Maschinenbefehle in eine Sequenz von Befehlsmustern, wobei jeder Befehl eine Stelle in einem Befehlsmuster aufweist, die von seiner Datenabhängigkeit von einem vorhergehenden Befehl in der Sequenz der Befehle und von einem Zuordnungsvektor abhängt, der die Zeit-Slots definiert, in denen die geeignete Funktionseinheit zur Ausführung des Befehles zur Verfügung steht, und
Verwenden des Parallelcompilers zum Kompaktieren der Befehle eines jeden Befehlsmusters zu einem Horizontalbefehlswort, um den einen Befehlsstrom zu erzeugen.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US07/840,903 US5404469A (en) | 1992-02-25 | 1992-02-25 | Multi-threaded microprocessor architecture utilizing static interleaving |
Publications (2)
Publication Number | Publication Date |
---|---|
DE4217012A1 DE4217012A1 (de) | 1993-08-26 |
DE4217012C2 true DE4217012C2 (de) | 1998-12-10 |
Family
ID=25283528
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE4217012A Expired - Lifetime DE4217012C2 (de) | 1992-02-25 | 1992-05-22 | Mit einer Vielzahl von Befehlsströmen und statischer Verschachtelung arbeitender Mikroprozessor |
Country Status (3)
Country | Link |
---|---|
US (1) | US5404469A (de) |
JP (1) | JP2928695B2 (de) |
DE (1) | DE4217012C2 (de) |
Families Citing this family (129)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5546593A (en) * | 1992-05-18 | 1996-08-13 | Matsushita Electric Industrial Co., Ltd. | Multistream instruction processor able to reduce interlocks by having a wait state for an instruction stream |
US5560025A (en) * | 1993-03-31 | 1996-09-24 | Intel Corporation | Entry allocation apparatus and method of same |
WO1994027216A1 (en) * | 1993-05-14 | 1994-11-24 | Massachusetts Institute Of Technology | Multiprocessor coupling system with integrated compile and run time scheduling for parallelism |
DE69430018T2 (de) * | 1993-11-05 | 2002-11-21 | Intergraph Corp | Befehlscachespeicher mit assoziativem Kreuzschienenschalter |
US5640584A (en) * | 1994-12-12 | 1997-06-17 | Ncr Corporation | Virtual processor method and apparatus for enhancing parallelism and availability in computer systems |
JP3169779B2 (ja) * | 1994-12-19 | 2001-05-28 | 日本電気株式会社 | マルチスレッドプロセッサ |
US5812811A (en) * | 1995-02-03 | 1998-09-22 | International Business Machines Corporation | Executing speculative parallel instructions threads with forking and inter-thread communication |
US6643765B1 (en) * | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
US5742840A (en) * | 1995-08-16 | 1998-04-21 | Microunity Systems Engineering, Inc. | General purpose, multiple precision parallel operation, programmable media processor |
US5848284A (en) * | 1995-11-28 | 1998-12-08 | Intel Corporation | Method of transferring data between moderately coupled integer and floating point units |
US5924128A (en) * | 1996-06-20 | 1999-07-13 | International Business Machines Corporation | Pseudo zero cycle address generator and fast memory access |
CN1147785C (zh) * | 1996-08-27 | 2004-04-28 | 松下电器产业株式会社 | 执行多个指令流的多程序流程同时处理器 |
JP2970553B2 (ja) * | 1996-08-30 | 1999-11-02 | 日本電気株式会社 | マルチスレッド実行方法 |
US5890009A (en) * | 1996-12-12 | 1999-03-30 | International Business Machines Corporation | VLIW architecture and method for expanding a parcel |
US5870576A (en) * | 1996-12-16 | 1999-02-09 | Hewlett-Packard Company | Method and apparatus for storing and expanding variable-length program instructions upon detection of a miss condition within an instruction cache containing pointers to compressed instructions for wide instruction word processor architectures |
US5924117A (en) * | 1996-12-16 | 1999-07-13 | International Business Machines Corporation | Multi-ported and interleaved cache memory supporting multiple simultaneous accesses thereto |
US6088788A (en) * | 1996-12-27 | 2000-07-11 | International Business Machines Corporation | Background completion of instruction and associated fetch request in a multithread processor |
US6073159A (en) * | 1996-12-31 | 2000-06-06 | Compaq Computer Corporation | Thread properties attribute vector based thread selection in multithreading processor |
US5805850A (en) * | 1997-01-30 | 1998-09-08 | International Business Machines Corporation | Very long instruction word (VLIW) computer having efficient instruction code format |
AU6586898A (en) | 1997-03-21 | 1998-10-20 | University Of Maryland | Spawn-join instruction set architecture for providing explicit multithreading |
US6065112A (en) * | 1997-06-18 | 2000-05-16 | Matsushita Electric Industrial Co., Ltd. | Microprocessor with arithmetic processing units and arithmetic execution unit |
US5913049A (en) * | 1997-07-31 | 1999-06-15 | Texas Instruments Incorporated | Multi-stream complex instruction set microprocessor |
US6170051B1 (en) | 1997-08-01 | 2001-01-02 | Micron Technology, Inc. | Apparatus and method for program level parallelism in a VLIW processor |
US6076159A (en) * | 1997-09-12 | 2000-06-13 | Siemens Aktiengesellschaft | Execution of a loop instructing in a loop pipeline after detection of a first occurrence of the loop instruction in an integer pipeline |
US6223208B1 (en) * | 1997-10-03 | 2001-04-24 | International Business Machines Corporation | Moving data in and out of processor units using idle register/storage functional units |
US6697935B1 (en) | 1997-10-23 | 2004-02-24 | International Business Machines Corporation | Method and apparatus for selecting thread switch events in a multithreaded processor |
US6105051A (en) * | 1997-10-23 | 2000-08-15 | International Business Machines Corporation | Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor |
US6567839B1 (en) | 1997-10-23 | 2003-05-20 | International Business Machines Corporation | Thread switch control in a multithreaded processor system |
US6212544B1 (en) | 1997-10-23 | 2001-04-03 | International Business Machines Corporation | Altering thread priorities in a multithreaded processor |
US6076157A (en) * | 1997-10-23 | 2000-06-13 | International Business Machines Corporation | Method and apparatus to force a thread switch in a multithreaded processor |
US6061710A (en) * | 1997-10-29 | 2000-05-09 | International Business Machines Corporation | Multithreaded processor incorporating a thread latch register for interrupt service new pending threads |
US6067601A (en) * | 1997-11-03 | 2000-05-23 | Brecis Communications | Cache memory based instruction execution |
US5940626A (en) * | 1997-11-03 | 1999-08-17 | Teragen Corporation | Processor having an instruction set architecture implemented with hierarchically organized primitive operations |
US6216218B1 (en) | 1997-11-03 | 2001-04-10 | Donald L. Sollars | Processor having a datapath and control logic constituted with basis execution blocks |
US5923894A (en) | 1997-11-03 | 1999-07-13 | Teragen Corporation | Adaptable input/output pin control |
US6178482B1 (en) | 1997-11-03 | 2001-01-23 | Brecis Communications | Virtual register sets |
US6016539A (en) * | 1997-11-03 | 2000-01-18 | Teragen Corporation | Datapath control logic for processors having instruction set architectures implemented with hierarchically organized primitive operations |
US6438679B1 (en) * | 1997-11-03 | 2002-08-20 | Brecis Communications | Multiple ISA support by a processor using primitive operations |
US6256775B1 (en) | 1997-12-11 | 2001-07-03 | International Business Machines Corporation | Facilities for detailed software performance analysis in a multithreaded processor |
US6018759A (en) * | 1997-12-22 | 2000-01-25 | International Business Machines Corporation | Thread switch tuning tool for optimal performance in a computer processor |
US6112299A (en) * | 1997-12-31 | 2000-08-29 | International Business Machines Corporation | Method and apparatus to select the next instruction in a superscalar or a very long instruction word computer having N-way branching |
US6453355B1 (en) * | 1998-01-15 | 2002-09-17 | Apple Computer, Inc. | Method and apparatus for media data transmission |
US6314493B1 (en) | 1998-02-03 | 2001-11-06 | International Business Machines Corporation | Branch history cache |
JP3881763B2 (ja) * | 1998-02-09 | 2007-02-14 | 株式会社ルネサステクノロジ | データ処理装置 |
US6092175A (en) * | 1998-04-02 | 2000-07-18 | University Of Washington | Shared register storage mechanisms for multithreaded computer systems with out-of-order execution |
US6247116B1 (en) | 1998-04-30 | 2001-06-12 | Intel Corporation | Conversion from packed floating point data to packed 16-bit integer data in different architectural registers |
US6266769B1 (en) | 1998-04-30 | 2001-07-24 | Intel Corporation | Conversion between packed floating point data and packed 32-bit integer data in different architectural registers |
US6263426B1 (en) | 1998-04-30 | 2001-07-17 | Intel Corporation | Conversion from packed floating point data to packed 8-bit integer data in different architectural registers |
US6282554B1 (en) | 1998-04-30 | 2001-08-28 | Intel Corporation | Method and apparatus for floating point operations and format conversion operations |
US6292815B1 (en) * | 1998-04-30 | 2001-09-18 | Intel Corporation | Data conversion between floating point packed format and integer scalar format |
US6205519B1 (en) | 1998-05-27 | 2001-03-20 | Hewlett Packard Company | Cache management for a multi-threaded processor |
US6035389A (en) * | 1998-08-11 | 2000-03-07 | Intel Corporation | Scheduling instructions with different latencies |
US6286027B1 (en) * | 1998-11-30 | 2001-09-04 | Lucent Technologies Inc. | Two step thread creation with register renaming |
JP2002532775A (ja) * | 1998-12-08 | 2002-10-02 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | インタープリタプログラム実行方法 |
US6535905B1 (en) * | 1999-04-29 | 2003-03-18 | Intel Corporation | Method and apparatus for thread switching within a multithreaded processor |
US7003475B1 (en) | 1999-05-07 | 2006-02-21 | Medcohealth Solutions, Inc. | Computer implemented resource allocation model and process to dynamically and optimally schedule an arbitrary number of resources subject to an arbitrary number of constraints in the managed care, health care and/or pharmacy industry |
US6938147B1 (en) * | 1999-05-11 | 2005-08-30 | Sun Microsystems, Inc. | Processor with multiple-thread, vertically-threaded pipeline |
US6341347B1 (en) * | 1999-05-11 | 2002-01-22 | Sun Microsystems, Inc. | Thread switch logic in a multiple-thread processor |
US6507862B1 (en) * | 1999-05-11 | 2003-01-14 | Sun Microsystems, Inc. | Switching method in a multi-threaded processor |
US6654870B1 (en) | 1999-06-21 | 2003-11-25 | Pts Corporation | Methods and apparatus for establishing port priority functions in a VLIW processor |
US6542921B1 (en) | 1999-07-08 | 2003-04-01 | Intel Corporation | Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor |
US6449691B1 (en) | 1999-07-30 | 2002-09-10 | International Business Machines Corporation | Asymmetrical cache properties within a hashed storage subsystem |
US6598118B1 (en) | 1999-07-30 | 2003-07-22 | International Business Machines Corporation | Data processing system with HSA (hashed storage architecture) |
US6446165B1 (en) | 1999-07-30 | 2002-09-03 | International Business Machines Corporation | Address dependent caching behavior within a data processing system having HSA (hashed storage architecture) |
US6658556B1 (en) * | 1999-07-30 | 2003-12-02 | International Business Machines Corporation | Hashing a target address for a memory access instruction in order to determine prior to execution which particular load/store unit processes the instruction |
US6823471B1 (en) | 1999-07-30 | 2004-11-23 | International Business Machines Corporation | Method for providing high availability within a data processing system via a reconfigurable hashed storage subsystem |
US6470442B1 (en) | 1999-07-30 | 2002-10-22 | International Business Machines Corporation | Processor assigning data to hardware partition based on selectable hash of data address |
US6516404B1 (en) | 1999-07-30 | 2003-02-04 | International Business Machines Corporation | Data processing system having hashed architected processor facilities |
US6769033B1 (en) * | 1999-08-27 | 2004-07-27 | International Business Machines Corporation | Network processor processing complex and methods |
US6983350B1 (en) * | 1999-08-31 | 2006-01-03 | Intel Corporation | SDRAM controller for parallel processor architecture |
US6606704B1 (en) * | 1999-08-31 | 2003-08-12 | Intel Corporation | Parallel multithreaded processor with plural microengines executing multiple threads each microengine having loadable microcode |
US6668315B1 (en) * | 1999-11-26 | 2003-12-23 | Hewlett-Packard Development Company, L.P. | Methods and apparatus for exchanging the contents of registers |
US6889319B1 (en) | 1999-12-09 | 2005-05-03 | Intel Corporation | Method and apparatus for entering and exiting multiple threads within a multithreaded processor |
US6357016B1 (en) | 1999-12-09 | 2002-03-12 | Intel Corporation | Method and apparatus for disabling a clock signal within a multithreaded processor |
US6496925B1 (en) | 1999-12-09 | 2002-12-17 | Intel Corporation | Method and apparatus for processing an event occurrence within a multithreaded processor |
WO2001046827A1 (en) * | 1999-12-22 | 2001-06-28 | Ubicom, Inc. | System and method for instruction level multithreading in an embedded processor using zero-time context switching |
US7308686B1 (en) | 1999-12-22 | 2007-12-11 | Ubicom Inc. | Software input/output using hard real time threads |
US7120783B2 (en) * | 1999-12-22 | 2006-10-10 | Ubicom, Inc. | System and method for reading and writing a thread state in a multithreaded central processing unit |
US6532509B1 (en) | 1999-12-22 | 2003-03-11 | Intel Corporation | Arbitrating command requests in a parallel multi-threaded processing system |
US6694380B1 (en) | 1999-12-27 | 2004-02-17 | Intel Corporation | Mapping requests from a processing unit that uses memory-mapped input-output space |
US7620702B1 (en) | 1999-12-28 | 2009-11-17 | Intel Corporation | Providing real-time control data for a network processor |
US7051329B1 (en) | 1999-12-28 | 2006-05-23 | Intel Corporation | Method and apparatus for managing resources in a multithreaded processor |
US6661794B1 (en) * | 1999-12-29 | 2003-12-09 | Intel Corporation | Method and apparatus for gigabit packet assignment for multithreaded packet processing |
US6584522B1 (en) | 1999-12-30 | 2003-06-24 | Intel Corporation | Communication between processors |
US6952824B1 (en) | 1999-12-30 | 2005-10-04 | Intel Corporation | Multi-threaded sequenced receive for fast network port stream of packets |
US7480706B1 (en) | 1999-12-30 | 2009-01-20 | Intel Corporation | Multi-threaded round-robin receive for fast network port |
DE10000960C1 (de) * | 2000-01-12 | 2001-12-20 | Infineon Technologies Ag | Datenverarbeitungsvorrichtung |
US20010049757A1 (en) * | 2000-03-01 | 2001-12-06 | Ming-Kang Liu | Programmable task scheduler for use with multiport xDSL processing system |
US7856633B1 (en) | 2000-03-24 | 2010-12-21 | Intel Corporation | LRU cache replacement for a partitioned set associative cache |
US7096343B1 (en) | 2000-03-30 | 2006-08-22 | Agere Systems Inc. | Method and apparatus for splitting packets in multithreaded VLIW processor |
US7007153B1 (en) * | 2000-03-30 | 2006-02-28 | Agere Systems Inc. | Method and apparatus for allocating functional units in a multithreaded VLIW processor |
US6658551B1 (en) * | 2000-03-30 | 2003-12-02 | Agere Systems Inc. | Method and apparatus for identifying splittable packets in a multithreaded VLIW processor |
US7093109B1 (en) | 2000-04-04 | 2006-08-15 | International Business Machines Corporation | Network processor which makes thread execution control decisions based on latency event lengths |
US6931641B1 (en) | 2000-04-04 | 2005-08-16 | International Business Machines Corporation | Controller for multiple instruction thread processors |
US7111156B1 (en) * | 2000-04-21 | 2006-09-19 | Ati Technologies, Inc. | Method and apparatus for multi-thread accumulation buffering in a computation engine |
US6675285B1 (en) * | 2000-04-21 | 2004-01-06 | Ati International, Srl | Geometric engine including a computational module without memory contention |
US7047396B1 (en) | 2000-06-22 | 2006-05-16 | Ubicom, Inc. | Fixed length memory to memory arithmetic and architecture for a communications embedded processor system |
US6829697B1 (en) * | 2000-09-06 | 2004-12-07 | International Business Machines Corporation | Multiple logical interfaces to a shared coprocessor resource |
US7139898B1 (en) * | 2000-11-03 | 2006-11-21 | Mips Technologies, Inc. | Fetch and dispatch disassociation apparatus for multistreaming processors |
US7035998B1 (en) | 2000-11-03 | 2006-04-25 | Mips Technologies, Inc. | Clustering stream and/or instruction queues for multi-streaming processors |
US7320065B2 (en) | 2001-04-26 | 2008-01-15 | Eleven Engineering Incorporated | Multithread embedded processor with input/output capability |
US7240186B2 (en) * | 2001-07-16 | 2007-07-03 | Hewlett-Packard Development Company, L.P. | System and method to avoid resource contention in the presence of exceptions |
US7126952B2 (en) * | 2001-09-28 | 2006-10-24 | Intel Corporation | Multiprotocol decapsulation/encapsulation control structure and packet protocol conversion method |
US8024735B2 (en) * | 2002-06-14 | 2011-09-20 | Intel Corporation | Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution |
US7471688B2 (en) * | 2002-06-18 | 2008-12-30 | Intel Corporation | Scheduling system for transmission of cells to ATM virtual circuits and DSL ports |
US7213045B2 (en) * | 2002-08-16 | 2007-05-01 | Silverback Systems Inc. | Apparatus and method for transmit transport protocol termination |
US7352769B2 (en) | 2002-09-12 | 2008-04-01 | Intel Corporation | Multiple calendar schedule reservation structure and method |
US6842848B2 (en) * | 2002-10-11 | 2005-01-11 | Sandbridge Technologies, Inc. | Method and apparatus for token triggered multithreading |
US6904511B2 (en) * | 2002-10-11 | 2005-06-07 | Sandbridge Technologies, Inc. | Method and apparatus for register file port reduction in a multithreaded processor |
US7360220B2 (en) * | 2002-10-31 | 2008-04-15 | Intel Corporation | Methods and apparatus for multi-threading using differently coded software segments to perform an algorithm |
US7433307B2 (en) * | 2002-11-05 | 2008-10-07 | Intel Corporation | Flow control in a network environment |
US7822950B1 (en) | 2003-01-22 | 2010-10-26 | Ubicom, Inc. | Thread cancellation and recirculation in a computer processor for avoiding pipeline stalls |
US7443836B2 (en) | 2003-06-16 | 2008-10-28 | Intel Corporation | Processing a data packet |
US20050039189A1 (en) * | 2003-08-14 | 2005-02-17 | Todd Anderson | Methods and apparatus to preemptively compile an application |
US7496921B2 (en) * | 2003-08-29 | 2009-02-24 | Intel Corporation | Processing block with integrated light weight multi-threading support |
US7366877B2 (en) * | 2003-09-17 | 2008-04-29 | International Business Machines Corporation | Speculative instruction issue in a simultaneously multithreaded processor |
US8074051B2 (en) * | 2004-04-07 | 2011-12-06 | Aspen Acquisition Corporation | Multithreaded processor with multiple concurrent pipelines per thread |
US20050251649A1 (en) * | 2004-04-23 | 2005-11-10 | Sony Computer Entertainment Inc. | Methods and apparatus for address map optimization on a multi-scalar extension |
US7890735B2 (en) * | 2004-08-30 | 2011-02-15 | Texas Instruments Incorporated | Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture |
US8195922B2 (en) * | 2005-03-18 | 2012-06-05 | Marvell World Trade, Ltd. | System for dynamically allocating processing time to multiple threads |
US20060212853A1 (en) * | 2005-03-18 | 2006-09-21 | Marvell World Trade Ltd. | Real-time control apparatus having a multi-thread processor |
US7523295B2 (en) * | 2005-03-21 | 2009-04-21 | Qualcomm Incorporated | Processor and method of grouping and executing dependent instructions in a packet |
US20060229638A1 (en) * | 2005-03-29 | 2006-10-12 | Abrams Robert M | Articulating retrieval device |
US7624257B2 (en) * | 2005-11-30 | 2009-11-24 | International Business Machines Corporation | Digital data processing apparatus having hardware multithreading support including a register set reserved for special class threads |
US8108659B1 (en) * | 2006-11-03 | 2012-01-31 | Nvidia Corporation | Controlling access to memory resources shared among parallel synchronizable threads |
US8249848B2 (en) * | 2007-09-05 | 2012-08-21 | International Business Machines Corporation | Verifying a processor design using a processor simulation model |
JP5333433B2 (ja) | 2008-02-26 | 2013-11-06 | 日本電気株式会社 | 低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラム |
WO2010021119A1 (ja) * | 2008-08-21 | 2010-02-25 | パナソニック株式会社 | 命令制御装置 |
CN105677253B (zh) * | 2016-01-07 | 2018-09-18 | 浪潮(北京)电子信息产业有限公司 | 一种io指令处理队列的优化方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0433864A2 (de) * | 1989-12-21 | 1991-06-26 | Intel Corporation | Minimierung von Pipelineunterbrechungen mittels Software-Ablaufplanungsverfahren während der Kompilation |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5226125A (en) * | 1989-11-17 | 1993-07-06 | Keith Balmer | Switch matrix having integrated crosspoint logic and method of operation |
-
1992
- 1992-02-25 US US07/840,903 patent/US5404469A/en not_active Expired - Fee Related
- 1992-05-22 DE DE4217012A patent/DE4217012C2/de not_active Expired - Lifetime
-
1993
- 1993-01-07 JP JP5001268A patent/JP2928695B2/ja not_active Expired - Lifetime
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0433864A2 (de) * | 1989-12-21 | 1991-06-26 | Intel Corporation | Minimierung von Pipelineunterbrechungen mittels Software-Ablaufplanungsverfahren während der Kompilation |
Non-Patent Citations (1)
Title |
---|
US-Buch: Kai Hwang, Faye A. Briggs, "Computer Architecture and Parallel Processing", Mc Graw Hill Book Comp., 1984, S. 20-40 * |
Also Published As
Publication number | Publication date |
---|---|
US5404469A (en) | 1995-04-04 |
JP2928695B2 (ja) | 1999-08-03 |
JPH07191847A (ja) | 1995-07-28 |
DE4217012A1 (de) | 1993-08-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE4217012C2 (de) | Mit einer Vielzahl von Befehlsströmen und statischer Verschachtelung arbeitender Mikroprozessor | |
DE60115982T2 (de) | Verfahren und Vorrichtung zum Zuordnen funktioneller Einheiten in einem Mehrfachthread-VLIM-Prozessor | |
DE69933088T2 (de) | Vliw-verarbeiter verarbeitet befehle von verschiedenen breiten | |
DE69907955T2 (de) | Globale und locale registersegmentierung in einem vliw prozessor | |
EP0689694B1 (de) | Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren | |
DE19983330B4 (de) | Computerprozessor mit einem Wiederholsystem mit einem Stufungsabschnitt zum getakteten Verzögern und Verfahren zum Verarbeiten eines Befehls in einem solchen Prozessor | |
DE69909829T2 (de) | Vielfadenprozessor für faden-softwareanwendungen | |
DE69636861T2 (de) | Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern | |
DE69833008T2 (de) | Prozessor mit instruktionskodierung mittels eines schablonenfeldes | |
DE19506435C2 (de) | Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten | |
DE4222776C2 (de) | Parallelverarbeitungseinheit und Verfahren zum Ausführen von Befehlen | |
DE60131214T2 (de) | Verfahren und Anordnung zur Freilassung von Funktionseinheiten in einem multithreaded VLIW-Prozessor | |
DE69831344T2 (de) | Effiziente verarbeitung von gebündelten sprungbefehlen | |
DE60006021T2 (de) | VLIW-Prozessor und Programmkomprimierungsgerät and -verfahren | |
EP0825540B1 (de) | Prozessor mit Pipelining-Aufbau | |
DE69835425T2 (de) | Verbesserter befehlszuteilungsmechanismus für eine geschützte vliw-architektur | |
DE19524402C2 (de) | Programmausführungssteuereinrichtung mit einer Adressierbarkeit entsprechend einer M-reihigen Pseudo-Zufallszahlenfolge | |
DE19983098B4 (de) | Mehrfach-Bitanzeige zur Behandlung von Schreib-nach-Schreib-Fehlern und zur Eliminierung von Bypass-Komparatoren | |
DE10306051B4 (de) | Verfahren zum Optimieren der Verarbeitung von Befehlen durch einen Prozessor und Prozessoren zur Durchführung der Verfahren | |
DE3400723A1 (de) | Vektorprozessor | |
DE4430195B4 (de) | Verfahren zur Auswertung von Booleschen Ausdrücken | |
DE2548720A1 (de) | Mikroprogramm-steuerwerk | |
DE102004009610B4 (de) | Heterogener paralleler Multithread-Prozessor (HPMT) mit geteilten Kontexten | |
EP1117037B1 (de) | Datenverarbeitungsvorrichtung zum parallelen Verarbeiten von unabhängigen Prozessen (Threads) | |
DE2617485A1 (de) | Verfahren und schaltungsanordnung zur abarbeitung von mikrobefehlsfolgen in datenverarbeitungsanlagen |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law | ||
D2 | Grant after examination | ||
8364 | No opposition during term of opposition | ||
8327 | Change in the person/name/address of the patent owner |
Owner name: TRANSPACIFIC IP LTD., TAIPEH/T AI-PEI, TW |
|
8328 | Change in the person/name/address of the agent |
Representative=s name: EPPING HERMANN FISCHER, PATENTANWALTSGESELLSCHAFT |
|
R071 | Expiry of right | ||
R071 | Expiry of right |