PatentDe  


Dokumentenidentifikation DE102005009083B4 10.05.2007
Titel Multithread-Prozessor mit einer Synchronisationseinheit und Verfahren zum Betreiben eines solchen
Anmelder Infineon Technologies AG, 81669 München, DE
Erfinder Di Gregorio, Lorenzo, 85386 Eching, DE
Vertreter PAe Reinhard, Skuhra, Weise & Partner GbR, 80801 München
DE-Anmeldedatum 28.02.2005
DE-Aktenzeichen 102005009083
Offenlegungstag 07.09.2006
Veröffentlichungstag der Patenterteilung 10.05.2007
Veröffentlichungstag im Patentblatt 10.05.2007
IPC-Hauptklasse G06F 9/30(2006.01)A, F, I, 20051017, B, H, DE

Beschreibung[de]

Die Erfindung betrifft einen Multithread-Prozessor mit einer Synchronisationseinheit zur Synchronisation eines Befehlsflusses mit einem zugehörigen Datenfluss und zur Generierung eines speicher-getriggerten Kontext-Umschaltsignals 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 oder keine 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 Programmbefehlsfolge 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.

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 deren Architekturen beschrieben.

Um die Decodierung der Programmbefehle und das Adressieren und Lesen der Speicherstellen bereitzustellen, wird in einer herkömmlichen Pipeline eines Multithread-Prozessors die Speicherlesezugriffseinheit bzw. Ladeeinheit (load unit), welche Daten bzw. Speicherwerte aus der Speicherstelle für einen entsprechenden Programmbefehl lädt, erst spät in der Pipeline vorgesehen. In einer Multithread-Architektur führt dies zwangsläufig zur Implementierung von der Speicherlesezugriffseinheit nachgeordneten Befehlszwischenspeichern. Die nachgeordneten Befehlszwischenspeicher sind nötig, um ein speicher-getriggertes Kontext-Umschalten zu ermöglichen, falls beispielsweise eine Leseanforderung (read request) an die Speicherstelle nicht in einer vorgegebenen Zeit beantwortet wird bzw. beantwortet werden kann. Eine solche Implementierung von Befehlszwischenspeichern (replay buffers) wird beispielsweise in K. W. Rudd "VLIW Processors: Efficiently Exploiting Instruction Level Parallelism", PhD Thesis, Stanford University, December 1999 beschrieben.

Nachteiligerweise sind die Befehlszwischenspeicher, die gemäß den bekannten Implementierungen nach der Speicherlesezugriffseinheit in der Pipeline angeordnet sind, so groß zu implementieren, dass sie für jeden durch den Multithread-Prozessor zu bearbeitenden Thread sämtliche Programmbefehle, die sich jeweils in der Pipeline oberhalb der Befehlszwischenspeicher befinden können, zwischenspeichern können, so dass ein Thread-Umschalten ohne Taktzyklusverlust gewährleistet wird. Bearbeitet beispielsweise ein Multithread-Prozessor drei Threads und weist die Pipeline drei Pipelinestufen oberhalb der Speicherlesezugriffseinheit auf, so sind drei Befehlszwischenspeicher mit jeweils wenigstens vier Speicherstellen zu implementieren. Das bedeutet, dass relativ große Befehlszwischenspeicher vorzusehen sind, welche einen hohen Platzaufwand benötigen und deren Implementierung mit hohen Kosten verbunden ist.

Die Druckschrift US 6,507,862 B1 beschreibt ein Umschaltverfahren in einem Multithread-Prozessor. Der beschriebene Multithread-Prozessor weist eine einzelne Pipeline auf, die eine Vielzahl von Threads bearbeitet. Dabei wird ein aktiver Thread, der nicht blockiert ist, ausgewählt. Dieser aktive Thread stellt den funktionalen Blöcken, die mit der Pipeline verbunden sind, Daten bereit. Wenn der aktive Thread blockiert wird, schaltet die Pipeline sofort auf einen nicht-blockierten Thread um, falls ein solcher Thread vorhanden ist, und beginnt die Ausführung des nicht-blockierten Threads. Als Antwort auf eine Blockierung aufgrund eines misslungenen Speicherzugriffs, friert der Prozessor den gesamten Pipeline-Status des ausführenden Threads in der geteilten Prozessor-Pipeline ein.

Die Druckschrift US 6,295,600 B1 zeigt ein Verfahren und eine Vorrichtung zum Umschalten zwischen Threads eines Programms als Antwort auf ein Ereignis, das eine lange Latenzzeit bedingt.

Es ist daher Aufgabe der Erfindung, ein speicher-getriggertes Kontext-Umschalten für einen Multithread-Prozessors unter Einsatz möglichst kleiner Befehlszwischenspeicher 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 17 gelöst.

