PatentDe  


Dokumentenidentifikation DE102005001025A1 27.07.2006
Titel Multithread-Prozessor mit Kontext-Umschaltung ohne Einschränkungen und/oder Zyklenverlust und Verfahren zum Betreiben eines solchen
Anmelder Infineon Technologies AG, 81669 München, DE
Erfinder Gregorio, Lorenzo, di, 85386 Eching, DE
Vertreter PAe Reinhard, Skuhra, Weise & Partner GbR, 80801 München
DE-Anmeldedatum 07.01.2005
DE-Aktenzeichen 102005001025
Offenlegungstag 27.07.2006
Veröffentlichungstag im Patentblatt 27.07.2006
IPC-Hauptklasse G06F 9/46(2006.01)A, F, I, 20051017, B, H, DE
Zusammenfassung Die Erfindung betrifft einen Multithread-Prozessor mit einer Kontext-Umschaltung ohne Einschränkungen und/oder Zyklenverluste zur Datenverarbeitung einer Mehrzahl von Threads, wobei für jeden Thread innerhalb des Miltithread-Prozessors ein eigener Kontext vorgesehen ist. Der erfindungsgemäße Multithread-Prozessor weist eine Umschalt-Tabelle auf, welche eine interne Ausnahme eines bestimmten Kontext zum Aktualisieren dieses Kontext und zum Umschalten von diesem Kontext auf einen Zielkontext der internen Ausnahme und/oder eine externe Ausnahme eines bestimmten Kontext zum Aktualisieren dieses Kontext und zum Umschalten von diesem Kontext auf einen Zielkontext der externen Ausnahme empfängt und abhängig davon einen Kontextparametersatz dieses Kontext und/oder einen Kontextparametersatz eines Zielkontext der interenen Ausnahme und/oder einen Kontextparametersatz eines Zielkontext der externen Ausnahme derart aktualisiert und einen Umschaltparametersatz für eine Ablaufsteuerung der zu holenden Programmbefehle derart setzt, sodass der Mulithread-Prozessor ohne Einschränkungen und/oder Zyklenverlust zwischen dem Kontext und dem Ziekontext der internen Ausnahme und/oder dem Zielkontext der externen Ausnahme umschaltet.

Beschreibung[de]

Die Erfindung betrifft einen Multithread-Prozessor mit einer Kontext-Umschaltung ohne Einschränkungen und/oder Zyklenverlust zur Datenverarbeitung einer Mehrzahl von Threads und ein Verfahren zum Betreiben eines solchen.

Eingebettete Prozessoren und deren Architekturen werden an ihrem Leistungsverbrauch, ihrem Durchsatz, ihrer Auslastung (Utilization), ihren Kosten und ihrer Realzeitfähigkeit gemessen. Um insbesondere den Durchsatz und die Auslastung zu erhöhen, kommt das Prinzip des Multithreading zum Einsatz. Die Grundidee des Multithreading basiert darauf, dass ein Prozessor mehrere Threads bearbeitet. Dabei wird insbesondere ausgenützt, dass bei einer Latenzzeit des einen Threads, Programmbefehle des anderen Threads bearbeitet werden können. Dabei bezeichnet ein Thread einen Kontrollpfad eines Codes bzw. Quellcodes bzw. Programms, wobei innerhalb eines Threads Datenabhängigkeiten bestehen und zwischen verschiedenen Threads schwache Datenabhängigkeiten bestehen (wie in Kapitel 3 in T. Beierlein, O. Hagenbruch: "Taschenbuch Mikroprozessortechnik", 2. Auflage, Fachbuchverlag Leipzig im Karl-Hanser-Verlag München – Wien, ISBN 3-446-21686-3 beschrieben). Ein Kontext eines Threads ist der Ausführungszustand der Programmbefehlfolge des Threads. Demnach ist der Kontext eines Threads definiert als ein temporärer Prozessorzustand während der Bearbeitung des Threads durch diesen Prozessor. Der Kontext wird von der Hardware des Prozessors, herkömmlicherweise dem Programmzählregister bzw. Programmcounter, dem Registerfile bzw. Kontextspeicher und dem dazugehörigen Statusregister gehalten. Unter einer Einschränkung wird beispielsweise eine Einschränkung der Auswahl des Threads, auf welchen der Prozessor bei einem Umschalten schalten kann, oder eine Einschränkung des Umschaltzeitpunkts verstanden.

Beispielsweise ist in Ungerer, Theo et al. (2003) "Survey of Processors With Explicit Multithreading" in ACM Computing Surveys, Volume 35, March 2003, eine umfangreiche Auflistung der bekannten Multithread-Prozessoren und Architekturen beschrieben.

Unvorteilhafterweise erfolgt das Thread-Umschalten bei den beschriebenen Multithread-Prozessoren und Architekturen nicht-deterministisch, d.h. die Anzahl der Kontext-Umschaltungen ist dem Programmierer nicht bekannt, sondern ist von sämtlicher Eingangsdaten abhängig, die als Zufallvariabeln betrachtet werden müssen. Somit muss insbesondere für eingebettete Prozessoren, bei denen die Echtzeitfähigkeit eine herausragende Bedeutung besitzt, ein Zyklenverlust bei der Umschaltung verkraftbar werden, indem genug Taktzyklen bereitgestellt werden, sodass auch der Worst-Case, d.h. die maximale mögliche Anzahl von Kontext-Umschaltungen berücksichtigt ist. Durch diese Berücksichtigung der maximalen Anzahl der Kontext-Umschaltungen werden die Kosten, d.h. die bereitzustellenden Taktzyklen des Multithread-Prozessors für das Thread-Umschalten unnötig vergrößert, weil die Leistung des Prozessors in gewissen Sonderfälle, insbesondere beim Worst-Case wesentlich geringer als die Leistung im normalen Betrieb ausfällt.

Zur Erläuterung der der Erfindung zugrunde liegenden Problematik ist in 1 ein schematisches Ablaufdiagramm einer Abarbeitung zweier Threads T1, T2 durch einen Multithread-Prozessor MT dargestellt. In den schraffiert gezeichneten Bereichen sind der erste Thread T1 und der zweite Thread T2 jeweils ausführbar. Bei den mit St gekennzeichneten Bereichen des ersten Threads T1 und des zweiten Threads T2 handelt es sich um so genannten Stalls St, während dieser keine Programmbefehle des ersten Threads T1 bzw. des zweiten Threads T2 ausgeführt werden können. In der dritten Zeile der 1 ist dargestellt, wie der Multithread-Prozessor MT in zeitlicher Abfolge (siehe Zeitskala t) den ersten Thread T1 und den zweiten Thread T2 abwechselnd derart bearbeitet, dass die Stalls St ohne Auswirkung bleiben. Um aber zwischen dem ersten Thread T1 zu dem zweiten Thread T2 und umgekehrt umzuschalten, ist jeweils ein Zyklenverlust (Switch-Overhead) SO notwendig, welcher beispielsweise zwei Taktzyklen benötigt. Nachteiligerweise kann jeweils in diesen beiden Taktzyklen der Multithread-Prozessor MT keine Programmbefehle bearbeiten. Ist die Anzahl der Umschalt-Ereignisse einer Anwendung ungewiss, so muss die Anwendung für die maximale Anzahl dimensioniert werden (Worst-Case). Eine solche maximale Anzahl ist häufig wesentlich höher als die für den größten Teil der Fälle anfallende Anzahl der Umschalt-Ereignisse. Dadurch muss die Anwendung nachteiligerweise deutlich überdimensioniert werden, nur um äußerst wenige und äußerst seltene Fälle zu verkraften.

Die Aufgabe der vorliegenden Erfindung besteht daher darin, ein deterministisches Kontext-Umschalten bei einem Multithread-Prozessor ohne Zyklenverlust bereitzustellen.

Erfindungsgemäß wird die gestellte Aufgabe durch einen Multithread-Prozessor mit den Merkmalen des Patentanspruchs 1 sowie durch ein Verfahren zum Betreiben eines Multithread-Prozessors mit den Merkmalen des Patentanspruchs 25 gelöst.

Demgemäß ist erfindungsgemäß ein Multithread-Prozessor mit einer Kontext-Umschaltung ohne Einschränkungen und/oder Zyklenverlust zur Datenverarbeitung einer Mehrzahl von Threads vorgesehen, wobei für jeden Thread innerhalb des Multithread-Prozessors ein eigener Kontext vorgesehen ist, wobei der erfindungsgemäße Multithread-Prozessor eine Umschalt-Tabelle aufweist, welche eine interne Ausnahme eines bestimmten Kontext zum Aktualisieren dieses Kontext und zum Umschalten von diesem Kontext auf einen Zielkontext der internen Ausnahme und/oder eine externe Ausnahme eines bestimmten Kontext zum Aktualisieren dieses Kontext und zum Umschalten von dem diesem Kontext auf einen Zielkontext der externen Ausnahme empfängt und abhängig davon einen Kontextparametersatz dieses Kontext und/oder einen Kontextparametersatz eines Zielkontext der internen Ausnahme und/oder einen Kontextparametersatz eines Zielkontext der externen Ausnahme derart aktualisiert und einen Umschaltparametersatz für eine Ablaufsteuerung der zu holenden Programmbefehle derart setzt, sodass der Multithread-Prozessor ohne Einschränkungen und/oder Zyklenverlust zwischen dem Kontext und dem Zielkontext der internen Ausnahme und/oder dem Zielkontext der externen Ausnahme umschaltet.

