-
Gebiet der
Erfindung
-
Die
Erfindung betrifft allgemein Mehrfachthread-Prozessoren (multithreaded
processors), insbesondere ein Verfahren und eine Vorrichtung zum Zuordnen
funktioneller Einheiten in derartigen Mehrfachthread-Prozessoren.
-
Hintergrund
der Erfindung
-
Computerarchitekturen
versuchen, Arbeiten rascher zu beenden. Eine Reihe von Architekturen wurde
zur Ausnutzung von Programm-Parallelismus vorgeschlagen oder angeregt.
Im Allgemeinen ist eine Architektur, die mehr als eine Operation
zu einer Zeit ausführen
kann, in der Lage, ein Programm schneller auszuführen als eine Architektur,
die zu einer Zeit nur eine Operation ausführen kann. Die jüngsten Fortschritte
auf dem Gebiet der Computerarchitektur betrafen Verfahren zum Ausführen von mehr
als einer Operation zu einer Zeit, um dadurch die Programmoperationen
zu beschleunigen. 1 zeigt eine konventionelle
Mikroprozessor-Architektur 100. Der Mikroprozessor 100 enthält insbesondere einen
Befehlszähler
(PC) 110, einen Registersatz 120 und eine Anzahl
von funktionellen Einheiten (FUs) 130-N. Die redundanten
funktionellen Einheiten (FUs) 130-1 bis 130-N bilden
die beispielhafte Mikroprozessor-Architektur 100 mit ausreichenden Hardware-Ressourcen
zur Durchführung
einer entsprechenden Anzahl von Operationen in paralleler Weise.
-
Eine
Architektur, die Parallelismus in einem Programm ausnutzt, liefert
Operanden an mehr als eine funktionelle Einheit zu einer gegebenen
Zeit, um die Programmausführung
zu beschleunigen. Es wurde eine Reihe von Architekturen vorgeschlagen
oder angeregt, die eine Parallel-Architektur aufweisen, darunter
sogenannte Superskala-Prozessoren, VLIW-Prozessoren, das sind Prozessoren
für sehr lange
Befehlswörter
(very long instruction word) sowie Mehrfachthread- Prozessoren, die
im Folgenden jeweils in Verbindung mit den 2, 4 bzw. 5 erläutert werden.
Im Allgemeinen verwendet ein Superskalar-Prozessor Hardware während der Laufzeit,
um dynamisch festzustellen, ob die Anzahl von Operationen aus einem
einzigen Befehlsstrom unabhängig
sind, und wenn dies so ist, führt
der Prozessor die Befehle mit Hilfe paralleler arithmetisch-logischer
Einheiten (ALUs) aus. Zwei Befehle werden dann unabhängig genannt,
wenn keiner der Quell-Operanden von den Zieloperanden irgendeines
Befehls abhängt,
der ihnen vorausgeht. Ein Prozessor für sehr lange Befehlswörter (VLIW)
wertet die Befehle während
der Kompilierung aus und gruppiert die Operationen in passender
Weise zur parallelen Ausführung,
basierend auf Abhängigkeitsinformation.
Ein Multithread-Prozessor hingegen führt mehr als einen Befehlsstrom
parallel aus, anstatt den Versuch zu unternehmen, Parallelismus
innerhalb eines einzelnen Befehlsstroms zu nutzen.
-
Eine
in 2 dargestellte Superskalar-Prozessorarchitektur 200 besitzt
eine Anzahl funktioneller Einheiten, die unabhängig arbeiten, soweit jede von
ihnen mit zulässigen
Daten versorgt wird. Beispielsweise besitzt gemäß 2 der Superskalar-Prozessor 200 drei
funktionelle Einheiten, die als arithmetisch-logische Einheiten
(ALUs) 230-N ausgeführt
sind, und die jeweils gleichzeitig ein Resultat berechnen können. Der
Superskalar-Prozessor 200 enthält neben einem Eingangsteil 208 mit
einem Befehls-Hol-Block 210 einen Befehls-Dekodier-Block 215 und
eine Befehlsablaufsteuerung 220 (Ausgabeblock). Der Befehls-Hol-Block 210 holt
Befehle aus einer Eingangsschlange 205 eines Einzelthread-Befehlsstroms.
Die Befehlsablaufsteuerung 220 identifiziert unabhängige Befehle,
die sich simultan in den verfügbaren
arithmetisch-logischen Einheiten (ALUs) 230-N in an sich
bekannter Weise ausführen
lassen. Der Refine-Block 250 ermöglicht eine Beendigung der
Befehle und sorgt auch für
eine Pufferung und eine Neuordnung der Schreibresultate beim Zurückschreiben
in den Registersatz 240.
-
In
dem in 3 dargestellten Programmfragment 310 sind
Befehle in Stellen L1, L2 und L3 unabhängig, da keiner der Quelloperanden
der Befehle L2 und L3 von den Zieloperanden irgendeines Befehls
abhängt,
der ihnen vorausgeht. Wenn der Befehlszähler (PC) auf die Stelle L1
gesetzt ist, schaut die Befehlsablaufsteuerung 220 in dem
Befehlsstrom nach vorn und stellt fest, dass die Befehle L2 und
L3 unabhängig
sind, so dass alle drei gleichzeitig an die drei verfügbaren funktionellen
Einheiten 230-N ausgegeben werden können. Bezüglich einer detaillierteren
Diskussion von Superskalar-Prozessoren wird beispielsweise verwiesen
auf James E. Smith und Gurindar, S. Sohi, "The Microarchitecture of Superscalar
Processors" Proc.
of the IEEE (Dec. 1995).
-
Wie
bereits angesprochen, beruht ein Prozessor 400 für sehr lange
Befehlswörter,
wie er in 4 gezeigt ist, auf Software
zum Nachweisen von Daten-Parallelismus während der Kompilierungszeit aus
einem einzigen Befehlsstrom, anstatt mit Hilfe von Hardware dynamisch
Parallelismus in der Laufzeit nachzuweisen. Ein VLIW-Compiler würde, wenn ihm
der Quellcoder angeboten wird, der zum Generieren des Code-Fragments 310 in 3 benutzt wurde,
die Befehlsunabhängigkeit
nachweisen und einen einzigen, sehr langen Befehl aufbauen, welcher
sämtliche
drei Operationen umfasst. Während der
Laufzeit würde
die Ausgabelogik des Prozessors 400 diesen breiten Befehl
innerhalb von einem Zyklus ausgeben, um Daten in Richtung sämtlicher
verfügbaren
funktionellen Einheiten 430-N zu leiten. Wie in 4 dargestellt
ist, enthält
ein Prozessor 400 für sehr
lange Befehlswörter
einen integrierten Hol-/Dekodier-Block 420, der die zuvor
gruppierten Befehle 410 aus dem Speicher holt. Bezüglich einer
detaillierteren Diskussion von Prozessoren für sehr lange Befehlswörter sei
beispielsweise verwiesen auf Burton J. Smith "Architecture and Applications of the
HEP Multiprocessor Computer System", SPIE Real Time Signal Processing IV,
241–248
(1981).
-
Eine
Variante von VLIW-Prozessoren, beispielsweise repräsentiert
durch die Multiflow-Architektur, diskutiert in Robert P. Colwell
et al., "A VLIW Architecture
for a Trace Scheduling Compiler",
IEEE Transactions on Computers (August 1988) verwendet einen Befehl
fester Breite, in welchem Felder vordefiniert sind, die Daten mit
einem Mal zu sämtlichen funktionellen
Einheiten 430-N lenken. Wenn sämtliche in dem breiten Befehl
spezifizierten Operationen abgeschlossen sind, gibt der Prozessor
einen neuen, mehrere Operationen umfassenden Befehl aus. Einige
jüngere
VLIW-Prozessoren, so zum Beispiel der C6x-Prozessor von Texas Instruments,
Dallas, TX und der EPIC IA-64-Prozessor von Intel Corporation in
Santa Clara, CA, machen stattdessen von einem Befehlspaket variabler
Länge Gebrauch,
welches eine oder mehrere Operationen in gebündelter Weise beinhaltet.
-
Ein
Mehrfachthread-Prozessor 500, wie er in 5 dargestellt
ist, erzielt Leistungsverbesserungen dadurch, dass er mehr als einen
Befehlsstrom parallel ausführt,
anstatt den Versuch zu unternehmen, Parallelismus innerhalb eines
einzelnen Befehlsstroms zu nutzen. Der Multithread-Prozessor 500 nach 5 enthält einen
Befehlszähler 510-N, einen
Registersatz 520-N und eine funktionelle Einheit 530-N,
jeweils einen entsprechenden Befehlsstrom N zugeordnet. Alternative
Implementierungen des Mehrfachthread-Prozessors 500 haben
von einer einzelnen funktionellen Einheit 530 Gebrauch
gemacht, zusätzlich
zu mehreren Registersätzen 520-N und
Befehlszählern 510-N.
Derartige, alternative Mehrfachthread-Prozessoren 500 sind in der
Weise ausgelegt, dass der Prozessor 500 eine Befehlsausgabe
von einem Befehlszähler/Registersatz 510-N/520-N zu
einem anderen Befehlszähler/Registersatz 510-N/520-N innerhalb
von einem oder zwei Zyklen umschalten kann. Ein Befehl mit langer
Latenz, so zum Beispiel ein Ladebefehl (LOAD), kann sich damit überlappen
mit kürzeren
Operationen aus anderen Befehlsströmen. Die TERA-MTA-Architektur von
der Firma Tera Computer Company, Seattle, WA, ist ein Beispiel für diesen
Typ.
-
Eine
Erweiterung der Mehrfachthread-Architektur 500, bezeichnet
als Simultan-Mehrfachthreading,
kombiniert die Superskalar-Architektur, die oben in Verbindung mit
der 2 diskutiert wurde, mit Mehrfachthread-Entwürfen, die
oben in Verbindung mit 5 diskutiert wurden. Bezüglich einer
detaillierteren Diskussion von Simultan-Mehrfachthreading-Methoden
sei beispielsweise verwiesen auf Dean Tullsun et al., "Silmultaneous Multithreading: Maximizing
in-Chip Parallelism", Proc. of the 22nd Annual
Int'l Symposium
on Computer Architecture, 392–403
(Santa Margherita Ligure, Italy, June 1995). Allgemein ist anzumerken,
dass bei einer Simultan-Mehrfachthreading-Architektur ein Pool von
funktionellen Einheiten vorhanden ist, aus dem eine beliebige Anzahl
dynamisch einem Befehl zuordbar ist, der aus irgendeinem aus einer
Anzahl von Befehlszähler-/Registersatz-Strukturen
stammen kann. Durch gemeinsames Verwenden der funktionellen Einheiten
aus der Anzahl von Programm-Threads kann die Simultan-Mehrfachthreading-Architektur eine
effizientere Nutzung der Hardware erreichen, als sie in 5 dargestellt
ist.
-
Während die
kombinierte Vorgehensweise in der Simultan-Mehrfachthreading-Architektur
einer verbesserte Effizienz gegenüber individuellen Methoden
der Superskalar-Architektur oder der Mehrfachthread-Architektur
erreicht, erfordern Simultan-Mehrfachthread-Architekturen immer
noch eine ausgeklügelte
Ausgabelogik zum dynamischen Untersuchen von Befehlsströmen, um
möglichen
Parallelismus aufzuspüren.
Deshalb besteht Bedarf an einer Mehrfachthread-Prozessorarchitektur,
die keine dynamische Ermittlung, ob zwei Befehlsströme unabhängig sind
oder nicht, erfordert. Ein weiterer Bedarf betrifft eine Mehrfachthread-Architektur,
die Simultan-Mehrfachthreading ermöglicht. Ein noch weiterer Bedarf betrifft
eine Mehrfachthread-Architektur, welche funktionelle Einheiten in
solchen Mehrfachthread-Prozessoren auf Echtzeitbasis zuordnet.
-
Mombers
F et al: "A multithreaded
mutlimedia processor merging onchip multiprocessort and distributed
vector pipelines",
Circuits and Systems, 1999, ISCAS '99; proceeding of the 1999 IEEE International
Symposium on Orlando, FI, USA 30 May–2 June 1999, Piscataway, NJ,
USA, IEEE, US, 30 May 1999 (1999-05-30), Seiten 287–290, XP010341240 ISBN:
0-7803-5471-0 zeigt eine Ausgestaltung, bei dem jeder Prozessor
ein Array von fünf
Clustern aus drei funktionellen Einheiten enthält, die mit 32-Bit-Operanden
arbeiten. Damit ist jede funktionelle Einheit speziell für die Ausführung spezieller
Arten von Befehlen ausgerichtet.
-
Bekerman
M et al: "Performance
and hardware complexitiy tradeoffs in designing multithreaded architectures" Parallel Architecture
and Compilation Techniques, 1996, Proceedings of the 1996 Conference
on Boston, MA, USA 20–23
Oct. 1996, Los Alamitos, CA, USA, IEEE Comput. Soc, US, 20 October 1996
(1996-10-20), pages
24–34,
XP010199377 ISBN: 0-8186-7632-9 zeigt, dass, wenn Befehle aus mehr
als einem einzigen Thread einen speziellen Typ einer funktionellen
Einheit erfordern, die freien funktionellen Einheiten zunächst Befehlen
zugeordnet werden, die aus Threads mit höherer Priorität kommen.
Damit ist jede funktionelle Einheit für die Ausführung spezieller Befehlsarten
ausgerichtet.
-
Erfindungsgemäß wird ein
Mehrfachthread-Prozessor für
sehr lange Befehlswörter
gemäß Anspruch
1 oder ein Verfahren zum Verarbeiten von Befehlen aus einem Mehrfachthread-Befehlsstrom
oder ein Gegenstand zum Verarbeiten von Befehlen aus einem Mehrfachthread-Befehlsstrom
gemäß Anspruch
15 geschaffen.
-
Offenbarung
der Erfindung
-
Allgemein
sind ein Verfahren und eine Vorrichtung zum Zuordnen funktioneller
Einheiten in einem Mehrfachthread-Prozessor für sehr lange Befehlswörter offenbart.
Die vorliegende Erfindung kombiniert die Methoden herkömmlicher
Architekturen für
sehr lange Befehlswörter
mit herkömmlichen Mehrfachthread-Architekturen.
Die erfindungsgemäße Kombinations-Architektur
verringert die Ausführungszeit
in einem individuellen Programm ebenso wie in Bezug auf eine Arbeitsbelastung.
-
Die
vorliegende Erfindung nutzt einen Compiler zum Erkennen von Parallelismus
in einer Mehrfachthread-Prozessorarchitektur. Damit wird eine Mehrfachthread-VLIW-Architektur
offenbart, die Programm-Parallelismus durch Ausgabe von Mehrfachbefehlen
ausnutzt, ähnlich
wie Einzelthread-VLIW-Prozessoren, anhand einer einzelnen Programmablaufsteuerung,
wobei außerdem
Mehrfachprogramm-Ablaufsteuerungen, beispielsweise in Verbindung
mit Simultan-Mehrfachthreading unterstützt werden, allerdings bei
verringerter Komplexität der
Ausgabelogik, da eine dynamische Ermittlung nicht erforderlich ist.
-
Die
vorliegende Erfindung weist Befehle funktionellen Einheiten zu,
so dass mehrere VLIW-Befehle innerhalb ein und desselben Zyklus
an mehrere funktionelle Einheiten ausgegeben werden. Der Zuordnungsmechanismus
gemäß der Erfindung belegt
ein Pipeline-Stadium, bevor Argumente an funktionelle Einheiten
abgesendet werden. Im Allgemeinen ermittelt die Zuordnungs-Stufe,
wie die Befehle zur Maximierung der Effizienz gruppiert werden sollen,
indem geeignete Befehle basierend auf Thread-Prioritäten oder
Betriebsmittelverfügbarkeit oder
beiden Kriterien ausgewählt
und die Befehle den funktionellen Einheiten zugewiesen werden.
-
Die
Zuordnungs-Stufe wählt
die passenden M Befehle für
die Ausführung
aus den (bis zu) N·K Befehlen
aus, die innerhalb der Pipeline geholt und dekodiert werden. Die
Kriterien für
die Befehlsauswahl sind Thread-Priorität oder Betriebs mittelverfügbarkeit
oder beide. Unter den Thread-Priotitäts-Kriterien können verschiedene
Threads unterschiedliche Prioritäten
haben. Die Zuordnungsstufe wählt
Paket (oder Instruktionen aus Paketen) für die Ausführung aus, die zu dem Thread
mit der höchsten
Priorität
gehören,
abhängig
von der implementierten Prioritätsstrategie.
Nach den Kriterien der Betriebsmittelverfügbarkeit kann ein Paket (mit
bis zu K Befehlen) nur dann zugewiesen werden, wenn die Betriebsmittel (so
zum Beispiel funktionelle Einheiten), die von dem Paket benötigt werden,
im nächsten
Zyklus zur Verfügung
stehen. Funktionelle Einheiten berichten ihre Verfügbarkeit
an die Zuordnungsstufe.
-
Ein
umfassenderes Verständnis
der Erfindung sowie weitere Merkmale und Vorteile der Erfindung
ergeben sich durch Bezugnahme auf die nachfolgende detaillierte
Beschreibung und die Zeichnungen.
-
Kurze Beschreibung
der Zeichnungen
-
1 zeigt
eine herkömmliche
verallgemeinerte Mikroprozessorarchitektur;
-
2 ist
ein schematisches Blockdiagramm einer herkömmlichen Superskalar-Prozessorarchitektur;
-
3 ist
ein Programmfragment, welches die Unabhängigkeit von Operationen veranschaulicht;
-
4 ist
ein schematisches Blockdiagramm einer herkömmlichen Prozessorarchitektur
für sehr lange
Befehlswörter
(VLIW);
-
5 ist
ein schematisches Blockdiagramm eines herkömmlichen Mehrfachthread-Prozessors;
-
6 veranschaulicht
einen Mehrfachthread-VLIW-Prozessor gemäß der Erfindung;
-
7A zeigt
eine herkömmliche
Pipeline für einen
Mehrfachthread-Prozessor;
-
7B zeigt
ein Pipeline für
einen Mehrfachthread-Prozessor gemäß der Erfindung; und
-
8 ist
ein schematisches Blockdiagramm einer Implementierung für die Zuordnungsstufe
nach 7B.
-
Detaillierte
Beschreibung
-
6 zeigt
einen Mehrfachthread-VLIW-Prozessor 600 gemäß der Erfindung. Wie
in 6 gezeigt ist, gibt es drei Befehlsthreads, nämlich den
Thread A (TA), den Thread B (TB) und den Thread C (TC), die jeweils
bei dem Befehl Nummer n arbeiten. Darüber hinaus enthält der beispielhafte
Mehrfachthread-VLIW-Prozessor 600 neun funktionelle Einheiten 620-1 bis 620-9,
die unabhängig
irgendeinem Thread TA-TC zugeordnet werden können. Da die Anzahl von Befehlen über die
beispielhaften drei Threads TA-TC hinweg neun beträgt und die
beispielhafte Anzahl verfügbarer
funktioneller Einheiten 620 ebenfalls neun beträgt, kann
jeder der Befehle von sämtlichen
drei Threads TA-TC die Befehlspakete in einem Zyklus ausgeben und
zu dem Befehl n-1 des nachfolgenden Zyklus weitergeben.
-
Es
sei hier angemerkt, dass es allgemein eine Eins-zu-eins-Entsprechung
zwischen Befehlen und die dadurch spezifizierte Operation gibt.
Damit werden solche Terme hier austauschbar verwendet. Es sei ferner
angemerkt, dass in der Situation, in der ein Befehl mehrere Operationen
spezifiziert, davon ausgegangen wird, dass der Mehrfachthread-VLIW-Prozessor 600 eine
oder mehrere funktionelle Mehrfachoperationseinheiten 620 zum
Ausführen
des mehrere Operationen spezifizierenden Befehls enthält. Ein
Beispiel für
eine Archtitektur, bei der mehrere Operationen spezifizierende Befehle verarbeitet
werden können,
ist der Computer mit komplexem Befehlssatz (CISC; complex instruction set
computer).
-
Die
vorliegende Erfindung ordnet Befehle funktionellen Einheiten zu,
um Mehrfach-VLIW-Befehle innerhalb desselben Zyklus an mehrere funktionelle
Einheiten auszugeben. Der Zuordnungsmechanismus der vorliegenden
Erfindung belegt eine Pipelinestufe direkt vor dem Abschicken von
Argumenten an funktionelle Einheiten. Dementsprechend veranschaulicht 7A eine
herkömmliche
Pi peline 700, bestehend aus einer Stufe "Holen" 710, in
der aus dem Speicher ein Paket geholt wird, einer Stufe "Dekodieren" 720, in
der die erforderlichen funktionellen Einheiten und Register für die geholten
Befehle identifiziert werden, und eine Stufe "Ausführen" 730, in der
die spezifizierten Operationen ausgeführt und die Ergebnisse verarbeitet
werden.
-
In
einer herkömmlichen
VLIW-Architektur wird also ein bis zu K Befehle enthaltendes Paket
in jedem Zyklus geholt (in der Holstufe 710). Es werden bis
zu K Befehle in der Dekodierstufe 720 dekodiert und ein
(bis zu) K funktionelle Einheiten (FUs) gesendet. Die den Befehlen
entsprechenden Register werden gelesen, die funktionellen Einheiten
bearbeiten die Werte, und die Resultate werden zurück in die Register
geschrieben, was in der Ausführungsstufe 730 geschieht.
Dabei wird angenommen, dass pro funktioneller Einheit bis zu drei
Register gelesen und bis zu einem Register beschrieben werden kann.
-
7B zeigt
eine Pipeline 750 gemäß der Erfindung,
bei der eine Zuordnungsstufe 780, die unten in Verbindung
mit 8 näher
erläutert
wird, zwecks Implementierung von Mehrfachthread-VLIW-Prozessoren
hinzugefügt
ist. Grundsätzlich
bestimmt die Zuordnungsstufe 780, wie die Operationen gemeinsam
gruppiert werden müssen, um
die Effizienz zu maximieren. Somit enthält die Pipeline 750 eine
Holstufe 760, in der bis zu N Pakete aus dem Speicher geholt
werden, eine Dekodierstufe 770, in der die funktionellen
Einheiten und Register für
die geholten Befehle identifiziert werden (bis zu N·K Befehle),
eine Zuordnugnsstufe 780, in der die passenden Befehle
ausgewählt
und den FUs zugeordnet werden, und eine Ausführungsstufe 790, in der
die spezifizierten Operationen ausgeführt und die Ergebnisse verarbeitet
werden.
-
In
dem Mehrfachthread-VLIW-Prozessor 600 gemäß der Erfindung
werden bis zu N Threads hardwaremäßig unterstützt. N-Thread-Kontexte existieren
und enthalten sämtliche
möglichen
Register eines einzelnen Threads und die gesamte benötigte Statusinformation.
Ein Mehrfachthread-VLIW-Prozessor 600 besitzt M funktionelle
Einheiten, wobei M größer oder
gleich groß K
ist. Die modifizierte Pipelinestufe 750, die in 7B gezeigt
ist, arbeitet folgendermaßen:
In jedem Zyklus werden bis zu N Pakete, (die jeweils bis zu K Befehle
enthalten) im Zuge der Holstufe 760 geholt. Die Dekodierstufe 770 dekodiert bis
zu N·K
Befehle und bestimmt deren Anforderungen und zu lesende und zu beschreibende
Register. Die Zuordnungsstufe 780 wählt M Befehle aus den (bis
zu) N·K
Befehlen aus und gibt sie an die M funktionellen Einheiten. Es wird
davon ausgegangen, dass jede funktionelle Einheit bis zu drei Register
lesen und ein Register beschreiben kann. In der Ausführungsstufe 790 lesen
bis zu M funktionelle Einheiten bis zu 3·M Register und beschreiben
bis zu M Register.
-
Die
Zuordnungsstufe 780 wählt
für die
Ausführung
die passenden M Befehle aus den (bis zu) N·K Befehlen aus, die in den
Stufen 760 und 770 geholt und dekodiert wurden.
Die Kriterien für
die Auswahl sind die Thread-Priorität oder die Betriebsmittelverfügbarkeit
oder beide. Unter den Thread-Prioritäts-Kriterien können unterschiedliche
Threads unterschiedliche Prioritäten
besitzen. Die Zuordnungsstufe 780 wählt die Pakete (oder Befehle
aus den Paketen) für
die Ausführung
aus, die zu dem Thread mit der höchsten
Priorität
gemäß der implementierten
Piroritätsstrategie
gehören.
Es lässt
sich eine Mehrzahl von Prioritätsstrategien
implentieren. Beispielsweise kann eine Prioritätsstrategie für einen
N Kontexte (N Hardware-Threads) aufweisenden Mehrfachthread-VLIW-Prozessor
N Prioritätsstufen
haben. Der Thread mit der höchsten
Priorität
in dem Prozessor erhält
eine Zuordnung vor jedem anderen Thread. Unter Threads gleicher
Priorität
wird derjenige bevorzugt, der am längsten auf eine Zuordnung gewartet
hat.
-
Unter
den Kriterien der Betriebsmittelverfügbarkeit lässt sich ein Paket mit (bis
zu K Befehlen) nur dann zuordnen, wenn die Betriebsmittel (funktionelle Einheiten),
die von dem Paket angefordert werden, für den nächsten Zyklus verfügbar sind.
Funktionelle Einheiten berichten über ihre Verfügbarkeit
an die Zuordnungsstufe 780.
-
8 zeigt
ein schematisches Blockdiagramm einer Implementierung der Zuordungsstufe 780.
Wie in 8 gezeigt ist, enthält die zu implementierende
Zuordnungsstufe 780 benötigte
Hardware einen Prioritätskodierer 810 und
zwei Crossbar-Schalter 820, 830. Im Allgemeinen
untersucht der Prioritätskodierer 810 den
Zustand der Mehrfachoperationen in jedem Thread ebenso wie den Zustand
der verfügbaren
funktionellen Einheiten. Der Prioritätskodierer 810 wählt die
zur Ausführung
gehenden Pakete aus und stellt den ersten Crossbar-Schalter 820 so
ein, dass die Inhalte der passenden Register zu Beginn des nächsten Zyklus
an die funktionellen Einheiten übertragen
werden. Das Ausgangssignal des Prioritätskodierers 810 konfiguriert den
ersten Crossbar-Schalter 820, um Daten aus den ausgewählten Threads
zu den passenden funktionellen Einheiten zu leiten. Dies kann beispielsweise
dadurch geschehen, dass die Registerkennungen (die eine Thread-Kennung
beinhalten) an die funktionellen Einheiten senden und die funktionellen
Einheiten die Registerinhalte über
ein getrenntes Datennetzwerk lesen lassen, wobei der Crossbar-Schalter 810 dazu
verwendet wird, die passenden Registerinhalte in Zwischenspeicher
zu übertragen,
die von den funktionellen Einheiten zu Beginn des nächsten Zyklus gelesen
werden.
-
Von
den seitens der Holstufe 760 (7B) geholten
N Paketen wählt
der Prioritätskodierer 810 bis
zu N Pakete zur Ausführung
abhängig
von der Priorität
und der Betriebsmittelverfügbarkeit
aus. In anderen Worten: Der Prioritätskodierer wählt die Threads
mit höchster
Priorität,
die keine nicht verfügbaren
Betriebsmittel anfordern, für
die Ausführung aus.
Dann stellt er den ersten Crossbar-Schalter 810 ein. Die Eingangssignale
des Crossbar-Schalters 810 leiten bis zu 3 K·N Eingangssignale
zu bis zu 3·M Ausgängen. Der
erste Crossbar-Schalter 810 hat die Fähigkeit, die Registerkennungen
(oder die Inhalte der passenden Register) jedes Pakets zu den passenden
funktionellen Einheiten zu leiten.
-
Da
es bis zu N Threads gibt, die im selben Zyklus ausgewählt werden
können,
und jeder Thread ein Paket von bis zu K Befehlen ausgeben kann,
wobei jeder Befehl bis zu 3 Register lesen kann, so gibt es für die Auswahl
3 K·N
Registerkennungen. Da es nur M funktionelle Einheiten gibt und jede
funktionelle Einheit einen einzigen Befehl akzeptieren kann, gibt es
nur 3 M Registerkennungen, die zur Auswahl stehen. Aus diesem Grund
implementiert der Crossbar-Schalter eine 3 K·N-zu-3M-Leitung von Registerkennungen
(oder Registerinhalten).
-
Der
Ausgangs-Crossbar-Schalter 830 leitet M Eingänge an N·M oder
N·K Ausgänge. Der
zweite Crossbar-Schalter 830 wird zur passenden Zeit eingerichtet,
um die Ergebnisse von den funktionellen Einheiten zu den passenden
Registern zurückzuführen. Der
zweite Crossbar-Schalter 830 lässt sich implementieren als
getrenntes Netzwerk, indem die Registerkennungen (die eine Thread-Kennung
enthalten) zu den funktionellen Einheiten gesendet werden. Wenn
eine funktionelle Einheit ein Ergebnis errechnet, leitet sie das
Ergebnis zu einer gege benen Registerkennung. Es gibt M Ergebnisse,
die bis zu N Threads geleitet werden müssen. Jeder Thread kann bis
zu K Ergebnisse akzeptieren. Der zweite Crossbar-Schalter 830 leitet
M Ergebnisse zu N·K
möglichen
Zielen. Der zweite Crossbar-Schalter 830 lässt sich
implementieren in der Form von M Bussen, die sämtliche N Registerdateien verbinden.
In diesem Fall werden M Ergebnisse zu N·M möglichen Zielen geleitet (wenn
die Registerdateien in der Lage sind, M Ergebnisse zu akzeptieren).
-
Es
versteht sich, dass die Ausführungsformen
und ihre Abwandlungen, die oben dargestellt und beschrieben wurden,
lediglich beispielhaft für
die Prinzipien der Erfindung sind, und dass verschiedene Abwandlungen
vom Fachmann implementiert werden können, ohne von dem durch die
beigefügten Ansprüche definierten
Schutzumfang abzuweichen.