Demgemäß wird erfindungsgemäß ein Multithread-Prozessor mit einer Prozessor-Pipeline (4) vorgeschlagen, die aufweist:

  • – eine Synchronisationseinheit als eine Prozessor-Pipelinestufe, welche bei einem Empfangen eines Ladezyklusanzeigeflags mit einem positiven logischen Signalpegel, welches bei Vorliegen eines Ladebefehls auf den positiven logischen Signalpegel gesetzt wird und angibt, dass ein Ladezyklus auf ein Speichersystem durchgeführt wird, von einer Speicherlesezugriffseinheit als eine weitere der Synchronisationseinheit vorgeschalteten Prozesser-Pipelinestufe eine Kontextkennung und eine Zielregisterkennung und bei einem Empfangen eines Gültigkeitssignals mit einem positiven logischen Signalpegel von einer Speichersystem einen entsprechenden Speicherwert lädt, die Kontextkennung, die Zielregisterkennung und den Speicherwert zwischenspeichert und synchronisiert an eine nachgeordnete Pipelinestufe weiterleitet,

    und welche eine Logikschaltung aufweist, die bei Empfangen des Ladezyklusanzeigeflags mit einem positiven logischen Signalpegel und des Gültigkeitssignals mit einem negativen logischen Signalpegel ein Kontext-Umschaltsignal generiert, wobei ein positiver logischer Signalpegel des Gültigkeitssignals angibt, dass der Speicherwert gültig ist.

Vorteilhafterweise wird durch die erfindungsgemäße Generierung des Kontext-Umschaltsignals eine kostengünstige und sehr einfache Möglichkeit einer Implementierung einer speicher-getriggerten Kontext-Umschaltung bereitgestellt.

Ein weiterer Vorteil der vorliegenden Erfindung ist, dass durch das Akzeptieren einer potenziellen Latenzzeit aufgrund des Wartens auf die durch einen Ladebefehl angeforderten Speicherwerte und damit einhergehenden Generierung des erfindungsgemäßen Kontext-Umschaltsignals ermöglicht wird, die Befehlszwischenspeicher deutlich oberhalb der Speicherlesezugriffseinheit in der Pipeline des Multithread-Prozessors anzuordnen. In herkömmlichen Implementierungen von Multithread-Prozessoren ist oberhalb der Speicherlesezugriffseinheit bzw. Ladeeinheit eine konfliktfreie Zone von mehreren Pipelinestufen ausgebildet, die aufgrund anderer Rahmenbedingungen, wie beispielsweise der Behandlung von Interrupts oder der Vereinfachung der Prozessoransteuerung, bedingt ist. Das bedeutet, dass die aufgrund der genannten anderen Rahmenbedingungen inhärent vorhandene konfliktfreie Zone von Pipelinestufen oberhalb der Speicherlesezugriffseinheit erfindungsgemäß genutzt wird, um die Befehlszwischenspeicher oberhalb dieser konfliktfreien Zone anzuordnen und mittels des erfindungsgemäß generierten Kontext-Umschaltsignals zu steuern. Somit werden gegenüber den bekannten Implementierung erfindungsgemäß nur sehr kleine Replay-Buffer bzw. Befehlszwischenspeicher benötigt. Somit wird Platz auf der Platine des Multithread-Prozessors eingespart. Des Weiteren vereinfacht sich die Ansteuerung der Befehlszwischenspeicher und somit werden weitere Kosten eingespart.

Ein weiterer besonderer Vorteil des erfindungsgemäßen Multithread-Prozessors und des erfindungsgemäßen Verfahrens ist, dass mittels der erfindungsgemäßen Synchronisationseinheit der Datenfluss, die Speicherwerte, und der Befehlsfluss, Kontextkennung und Zielregisterkennung, synchronisiert werden.

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

Gemäß einer bevorzugten Ausgestaltung der Erfindung weist der Multithread-Prozessor weiter auf:

  • – ein Speichersystem, welches eine Vielzahl von Speicherstellen aufweist, wobei eine Speicherstelle durch eine Speicheradresse adressierbar ist und einen veränderbaren Speicherwert speichert und welche als Antwort auf eine an das Speichersystem übertragene Anforderung und Speicheradresse den entsprechenden Speicherwert bereitstellt und das zugehörige Gültigkeitssignal mit einem positiven logischen Signalpegel an die Synchronisationseinheit überträgt;
  • – einer Prozessorpipeline zur Verarbeitung von Programmbefehlen verschiedener Threads, wobei die Prozessorpipeline wenigstens aufweist:

    – eine Speicherlesezugriffseinheit, welche bei einem Ladebefehl das Ladezyklusanzeigeflag mit einem positiven logischen Signalpegel zur Anzeige eines Ladezyklus auf das Speichersystem an die Synchronisationseinheit überträgt und die Kontextkennung zur Angabe des entsprechenden Kontextes des Ladebefehls und die Zielregisterkennung zur Angabe der Zielspeicherstelle des Speichersystems des Ladebefehls bereitstellt; und

    – die Synchronisationseinheit.

Gemäß einer weiteren bevorzugten Ausgestaltung weist die Synchronisationseinheit einen ersten FIFO-Speicher auf, in welchem jeweils die Kontextkennung und die zugehörige Zielregisterkennung zusammen zwischengespeichert werden. Vorteilhafterweise wird durch das gemeinsame Zwischenspeichern der Kontextkennung und der Zielregisterkennung in einem gemeinsamen FIFO-Speicher sichergestellt, dass diese Daten in einer Reihe geordnet für eine Synchronisation mit den Speicherwerten vorliegen.

Gemäß einer weiteren bevorzugten Ausgestaltung weist die Synchronisationseinheit einen zweiten FIFO-Speicher auf, in welchem jeweils der Speicherwert zwischengespeichert wird. Vorteilhafterweise wird durch das Vorsehen des zweiten FIFO-Speichers sichergestellt, dass auch die geladenen Speicherwerte geordnet für die Synchronisation bereitgestellt werden. Ein besonderer Vorteil der erfindungsgemäßen Anordnung ist, dass durch die Bereitstellung des ersten FIFO-Speichers und des zweiten FIFO-Speichers sichergestellt ist, dass die Kontextkennung und die zugehörige Zielregisterkennung mit dem zugehörigen Speicherwert innerhalb des Synchronisationseinheit synchronisiert vorliegen.