Dabei wird vorteilhafterweise derart umgeschaltet, dass die Threads noch „koherent" bleiben. Koherent bedeutet in diesem Zusammenhang, dass ein Thread die gleiche Funktion unabhängig von der Reihenfolge implementiert, mit welcher verschiedene Befehle verschiedener Threads ausgeführt werden.

Zur Definition der Ausnahme (Exception) wird auf Kapitel 3.3.6 in T. Beierlein, O. Hagenbruch: "Taschenbuch Mikroprozessortechnik", 2. Auflage, Fachbuchverlag Leipzig im Karl-Hanser-Verlag München – Wien, ISBN 3-446-21686-3 verwiesen.

Außerdem ist erfindungsgemäß ein Verfahren zum Betreiben des Multithread-Prozessors mit einer Kontextumschaltung ohne Einschränkungen und/oder Zyklenverlust zur Datenverarbeitung von Threads vorgesehen, wobei für jeden Thread innerhalb des Multithread-Prozessors ein eigener Kontext vorgesehen ist, wobei das erfindungsgemäße Verfahren folgende Verfahrensschritte aufweist:

  • – Empfangen einer internen Ausnahme eines bestimmten Kontext zum Aktualisieren dieses Kontext und Umschalten von diesem Kontext auf einen Zielkontext der internen Ausnahme und/oder einer externen Ausnahme eines bestimmten Kontext zum Aktualisieren dieses Kontext und Umschalten von diesem Kontext auf einen Zielkontext der externen Ausnahme; und
  • – Aktualisieren eines Kontextparametersatzes des aktuellen Kontext und/oder eines Kontextparametersatzes eines Zielkontext der internen Ausnahme und/oder eines Kontextparametersatzes der externen Ausnahme und Setzen eines Umschaltparametersatzes für eine Ablaufsteuerung der zu holenden Programmbefehle derart, dass der Multithread-Prozessor ohne Einschränkungen und/oder Zyklenverlust zwischen dem aktuellen Kontext und dem Zielkontext der internen Ausnahme und/oder dem Zielkontext der externen Ausnahme umschaltet.

Vorteilhafterweise wird es durch die Aktualisierung jeglicher Kontextparametersätze aller durch die interne und die externe Ausnahme referenzierter Kontexte und des aktuellen Kontext in Abhängigkeit der auch gegebenenfalls konkurrierenden Ausnahmen ermöglicht, von dem aktuellen Kontext auf einen Zielkontext umzuschalten und auch von diesem Zielkontext ohne einen zusätzlichen Einschränkungen und/oder Zyklenverlust zu einem der beiden anderen Kontexte zurückzuschalten. Durch die ständige Aktualisierung der vorhandenen Kontextparametersätze ist ein Umschalten stets ohne einen zusätzlichen Einschränkung und/oder Zyklenverlust ermöglicht. Somit ist das Kontext-Umschalten für die erfindungsgemäße Architektur deterministisch, weil eine ungewisse Anzahl von Umschaltungen ein bestimmte Anzahl an Taktzyklen benötigt und zwar Null. Dadurch wodurch die Leistung und der Durchsatz des Multithread-Prozessors an sich steigen und der Bedarf, die Anwendung für die höchste Anzahl von Umschaltungen (Worst-Case) zu dimensionieren verschwindet.

Vorteilhafte Ausgestaltungen und Weiterbildungen der Erfindung ergeben sich aus den Unteransprüchen sowie der Beschreibung unter Bezugnahme auf die Zeichnungen.

Gemäß einer bevorzugten Ausgestaltung der Erfindung sind eine Befehlsholpipelinestufe zum Holen von Programmbefehlen aus einem Programmbefehlsspeicher und eine Befehlsdekodierpipelinestufe vorgesehen, wobei die Umschalt-Tabelle in der Befehlsdekodierpipelinestufe angeordnet ist.

Gemäß einer weiteren bevorzugten Ausgestaltung der Erfindung ist der Umschaltparametersatz aus wenigstens einem der folgenden Parameter ausgebildet:

  • – Kontextflag, welches den aktuellen Kontext der entsprechenden Pipelinestufe angibt;
  • – Programmbefehlsadresse eines nächsten Programmbefehls des aktuellen Kontext der entsprechenden Pipelinestufe;
  • – Squash-Reset-Flag, welches angibt, nachfolgende Programmbefehle des aktuellen Kontext der entsprechenden Pipelinestufe wieder zu bearbeiten;
  • – Kill-Flag, welches anzeigt, Sprungbefehle einer nachfolgenden Pipelinestufe, die sich im aktuellen Kontext der Umschalt-Tabelle befindet, nicht zu berücksichtigen.

Gemäß einer weiteren bevorzugten Ausgestaltung ist ein jeder Kontextparametersatz aus wenigstens einem der folgenden Parameter ausgebildet:

  • – Programmadresse des entsprechenden Kontext;
  • – Programmadresse eines Delay-Slot-Befehls des entsprechenden Kontext;
  • – Squash-Flag des entsprechenden Kontext, welches angibt, Programmbefehle des entsprechenden Kontext nicht zu bearbeiten;
  • – Flag zur Angabe einer anhängigen Programmadresse des entsprechenden Kontext;
  • – Flag zur Angabe eines anhängigen Delay-Slot-Befehls des entsprechenden Kontext;
  • – Flag zur Angabe einer Anzahl der anhängigen Delay-Slot-Befehle des entsprechenden Kontext.

Delay-Slot-Befehle sind Programmbefehle, die einem Sprungbefehl desselben Kontext folgen, aber trotz des Sprungsbefehls in jedem Fall noch ausgeführt werden.

Gemäß einer weiteren bevorzugten Ausgestaltung aktualisiert die Umschalt-Tabelle bei einem Empfangen der internen Ausnahme und der externen Ausnahme den Kontextparametersatz des aktuellen Kontext, den Kontextparametersatz des Zielkontext der internen Ausnahme und den Kontextparametersatz des Zielkontext der externen Ausnahme derart, dass der Multithread-Prozessor von dem aktuellen Kontext auf den Zielkontext der externen Ausnahme bei einem Auftreten einer Blockierung des Zielkontext der externen Ausnahme auf den Zielkontext der internen Ausnahme und dann bei einem Auftreten einer Blockierung des Zielkontext der internen Ausnahme zurück auf den ursprünglichen aktuellen Kontext umschaltet.

Gemäß einer weiteren bevorzugten Ausgestaltung weist die Befehlsdekodierpipelinestufe eine Programmadresstabelle auf, welche jeweils für jeden Kontext des Multithread-Prozessors den gültigen Kontextparametersatz zwischenspeichert, wobei die Umschalt-Tabelle die gespeicherten Kontextparametersätze des aktuellen Kontext, des Zielkontext der internen Ausnahme und des Zielkontext der externen Ausnahme jeweils aktualisiert.

Gemäß einer weiteren bevorzugten Ausgestaltung ist wenigstens eine weitere Pipelinestufe vorgesehen, welche der Befehlsdekodierpipelinestufe nachgeordnet ist und welche die dekodierten Programmbefehle weiter bearbeitet.

Gemäß einer weiteren bevorzugten Ausgestaltung stellt jede weitere Pipelinestufe, falls der von ihr bearbeitete Programmbefehl ein Sprungbefehl ist, einen weiteren Umschaltparametersatz und ein Gültigkeitssignal zur Angabe einer Gültigkeit des weiteren Umschaltparametersatzes bereit.

Gemäß einer weiteren bevorzugten Ausgestaltung ist eine Ablaufsteuerung vorgesehen, welche den Umschaltparametersatz der Befehlsdekodierpipelinestufe sowie die weiteren Umschaltparametersätze und Gültigkeitssignale der nachgeordneten weiteren Pipelinestufen empfängt und abhängig davon einen Kontextparameter, der angibt, welcher Kontext als Nächstes bearbeitet wird, eine Programmadresse des nächsten zu bearbeitenden Kontext und das Squash-Reset-Flag des nächsten zu bearbeitenden Kontext generiert und an die Befehlsholpipelinestufe überträgt.

Gemäß einer weiteren bevorzugten Ausgestaltung holt die Befehlsholpipelinestufe einen nächsten Programmbefehl aus dem Programmbefehlsspeicher in Abhängigkeit des von der Ablaufsteuerung empfangenen Kontextparameters und der empfangenen zugehörigen Programmadresse.

