DE4217012A1 - Mit einer vielzahl von befehlsstroemen und statischer verschachtelung arbeitender mikroprozessor - Google Patents
Mit einer vielzahl von befehlsstroemen und statischer verschachtelung arbeitender mikroprozessorInfo
- Publication number
- DE4217012A1 DE4217012A1 DE4217012A DE4217012A DE4217012A1 DE 4217012 A1 DE4217012 A1 DE 4217012A1 DE 4217012 A DE4217012 A DE 4217012A DE 4217012 A DE4217012 A DE 4217012A DE 4217012 A1 DE4217012 A1 DE 4217012A1
- Authority
- DE
- Germany
- Prior art keywords
- instruction
- command
- horizontal
- stream
- streams
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 230000015654 memory Effects 0.000 title claims abstract description 15
- 238000012545 processing Methods 0.000 title description 6
- 238000000034 method Methods 0.000 claims abstract description 17
- 239000000872 buffer Substances 0.000 claims description 24
- 238000013507 mapping Methods 0.000 claims description 8
- 230000001934 delay Effects 0.000 abstract description 2
- 230000003068 static effect Effects 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 10
- 102100024348 Beta-adducin Human genes 0.000 description 6
- 101000689619 Homo sapiens Beta-adducin Proteins 0.000 description 6
- 241001522296 Erithacus rubecula Species 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 5
- 230000003111 delayed effect Effects 0.000 description 5
- 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
- 238000011156 evaluation Methods 0.000 description 1
- 210000003608 fece Anatomy 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012544 monitoring process Methods 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
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.
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 gleichzeige
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 Registerzuord
nungstechnik 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 Prozessor 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 Datentypumwandlungen
durchzuführen, eine Gleitpunktaddiereinheit, eine
Gleitpunktmultipliziereinheit, eine Gleitpunktdividiereinheit und eine
Zweigeinheit. 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.
Jeder vom Prozessor 10 ausgeführte Befehlsstrom 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-Gleitpunktregister. 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
Gleitpunktregistern werden von der Ganzzahl/Gleitpunktumformungseinheit
durchgeführt.
Bei dem vom Prozessor 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 Prozessor 10 der Fig. 1 betätigt einen Compiler. Der Compiler
umfaßt zwei Teile. Sein Vorderende transformiert ein hochpegliges
Programm, das beispielsweise in C-Sprache geschrieben ist, auf eine
Sequenz von Maschinenbefehlen, die aus dem Befehlssatz genommen sind,
der vorstehend beschrieben wurde. Das hintere Ende des Compilers
überführt den sequentiellen Code in Horizontalbefehlsworte (HIWs). Ein
Horizonalbefehlswort 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 Horizontalbefehlsworten. 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 Funktionseinheit in einem
Horizontalbefehlswort vorhanden ist, fügt der Compiler einen NOOP(keine
Betätigung)-Befehl in die geeignete Sektion des Horizontalbefehlswortes
ein.
Bei dem Prozessor 10 der Figur werden die Horizontalbefehlsworte eines
jedes Befehlsstromes in einem individuellen Befehlspufferspeicher 20
gespeichert. Jeder Befehlspufferspeicher 20 enthält die
Horizontalbefehlsworte eines Befehlsstromes, wie sie vom Compiler in der
vorstehend beschriebenen Weise compiliert wurden.
Der Prozessor 10 der Fig. 1 umfaßt ferner Befehlsholeinheiten 24, die
Befehle von den entsprechenden Befehlspufferspeichern unter der
Steuerung der dynamischen Verschachtelungseinheit 26 holen.
Jeder Befehl passiert drei Hauptpipelinestufen:
- 1. eine Befehlsholstufe, 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 Verschachtelungseinheit 26 verschachtelt wird, durch eine Dekodiereinheit 27 dekodiert wird und an die geeignete Funktionseinheit 14 ausgegeben wird, und
- 3. eine Ausführungsstufe, in der der Befehl durch eine Funktionseinheit ausgeführt wird, wobei die Ergebnisse in die Registerdatei 18 zurückge schrieben werden. Der Compiler vermeidet Konkurrenzen zwischen Funktionseinheiten über eine gerechte Codezuordnung.
Bei der dynamischen Verschachtelung wählt die dynamische Verschachte
lungseinheit einen Strom nach einem Prioritätsschema, beispielsweise
einem Round-Robin-Schema, aus. Die dynamische Verschachtelungseinheit
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 Dekodierer 27 gegeben. Der Befehls
dekodierer an jeder Funktionseinheit identifiziert den Befehlsstrom, zu
dem sein Befehl gehört, und erzeugt die geeigneten Steuersignale.
Die Fig. 2A, 2B, 2C und 2D zeigen ein Ausführungsbeispiel 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 Ganzzahladdier/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 Befehlspuffern oder Pufferspeichern vorgesehen sind. Wie
in Fig. 2A gezeigt, enthält jeder Befehlspuffer zwei Horizontalbefehls
worte und jedes Horizontalbefehlswort eine einer Funktionseinheit
entsprechende Sektion.
Die in den Befehlspuffern 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
Ganzzahleinheitsdekodierer 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 Ganzzahleinheit
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/Ganzzahlumformungseinheit 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 Funktions
einheiten abgegeben.
Am Ende des ersten Taktzyklus besitzen die Ströme 1 und 3 keine Befehle
mehr in der dynamischen Verschachtelungseinheit. Daher werden die
nächsten Horizontalbefehlsworte von diesen Strömen von ihren
entsprechenden Befehlspufferspeichern geholt und in die dynamische
Verschachtelungseinheit ü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 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 Dekoder der Ganzzahleinheit 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 Dekodierer der Funktionseinheiten besetzt sind. Der
Prozeß setzt sich in entsprechender Weise im dritten Taktzyklus CK3
fort. Die im dritten Taktzyklus in der dynamischen Verschachtelungs
einheit gespeicherten Befehle sind in Fig. 2D gezeigt. Desweiteren sind
dort die an die Funktionseinheit 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 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 Dekodierer der
Funktionseinheit 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-detektiert"-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 Dekodierer der Funktionseinheit ausgegeben wird. Die
dynamische Verschachtelungseinheit besitzt eine Logikschaltung, wie die
in Fig. 3 gezeigte, für jede Funktionseinheit.
Obwohl man mit einer dynamischen Verschachtelung eine bessere Ausnutzung
der Funktionseinheiten 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 Verschachtelungseinheit 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öge
rungs-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, einen mit einer Vielzahl von
Befehlsströmen arbeitenden Mikroprozessor zu schaffen, mit dem die mit
einer dynamischen Verschachtelung verbundenen Probleme gelöst werden
können.
Anstelle einer dynamischen Verschachtelung wird erfindungsgemäß eine
statische Verschachtelungstechnik eingesetzt, um die Probleme zu lösen,
die bei einem auf der Basis einer Vielzahl von Befehlsströmen mit einem
sehr langen Befehlswort arbeitenden Mikroprozessor auftreten. 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 Hardwareressourcen 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) characterisiert werden. Der AV
enthält einen Eingang AV1 für jede Funktionseinheit FUi, wobei 1AViT
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 Fig. 4A
gezeigt. In Fig. 4A ist jeder Tabelleneingang die Zahl der
Befehlsströme, die die entsprechende Funktionseinheit im speziellen
Zeit-Slot verwenden können. Die Zuordnung der Zeit-Slots zu Funktions
einheiten 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 Horizontalbe
fehlsworten 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 Horizontalbefehlsworte 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 Horizontalbefehlswort 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 Verzogerung 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 festen
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 ein 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 Programmes zeigt. Zuerst
wird ein Quellenprogramm 210, das in einer hochpegligen Sprache,
beispielsweise der C-Sprache, geschrieben ist, in einem sequentiellen
Compiler kompiliert (Schritt 220). Der sequentielle Compiler formt das
hochpeglige Programm in eine Sequenz von Maschinenbefehlen 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 jeder
Maschinenbefehl an einer Stelle in einem Muster von Befehlen, das eine
Vielzahl von Horizontalbefehlsworten umfaßt, angeordnet. Die Stelle
eines jeden Maschinenbefehles 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 Kompilierungsprozess 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/Speichereinheit und eine Verzweigungseinheit sind.
Fig. 7A zeigt ein Stück eines sequentiellen Codes, der vier
Maschinenbefehle umfaßt (beispielsweise bedeutet der "Eingabe 2"-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:
Schaltung (D)
Fall 1:
/*RAW (read-after-write) Abhängigkeit*/ temp2=((temp1=1=AV[Tj]-AV[Ti])<0?temp1:temp1+T);
während (temp2<Fu_LATENCY[Ti])temp2+=T;
L[D] [Ti] [Tj]=temp2;
Unterbrechung;
/*RAW (read-after-write) Abhängigkeit*/ temp2=((temp1=1=AV[Tj]-AV[Ti])<0?temp1:temp1+T);
während (temp2<Fu_LATENCY[Ti])temp2+=T;
L[D] [Ti] [Tj]=temp2;
Unterbrechung;
Fall 2:
/*WAR(write-after-read) Abhängigkeit*/ L[D] [Ti] [Tj]=((temp1=AV[Tj]-AV[Ti])<=0?temp1:temp1+N);
/*WAR(write-after-read) Abhängigkeit*/ L[D] [Ti] [Tj]=((temp1=AV[Tj]-AV[Ti])<=0?temp1:temp1+N);
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] [Tj] 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 (10)
1. Mikroprozessor, der in der Lage ist, gleichzeitig eine Vielzahl von
Befehlsströmen auszuführen, gekennzeichnet durch:
einen Prozessor (100) mit einer Vielzahl von Funktionseinheiten (FUi),
eine Einrichtung (120) zum Speichern von Horizontalbefehlsworten, die eine Vielzahl von Befehlsströmen bilden, wobei jedes Horizontalbefehls wort einen oder mehrere Maschinenbefehle enthält, die von speziellen Funktionseinheiten auszuführen sind,
eine Einrichtung 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 (FUi) für die Durchführung eines Maschinenbefehles von einem speziellen Befehlsstrom in einem festen vorgegebenen Zeit-Slot in einem festen vorgegebenen Wiederholungsmuster von Zeit-Slots.
einen Prozessor (100) mit einer Vielzahl von Funktionseinheiten (FUi),
eine Einrichtung (120) zum Speichern von Horizontalbefehlsworten, die eine Vielzahl von Befehlsströmen bilden, wobei jedes Horizontalbefehls wort einen oder mehrere Maschinenbefehle enthält, die von speziellen Funktionseinheiten auszuführen sind,
eine Einrichtung 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 (FUi) für die Durchführung eines Maschinenbefehles von einem speziellen Befehlsstrom in einem festen vorgegebenen Zeit-Slot in einem festen vorgegebenen Wiederholungsmuster von Zeit-Slots.
2. Mikroprozessor nach Anspruch 1, dadurch gekennzeichnet, daß die
Zuweisungseinrichtung eine Warteschlangeneinrichtung (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 (FUi) gelegt wird.
3. Mikroprozessor nach Anspruch 1 oder 2, dadurch gekennzeichnet, daß
spezielle Zeit-Slots in dem Muster von Zeit-Slots speziellen
Funktionseinheiten (FUi) 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. Mikroprozessor nach einem der vorangehenden Ansprüche, dadurch
gekennzeichnet, daß die Holeinrichtung Horizontalbefehlsworte aus der
Speichereinrichtung (120) einer Round-Robin-Reihenfolge holt.
5. Mikroprozessor nach einem der vorangehenden Ansprüche, dadurch
gekennzeichnet, daß die Speichereinrichtung (120) eine Vielzahl von
einzelnen Pufferspeichern umfaßt, von denen jeweils einer für einen
Befehlsstrom vorgesehen ist.
6. Mikroprozessor nach einem der vorangehenden Ansprüche, 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 (FUi) zur
Ausführung der Befehle von speziellen Befehlsströmen zugeordnet sind.
7. 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 Datenab hä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 Datenab hä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.
8. Verfahren zum gleichzeitigen Ausführen einer Vielzahl von Befehls
strömen in einem Mehrstromprozessor, der eine Vielzahl von Funktions
einheiten 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 Horizontalbefehlsworte, 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 Horizontalbefehlsworte, 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.
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.
10. Mikroprozessor zur Ausführung einer Vielzahl von Befehlsströmen,
gekennzeichnet durch:
eine Vielzahl von Funktionseinheiten (FUi),
eine Vielzahl von Befehlspufferspeichern (120), die jeweils zur Speicherung der Horizontalbefehlsworte eines Befehlsstromes dienen,
eine Vielzahl von Befehlsholeinheiten zum Holen von Horizontalbefehlsworten aus entsprechenden Pufferspeichern und
eine Zuordnungseinrichtung zur Zuweisung einer jeden Funktionseinheit (FUi) für die Ausführung eines Maschinenbefehles von einem speziellen Befehlsstrom in einem festen vorgegebenen Zeit-Slot in einem Wiederholungsmuster von Zeit-Slots gemäß einem Zuordnungsvektor, der read-after-write-Latenzen in den Maschinenbefehlen der Horizontalbefehlsworte minimiert.
eine Vielzahl von Funktionseinheiten (FUi),
eine Vielzahl von Befehlspufferspeichern (120), die jeweils zur Speicherung der Horizontalbefehlsworte eines Befehlsstromes dienen,
eine Vielzahl von Befehlsholeinheiten zum Holen von Horizontalbefehlsworten aus entsprechenden Pufferspeichern und
eine Zuordnungseinrichtung zur Zuweisung einer jeden Funktionseinheit (FUi) für die Ausführung eines Maschinenbefehles von einem speziellen Befehlsstrom in einem festen vorgegebenen Zeit-Slot in einem Wiederholungsmuster von Zeit-Slots gemäß einem Zuordnungsvektor, der read-after-write-Latenzen in den Maschinenbefehlen der Horizontalbefehlsworte minimiert.
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 true DE4217012A1 (de) | 1993-08-26 |
DE4217012C2 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 |
DE4217012C2 (de) | 1998-12-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE4217012C2 (de) | Mit einer Vielzahl von Befehlsströmen und statischer Verschachtelung arbeitender Mikroprozessor | |
DE69933088T2 (de) | Vliw-verarbeiter verarbeitet befehle von verschiedenen breiten | |
DE69636861T2 (de) | Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern | |
DE69909829T2 (de) | Vielfadenprozessor für faden-softwareanwendungen | |
DE69907955T2 (de) | Globale und locale registersegmentierung in einem vliw prozessor | |
DE69833008T2 (de) | Prozessor mit instruktionskodierung mittels eines schablonenfeldes | |
DE60115982T2 (de) | Verfahren und Vorrichtung zum Zuordnen funktioneller Einheiten in einem Mehrfachthread-VLIM-Prozessor | |
DE19506435C2 (de) | Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten | |
DE60131214T2 (de) | Verfahren und Anordnung zur Freilassung von Funktionseinheiten in einem multithreaded VLIW-Prozessor | |
DE69722138T2 (de) | Code-Optimierer für Pipeline-Rechner | |
DE4206062C2 (de) | Pipelineverarbeitung von Instruktionen | |
DE4222776C2 (de) | Parallelverarbeitungseinheit und Verfahren zum Ausführen von Befehlen | |
DE69831344T2 (de) | Effiziente verarbeitung von gebündelten sprungbefehlen | |
US5386562A (en) | Circular scheduling method and apparatus for executing computer programs by moving independent instructions out of a loop | |
DE60032794T2 (de) | Bit-dekompression-verarbeitung mit einem vielseitigen ausrichtungswerkzeug | |
DE69835425T2 (de) | Verbesserter befehlszuteilungsmechanismus für eine geschützte vliw-architektur | |
DE19945992A1 (de) | Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren | |
DE60006021T2 (de) | VLIW-Prozessor und Programmkomprimierungsgerät and -verfahren | |
EP0825540B1 (de) | Prozessor mit Pipelining-Aufbau | |
DE19524402C2 (de) | Programmausführungssteuereinrichtung mit einer Adressierbarkeit entsprechend einer M-reihigen Pseudo-Zufallszahlenfolge | |
DE19506990A1 (de) | Einrichtung zur Datenumleitung in einem Prozessor mit mehreren Ausführungseinheiten | |
DE3638572A1 (de) | Vektorprozessor | |
DE10306051B4 (de) | Verfahren zum Optimieren der Verarbeitung von Befehlen durch einen Prozessor und Prozessoren zur Durchführung der Verfahren | |
DE4216905A1 (de) | Superskalarprozessor | |
DE4430195B4 (de) | Verfahren zur Auswertung von Booleschen Ausdrücken |
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 |