Gemäß einer bevorzugten Weiterbildung der Erfindung sind der erste FIFO-Speicher und der zweite FIFO-Speicher jeweils als ein flankengesteuertes Flip-Flop ausgebildet.

Gemäß einer weiteren bevorzugten Ausgestaltung setzen der erste FIFO-Speicher und der zweite FIFO-Speicher jeweils ein Leeranzeigeflag ausgangsseitig auf einen positiven logischen Signalpegel, falls der entsprechende FIFO-Speicher leer ist.

Gemäß einer weiteren bevorzugten Ausgestaltung weist die Synchronisationseinheit einen ersten Multiplexer und einen zweiten Multiplexer auf, welche mittels der Logikschaltung steuerbar sind und die FIFO-Speicher kurzschließen, falls die beiden Leeranzeigeflags, das anliegende Ladezyklusanzeigeflag und das anliegende Gültigkeitssignal jeweils auf einen positiven logischen Signalpegel gesetzt sind. Somit ist erfindungsgemäß sichergestellt, dass bei einem Ladezyklus, wenn gültige Daten von dem Speichersystem ladbar sind und die beiden FIFO-Speicher leer sind, die Kontextkennung, die Zielregisterkennung und der zugehörige Speicherwert sofort, synchron und ohne Verzögerung an eine nachgeordnete Pipelinestufe weitergeleitet werden können.

Gemäß einer weiteren bevorzugten Weiterbildung steuert die Logikschaltung den ersten Multiplexer und den zweiten Multiplexer mittels eines einzigen Steuersignals. Somit wird erfindungsgemäß die Synchronisation des Daten- und Befehlsflusses sichergestellt.

Gemäß einer weiteren bevorzugten Weiterbildung leitet die Synchronisationseinheit einen Programmbefehl, welcher nicht einen Speicherwert einer Speicherstelle benötigt, dessen zugehörige Zielregisterkennung in dem ersten FIFO-Speicher zwischengespeichert ist, ohne Verzögerung an die nachgeordnete Pipelinestufe. Somit wird vorteilhafterweise sichergestellt, dass Programmbefehle, die keine Synchronisation mit angeforderten Speicherwerten benötigen, durch die Synchronisationseinheit nicht aufgehalten werden.

Gemäß einer weiteren bevorzugten Weiterbildung leitet die Synchronisationseinheit einen Programmbefehl, welcher in eine Speicherstelle schreibt, dessen zugehörige Zielregisterkennung in dem ersten FIFO-Speicher zwischengespeichert ist, ohne Verzögerung weiter und ignoriert den nachfolgenden, von der entsprechenden Speicherstelle übertragenen, zugehörigen Speicherwert. Vorteilhafterweise wird somit sichergestellt, dass Programmbefehle, die in eine Speicherstelle schreiben, deren Zielregisterkennung in dem ersten FIFO gespeichert ist, sofort weitergeleitet werden, und die später erhaltenen, zugehörigen Speicherwerte nicht mehr bearbeitet werden müssen, da der besagte Schreibbefehl selbst in die entsprechende Speicherstelle schreibt.

Gemäß einer weiteren bevorzugten Ausgestaltung ist die der Synchronisationseinheit nachgeordnete Pipelinestufe als eine Zurückschreibeeinheit ausgebildet, welche von der Synchronisationseinheit als Ausgangsspeicherwerte e bereitgestellte Speicherwerte unter einer mittels der zugehörigen Zielregisterkennung gebildeten Ausgangspeicheradresse in die entsprechende Speicherstelle schreibt.

Gemäß einer weiteren bevorzugten Ausgestaltung weist der Multithread-Prozessor für einen jeden zu bearbeitenden Thread einen Kontextzwischenspeicher auf, in welchen jeweils Programmbefehle eines bestimmten Threads zwischenspeicherbar sind, welche wenigstens eine Pipelinestufe vor der Speicherlesezugriffseinheit angeordnet sind und welche jeweils mittels des Kontext-Umschaltsignals steuerbar sind.

Gemäß einer weiteren bevorzugten Ausgestaltung ist die Prozessorpipeline des Multithread-Prozessors wenigstens durch eine Befehlsdecodiereinheit zur Decodierung eines Programmbefehls, einer Befehlsausführungseinheit zur Ausführung des decodierten Programmbefehls, der Speicherlesezugriffseinheit, der Synchronisationseinheit und der Zurückschreibeeinheit ausgebildet.

Gemäß einer weiteren bevorzugten Weiterbildung bearbeitet der Multithread-Prozessor einen Programmbefehl in einer vorbestimmten Anzahl von Taktzyklen, falls dieser kein Datenzugriffsbefehl oder Ladebefehl ist.

Gemäß einer weiteren bevorzugten Weiterbildung besteht die Prozessorpipeline des Multithread-Prozessors aus einem Teil eines DSP-Prozessors, eines Protokoll-Prozessors oder eines Universal-Prozessors.