Gemäß einer weiteren bevorzugten Ausgestaltung ist ein Zwischenspeicher vorgesehen, welcher für jeden Kontext des Multithread-Prozessors einen Unterzwischenspeicher vorsieht, in dem wenigstens jeweils Programmbefehle, insbesondere Delay-Slot-Befehle des entsprechenden Kontext zwischenspeicherbar sind.

Gemäß einer weiteren bevorzugten Ausgestaltung adressiert die Umschalt-Tabelle mittels eines Speicherflags den jeweiligen Unterzwischenspeicher für eine Zwischenspeicherung von Programmbefehlen mit dem entsprechenden Kontextparameter und dem entsprechenden Squash-Reset-Flag des entsprechenden Kontext.

Gemäß einer weiteren bevorzugten Ausgestaltung weist die Befehlsdekodierpipelinestufe einen Befehlsdecoder zum Dekodieren der geholten Programmbefehle auf.

Gemäß einer weiteren bevorzugten Ausgestaltung empfängt der Befehlsdecoder den Kontextparameter, einen durch die Programmadresse adressierten und aus dem Programmbefehlsspeicher geholten Programmbefehl und das Squash-Reset-Flag von dem Zwischenspeicher sowie das Flag zur Angabe der Anzahl der Delay-Slot-Befehle des zu bearbeitenden Kontext von der Programmadresstabelle, aktualisiert abhängig davon das Flag zur Angabe der Anzahl der Delay-Slot-Befehle, die Adresse des Delay-Slot-Befehls des zu bearbeitenden Kontext und die Adresse des anhängigen Delay-Slot-Befehls des zu bearbeitenden Kontext und überträgt diese an die Programmadresstabelle.

Gemäß einer weiteren bevorzugten Ausgestaltung liest der Befehlsdecoder in jedem Taktzyklus einen Programmbefehl des aktuellen Kontext und das zugehörige Squash-Reset-Flag von dem Zwischenspeicher aus und setzt das Squash-Flag des aktuellen Kontext auf einen negativen logischen Signalpegel, falls das ausgelesene Squash-Reset-Flag einen positiven logischen Signalpegel aufweist.

Gemäß einer weiteren bevorzugten Ausgestaltung schreibt der Befehlsdecoder in jedem Taktzyklus, in dem das Squash-Flag des aktuellen Kontext auf einen positiven logischen Signalpegel gesetzt ist, NOP-Befehle in den jeweiligen Unterzwischenspeicher für den aktuellen Kontext des Zwischenspeichers.

Gemäß einer weiteren bevorzugten Ausgestaltung setzt der Befehlsdecoder im Falle eines positiven Signalpegels des Flag zur Angabe der Anzahl der Delay-Slot-Befehle des aktuellen Kontext die nächste Programmadresse auf die Adresse des Delay-Slot-Befehls des aktuellen Kontext, falls das Flag zur Angabe eines anhängigen Delay-Slot-Befehls des aktuellen Kontext einen positiven Signalpegel aufweist.

Gemäß einer weiteren bevorzugten Ausgestaltung setzt der Befehlsdecoder im Falle eines positiven Signalpegels des Flag zur Angabe der Anzahl der Delay-Slot-Befehle des aktuellen Kontext und eines negativen Signalpegels des Flag zur Angabe einer anhängigen Programmadresse des aktuellen Kontext die nächste Programmadresse auf die Programmadresse des aktuellen Kontext, falls das Flag zur Angabe einer anhängigen Programmadresse einen positiven Signalpegel aufweist.

Gemäß einer weiteren bevorzugten Ausgestaltung setzt der Befehlsdecoder im Falle eines positiven Signalpegels des Flag zur Angabe der Anzahl der Delay-Slot-Befehle des aktuellen Kontext, eines negativen Signalpegels des Flag zur Angabe einer anhängigen Programmadresse des aktuellen Kontext und eines negativen Signalpegels des Flag zur Angabe einer anhängigen Programmadresse des aktuellen Kontext die nächste Programmadresse auf die um Eins inkrementierte Programmadresse des aktuellen Kontext.

Gemäß einer weiteren bevorzugten Ausgestaltung empfängt die Ablaufsteuerung den Umschaltparametersatz der Befehlsdekodierpipelinestufe sowie die weiteren Umschaltparametersätze und die Gültigkeitssignale der weiteren Pipelinestufen und bestimmt abhängig davon jeweils die unterste Pipelinestufe der Pipeline für einen jeden Kontext des Multithread-Prozessors, die einen Sprungbefehl des jeweiligen Kontext bearbeitet.

Gemäß einer weiteren bevorzugten Ausgestaltung bestimmt die Ablaufsteuerung in Abhängigkeit der bestimmten untersten Pipelinestufe des aktuellen Kontextflag den Kontextparameter des nächsten zu bearbeitenden Kontext, die Programmadresse des nächsten zu bearbeitenden Kontext und das Squash-Reset-Flag des nächsten zu bearbeitenden Kontext.

Gemäß einer weiteren bevorzugten Ausgestaltung aktualisiert die Ablaufsteuerung für jeden Kontext des Multithread-Prozessors, der nicht dem aktuellen Kontextflag entspricht, den entsprechenden Kontextparametersatz und schreibt die aktualisierten Kontextparametersätze in die Programmadresstabelle.

Gemäß einer weiteren bevorzugten Ausgestaltung ist eine Auswahlvorrichtung vorgesehen, welche den Kontextparametersatz des aktuellen Kontext, den Kontextparametersatz des Zielkontext der internen Ausnahme und den Kontextparametersatz des Zielkontext der externen Ausnahme von der Umschalt-Tabelle, den Kontextparametersatz des aktuellen Kontext von der Programmadresstabelle und die nächste Programmadresse von dem Befehlsdecoder empfängt und abhängig davon die nächste Programmbefehlsadresse und das zugehörige Squash-Reset-Flag des aktuellen Kontext generiert und diese an die Ablaufsteuerung überträgt.

Gemäß einer weiteren bevorzugten Ausgestaltung stellt eine jede Pipelinestufe, welche nach der Befehlsdekodierpipelinestufe angeordnet ist, eine interne Ausnahme bei einem Auftreten eines Interrupts bereit.

Die Erfindung wird nachfolgend anhand der in den schematischen Figuren der Zeichnung angegebenen Ausführungsbeispielen näher erläutert. Es zeigen:

1 ein schematisches Ablaufdiagramm einer Abarbeitung zweier Threads durch einen Multithread-Prozessor zur Erläuterung der der Erfindung zugrunde liegenden Problematik;

2 ein schematisches Blockdiagramm eines bevorzugten Ausführungsbeispiels des erfindungsgemäßen Multithread-Prozessors;

3 eine schematische Darstellung einer besonders bevorzugten Ausführungsform der Umschalt-Tabelle des erfindungsgemäßen Multithread-Prozessors; und

4 ein schematisches Ablaufdiagramm eines bevorzugten Ausführungsbeispiels des erfindungsgemäßen Verfahrens.

In allen Figuren sind gleiche bzw. funktionsgleiche Elemente und Signale – sofern nichts anderes angegeben ist – mit denselben Bezugszeichen versehen worden.

2 zeigt ein schematisches Blockdiagramm eines bevorzugten Ausführungsbeispiels des erfindungsgemäßen Multithread-Prozessors 1. Der erfindungsgemäße Multithread-Prozessor 1 bearbeitet Programmbefehle PB einer Mehrzahl von Threads, wobei für jeden Thread innerhalb des Multithread-Prozessors 1 ein eigener Kontext vorgesehen ist. Dabei wird der aktuelle Kontext DC, der von dem Befehlsdecoder 5 bearbeitet wird, durch DC, ein erster Zielkontext durch DI, DE und ein zweiter Zielkontext durch DI, DE referenziert.

Der erfindungsgemäße Multithread-Prozessor 1 weist eine Umschalt-Tabelle 2 auf. Die Umschalt-Tabelle 2 empfängt interne Ausnahmen IA zum Umschalten von einem aktuellen Kontext DC auf einen Zielkontext DI, DE der internen Ausnahme IA und/oder eine externe Ausnahme EA zum Umschalten von einem aktuellen Kontext DC auf einen Zielkontext Di, DE der externen Ausnahme EA innerhalb eines Taktzyklus. Die internen Ausnahmen IA entsprechen insbesondere internen Interrupts, die von nachfolgenden Pipelinestufen 90, 9i bereitgestellt werden. Die externen Ausnahmen EA entsprechen externen Befehlen, die insbesondere vom Programmierer bereitgestellt werden.

Abhängig von der empfangenen internen Ausnahme IA und/oder der empfangenen externen Ausnahme EA aktualisiert die Umschalt-Tabelle 2 einen Kontextparametersatz KPS(DC) des aktuellen Kontext DC und/oder einen Kontextparametersatz KPS(DI) eines Zielkontext DI, DE der internen Ausnahme EA und/oder einen Kontextparametersatz KPS(DE) eines Zielkontext (DE) der externen Ausnahme EA und einen Umschaltparametersatz UPS für eine Ablaufsteuerung 7 der zu holenden Programmbefehle PB derart, dass der Multithread-Prozessor 1 ohne Einschränkungen und/oder Zyklenverlust zwischen dem aktuellen Kontext DC und dem Zielkontext DI, DE der internen Ausnahme IA und/oder dem Zielkontext DI, DE der externen Ausnahme EA umschaltet.