Gemäß einer weiteren bevorzugten Weiterbildung ist die Befehlsausführungseinheit eine arithmetisch-logische Einheit oder eine Adressengeneratoreinheit.

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

1 ein schematisches Blockschaltbild eines ersten bevorzugten Ausführungsbeispiels des erfindungsgemäßen Multithread-Prozessors;

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

3 ein schematisches Blockdiagramm eines besonders bevorzugten Ausführungsbeispiels der Synchronisationseinheit des Multithread-Prozessors gemäß der vorliegenden Erfindung; und

4 ein schematisches Ablaufdiagramm eines bevorzugten Ausführungsbeispiels des erfindungsgemäßen Verfahrens zum Betreiben eines Multithread-Prozessors.

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

1 zeigt ein schematisches Blockschaltbild eines ersten bevorzugten Ausführungsbeispiels des erfindungsgemäßen Multithread-Prozessors 1. Der erfindungsgemäße Multithread-Prozessor 1 weist ein Speichersystem 2 auf, welches aus einer Vielzahl von Speicherstellen 3136 besteht. Eine Speicherstelle 3136 ist durch eine Speicheradresse adr adressierbar und speichert Speicherwerte data_i. Als Antwort auf eine an das Speichersystem 2 übertragene Anforderung req und Speicheradresse adr stellt das Speichersystem 2 den entsprechenden Speicherwert data_i der entsprechenden Speicherstelle 3136 bereit. Weiter stellt das Speichersystem 2 ein zugehöriges Gültigkeitssignal valid_i zur Angabe der Gültigkeit des bereitgestellten Speicherwertes data_i der Synchronisationseinheit 6 bereit bzw. überträgt dieses an die Synchronisationseinheit 6. Das Gültigkeitssignal valid_i ist vorzugsweise dann gültig, wenn es einen positiven logischen Signalpegel aufweist.

Der Multithread-Prozessor 1 weist weiter eine Prozessorpipeline 4 zur Verarbeitung von Programmbefehlen PB, LB verschiedener Threads auf. Ein Ladebefehl LB bzw. Datenzugriffsbefehle ist ein spezieller Programmbefehl PB, der auf das Speichersystem 2 zugreift. Dabei beinhaltet die Prozessorpipeline 4 vorzugsweise eine Speicherlesezugriffseinheit 5. Die Speicherlesezugriffseinheit 5 setzt bei Vorliegen eines Ladebefehls LB ein Ladezyklusanzeigeflag load_i auf einen positiven logischen Signalpegel und überträgt das Ladezyklusanzeigeflag load_i an die Synchronisationseinheit 6. Das Ladezyklusanzeigeflag load_i gibt an, dass ein Ladezyklus auf das Speichersystem 2 vorgenommen wird. Weiter stellt die Speicherlesezugriffseinheit 5 eine Kontextkennung ctx_i bereit, welche angibt, zu welchem Kontext bzw. Thread der entsprechende Ladebefehl LB zugehörig ist. Außerdem stellt die Speicherlesezugriffseinheit 5 eine Zielregisterkennung reg_i bereit, welche das Zielregister 3136 des Speichersystems 2, auf welches der entsprechende Ladebefehl LB zugreift, kennzeichnet. Vorzugsweise ist die Synchronisationseinrichtung Teil der Prozessorpipeline 4.

Die Synchronisationseinheit 6 empfängt das Ladezyklusanzeigeflag load_i von der Speicherlesezugriffseinheit 5. Weist das empfangene Ladezyklusanzeigeflag load_i einen positiven logischen Signalpegel auf, so lädt die Synchronisationseinheit 6 die zugehörige Kontextkennung ctx_i und die zugehörige Zielregisterkennung reg_i von der Speicherlesezugriffseinheit 5.

Des Weiteren empfängt die Synchronisationseinheit 6 das Gültigkeitssignal valid_i von dem Speichersystem 2. Weist das Gültigkeitssignal valid_i, welches von der Synchronisationseinheit 6 empfangen wurde, einen positiven logischen Signalpegel auf, so lädt die Synchronisationseinheit 6 den zugehörigen Speicherwert data_i der entsprechenden Speicherstelle 3136.

Die Synchronisationseinheit 6 synchronisiert die geladene Kontextkennung ctx_i und die geladene Zielregisterkennung reg_i mit dem geladenen, zugehörigen Speicherwert data_i und speichert diese zwischen. Nachfolgend werden die synchronisiert zwischengespeicherten Kennungen ctx_i, reg_i und der Speicherwert an eine nachgeordnete Pipelinestufe (nicht gezeigt) weitergeleitet.

Des Weiteren weist die Synchronisationseinheit 6 eine Logikschaltung 14 (vgl. 3) auf, die bei Empfangen des Ladezyklusanzeigeflags load_i mit einem positiven logischen Signalpegel und des Gültigkeitssignals valid_i mit einem negativen logischen Signalpegel das Kontext-Umschaltsignal css generiert.

2 zeigt ein schematisches Blockdiagramm eines zweiten bevorzugten Ausführungsbeispiels des erfindungsgemäßen Multithread-Prozessors 1.