Vorzugsweise weist der erfindungsgemäße Multithread-Prozessor 1 eine Befehlsholpipelinestufe 8 zum Holen von Programmbefehlen PB aus dem Programmbefehlsspeicher (nicht gezeigt) und eine Befehlsdekodierpipelinestufe 6 auf, wobei die Umschalt-Tabelle 2 in der Befehlsdekodierpipelinestufe 6 angeordnet ist. Weiter weist der erfindungsgemäße Multithread-Prozessor 1 vorzugsweise wenigstens eine weiteren Pipelinestufe 90, 9i auf, welche der Befehlsdekodierpipelinestufe 6 nachgeordnet ist und welche die dekodierten Programmbefehle PB weiter bearbeitet.

Vorzugsweise stellt jede weitere Pipelinestufe 90, 9i einen weiteren Umschaltparametersatz 0.UPS, i.UPS und ein Gültigkeitssignal V0, Vi zur Angabe einer Gültigkeit des weiteren Umschaltparametersatzes 0.UPS, i.UPS bereit, falls der von ihr bearbeitete Programmbefehl PB ein Sprungbefehl ist.

Vorzugsweise weist der Umschaltparametersatz UPS, der von der Befehlsdekodierpipelinestufe 6 der Ablaufsteuerung 7 bereitgestellt wird, folgende Parameter auf:

  • – ein Kontextflag Dn, welches den aktuellen Kontext der Befehlsdekodierpipelinestufe 6 angibt;
  • – eine Programmbefehlsadresse Pn eines nächsten Programmbefehls PB des aktuellen Kontext der Befehlsdekodierpipelinestufe 6;
  • – ein Squash-Reset-Flag Sn, welches angibt, nachfolgende Programmbefehle PB des aktuellen Kontext der Befehlsdekodierpipelinestufe 6 wieder zu bearbeiten; und
  • – ein Kill-Flag KB, welches anzeigt, Sprungbefehle einer nachfolgenden Pipelinestufe 90, 9i, die sich im aktuellen Kontext der Umschalt-Tabelle 2 befinden, nicht zu berücksichtigen.

Vorzugsweise weisen die weiteren Umschaltparametersätze 0.UPS, i.UPS, die von den weiteren Pipelinestufen 90, 90i der Ablaufsteuerung 7 bereitgestellt werden, folgende Parameter auf:

  • – ein Kontextflag Di, welches den aktuellen Kontext der entsprechenden Pipelinestufe 9i angibt;
  • – eine Programmbefehlsadresse Pn eines nächsten Programmbefehls PB des aktuellen Kontext der entsprechenden Pipelinestufe 9i;
  • – ein Squash-Reset-Flag Si, welches angibt, nachfolgende Programmbefehle PB des aktuellen Kontext der entsprechenden Pipelinestufe 9i wieder zu bearbeiten.

Für die Pipelinestufe 90, die der Befehlsdekodierpipelinestufe 6 direkt nachgeordnet ist, gilt mit dem Index i = 0 Analoges.

Vorzugsweise ist ein jeder Kontextparametersatz KPS(DC), KPS(DI), KPS(DE), welcher in jedem Taktzyklus von der Umschalt-Tabelle 2 aktualisiert wird, aus wenigstens einem der folgenden Parameter ausgebildet:

  • – Programmadresse Ppa des entsprechenden Kontext DC, DI, DE;
  • – Programmadresse Pda eines Delay-Slot-Befehls des entsprechenden Kontext DC, DI, DE;
  • – Flag Ppa_pending Zur Angabe einer anhängigen Programmadresse des entsprechenden Kontext;
  • – Flag Pda_pending zur Angabe eines anhängigen Delay-Slot-Befehls des entsprechenden Kontext DC, DI, DE; und
  • – Flag Pdslot zur Angabe einer Anzahl der anhängigen Delay-Slot-Befehle des entsprechenden Kontext DC, DI, DE.

Weiter weist der erfindungsgemäße Multithread-Prozessor 1 innerhalb der Befehlsdekodierpipelinestufe 6 eine Programmadresstabelle 3 auf, welche jeweils für jeden Kontext DC, DI, DE des Multithread-Prozessors 1 den gültigen Kontextparametersatz KPS(DC), KPS(DI), KPS(DE) zwischenspeichert, wobei die Umschalt-Tabelle 2 die gespeicherten Kontextparametersätze KPS(DC), KPS(DI), KPS(DE) des aktuellen Kontext DC, des Zielkontext DI der internen Ausnahme IA und des Zielkontext DE der externen Ausnahme EA jeweils aktualisiert und in die Programmadresstabelle 3 schreibt.

Weiter weist der erfindungsgemäße Multithread-Prozessor 1 eine Ablaufsteuerung 7 auf, welche den Umschaltparametersatz UPS der Befehlsdekodierpipelinestufe 6 sowie die weiteren Umschaltparametersätze 0.UPS, i.UPS und Gültigkeitssignale V0, Vi der nachgeordneten, weiteren Pipelinestufen 90, 9i empfängt und abhängig davon einen Kontextparameter C, der angibt, welcher Kontext DC, DI, DE als Nächstes bearbeitet wird, eine Programmadresse P des nächsten zu bearbeitenden Kontext DC, DI, DE und das Squash-Reset-Flag S des nächsten zu bearbeitenden Kontext DC, DI, DE generiert und an die Befehlsholpipeline 8 überträgt.

Die Befehlsholpipeline 8 holt in Abhängigkeit des von der Ablaufsteuerung 7 empfangenen Kontextparameters C und der empfangenen, zugehörigen Programmadresse P den nächsten Programmbefehl PB aus dem Programmbefehlsspeicher (nicht gezeigt).

Vorzugsweise weist der erfindungsgemäße Multithread-Prozessor 1 weiterhin einen Zwischenspeicher 4 auf, welcher für jeden Kontext DC, DI, DE des Multithread-Prozessors 1 einen Unterzwischenspeicher vorsieht, in dem wenigstens jeweils Programmbefehle PB, insbesondere Delay-Slot-Befehle des entsprechenden Kontext DC, DI, DE zwischengespeichert werden.

Beispielsweise adressiert die Umschalt-Tabelle 2 den jeweiligen Unterzwischenspeicher für eine Zwischenspeicherung von Programmbefehlen PB mit dem entsprechenden Kontextparameter C und dem entsprechenden Squash-Reset-Flag S des entsprechenden Kontext DC, DI, DE mittels eines Speicherflags Ri.

Vorzugsweise weist die Befehlsdekodierpipelinestufe 6 einen Befehlsdecoder 5 zum Dekodieren der geholten Programmbefehle PB auf.

Vorzugsweise empfängt der Befehlsdecoder 5 den Kontextparameter C, einen durch die Programmadresse P adressierten und aus dem Programmbefehlsspeicher geholten Programmbefehl PB und das Squash-Reset-Flags von dem Zwischenspeicher 4 sowie das Flag Pdslot zur Angabe der Anzahl der Delay-Slot-Befehle des zu bearbeitenden Kontext DC, DI, DE von der Programmadresstabelle 3. Abhängig davon aktualisiert der Befehlsdecoder 5 das Flag Pdslot zur Angabe der Anzahl der Delay-Slot-Befehle, die Adresse Pda des Delay-Slot-Befehls des zu bearbeitenden Kontext DC, DI, DE und die Adresse Pda_pending des anhängigen Delay-Slot-Befehls des zu bearbeitenden Kontext DC, DI, DE und überträgt diese an die Programmadresstabelle 3.

Vorzugsweise liest der Befehlsdecoder 5 in jedem Taktzyklus einen Programmbefehl PB des aktuellen Kontext DC und das zugehörige Squash-Reset-Flag S von dem Zwischenspeicher 4 aus und setzt das Squash-Flag Psquash des aktuellen Kontext DC auf einen negativen logischen Signalpegel, falls das ausgelesene Squash-Reset-Flags einen positiven logischen Signalpegel aufweist. Dabei schreibt der Befehlsdecoder 5 in jeden Taktzyklus, in dem das Squash-Flag Psquash des aktuellen Kontext DC auf einen positiven logischen Signalpegel gesetzt ist, ausschließlich NOP-Befehle, adressiert durch das Speicherflag Ri, in den jeweiligen Unterzwischenspeicher für den aktuellen Kontext DC des Zwischenspeichers 4. Außerdem setzt der Befehlsdecoder 5 im Falle eines positiven Signalpegels des Flags Pdslot zur Angabe der Anzahl der Delay-Slot-Befehle des aktuellen Kontext DC die nächste Programmadresse Npa auf die Adresse Pda des Delay-Slot-Befehls des aktuellen Kontext DC, falls das Flag Pda_pending Zur Angabe eines anhängigen Delay-Slot-Befehls des aktuellen Kontext DC, DI, DE einen positiven Signalpegel aufweist. Alternativ setzt der Befehlsdecoder 5 im Falle eines positiven Signalpegels des Flag Pdslot zur Angabe der Anzahl der Anzahl der Delay-Slot-Befehle des aktuellen Kontext DC und eines negativen Signalpegels des Flag Ppa_pending Zur Angabe einer anhängigen Programmadresse des aktuellen Kontext DC die nächste Programmadresse Npa auf die Programmadresse Ppa des aktuellen Kontext DC, falls das Flag Ppa_pending Zur Angabe einer anhängigen Programmadresse einen positiven Signalpegel aufweist.