Der Multithread-Prozessor 1 weist ein Speichersystem 2 auf, welches eine Vielzahl von Speicherstellen 3136 beinhaltet. Eine Speicherstelle 3136 ist mittels einer Speicheradresse adr adressierbar und speichert einen veränderbaren Speicherwert data_i, data_o. Als Antwort auf eine an das Speichersystem 2 übertragene Anforderung req und Speicheradresse adr, welche beide in Folge eines Ladebefehls LB von der Speicherlesezugriffseinheit 5 bereitgestellt werden, stellt das Speichersystem 2 den entsprechenden Speicherwert data_i der entsprechenden Speicherstelle 3136 bereit. Weiter stellt das Speichersystem 2 ein zugehöriges Gültigkeitssignal valid_i bereit, welches einen positiven logischen Signalpegel zur Angabe der Gültigkeit des zugehörigen Speicherwertes data_i aufweist, und überträgt dieses an die Synchronisationseinheit 6.

Weiter weist der erfindungsgemäße Multithread-Prozessor 1 eine Prozessorpipeline 4 zur Verarbeitung von Programmbefehlen PB, LB verschiedener Threads auf.

Die Prozessorpipeline 4 weist vorzugsweise unter anderem eine Speicherlesezugriffseinheit 5 auf. Die Speicherlesezugriffseinheit 5 setzt bei Vorliegen eines Ladebefehls LB das Ladezyklusanzeigeflag load_i auf einen positiven logischen Signalpegel und überträgt dieses an die Synchronisationseinheit 6. Das Ladezyklusanzeigeflag load_i gibt an, dass ein Ladezyklus auf das Speichersystem 2 vorgenommen wird. Weiter stellt die Speicherlesezugriffseinheit 5 die Kontextkennung ctx_i zur Angabe des entsprechenden Kontext des Ladebefehls LB und die Zielregisterkennung reg_i zur Angabe des Zielregisters 3136 des Speichersystems 2 des Ladebefehls LB bereit. Vorzugsweise ist die Synchronisationseinheit 6 Teil der Prozessorpipeline 4.

Vorzugsweise ist die der Synchronisationseinheit 6 nachgeordnete Pipelinestufe 9 als eine Zurückschreibeeinheit ausgebildet, welche von der Synchronisationseinheit 6 als Ausgangsspeicherwert data_o bereitgestellte Speicherwerte data_i unter einer mittels der zugehörigen Zielregisterkennung reg_i gebildeten Ausgangsspeicheradresse adr_o in das entsprechende Register 3136 schreibt.

Vorzugsweise weist der Multithread-Prozessor 1 weiter für einen jeden zu bearbeitenden Thread einen Kontextzwischenspeicher 151, 152 auf, in welchen jeweils Programmbefehle PB, LB eines bestimmten Threads zwischenspeicherbar sind, welche wenigstens eine Pipelinestufe vor der Speicherlesezugriffseinheit 5 angeordnet sind und welche jeweils mittels des Kontextumschaltsignals css steuerbar sind. Beispielsweise sind die Kontextzwischenspeicher 151, 152 zwischen einer Befehlsdecodiereinheit 7 und einer Befehlsausführungseinheit 8 angeordnet.

Vorzugsweise ist die Prozessorpipeline 4 des Multithread-Prozessors 1 durch die Befehlsdecodiereinheit 7 zur Decodierung eines Programmbefehls PB, LB, einer Befehlsausführungseinheit 8 zur Ausführung des Decodierprogrammbefehls PB, LB, der Speicherlesezugriffseinheit 5, der Synchronisationseinheit 6 und der Zurückschreibeeinheit 9 ausgebildet.

Vorzugsweise bearbeitet der Multithread-Prozessor 1 einen Programmbefehl PB in einer vorbestimmten Anzahl von Taktzyklen, falls dieser kein Datenzugriffsbefehl oder Ladebefehl LB ist.

Beispielsweise besteht die Prozessorpipeline 4 des Multithread-Prozessors 1 aus einem Teil eines DSP-Prozessors, eines Protokoll-Prozessors oder eines Universal-Prozessors. Die Befehlsausführungseinheit 8 kann beispielsweise eine artithmetisch-logische Einheit (ALU) oder eine Adressengeneratoreneinheit (AGU) sein.

3 zeigt ein schematisches Blockdiagramm eines besonders bevorzugten Ausführungsbeispiels der Synchronisationseinheit 6 des Multithread-Prozessors 1 gemäß der vorliegenden Erfindung. Vorzugsweise weist die Synchronisationseinheit 6 einen ersten FIFO-Speicher 10, einen zweiten FIFO-Speicher 11, einen ersten Multiplexer 12, einen zweiten Multiplexer 13 und eine Logikschaltung 14 auf. Bei Vorliegen eines Ladezyklusanzeigeflags load_i mit einem positiven logischen Signalpegel lädt die Logikschaltung 14 die Kontextkennung ctx_i und die zugehörige Zielregisterkennung reg_i von der Speicherlesezugriffseinheit 5 (nicht gezeigt) mittels eines ersten Push-Signals push_10 und speichert die geladenen Kennungen ctx_i, reg_i in dem ersten FIFO-Speicher 10 zwischen.

Bei Vorliegen eines Gültigkeitssignals valid_i mit einem positiven logischen Signalpegel lädt die Logikschaltung 14 den entsprechenden Speicherwert data_i von der entsprechenden Speicherstelle 3136 des Speichersystems 2 (nicht gezeigt) mittels eines zweiten Push-Signals push_11 und speichert den geladenen Speicherwert data_i in dem zweiten FIFO-Speicher 11 zwischen.

Vorzugsweise sind der erste FIFO-Speicher 10 und der zweite FIFO-Speicher 11 jeweils als ein flankengesteuertes Flip-Flop ausgebildet. Vorzugsweise setzen der erste FIFO-Speicher 10 und der zweite FIFO-Speicher 11 jeweils ein Leeranzeigeflag empty_10, empty_11 ausgangsseitig auf einen positiven logischen Signalpegel und übertragen jeweils dieses Leeranzeigeflag empty_10, empty_11 an die Logikschaltung 14, falls der entsprechende FIFO-Speicher 10, 11 leer ist. Die Logikschaltung 14 schiebt die jeweils zuerst abgespeicherten Daten mittels eines ersten bzw. zweiten Pop-Signals pop_10, pop_11 aus dem ersten bzw. zweiten FIFO-Speicher 10, 11.

Vorzugsweise weist die Synchronisationseinheit 6 einen ersten Multiplexer 12 und einen zweiten Multiplexer 13 auf. Der erste Multiplexer 12 schließt beispielsweise den ersten FIFO-Speicher 10 kurz und der zweite Multiplexer 13 schließt beispielsweise den zweiten FIFO-Speicher 11 kurz. Die beiden FIFO-Speicher 10, 11 werden durch die beiden Multiplexer 12, 13 kurzgeschlossen, falls die beiden Leeranzeigeflags empty_10, empty_11, das anliegende Ladezyklusanzeigeflag load_i und das anliegende Gültigkeitssignal valid_i jeweils auf einem positiven logischen Signalpegel gesetzt sind. Dabei steuert die Logikschaltung 14 vorzugsweise den ersten Multiplexer 12 und den zweiten Multiplexer 13 mittels eines einzigen Steuersignals S.

Vorzugsweise leitet die Synchronisationseinheit 6 einen Programmbefehl PB, LB, welcher nicht einen Speicherwert data_i einer Speicherstelle 3136 benötigt, dessen zugehörige Zielregisterkennung reg_i in dem ersten FIFO-Speicher 10 zwischengespeichert ist, ohne Verzögerung an die nachgeordnete Pipelinestufe 9 bzw. Zurückschreibeeinheit 9.

Vorzugsweise leitet die Synchronisationseinheit 6 einen Programmbefehl PB, LB, welcher in eine Speicherstelle 3136 schreibt, dessen zugehörige Zielregisterkennung reg_i in dem ersten FIFO-Speicher 10 gespeichert ist, ohne Verzögerung weiter und ignoriert den nachfolgenden, von der entsprechenden Speicherstelle 3136 übertragenen zugehörigen Speicherwert data_i.

4 zeigt ein schematisches Ablaufdiagramm eines bevorzugten Ausführungsbeispiels des erfindungsgemäßen Verfahrens zum Betreiben eines Multithread-Prozessors 1 mit einer Synchronisation eines Befehlsflusses mit einem zugehörigen Datenfluss und mit einer Generierung eines speicher-getriggerten Kontext-Umschaltsignals css. Dabei weist das erfindungsgemäße Verfahren folgende Verfahrensschritte auf:

Verfahrensschritt a):

Empfangen eines Ladezyklusanzeigeflags load_i von einer Speicherlesezugriffseinheit 5.

Verfahrensschritt b):

Laden einer zu dem Ladezyklusanzeigeflag load_i zugehörigen Kontextkennung ctx_i und einer zugehörigen Zielregisterkennung reg_i im Falle eines positiven logischen Signalpegels des empfangenen Ladezyklusanzeigeflags load_i.

Verfahrensschritt c):

Empfangen eines Gültigkeitssignals valid_i von einem Speichersystem 2.

Verfahrensschritt d):

Laden eines zu dem empfangenen Gültigkeitssignal valid_i zugehörigen Speicherwertes data_i von dem Speichersystem 2 im Falle eines positiven logischen Signalpegels des empfangenen Gültigkeitssignals valid_i.

Verfahrensschritt e):

Synchronisiertes Zwischenspeichern der geladenen Kontextkennung ctx_i und der geladenen Zielregisterkennung reg_i mit dem zugehörigen geladenen Speicherwert data_i und Weiterleiten der synchronisierten Daten ctx_i, reg_i, data_i.

Verfahrensschritt f):

Generieren eines Kontext-Umschaltsignals css, falls das empfangene Ladezyklusanzeigeflag load_i einen positiven logischen Signalpegel und das empfangene Gültigkeitssignal valid_i einen negativen logischen Signalpegel aufweisen.

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. Beispielsweise ist die Logik der Anzeigeflags einfach umkehrbar.

1
Multithread-Prozessor
2
Speichersystem
31–36
Speicherstelle
4
Prozessorpipeline
5
Speicherlesezugriffseinheit
6
Synchronisationseinheit
7
Befehlsdecodiereinheit
8
Befehlsausführungseinheit
9
Zurückschreibeeinheit
10
erster FIFO-Speicher
11
zweiter FIFO-Speicher
12
erster Multiplexer
13
zweiter Multiplexer
14
Logikschaltung
151
erster Befehlszwischenspeicher.
152
zweiter Befehlszwischenspeicher
req
Anforderung
adr
Speicheradresse
data_i
Speicherwert
load_i
Ladezyklusanzeigeflag
ctx_i
Kontextkennung
reg_i
Zielregisterkennung
data_o
Ausgangsspeicherwert
valid_i
Gültigkeitssignal
ctx_o
Ausgangskontextkennung
reg_o
Ausgangszielregisterkennung
adr_o
Ausgangsspeicheradresse
PB
Programmbefehl
LB
Ladebefehl
css
Kontext-Umschaltsignal
empty_10
Leeranzeigeflag für den ersten FIFO-Speicher
empty_11
Leeranzeigeflag für den zweiten FIFO-Speicher
push_10
erstes Push-Signal
push_11
zweites Push-Signal
pop_10
erstes Pop-Signal
pop_11
zweites Pop-Signal