Als weitere Alternative setzt der Befehlsdecoder 5 im Falle eines positiven Signalpegels des Flags Pdslot zur Angabe der Anzahl der Delay-Slot-Befehle des aktuellen Kontext DC, eines negativen Signalpegels des Flag Ppa_pending Zur Angabe einer anhängigen Programmadresse des aktuellen Kontext DC und eines negativen Signalpegels des Flag Ppa_pending Zur Angabe einer anhängigen Programmadresse des aktuellen Kontext DC die nächste Programmadresse Npa auf die um Eins inkrementierte Programmadresse Ppa des aktuellen Kontext DC.

Außerdem empfängt die Ablaufsteuerung 7 den Umschaltparametersatz UPS der Befehlsdekodierpipelinestufe 6 sowie die weiteren Umschaltparametersätze 0.UPS, i.UPS und die Gültigkeitssignale V0, Vi der weiteren Pipelinestufen 90, 9i und bestimmt abhängig davon jeweils die unterste Pipelinestufe Bi der Pipeline für jeden Kontext des Multithread-Prozessors 1, die einen Sprungbefehl des jeweiligen Kontext bearbeitet. Ist das Kill-Flag KB auf einen positiven Signalpegel gesetzt, so wird das aktuelle Kontextflag Dn der Befehlsdekodierpipelinestufe 6 für den Kontextparameter C verwendet und nachfolgende Sprungbefehle desselben Kontext bleiben unberücksichtigt.

Somit bestimmt die Ablaufsteuerung 7 in Abhängigkeit der bestimmten untersten Pipelinestufe Bi, welche den Kontext bearbeitet, der durch das aktuelle Kontextflag Dn referenziert wird, den Kontextparameter C des nächsten zu bearbeitenden Kontext, die Programmadresse P des nächsten zu bearbeitenden Kontext und das Squash-Reset-Flag S des nächsten zu bearbeitenden Kontext.

Außerdem aktualisiert die Ablaufsteuerung 7 für jeden Kontext DC, DI, DE des Multithread-Prozessors 1, der nicht den Kontext bearbeitet, der durch das aktuelle Kontextflag Dn referenziert wird, jeweils den entsprechenden Kontextparametersatz KPS(notDC) und schreibt die aktualisierten Kontextparametersätze KPS(notDC) in die Programmadresstabelle 3.

Außerdem weist der erfindungsgemäße Multithread-Prozessor 1 eine Auswahlvorrichtung 10 auf. Die Auswahlvorrichtung 10 empfängt den Kontextparametersatz KPS(DC) des aktuellen Kontext DC, den Kontextparametersatz KPS(DI) des Zielkontext DI der internen Ausnahme IA und den Kontextparametersatz KPS(DE) des Zielkontext DE der externen Ausnahme EA von der Umschalt-Tabelle 2, den Kontextparametersatz KPS(DC) des aktuellen Kontext DC von der Programmadresstabelle 3 und die nächste Programmadresse Npa von dem Befehlsdecoder 5 und generiert abhängig davon die nächste Programmbefehlsadresse Pn und das zugehörigen Squash-Reset-Flag Sn entsprechend dem aktuellen Kontextflag Dn und überträgt diese an die Ablaufsteuerung 7.

Jede Pipelinestufe 90, 9i, welche nach der Befehlsdekodierpipelinestufe 6 angeordnet ist, stellt bei einem Auftreten eines Interrupts eine interne Ausnahme IA bereit.

3 zeigt eine schematische Darstellung einer besonders bevorzugten Ausführungsform der Umschalt-Tabelle 2 des erfindungsgemäßen Multithread-Prozessors 1. Die Umschalt-Tabelle 2 empfängt eine interne Ausnahme IA zum Umschalten eines aktuellen Kontext DC auf einen Zielkontext DI, DE der internen Ausnahme IA und/oder eine externe Ausnahme EA zum Umschalten von dem aktuellen Kontext DC auf einen Zielkontext DI, DE der externen Ausnahme EA. Dabei zeigt die Umschalt-Tabelle 2 gemäß 3 in der obersten Zeile neun verschiedene Ausgestaltungen für die interne Ausnahme IA. Die erste Spalte der Umschalt-Tabelle 2 zeigt sieben Ausgestaltungen der externen Ausnahme EA. In Abhängigkeit der internen Ausnahme IA und der externen Ausnahme EA ergibt sich eines der Matrix-Elemente 11 bis 79 der Umschalt-Tabelle 2. Jedes Matrix-Element 11 bis 79 stellt eine Operation oder mehrere Operationen zum Aktualisieren der entsprechenden Kontextparametersätze KPS(DC), KPS (DI), KPS(DE) dar. Die Syntax der Operationen der Matrix-Elemente 11 bis 79 soll nach Erläuterung der verschiedenen Eingänge für die interne Ausnahme IA und der externen Ausnahme EA erläutert werden.

Vorerst werden die verschiedenen Eingangswerte der internen Ausnahme IA dargestellt:

1 Spalte der Umschalt-Tabelle 2:
  • N: normale Operation, keine Ausnahme aufgetreten.
2. Spalte der Umschalt-Tabelle 2:
  • SI·DC: normaler Switch-Umschalten zum aktuellen Kontext DC.
3. Spalte:
  • SI·DI: normaler Switch zum ersten Zielkontext DI.
4. Spalte:
  • RI·DI: Return-Switch vom aktuellen Kontext DC zum ersten Zielkontext DI.
5. Spalte:
  • SI·DE: normaler Switch zum zweiten Zielkontext DE.
6. Spalte.
  • RI.DE: Return-Switch vom aktuellen Kontext DC zum zweiten Zielkontext DE.
7. Spalte:
  • Vi·DC: gerichteter Switch zum aktuellen Kontext DC. Gerichtet bedeutet in diesem Zusammenhang, dass zu einer vorbestimmten Adresse des jeweiligen Kontext gesprungen wird.
8. Spalte:
  • VI·DI: gerichteter Switch zum ersten Zielkontext DI.
9. Spalte:
  • Vi·DE: gerichteter Switch zum zweiten Zielkontext DE.

Die erste Spalte der Umschalt-Tabelle 2 zeigt die sieben Eingangswerte der externen Ausnahme EA. Die sieben Switches bzw. gerichteten Switches der externen Ausnahme EA entsprechen den Eingangswerten der internen Ausnahme IA bis auf die Indizierung E statt I. Außerdem sind bei der externen Ausnahme EA keine Return-Switches R enthalten, da dem Entwickler oder Programmierer, der die externen Ausnahmen EA generiert, nicht die Möglichkeit eines Return-Switches R gegeben ist.

Im Folgenden sollen die Operationen der Matrix-Elemente 11 bis 79 erläutert werden. Es ist zu beachten, dass die Operation bzw. Operationen eines jeden Matrix-Elements 11 bis 79 in genau einen Taktzyklus ausgeführt wird bzw. werden. Nachdem in jedem Matrix-Element 11 bis 79 eine oder mehrere Operationen ausgeführt werden, sollen vorerst die Operationen allgemein mittels der Kontextvariablen &khgr; und &ggr; erklärt werden. Es ist besonderes Augenmerk darauf zu richten, dass bei einem Matrix-Element, wie z. B. beim Matrix-Element 15, das mehrere Operationen enthält, das Ziel der ersten Operation DE zugleich auch die Quelle für die zweite Operation (DE → S·DC) ist.

Vorerst zu den möglichen Einzeloperationen der Matrix-Element 11 bis 79:

N: Normale Operation.

Keine Ausnahme ist aufgetreten.

S·&khgr; Switch zum Kontext &khgr;

Die nächste Programmbefehlsadresse Pn des Kontext &khgr; wird als Funktion des Kontextparametersatzes des entsprechenden Kontext, bereitgestellt durch die Programmadresstabelle 3, bzw. durch die nächste Programmadresse Npa von den Befehlsdecoder 5 berechnet. Außerdem wird das Squash-Reset-Flag Sn des Kontext &khgr; gesetzt. Dn = &khgr; Pn = Npa Sn = true

VE·&khgr;: Gerichteter Switch zum Kontext &khgr;

Die nächste Programmbefehlsadresse Pn des Kontext &khgr; wird durch den gerichteten Switch-Befehl, und insbesondere die dazugehörige Adresse VE·pa durch die externe Ausnahme EA bereitgestellt. Um dem Strom Rechnung zu tragen, wird der Kontextparametersatz KPS(&khgr;) in der Programmadresstabelle 3 aktualisiert. Dn = &khgr; Pn = VE·pa Sn = true Ppa(&khgr;) = VE·pa Ppa_pending(&khgr;) = false Ppa_pending(&khgr;) = false Pdslots(&khgr;) = 0 Ri(&khgr;) = nop Kb = true

VI·&khgr;: Gerichteter Switch zum Kontext &khgr;

Die nächste Programmbefehlsadresse Pn des Kontext &khgr; wird durch den Switch-Befehl der internen Ausnahme IA, insbesondere durch die dazugehörige Adresse VI·pa bereitgestellt. Um dem Sprung bzw. dem Switch Rechnung zu tragen, wird der Kontextparametersatz KPS (&khgr;) für die Programmadresstabelle 3 aktualisiert. Dn = &khgr; Pn = VI·pa Sn = true Ppa(&khgr;) = VI·pa Ppa_pending(&khgr;) = false Ppa_pending(&khgr;) = false Pdslots (&khgr;) = 0 Ri(&khgr;) = nop Kb = true

X→V·&ggr;: Verschobener, gerichteter Switch von dem ersten Kontext &khgr; zu dem zweiten Kontext &ggr;:

Der nächste Return-Switch R des Kontext &khgr; wird ersetzt durch die Operation „&khgr;→S·DC V·&ggr;". Dies entspricht einem Umprogrammieren des Kontextparametersatzes des Kontext &ggr; in der Programmadresstabelle 3, um den Sprung bzw. Switch zu berücksichtigen und den zweiten Kontext &ggr; als Rufer des Kontext &khgr; zu setzen. Somit wird bei dem nächsten Return-Switch R des ersten Kontext &khgr; zu dem gesetzten Rufer, dem zweiten Kontext &ggr; „zurückgesprungen". C(&khgr;) = &ggr; Ppa(&ggr;) = V·pa ppa_pending(&ggr;) = true ppa_pending(&ggr;) = false pdslots(&ggr;) = 0 psquash(&ggr;) = false Ri(&ggr;) = nop

Ein Beispiel für einen verschobenen, gerichteten Switch zeigt Matrix-Element 36. Nachdem externe Ausnahmen EA gegenüber internen Ausnahmen IA grundsätzlich priorisiert werden, wird folgende Operationskette S·DI→S·DE ausgeführt. Das heißt mittels der ersten Operation S·DI wird zum ersten Kontext DI umgeschaltet, wobei der Kontextparametersatz des zweiten Kontext DE derart vorbereitet wird, dass der zweite Kontext DE als Rufer des ersten Kontext DI gesetzt wird (DI→S·DE), so dass bei einer Blockierung des ersten Kontext DI direkt auf den zweiten DE umgeschaltet wird.

&khgr;←V·&ggr;: verketteter, gerichteter Switch von dem ersten Kontext &khgr; zu dem zweiten Kontext &ggr;:

Der nächste Return-Switch R des ersten Kontext &khgr; wird ersetzt durch folgende Operation &khgr;→S·DCV·&ggr;.

Der Unterschied zwischen den verketteten, gerichteten Switch &khgr;←V·&ggr; und dem verschobenen, gerichteten Switch &khgr;→V·&ggr; ergibt sich darin, dass bei Ersterem es nicht erlaubt ist den Kontextparametersatz des zweiten Kontext &ggr; umzuprogrammieren bevor der Return-Switch R für den ersten Kontext &khgr; ausgeführt wird. Somit wird der erste Return-Switch R des ersten Kontext &khgr; durch folgende Operation ersetzt &khgr;→S·DCV·&ggr;.

&khgr;→S·&ggr;: verschobener Switch von dem ersten Kontext &khgr; zum zweiten Kontext &ggr;:

Der nächste Return-Switch R des ersten Kontext &khgr; wird ersetzt durch die Operation &khgr;→S·DCV·&ggr;. Diese Operation ist äquivalent mit einem Setzen des zweiten Kontext &ggr; als Rufer des ersten Kontext &khgr;, so dass bei einem Auftreten des nächsten Return-Switch R des Kontext &khgr; zum Rufer, dem zweiten Kontext &ggr; „zurückgeschaltet" wird.

C(&khgr;) = &ggr; (der zweite Kontext &ggr; wird als Rufer des ersten Kontext &khgr; gesetzt)

X←N: verkettete Annulierung (Nullification)

Der nächste Return-Switch R des ersten Kontext &khgr; wird ersetzt durch die normale Operation N. Dies hat den Effekt des Umschaltens des ersten Kontext &khgr; zu einem zweiten Kontext &ggr;, dessen verschobener Switch R der erste Kontext &khgr; selbst war. Das Resultat ist, dass überhaupt kein Switch ausgeführt wird. Somit wird der erste auftretende Return-Switch R des Kontext &khgr; durch eine normale Operation N ersetzt.

4 zeigt ein schematisches Ablaufdiagramm eines evorzugten Ausführungsbeispiels des erfindungsgemäßen Verfahrens zum Betreiben eines Multithread-Prozessors 1 mit einer Kontextumschaltung ohne Overhead zur Datenverarbeitung von Threads, wobei für jeden Thread innerhalb des Multithread-Prozessors 1 ein eigener Kontext DC, DI, DE vorgesehen ist. Das erfingungsgemäße Verfahren weist folgende Verfahrensschritte auf:

Verfahrensschritt a):

Empfangen einer internen Ausnahme IA zum Umschalten von einem aktuellen Kontext DC auf einen Zielkontext DI der internen Ausnahme IA und/oder einer externen Ausnahme EA zum Umschalten von dem aktuellen Kontext DC auf einen Zielkontext DE der externen Ausnahme EA.

Verfahrensschritt b):

Aktualisierung eines Kontextparametersatzes KPS(DC) des aktuellen Kontext DC und/oder eines Kontextparameters KPS(DE) einen Zielkontext DE der internen Ausnahme IA und/oder eines Kontextparameterssatzes KPS(DI, DE) der externen Ausnahme EA und Setzen eines Umschaltsparametersatzes UPS für eine Ablaufsteuerung 7 der zu holenden Programmbefehle PB derart, dass der Multithread-Prozessor 1 ohne Einschränkungen und/oder Zyklenverlust bzw. Overhead zwischen dem aktuellen Kontext DC und dem Zielkontext DI der internen Ausnahme IA und/oder dem Zielkontext DI der externen Ausnahme EA umschaltet.

Obwohl die vorliegende Erfindung vorstehend anhand bevorzugter Ausführungsbeispiele beschrieben wurde, ist sie darauf nicht beschränkt, sondern auf vielfältige Art und Weise modifizierbar.

Dabei ist insbesondere anzumerken, dass das gleiche Prinzip bzw. das gleiche Verfahren auch für den Fall, dass die interne Ausnahme von einem Kontext verursacht wird, welcher nicht dem aktuellen Kontext DC entspricht, angewendet werden kann. Weisen die interne Ausnahme IA aus dem nicht aktuellen Kontext DC und die externe Ausnahme EA den gleichen Zielkontext auf, kann das durch eine Umschalt-Tabelle gemäß 3 gelöst werden. Haben die interne Ausnahme IA und die externe Ausnahme EA unterschiedliche Zielkontexte, wird auf den Zielkontext DE der externen Ausnahme EA geschaltet werden, während der Zielkontext DI der internen Ausnahme IA wie oben beschrieben aktualisiert wird, jedoch nicht aktiv (d.h. es wird nicht darauf geschaltet) wird.

Je nach Aufbau des Prozessors können auch mehrere Konflikte bzw. Ausnahmen gleichzeitig auftreten. Zum Beispiel könnte man mehrere interne Ausnahmen aus unterschiedlichen nicht aktuellen Kontexten innerhalb der Pipeline des Prozessors zulassen und die dadurch auftretende Konflikte lösen wollen. Erfindungsgemäß werden solche Konflikte durch eine derartige Umschalt-Tabelle gemäß 3 gelöst.