Anspruch[de]
Multithread-Prozessor (1) mit einer Prozessor-Pipeline (4), die aufweist:

– eine Synchronisationseinheit (6) als eine Prozessor-Pipelinestufe, welche bei einem Empfangen eines Ladezyklusanzeigeflags (load_i) mit einem positiven logischen Signalpegel, welches bei Vorliegen eines Ladebefehls (LB) auf den positiven logischen Signalpegel gesetzt wird und angibt, dass ein Ladezyklus auf ein Speichersystem (2) durchgeführt wird, von einer Speicherlesezugriffseinheit (5) als eine weitere der Synchronisationseinheit (6) vorgeschalteten Prozesser-Pipelinestufe eine Kontextkennung (ctx_i) und eine Zielregisterkennung (reg_i) und bei einem Empfangen eines Gültigkeitssignals (valid_i) mit einem positiven logischen Signalpegel von einer Speichersystem (2) einen entsprechenden Speicherwert (data_i) lädt, die Kontextkennung (ctx_i), die Zielregisterkennung (reg_i) und den Speicherwert (data_i) zwischenspeichert und synchronisiert an eine nachgeordnete Pipelinestufe (9) weiterleitet,

und welche eine Logikschaltung (14) aufweist, die bei Empfangen des Ladezyklusanzeigeflags (load_i) mit einem positiven logischen Signalpegel und des Gültigkeitssignals (valid_i) mit einem negativen logischen Signalpegel ein Kontext-Umschaltsignal (css) generiert, wobei ein positiver logischer Signalpegel des Gültigkeitssignals (valid_i) angibt, dass der Speicherwert (data_i) gültig ist.
Multithread-Prozessor nach Anspruch 1,

dadurch gekennzeichnet,

dass der Multithread-Prozessor (1) weiter aufweist:

– ein Speichersystem (2), welche eine Vielzahl von Speicherstellen (3136) aufweist, wobei eine Speicherstelle (3136) durch eine Speicheradresse (adr) adressierbar ist und einen veränderbaren Speicherwert (data_i, data_o) speichert und welche als Antwort auf eine an das Speichersystem (2) übertragene Anforderung (req) und Speicheradresse (adr) den entsprechenden Speicherwert (data_i) bereitstellt und das zugehörige Gültigkeitssignal (valid_i) mit einem positiven logischen Signalpegel an die Synchronisationseinheit (6) überträgt;

– einer Prozessorpipeline (4) zur Verarbeitung von Programmbefehlen (PB, LB) verschiedener Threads, wobei die Prozessorpipeline (4) wenigstens aufweist:

– eine Speicherlesezugriffseinheit (5), welche bei einem Ladebefehl (LB) das Ladezyklusanzeigeflag (load_i) mit einem positiven logischen Signalpegel zur Anzeige eines Ladezyklus auf den das Speichersystem (2) an die Synchronisationseinheit (6) überträgt und die Kontextkennung (ctx_i) zur Angabe des entsprechenden Kontextes des Ladebefehls (LB) und die Zielregisterkennung (reg_i) zur Angabe der Zielspeicherstelle (3136) des Ladebefehls (LB) bereitstellt; und