1Multithread-Prozessor 2Umschalt-Tabelle 3Programmadresstabelle 4Zwischenspeicher 5Befehlsdekoder 6Befehlsdekodierpipelinestufe 7Ablaufsteuerung 8Befehlshohlpipelinestufe 9i-te Pipelinestufe nach der Befehlsdekodierpi pelinestufe 10Auswahlvorrichtung DCaktueller Kontext (bearbeitet durch Befehlsde koder) D'CInterrupt-Kontext zum aktuellen Kontext DIerster Zielkontext DEzweiter Zielkontext IAinterne Ausnahme EAexterne Ausnahme KPS(DC)Kontextparametersatz des aktuellen Kontext KPS(DI)Kontextparametersatz des Zielkontext der in ternen Ausnahme KPS(DE)Kontextparametersatz des Zielkontext der ex ternen Ausnahme KPS(notDC)Kontextparametersätze der Kontexte, die nicht dem aktuellen Kontext entsprechen UPSUmschaltparametersatz 0.UPS, i.UPSweitere Umschaltparametersätze Dnaktuelles Kontextflag Pnnächste Programmbefehlsadresse SnSquash-Reset-Flag des aktuellen Kontext KBKill-Flag PpaProgrammadresse des entsprechenden Kontext PdaAdresse eines Delay-Slot-Befehls des entspre chenden Kontext PSquashSquash-Flag des entsprechenden Kontext Ppa_pendingFlag zur Angabe einer anhängigen Programmad resse Pda_pendingAdresse eines anhängigen Delay-Slot-Befehl des entsprechenden Kontext PdslotsFlag zur Angabe einer Anzahl der Delay-Slot- Befehle des entsprechenden Kontext V0, ViGültigkeitssignal CKontextparameter des nächsten zu bearbeitenden Kontext PProgrammadresse des nächsten zu bearbeitenden Kontext SSquash-Reset-Flag des nächsten zu bearbeiten den Kontext RiSpeicherflag StStall SOSwitch-Overhead tZeit T1erster Thread T2zweiter Thread MTMultithread-Prozessor aVerfahrensschritt a bVerfahrensschritt b PBProgrammbefehl RReturn-Switch