– die Synchronisationseinheit (6).
Multithread-Prozessor nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass die Synchronisationseinheit (6) einen ersten FIFO-Speicher (10) aufweist, in welchem jeweils die Kontextkennung (ctx_i) und die zugehörige Zielregisterkennung (reg_i) zusammen zwischengespeichert werden. Multithread-Prozessor nach einem der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Synchronisationseinheit (6) einen zweiten FIFO-Speicher (11) aufweist, in welchem jeweils der Speicherwert (data_i) zwischengespeichert wird. Multithread-Prozessor nach den Ansprüchen 3 und 4, dadurch gekennzeichnet, dass der erste FIFO-Speicher (10) und der zweite FIFO-Speicher (11) jeweils als ein flankengesteuertes Flip-Flop ausgebildet sind. Multithread-Prozessor nach den Ansprüchen 3 und 4, dadurch gekennzeichnet, dass der erste FIFO-Speicher (10) und der zweite FIFO-Speicher (11) jeweils ein Leeranzeigeflag (empty_10, empty_11) ausgangsseitig auf einen positiven logischen Signalpegel setzen, falls der entsprechende FIFO-Speicher (10, 11) leer ist. Multithread-Prozessor nach Anspruch 6, dadurch gekennzeichnet, dass die Synchronisationseinheit (6) einen ersten Multiplexer (12) und einen zweiten Multiplexer (13) aufweist, welche mittels der Logikschaltung (14) steuerbar sind und die FIFO-Speicher (10, 11) kurzschließen, falls die beiden Leeranzeigeflags (empty_10, empty_11), das anliegende Ladezyklusanzeigeflag (load_i) und das anliegende Gültigkeitssignal (valid_i) jeweils auf einen positiven logischen Signalpegel gesetzt sind. Multithread-Prozessor nach Anspruch 7, dadurch gekennzeichnet, dass die Logikschaltung (14) den ersten Multiplexer (12) und den zweiten Multiplexer (13) mittels eines einzigen Steuersignals (S) steuert. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Synchronisationseinheit (6) einen Programmbefehl (PB, LB), welcher nicht einen Speicherwert (data_i) einer Speicherstelle (3136) benötigt, dessen zugehörige Zielregisterkennung (reg_i) in dem ersten FIFO-Speicher (10) zwischengespeichert ist, ohne Verzögerung an die nachgeordnete Pipelinestufe (9) weiterleitet. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Synchronisationseinheit (6) einen Programmbefehl (PB, LB), welcher in eine Speicherstelle (3136) schreibt, dessen zugehörige Zielregisterkennung (reg_i) in dem ersten FIFO-Speicher (10) zwischengespeichert ist, ohne Verzögerung weiterleitet und den nachfolgenden, von der entsprechenden Speicherstelle (3136) übertragenen, zugehörigen Speicherwert (data_i) ignoriert. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die der Synchronisationseinheit (6) nachgeordnete Pipelinestufe (9) als eine Zurückschreibeeinheit ausgebildet ist, welche von der Synchronisationseinheit (6) als Ausgangsspeicherwerte (data_o) bereitgestellte Speicherwerte (data_i) unter einer mittels der zugehörigen Zielregisterkennung (reg_i) gebildeten Ausgangsspeicheradresse (adr_o) in das entsprechende Register (3136) schreibt. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass der Multithread-Prozessor (1) für einen jeden zu bearbeitenden Thread einen Kontextzwischenspeicher (151, 152) aufweist, in welchen jeweils Programmbefehle (PB, LB) eines bestimmten Threads zwischenspeicherbar sind, welche wenigstens eine Pipelinestufe vor der Speicherlesezugriffseinheit (5) angeordnet sind und welche jeweils mittels des Kontext-Umschaltsignals (css) steuerbar sind. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Prozessorpipeline (4) des Multithread-Prozessors (1) wenigstens durch eine Befehlsdecodiereinheit (7) zur Decodierung eines Programmbefehls (PB, LB), einer Befehlsausführungseinheit (8) zur Ausführung des decodierten Programmbefehls (PB, LB), der Speicherlesezugriffseinheit (5), der Synchronisationseinheit (6) und der Zurückschreibeeinheit (9) ausgebildet ist. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass der Multithread-Prozessor (1) einen Programmbefehl (PB), falls dieser kein Datenzugriffsbefehl oder Ladebefehl (LB) ist, in einer vorbestimmten Anzahl von Taktzyklen bearbeitet. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Prozessorpipeline (4) des Multithread-Prozessors (1) aus einem Teil eines DSP-Prozessors, eines Protokoll-Prozessors oder eines Universal-Prozessors besteht. Multithread-Prozessor nach einem oder mehreren der vorstehenden Ansprüche, dadurch gekennzeichnet, dass die Befehlsausführungseinheit (8) eine arithmetisch-logische Einheit (ALU) oder eine Adressengeneratoreinheit (AGU) ist. Verfahren zum Betreiben eines Multithread-Prozessors (1) nach Anspruch 1 oder einem der Ansprüche 2 bis 16 mit einer Synchronisation eines Befehlsflusses mit einem zugehörigen Datenfluss und mit einer Generierung eines speicher-getriggerten Kontext-Umschaltsignals (css), mit folgenden Verfahrensschritten:

(a) Empfangen eines Ladezyklusanzeigeflags (load_i) von einer Speicherlesezugriffseinheit (5), welches bei Vorliegen eines Ladebefehls (LB) auf den positiven logischen Signalpegel gesetzt wird und angibt, dass ein Ladezyklus auf ein Speichersystem (2) durchgeführt wird,

(b) Laden einer zu dem Ladezyklusanzeigeflag (load_i) zugehörigen Kontextkennung (ctx_i) und einer zugehörigen Zielregisterkennung (reg_i) im Falle eines positiven logischen Signalpegels des empfangenen Ladezyklusanzeigeflags (load_i);

(c) Empfangen eines Gültigkeitssignals (valid_i) von einem Speichersystem (2);

(d) Laden eines zu dem empfangenen Gültigkeitssignal (valid_i) zugehörigen Speicherwertes (data_i) von dem Speichersystem (2) im Falle eines positiven logischen Signalpegels des empfangenen Gültigkeitssignals (valid_i);

(e) Zwischenspeichern der geladenen Kontextkennung (ctx_i), der geladenen Zielregisterkennung (reg_i) und des zugehörigen geladenen Speicherwertes (data_i) und synchronisiertes Weiterleiten der zwischengespeicherten Daten (ctx_i, reg_i, data_i); und

(f) Generieren eines Kontext-Umschaltsignals (css), falls das empfangene Ladezyklusanzeigeflag (load_i) einen positiven logischen Signalpegel und das empfangene Gültigkeitssignal (valid_i) einen negativen logischen Signalpegel aufweisen, wobei ein positiver logischer Signalpegel des Gültigkeitssignals (valid_i) angibt, dass der Speicherwert (data_i) gültig ist.






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

Patent Zeichnungen (PDF)

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