Anspruch[de]
  1. Multithread-Prozessor (1) mit einer Kontext-Umschaltung ohne Einschränkungen und/oder Zyklenverluste zur Datenverarbeitung einer Mehrzahl von Threads, wobei für jeden Thread innerhalb des Multithread-Prozessors (1) ein eigener Kontext (DC, DI, DE) vorgesehen ist, mit:

    einer Umschalt-Tabelle (2), welche eine interne Ausnahme (IA) eines bestimmten Kontext (DC, DI, DE) zum Aktualisieren dieses Kontext (DC, DI, DE) und zum Umschalten von diesem Kontext (DC, DI, DE) auf einen Zielkontext (DI, DE) der internen Ausnahme (IA) und/oder eine externe Ausnahme (EA) eines bestimmten Kontext (DC, DI, DE) zum Aktualisieren dieses Kontext (DC, DI, DE) und zum Umschalten von dem diesem Kontext (DC, DI, DE) auf einen Zielkontext (DI, DE) der externen Ausnahme (EA) empfängt und abhängig davon einen Kontextparametersatz (KPS(DC), KPS(DI), KPS(DE)) dieses Kontext (DC, DI, DE) und/oder einen Kontextparametersatz (KPS(DI)) eines Zielkontext (DI, DE) der internen Ausnahme (IA) und/oder einen Kontextparametersatz (KPS(DE)) eines Zielkontext (DI, DE) der externen Ausnahme (EA) derart aktualisiert und einen Umschaltparametersatz (UPS) für eine Ablaufsteuerung (7) der zu holenden Programmbefehle (PB) derart setzt, sodass der Multithread-Prozessor (1) ohne Einschränkungen und/oder Zyklenverlust zwischen dem Kontext (DC, DI, DE) und dem Zielkontext (DI, DE) der internen Ausnahme (IA) und/oder dem Zielkontext (DE) der externen Ausnahme (EA) umschaltet.
  2. Multithread-Prozessor nach Anspruch 1, dadurch gekennzeichnet, dass eine Befehlsholpipelinestufe (8) zum Holen von Programmbefehlen (PB) aus einem Programmbefehlsspeicher und eine Befehlsdekodierpipelinestufe (6) vorgesehen sind, wobei die Umschalt-Tabelle (2) in der Befehlsdekodierpipelinestufe (6) angeordnet ist.
  3. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche,

    dadurch gekennzeichnet,

    dass der Umschaltparametersatz (UPS) aus wenigstens einem der folgenden Parameter ausgebildet ist:

    – Kontextflag (Dn), welches den aktuellen Kontext der entsprechenden Pipelinestufe (6, 90, 9i) angibt;

    – Programmbefehlsadresse (Pn) eines nächsten Programmbefehls (PB) des aktuellen Kontext der entsprechenden Pipelinestufe (6, 90, 9i);

    – Squash-Reset-Flag (Sn), welches angibt, nachfolgende Programmbefehle (PB) des aktuellen Kontext der entsprechenden Pipelinestufe (6, 90, 9i) wieder zu bearbeiten;

    – Kill-Flag (KB), welches anzeigt, Sprungbefehle einer nachfolgenden Pipelinestufe (90, 9i), die sich im aktuellen Kontext der Umschalt-Tabelle (2) befinden, nicht zu berücksichtigen.
  4. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche,

    dadurch gekennzeichnet,

    dass ein jeder Kontextparametersatz (KPS(DC), KPS(DI), KPS(DE)) aus wenigstens einem der folgenden Parameter ausgebildet ist:

    – Programmadresse (Ppa) des entsprechenden Kontext (DC, DI, DE);

    – Programmadresse (Pda) eines Delay-Slot-Befehls des entsprechenden Kontext (DC, DI, DE);

    – Squash-Flag (Psquash) des entsprechenden Kontext (DC, DI, DE), welches angibt, Programmbefehle (PB) des entsprechenden Kontext (DC, DI, DE) nicht zu bearbeiten;

    – Flag (Ppa_pending) zur Angabe einer anhängigen Programmadresse des entsprechenden Kontext;

    – Flag (Pda_pending) zur Angabe eines anhängigen Delay-Slot-Befehls des entsprechenden Kontext (DC, DI, DE);

    – Flag (Pdslot) zur Angabe einer Anzahl der anhängigen Delay-Slot-Befehle des entsprechenden Kontext (DC, DI, DE).
  5. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Umschalt-Tabelle (2) bei einem Empfangen der internen Ausnahme (IA) und der externen Ausnahme (EA) den Kontextparametersatz (KPS(DC)) des aktuellen Kontext (DC), den Kontextparametersatz (KPS(DI)) des Zielkontext (DI) der internen Ausnahme (IA) und den Kontextparametersatz (KPS(DE)) des Zielkontext (DE) der externen Ausnahme (EA) derart aktualisiert, sodass der Multithread-Prozessor (1) von dem aktuellen Kontext (DC) auf den Zielkontext (DI, DE) der externen Ausnahme (EA), bei einem Auftreten einer Blockierung des Zielkontext (DI, DE) der externen Ausnahme (EA) auf den Zielkontext (DI, DE) der internen Ausnahme (IA) und dann bei einem Auftreten einer Blockierung des Zielkontext (DI, DE) der internen Ausnahme (IA) zurück auf den ursprünglichen aktuellen Kontext (DC) umschaltet.
  6. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Befehlsdekodierpipelinestufe (6) eine Programmadresstabelle (3) aufweist, welche jeweils für jeden Kontext (DC, DI, DE) des Multithread-Prozessors (1) den gültigen Kontextparametersatz (KPS(DC), KPS(DI), KPS(DE)) zwischenspeichert, wobei die Umschalt-Tabelle (2) die gespeicherten Kontextparametersätze (KPS(DC), KPS(DI), KPS(DE)) des aktuellen Kontext (DC), des Zielkontext (DI) der internen Ausnahme (IA) und des Zielkontext (DE) der externen Ausnahme (EA) jeweils aktualisiert.
  7. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass wenigstens eine weitere Pipelinestufe (90, 9i) vorgesehen ist, welche der Befehlsdekodierpipelinestufe (6) nachgeordnet ist und welche die dekodierten Programmbefehle (PB) weiter bearbeitet.
  8. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass jede weitere Pipelinestufe (90, 9i), falls der von ihr bearbeitete Programmbefehl (PB) ein Sprungbefehl ist, einen weiteren Umschaltparametersatz (0.UPS, i.UPS) und ein Gültigkeitssignal (V0, Vi) zur Angabe einer Gültigkeit des weiteren Umschaltparametersatzes (0.UPS, i.UPS) bereitstellt.
  9. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass eine Ablaufsteuerung (7) vorgesehen ist, welche den Umschaltparametersatz (UPS) der Befehlsdekodierpipelinestufe (6) sowie die weiteren Umschaltparametersätze (0.UPS, i.UPS) und Gültigkeitssignale (V0, Vi) der nachgeordneten, weiteren Pipelinestufen (90, 9i) empfängt und abhängig davon einen Kontextparameter (C), der angibt, welcher Kontext (DC, DI, DE) als Nächstes bearbeitet wird, eine Programmadresse (P) des Nächsten zu bearbeitenden Kontext (DC, DI, DE) und das Squash-Reset-Flag (S) des nächsten zu bearbeitenden Kontext (DC, DI, DE) generiert und an die Befehlsholpipelinestufe (8) überträgt.
  10. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Befehlsholpipelinestufe (8) in Abhängigkeit des von der Ablaufsteuerung (7) empfangenen Kontextparameters (C) und der empfangenen, zugehörigen Programmadresse (P) den nächsten Programmbefehl (PB) aus dem Programmbefehlsspeicher holt.
  11. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass ein Zwischenspeicher (4) vorgesehen ist, welcher für jeden Kontext (DC, DI, DE) des Multithread-Prozessors (1) einen Unterzwischenspeicher vorsieht, in dem wenigstens jeweils Programmbefehle (PB), insbesondere Delay-Slot-Befehle des entsprechenden Kontext (DC, DI, DE) zwischenspeicherbar sind.
  12. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Umschalt-Tabelle (2) mittels eines Speicherflags (Ri) den jeweiligen Unterzwischenspeicher für eine Zwischenspeicherung von Programmbefehlen (PB) mit dem entsprechenden Kontextparameter (C) und dem entsprechenden Squash-Reset-Flag (S) des entsprechenden Kontext (DC, DI, DE) adressiert.
  13. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Befehlsdekodierpipelinestufe (6) einen Befehlsdecoder (5) zum Dekodieren der geholten Programmbefehle (PB) aufweist.
  14. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass der Befehlsdecoder (5) den Kontextparameter (C), einen durch die Programmadresse (P) adressierten und aus dem Programmbefehlsspeicher geholten Programmbefehl (PB) und das Squash-Reset-Flag (S) von dem Zwischenspeicher (4) sowie das Flag (Pdslot) zur Angabe der Anzahl der Delay-Slot-Befehle des zu bearbeitenden Kontext (DC, DI, DE) von der Programmadresstabelle (3) empfängt, abhängig davon das Flag (Pdslot) zur Angabe der Anzahl der Delay-Slot-Befehle, die Adresse (Pda) des Delay-Slot-Befehls des zu bearbeitenden Kontext (DC, DI, DE) und die Adresse (Pda_pending) des anhängigen Delay-Slot-Befehls des zu bearbeitenden Kontext (DC, DI, DE) aktualisiert und an die Programmadresstabelle (3) überträgt.
  15. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass der Befehlsdecoder (5) in jedem Taktzyklus einen Programmbefehl (PB) des aktuellen Kontext (DC) und das zugehörige Squash-Reset-Flag (S) von dem Zwischenspeicher (4) ausliest und das Squash-Flag (Psquash) des aktuellen Kontext (DC) auf einen negativen logischen Signalpegel setzt, falls das ausgelesene Squash-Reset-Flag (S) einen positiven logischen Signalpegel aufweist.
  16. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass der Befehlsdecoder (5) in jedem Taktzyklus, in dem das Squash-Flag (Psquash) des aktuellen Kontext (DC) auf einen positiven logischen Signalpegel gesetzt ist, NOP-Befehle in den jeweiligen Unterzwischenspeicher für den aktuellen Kontext (DC) des Zwischenspeichers (4) schreibt.
  17. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass der Befehlsdecoder (5) im Falle eines positiven Signalpegels des Flag (Pdslot) zur Angabe der Anzahl der Delay-Slot-Befehle des aktuellen Kontext (DC) die nächste Programmadresse (Npa) auf die Adresse (Pda) des Delay-Slot-Befehls des aktuellen Kontext (DC) setzt, falls das Flag (Pda_pending) zur Angabe eines anhängigen Delay-Slot-Befehls des aktuellen Kontext (DC, DI, DE) einen positiven Signalpegel aufweist.
  18. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche,

    dadurch gekennzeichnet,

    dass der Befehlsdecoder (5) im Falle eines positiven Signalpegels des Flag (Pdslot) zur Angabe der Anzahl der Delay-Slot-Befehle des aktuellen Kontext (DC) und eines negativen Signalpegels des Flag (Ppa_pending) zur Angabe einer anhängigen Programmadresse des aktuellen Kontext (DC)

    die nächste Programmadresse (Npa) auf die Programmadresse (Ppa) des aktuellen Kontext (DC) setzt, falls das Flag (Ppa_pending) zur Angabe einer anhängigen Programmadresse einen positiven Signalpegel aufweist.
  19. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche,

    dadurch gekennzeichnet,

    dass der Befehlsdecoder (5) im Falle eines positiven Signalpegels des Flag (Pdslot) zur Angabe der Anzahl der Delay-Slot-Befehle des aktuellen Kontext (DC), eines negativen Signalpegels des Flag (Ppa_pending) zur Angabe einer anhängigen Programmadresse des aktuellen Kontext (DC) und eines negativen Signalpegels des Flag (Ppa_pending) zur Angabe einer anhängigen Programmadresse des aktuellen Kontext (DC)

    die nächste Programmadresse (Npa) auf die um Eins inkrementierte Programmadresse (Ppa) des aktuellen Kontext (DC) setzt.
  20. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Ablaufsteuerung (7) den Umschaltparametersatz (UPS) der Befehlsdekodierpipelinestufe (6) sowie die weiteren Umschaltparametersätze (0.UPS, i.UPS) und die Gültigkeitssignale (V0, Vi) der weiteren Pipelinestufen (90, 9i) empfängt und abhängig davon jeweils. die unterste Pipelinestufe (Bi) der Pipeline für einen jeden Kontext des Multithread-Prozessors (1) bestimmt, die einen Sprungbefehl des jeweiligen Kontext bearbeitet.
  21. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Ablaufsteuerung (7) in Abhängigkeit der bestimmten untersten Pipelinestufe (Bi) des aktuellen Kontextflag (Dn) den Kontextparameter (C) des nächsten zu bearbeitenden Kontext, die Programmadresse (P) des nächsten zu bearbeitenden Kontext und das Squash-Reset-Flag (S) des nächsten zu bearbeitenden Kontext bestimmt.
  22. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Ablaufsteuerung (7) für jeden Kontext (DC, DI, DE) des Multithread-Prozessors (1), der nicht dem aktuellen Kontextflag (Dn) entspricht, den entsprechenden Kontextparametersatz (KPS(notDC)) jeweils aktualisiert und die aktualisierten Kontextparametersätze (KPS(notDC)) in die Programmadresstabelle (3) schreibt.
  23. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass eine Auswahlvorrichtung (10) vorgesehen ist, welche den Kontextparametersatz (KPS(DC)) des aktuellen Kontext (DC), den Kontextparametersatz (KPS(DI)) des Zielkontext (DI, DE) der internen Ausnahme (IA) und den Kontextparametersatz (KPS (DE)) des Zielkontext (DE) der externen Ausnahme (EA) von der Umschalt-Tabelle (2), den Kontextparametersatz (KPS(DC)) des aktuellen Kontext (DC) von der Programmadresstabelle (3) und die nächste Programmadresse (Npa) von dem Befehlsdecoder (5) empfängt und abhängig davon die nächste Programmbefehlsadresse (Pn) und das zugehörige Squash-Reset-Flag (Sn) des aktuellen Kontext (DC) generiert und an die Ablaufsteuerung (7) überträgt.
  24. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass eine jede Pipelinestufe (90, 9i), welche nach der Befehlsdecodierpipelinestufe (6) angeordnet ist, eine interne Ausnahme (IA) bei einem Auftreten eines Interrupts bereitstellt.
  25. Verfahren zum Betreiben eines Multithread-Prozessors (1) mit einer Kontext-Umschaltung ohne Einschränkungen und/oder Zyklenverlust zur Datenverarbeitung von Threads, wobei für jeden Thread innerhalb des Multithread-Prozessors (1) ein eigener Kontext (DC, DI, DE) vorgesehen ist, mit folgenden Verfahrensschritten:

    (a) Empfangen einer internen Ausnahme (IA) eines bestimmten Kontext (DC, DI, DE) zum Aktualisieren dieses Kontext (DC, DI, DE) und Umschalten von diesem Kontext (DC, DI, DE) auf einen Zielkontext (DI, DE) der internen Ausnahme (IA) und/oder einer externen Ausnahme (EA) eines bestimmten Kontext (DC, DI, DE) zum Aktualisieren dieses Kontext (DC, DI, DE) und Umschalten von diesem Kontext (DC, DI, DE) auf einen Zielkontext (DI, DE) der externen Ausnahme (EA); und

    (b) Aktualisieren eines Kontextparametersatzes (KPS (DC)) des aktuellen Kontext (DC) und/oder eines Kontextparametersatzes (KPS (DI, DE)) eines Zielkontext (DI) der internen Ausnahme (IA) und/oder eines Kontextparametersatzes (KPS (DE)) der externen Ausnahme (EA) und Setzen eines Umschaltparametersatzes (UPS) für eine Ablaufsteuerung (7) der zu holenden Programmbefehle (PB) derart, dass der Multithread-Prozessor (1) ohne Einschränkungen und/oder Zyklenverlust zwischen dem aktuellen Kontext und dem Zielkontext (DI) der internen Ausnahme (IA) und/oder dem Zielkontext (DE) der externen Ausnahme (EA) umschaltet.
Es folgen 4 Blatt Zeichnungen






IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

  Patente PDF

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com