DE60032481T2 - Verfahren und vorrichtung zur threadumschaltung in einem multithreadprozessor - Google Patents

Verfahren und vorrichtung zur threadumschaltung in einem multithreadprozessor Download PDF

Info

Publication number
DE60032481T2
DE60032481T2 DE60032481T DE60032481T DE60032481T2 DE 60032481 T2 DE60032481 T2 DE 60032481T2 DE 60032481 T DE60032481 T DE 60032481T DE 60032481 T DE60032481 T DE 60032481T DE 60032481 T2 DE60032481 T2 DE 60032481T2
Authority
DE
Germany
Prior art keywords
thread
command data
command
instruction
distribution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE60032481T
Other languages
English (en)
Other versions
DE60032481D1 (de
Inventor
Stavros Portland KALAFATIS
B. Alan Portland KYKER
D. Robert Portland FISCH
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Application granted granted Critical
Publication of DE60032481D1 publication Critical patent/DE60032481D1/de
Publication of DE60032481T2 publication Critical patent/DE60032481T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming

Description

  • GEBIET DER ERFINDUNG
  • Die vorliegende Erfindung betrifft allgemein das Gebiet multithreading-fähiger bzw. Multithread-Prozessoren und im Besonderen ein Verfahren und eine Vorrichtung zum zum Ausführen einer Umschaltoperation für Kontext (oder Threads) in einem multithreading-fähigen Prozessor.
  • STAND DER TECHNIK
  • Das Design der multithreading-fähigen (MT) Prozessoren wurde in letzter Zeit zunehmend als attraktive Option zur Verbesserung der Leistung von Prozessoren betrachtet. Das Multithreading in einem Prozessor stellt unter anderem das Potenzial bereit, verschiedene Prozessorressourcen effektiver zu nutzen und im Besonderen zur effektiveren Nutzung der Ausführungslogik in einem Prozessor. Durch die Zufuhr mehrerer Threads an die Ausführungslogik eines Prozessors können im Besonderen Taktzyklen, die sich ansonsten durch ein Anhalten oder eine andere Verzögerung der Verarbeitung eines bestimmten Threads im Ruhezustand befinden würden, für die Behandlung eines anderen Threads verwendet werden. Ein Anhalten der Verarbeitung eines bestimmten Threads kann eine Folge einer Reihe von Ereignissen in einer Prozessor-Pipeline sein. Zum Beispiel führt ein Cache-Miss oder eine falsch vorhergesagte Verzweigung (d.h. eine Operation mit langer Latenzzeit) für einen in einem Thread enthaltenen Befehl für gewöhnlich zu der Verarbeitung des relevanten Anhaltens des Threads. Der negative Effekt von Operationen mit langer Latenzzeit auf die Effizienz einer Ausführungslogik wird verstärkt durch die Steigerungen des Durchsatzes von Ausführungslogiken in letzter Zeit, welche Fortschritte in Bezug auf die Speicherzugriffsraten und die Speicherabrufraten überholt haben.
  • Multithreading-fähige Computeranwendungen werden zunehmend zur Regel in Anbetracht der Unterstützung, die für derartige multithreading-fähige Anwendungen durch eine Reihe weit verbreiteter Betriebssysteme bereitgestellt wird, wie zum Beispiel Windows NT® oder Unix. Multithreading-fähige Computeranwendungen sind besonders effizient auf dem Gebiet der Multimedia-Anwendungen.
  • Multithreading-fähige Prozessoren können grob in zwei Kategorien eingeteilt werden (d.h. feine oder grobe Designs bzw. Strukturen), und zwar gemäß der Thread-Verschachtelung oder des Wechsel- bzw. Umschaltsystems, die in dem jeweils relevanten Prozessor eingesetzt werden. Feine multithreading-fähige Designs unterstützen mehrere aktive Threads in einem Prozessor und verschachteln für gewöhnlich zwei verschiedene Threads Zyklus für Zyklus. Grobe multithreading-fähige Designs verschachteln für gewöhnlich Befehle bzw. Anweisungen unterschiedlicher Threads beim Eintreten eines gewissen Ereignisses mit langer Latenzzeit, wie etwa eines Cache-Miss. Ein grobes multithreading-fähiges Design wird erörtert in „Evaluation of Multithreaded Uniprocessors for Commercial Application Environments" von R. Eickenmayer, R. Johnson et al., The 23rd Annual International Symposium on Computer Architecture, Seiten 203 – 212, Mai 1996. Die Unterscheidungen zwischen feinen und groben Designs werden ferner erörtert in "Architectural and Implementation Tradeoffs in the Design of Multiple-Context Processors" von J. Laudon, A. Gupta, Multithreaded Computer Architectures: A Summary of the State of the Art, editiert von R.A. Iannuci et al., Seiten 167 – 200, Kluwer Academic Publishers, Norwell, Massachusetts, USA, 1994. Laudon schlägt ferner ein verschachteltes System vor, das das Umschalten bzw. Wechseln eines feinen Designs Zyklus für Zyklus kombiniert mit den vollen Pipeline-Verriegelungsschachtelungen eines groben Designs (oder gesperrtes System). Zu diesem Zweck schlägt Laudon einen „Rückzugs"-Befehl vor, der einen bestimmten Thread (oder Kontext) für eine bestimmte Anzahl von Zyklen nicht verfügbar macht. Ein derartiger „Rückzugs"-Befehl kann ausgegeben werden nach dem Auftreten vorbestimmter Ereignisse, wie etwa eines Cache-Miss. Auf diese Weise vermeidet Laudon die Notwendigkeit für die Ausführung eines tatsächlichen Thread-Wechsels, indem einer der Threads einfach nicht verfügbar gemacht wird.
  • Das U.S. Patent US-A-5.761.522 offenbart ein Programmsteuerungssystem mit einer Mehrzahl von Programmen und einer entsprechenden Anzahl von Ausführungseinrichtungen zum Ausführen der Programme, einem Speicher zum Speichern der Programme, mit Programmzählern, von denen jeder eine Adresse aus dem Speicher erzeugt, und einer Auswahleinrichtung zum Auswählen einer Ausgabe eines der Programmzähler sowie zum Bereitstellen der Ausgabe an den Speicher. Die Programmzähler werden sequentiell bei jeder Eingabe gemäß einer Programmzähler-Umschaltregel umgeschaltet.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Vorgesehen ist gemäß der vorliegenden Erfindung ein Verfahren zum Ausführen einer Thread-Umschaltoperation in einem Multithread-Prozessor. Die Verteilung einer ersten vorbestimmten Menge von Befehlsdaten für einen ersten Thread von einer Befehlsdatenquelle in einem Multithread-Prozessor wird detektiert. Als Reaktion auf das Detektieren der Verteilung der ersten vorbestimmten Menge von Befehlsdaten für den ersten Thread beginnt die Verteilung von Befehlsdaten für einen zweiten Thread von der Befehlsdatenquelle.
  • Weitere Merkmale der vorliegenden Erfindung werden aus den beigefügten Zeichnungen und aus der folgenden genauen Beschreibung deutlich.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Die vorliegende Erfindung wird in den Abbildungen der anhängigen Zeichnungen beispielhaft und ohne Einschränkung veranschaulicht, wobei ähnliche bzw. identische Elemente mit den gleichen Bezugszeichen bezeichnet sind. In den Zeichnungen zeigen:
  • 1 ein Blockdiagramm eines Beispiels für eine Pipeline eines Prozessors, in der die vorliegende Erfindung implementiert werden kann;
  • 2 ein Blockdiagramm eines beispielhaften Ausführungsbeispiels eines Prozessors in Form eines multithreading-fähigen Universal-Mikroprozessors, in dem die vorliegende Erfindung implementiert werden kann;
  • 3 ein Blockdiagramm weiterer Einzelheiten in Bezug auf die Architektur eines Ausführungsbeispiels einer Mikrobefehls-Umsetzungs-Engine, die in dem Universal-Mikroprozessor aus 2 vorhanden ist;
  • 4 ein Blockdiagramm ausgesuchter Komponenten eines beispielhaften multithreading-fähigen Mikroprozessors und zeigt speziell verschiedene funktionale Einheiten, die eine Pufferfähigkeit bereitstellen, als logische Partition bzw. Unterteilung zur Berücksichtigung mehrerer Threads;
  • 5 ein Blockdiagramm weiterer Einzelheiten in Bezug auf ein Beispiel für einen Befehls-Streaming-Puffer gemäß einem Ausführungsbeispiel der vorliegenden Erfindung;
  • 6 ein Blockdiagramm der logischen Komponenten der Thread-Umschaltungs-Steuerlogik gemäß einem Ausführungsbeispiel der vorliegenden Erfindung;
  • 7 ein Flussdiagramm des Verfahrens gemäß einem Ausführungsbeispiel der vorliegenden Erfindung zur Bestimmung eines Anfangs-Threads, wenn sich mehrere Threads in dem multithreading-Prozessor im Ruhezustand befinden bzw. inaktiv sind;
  • 8 ein Flussdiagramm des Verfahrens gemäß einem Ausführungsbeispiel der vorliegenden Erfindung zum Ausführen einer Thread-Umschaltoperation in einem multithreading-fähigen Prozessor beim Verteilen eines Verzweigungsbefehls eines aktuellen Threads von einer Befehlsquelle;
  • 9 ein Flussdiagramm des Verfahrens gemäß einem Ausführungsbeispiel der vorliegenden Erfindung zum Ausführen einer Thread-Umschaltoperation in einem multithreading-fähigen Prozessor beim Auftreten eines Anhaltens mit langer Latenzzeit;
  • 10 ein Flussdiagramm des Verfahrens gemäß einem Ausführungsbeispiel der vorliegenden Erfindung zum Ausführen einer Thread-Umschaltoperation in einem multithreading-fähigen Prozessor beim Auftreten einer internen Pipeline-Löschoperation;
  • 11 ein Flussdiagramm des Verfahrens gemäß einem Ausführungsbeispiel der vorliegenden Erfindung zum Ausführen einer Thread-Umschaltoperation in einem multithreading-fähigen Prozessor beim Auftreten eines Zustands „kein Datenfluss" in Bezug auf einen bestimmten Thread;
  • 12 ein Flussdiagramm des Verfahrens gemäß einem Ausführungsbeispiel der vorliegenden Erfindung zum Ausführen einer Thread-Umschaltoperation in einem multithreading-fähigen Prozessor beim Verteilen einer vorbestimmten Befehlsdatenmenge für einen bestimmten Thread von einem Befehls-Streaming-Puffer an einen Befehls-Vordecodierer;
  • 13 ein Flussdiagramm des Verfahrens gemäß einem Ausführungsbeispiel der vorliegenden Erfindung zum Ausführen einer Thread-Umschaltoperation in einem multithreading-fähigen Prozessor beim Auftreten einer externen Pipeline-Löschoperation;
  • 14 ein Flussdiagramm des Verfahrens gemäß einem Ausführungsbeispiel der vorliegenden Erfindung zum Ausführen einer Thread-Umschaltoperation in einem multithreading-fähigen Prozessor beim Detektieren eines eingefügten Flusses innerhalb eines Befehlsstroms für einen aktuellen Thread;
  • die 15A und 15B schematische Darstellungen der Struktur der entsprechenden Ausführungsbeispiele der Thread-Umschalt-Steuerlogik gemäß der vorliegenden Erfindung, die in der Abbildung aus 6 als Blockdiagramm dargestellt ist; und
  • 16 eine schematische Darstellung der Logik gemäß einem Ausführungsbeispiel der vorliegenden Erfindung zum Einfügen einer Ablaufmarkierung (oder eines eingefügten Flusses bzw. Ablaufs) in einen Befehlsstrom;
  • GENAUE BESCHREIBUNG
  • Beschrieben werden ein Verfahren und eine Vorrichtung zum Wechseln bzw. Umschalten von Threads in einem multithreading-fähigen Prozessor. In der folgenden Beschreibung sind zu Erläuterungszwecken zahlreiche besondere Einzelheiten ausgeführt, um ein umfassendes Verständnis der vorliegenden Erfindung zu vermitteln. Für den Fachmann auf dem Gebiet ist es jedoch ersichtlich, dass die vorliegende Erfindung auch ohne diese besonderen Einzelheiten ausgeführt werden kann.
  • Im Sinne der vorliegenden Patentschrift umfasst der Begriff „Verteilen" (englisch: „Dispatch") das tatsächliche bzw. praktische Senden oder Ausbreiten von Daten von einem Standort oder einer funktionalen Einheit sowie die Schritte, die in Vorbereitung auf das eigentliche Senden oder Ausbreiten der Daten getroffen werden. Der Begriff „Verteilen" umfasst zum Beispiel das Anordnen von Daten in einer bestimmten Reihenfolge bzw. Anordnung oder einem bestimmten Zustand der Bereitschaft zum Verteilen von einem Speicherort oder Puffer.
  • Prozessor-Pipeline
  • Die Abbildung aus 1 zeigt ein High-Level-Blockdiagramm eines Ausführungsbeispiels der Prozessor-Pipeline 10, in der die vorliegende Erfindung implementiert werden kann. Im Sinne der vorliegenden Patentschrift umfasst der Begriff „Prozessor" jede Vorrichtung bzw. Maschine, die eine Folge von Befehlen (z.B. Makro- oder Mikrobefehle) ausführen kann und umfasst, ohne darauf beschränkt zu sein, Universal-Mikroprozessoren, Mikroprozessoren für einen bestimmten Zweck, Grafiksteuereinheiten, Audio-Steuereinheiten, Multimedia- Steuereinheiten, Multimedia-Steuereinheiten, Mikrocontroller oder Netzwerksteuereinheiten. Ferner bezieht sich der Begriff „Prozessor" unter anderem auf CISC-Prozessoren (Rechner mit komplexem Befehlsvorrat), RISC-Prozessoren (Rechner mit begrenztem Befehlsvorrat) oder VLIW-Prozessoren (Prozessoren mit sehr langem Befehlswort). Die Pipeline 10 weist eine Reihe von Pipe-Stufen auf, beginnend mit einer Erfassungs-Pipe-Stufe 12, in der Befehle (z.B. Makrobefehle) abgerufen und der Pipeline 10 zugeführt werden. Zum Beispiel kann ein Makrobefehl aus einem Cache-Speicher abgerufen werden, der integral in dem Prozessor vorgesehen oder diesem eng zugeordnet ist, oder er kann über einen Prozessorbus aus einem externen Hauptspeicher abgerufen werden. Aus der Erfassungs-Pipe-Stufe 12 werden die Makrobefehle zu einer Decodierungs-Pipe-Stufe 14 weitergeleitet, wo Makrobefehle umgesetzt werden in Mikrobefehle (auch als „Mikrocode" bezeichnet), die sich zur Ausführung in dem Prozessor eignen. Die Mikrobefehle werden danach weiter an eine Zuweisungs-Pipe-Stufe 16 geleitet, wo Prozessorressourcen den verschiedenen Mikrobefehlen gemäß der Verfügbarkeit und dem Bedarf zugewiesen werden. Die Mikrobefehle werden danach in einer Ausführungsstufe 18 ausgeführt, bevor sie in einer Rückzugs-Pipe-Stufe 20 zurückgezogen werden.
  • Mikroprozessorarchitektur
  • Die Abbildung aus 2 zeigt ein Blockdiagramm eines exemplarischen Ausführungsbeispiels eines Prozessors 30 in Form eines Universal-Mikroprozessors, in dem die vorliegende Erfindung implementiert werden kann. Der Mikroprozessor 30 ist nachstehend als ein multithreading-fähiger (MT) Prozessor beschrieben und ist somit in der Lage, mehrere Befehls-Threads (oder Kontexte) gleichzeitig zu verarbeiten. Eine Reihe der nachstehend in der Beschreibung bereitgestellten Lehren. ist jedoch nicht spezifisch für einen multithreading-fähigen Prozessor und kann auch in einem Prozessor mit nur einem Thread angewandt werden. In einem exemplarischen Ausführungsbeispiel kann der Prozessor 30 einen Mikroprozessor mit Intel Architektur (IT) umfassen, der den Befehlssatz der Intel Architektur ausführen kann.
  • Der Mikroprozessor 30 umfasst ein geordnetes (in-order) Front-End und ein ungeordnetes (out-of-order) Back-End. Das geordnete Front-End weist eine Busschnittstelleneinheit 32 auf, die als die Leitung zwischen dem Prozessor 30 und anderen Komponenten (z.B. einem Hauptspeicher) eines Computersystems fungiert, in dem der Mikroprozessor 30 eingesetzt werden kann. Zu diesem Zweck koppelt die Busschnittstelleneinheit 32 den Mikroprozessor 30 mit einem Prozessorbus (nicht abgebildet), über den Daten und Steuerinformationen von dem Mikroprozessor 30 empfangen und weitergeleitet werden können. Die Busschnittstelleneinheit 32 weist eine Front Side Bus (FSB) Logik 34 auf, welche Datenübertragungen bzw. Kommunikationen über den Prozessorbus steuert. Die Busschnittstelleneinheit 32 empfängt gemäß der Abbildung Busanforderungen 38 von einer Speicherausführungseinheit 42 und sendet Snoops oder Busrückführungen an die Einheit, wobei diese eine lokale Speicherfunktion in dem Mikroprozessor 30 bereitstellt. Die Speicherausführungseinheit 42 weist einen unifizierten Daten- und Befehls-Cache 44, einen Translation Lookaside Buffer (TLB) 46 und einen Speicheranordnungspuffer 48 auf. Die Speicherausführungseinheit 42 empfängt Befehlserfassungsanforderungen 50 von einer Mikrobefehls-Umsetzungs-Engine 54 und führt dieser Originalbefehle 52 (d.h. codierte Makrobefehle) zu, wobei die Engine die empfangenen Makrobefehle in eine entsprechende Gruppe von Mikrobefehlen umwandelt. Die Mikrobefehls-Umsetzungs-Engine 54 ist weiter unten im Text näher beschrieben.
  • Von der Mikrobefehls-Umsetzungs-Engine 54 werden decodierte Befehle (d.h. Mikrobefehle) zu einer Trace-Zustellungs-Engine 60 übermittelt. Die Trace-Zustellungs-Engine 60 weist einen Trace-Cache 62, einen Trace-Verzweigungsprädiktor (BTB) 64, einen Mikrocode-Sequencer 66 und eine Mikrocode (uop) Warteschlange 68 auf. Die Trace-Zustellungs-Engine 60 fungiert als ein Mikrobefehls-Cache und ist die primäre Quelle für Mikrobefehle für eine nachgelagerte Ausführungseinheit 70. Durch die Bereitstellung einer Caching-Funktion für Mikrobefehle in der Prozessor-Pipeline ermöglicht die Trace-Zustellungs-Engine 60 und im Besonderen der Trace-Cache 62 die Optimierung der von der Mikrobefehls-Umsetzungs-Engine 54 vorgenommenen Umsetzungsarbeit, so dass eine erhöhte Mikrobefehlsbandbreite vorgesehen wird. In einem exemplarischen Ausführungsbeispiel kann der Trace-Cache 62 einen 256 Satz, 8-fach-Satz-Assoziativspeicher umfassen. Der Begriff „Trace" kann in dem vorliegenden Ausführungsbeispiel eine Folge bzw. Sequenz von Mikrobefehlen betreffen, die in Einträgen des Trace-Cache 62 gespeichert ist, wobei jeder Eintrag Zeiger auf die Trace bildende vorangehende oder folgende Mikrobefehle aufweisen. Auf diese Weise erleichtert der Trace-Cache 62 die Hochleistungs-Ablaufsteuerung dadurch, dass die Adresse des nächsten Eintrags, auf den zugegriffen werden soll, um einen folgenden Mikrobefehl zu erhalten, bekannt ist, bevor ein aktueller Zugriff abgeschlossen ist. Traces können in einem Ausführungsbeispiel als „Blöcke" von Befehlen betrachtet werden, die durch Trace-Köpfe voneinander unterschieden werden können und die enden, wenn eine indirekte Verzweigung auftritt oder eine von vielen gegebenen Schwellenwertbedingungen erreicht wird, wie etwa die Anzahl der bedingten Verzweigungen, die in einem Trace enthalten sein können, oder die maximale Anzahl von der Mikrobefehle insgesamt, die einen Trace umfassen.
  • Der Trace-Cache-Verzweigungsprädiktor 64 stellt lokale Verzweigungsprädiktionen bereit, welche Traces in dem Trace-Cache 62 betreffen. Der Trace-Cache 62 und der Mikrocode-Sequencer 66 stellen Mikrobefehle an die Mikrocode-Warteschlange 68 bereit, von wo die Mikrobefehle danach einem Out-of-Order-Ausführungs-Cluster zugeführt werden. Folglich kann der Mikroprozessor 30 so betrachtet werden, dass er ein In-Order-Front-Ende aufweist, mit der Busschnittstelleneinheit 32, der Speicherausführungseinheit 42, der Mikrobefehls-Umsetzungs-Engine 54 und der Trace-Zustellungs-Engine 60 und einem nachstehend im Text beschriebenen Out-of-Order-Back-End.
  • Aus der Mikrocode-Warteschlange 68 ausgegebene Mikrobefehle werden in einem Out-of-Order-Cluster 71 empfangen, das einen Scheduler 72, eine Registerumbenennungseinrichtung 74, eine Zuweisungseinrichtung 76, einen Umordnungspuffer bzw. Reorder Buffer 78 und eine Wiedergabewarteschlange 80 umfasst. Der Scheduler 72 weist eine Reihe von Reservierungsstationen auf und arbeitet so, dass er Mikrobefehle zeitlich einteilt und zur Ausführung durch die Ausführungseinheit 70 ausgibt. Die Registerumbenennungseinrichtung 74 führt eine Funktion der Registerumbenennung in Bezug auf verdeckte ganzzahlige und Gleitkommaregister aus (die an Stelle jedes der acht Universalregister oder jedes der acht Gleitkommaregister verwendet werden können, wenn ein Prozessor 30 einen Befehlsvorrat der Intel Architektur ausführt). Die Zuordnungs- bzw. Zuweisungseinrichtung 76 weist Ressourcen der Ausführungseinheit 70 und des Clusters 71 Mikrobefehlen gemäß der Verfügbarkeit und des Bedarfs zu. Wenn unzureichende Ressourcen für die Verarbeitung eines Mikrobefehls zur Verfügung stehen, ist die Zuordnungseinrichtung 76 verantwortlich für die Aktivierung eines Anhaltesignals 82, das durch die Trace-Zustellungs-Engine 60 an die Mikrobefehls-Umsetzungs-Engine 54 geleitet wird, wie dies unter 58 dargestellt ist. Mikrobefehle, deren Quellenfelder durch die Registerumbenennungseinrichtung 74 angepasst worden sind, werden in strenger Programmreihenfolge in einem Umordnungspuffer 78 platziert. Wenn Mikrobefehle in dem Umordnungspuffer 78 die Ausführung abgeschlossen haben und für den Rückzug bzw. die Rückordnung bereit stehen, werden danach aus einem Umordnungspuffer entfernt und in der richtigen Reihenfolge abgerufen (d.h. gemäß der ursprünglichen Programmreihenfolge). Die Wiedergabewarteschlange 80 leitet Mikrobefehle weiter, die von der Ausführungseinheit 70 wiedergegeben werden sollen.
  • Die Ausführungseinheit 70 weist in der Abbildung eine Gleitkomma-Ausführungs-Engine 84, eine ganzzahlige Ausführungs-Engine 86 und einen Level-0-Datencache 88 auf. In einem exemplarischen Ausführungsbeispiel, in dem der Mikroprozessor 30 einen Befehlsvorrat der Intel Architektur ausführt, kann die Gleitkomma-Ausführungs-Engine 84 ferner MMX® Befehle ausführen.
  • Mikrobefehls-Umsetzungs-Engine
  • Die Abbildung aus 3 zeigt ein Blockdiagramm mit näheren Einzelheiten zu der Architektur eines exemplarischen Ausführungsbeispiels der Mikrobefehls-Umsetzungs-Engine 54. Die Mikrobefehls-Umsetzungs-Engine 54 arbeitet effektiv als eine „Miss Handler" für den Trace-Cache, wobei sie Mikrobefehle im Falle eines Trace-Cache-Miss dem Trace-Cache 64 zuführt.
  • Zu diesem Zweck arbeitet die Mikrobefehls-Umsetzungs-Engine 54 so, dass sie die Erfassungs- und Decodierungs-Pipe-Stufen 12 und 14 für den Fall eines Trace-Cache-Miss bereitstellt. Die Mikrobefehls-Umsetzungs-Engine 54 weist in der Abbildung einen Zeiger auf den nächsten Befehl (NIP) 100, einen Befehls-Translation Lookaside BUffer (TLB) 102, einen Verzweigungsprädiktor 104, einen Befehls-Streaming-Puffer 106, einen Befehls-Vordecodierer 108, eine Befehlsleitlogik 110, einen Befehlsdecodierer 112 und eine Verzweigungsadressen-Berechnungseinrichtung 114 auf. Der Zeiger auf den nächsten Befehl (NIP) 100, der Verzweigungsprädiktor 104 und der Befehls-Streaming-Puffer 106 bilden gemeinsam eine Verzweigungs-Prädiktionseinheit (BPU) 99. Der Befehlsdecodierer 112 und die Verzweigungsadressen-Berechnungseinrichtung 114 bildet gemeinsam eine Befehls-Umsetzungseinheit (IX-Einheit) 113.
  • Der Zeiger auf den nächsten Befehl (NIP) 100 gibt Anforderungen für. den nächsten Befehl an den Unified-Cache 44 aus. In dem exemplarischen Ausführungsbeispiel, in dem der Mikroprozessor 30 einen multithreading-fähigen Mikroprozessor umfasst, der zwei Threads verarbeiten kann, so kann der Zeiger auf den nächsten Befehl (NIP) 100 einen Multiplexer (MUX) (nicht abgebildet) aufweisen, der zwischen Befehlszeigern auswählt, die entweder einem ersten oder zweiten Thread zugeordnet sind, um in die von dort ausgegebene nächste Befehlsanforderung aufgenommen zu werden. In einem Ausführungsbeispiel verschachtelt der Zeiger auf den nächsten Befehl 100 Anforderungen für die ersten und zweiten Threads Zyklus für Zyklus („Ping Pong"), wobei angenommen wird, dass Befehle für beide Threads angefordert worden sind, und wobei die Ressourcen des Befehls-Streaming-Puffers 106 für beide Threads nicht erschöpft sind. Die Anforderungen des Zeigers auf den nächsten Befehl können somit entweder 16, 32 oder 64 Bytes betreffen, abhängig davon, ob sich die erste Anforderungsadresse in der oberen Hälfte einer ausgerichteten 32-Byte- oder 64-Byte-Zeile befindet. Der Zeiger auf den nächsten Befehl 100 kann durch die Verzweigungs-Prädiktionseinheit 104, die Verzweigungsadressen-Berechnungseinrichtung oder durch den Trace-Cache 62 umgeleitet werden, wobei es sich bei einer Trace-Cace-Miss-Anforderung um die Umleitungsanforderung mit der höchsten Priorität handelt.
  • Wenn der Zeiger auf den nächsten Befehl 100 eine Befehlsanforderung an den Unified-Cache 44 richtet, erzeugt er einen Zwei-Bit-„Anforderungsbezeichner", der der Befehlsanordnung zugeordnet ist und die Funktion eines „Tag" für die relevante Befehlsanforderung erfüllt. Wenn als Reaktion auf eine Befehlsanforderung Daten zurückgegeben werden, gibt der Unified-Cache 44 die folgenden Tags oder Bezeichner gemeinsam mit den Daten aus:
    • 1. dem „Anforderungsbezeichner", der durch den Zeiger auf den nächsten Befehl 100 vorgesehen wird;
    • 2. einem „Chunk-Bezeichner" von drei Bit, der den zurückgegebenen Chunk identifiziert; und
    • 3. einem „Thread-Bezeichner", der den Thread identifiziert, dem die zurückgegebenen Daten angehören.
  • Anforderungen für den nächsten Befehl werden von dem Zeiger auf den nächsten Befehl 100 an den Befehls-TLB 102 weitergeleitet, der eine Adressverweisoperation ausführt und eine physikalische Adresse an den unifizierten Cache 44 bereitstellt. Der unifizierte Cache 44 stelle einen entsprechenden Makrobefehl an den Befehls-Streaming-Puffer 106 bereit. Jede Anforderung eines nächsten Befehls wird auch direkt von dem Zeiger auf den nächsten Befehl 100 zu dem Befehls-Streaming-Puffer 106 geleitet, um es zu ermöglichen, dass der Befehls-Streaming-Puffer 106 den Thread identifiziert, zu. dem ein von dem unifizierten Cache 44 empfangener Makrobefehl gehört. Die Makrobefehle von ersten und zweiten Threads werden danach durch den Befehls-Streaming-Puffer 106 an den Befehls-Vordecodierer 108 ausgegeben, der eine Reihe von Längenberechnungs- und Byte-Markierungsoperationen in Bezug auf einen empfangenen Befehlsstrom (von Makrobefehlen) ausführt. Im Besonderen der Befehls-Vordecodierer 108 erzeugt eine Reihe von Byte-Markierungsvektoren, die unter anderem dazu dienen, Makrobefehle innerhalb des Befehlsstroms abzugrenzen, der zu der Befehlsleitlogik 110 geleitet wird. Die Befehlsleitlogik 110 verwendet danach die Byte-Markierungsvektoren, um diskrete Makrobefehle zum Zwecke der Decodierung zu dem Befehlsdecodierer 112 zu leiten. Makrobefehle werden auch von der Befehlsleitlogik 110 zum Zwecke der Berechnung der Verzweigungsadresse zu der Verzweigungsadressen-Berechnungseinrichtung 114 geleitet. Danach werden Makrobefehle von dem Befehlsdecodierer 112 zu der Trace-Zustellungs-Engine bzw. Trace Delivery Engine 60 geleitet.
  • Multithreading-Implementierung
  • Aus dem in der Abbildung aus 2 veranschaulichten exemplarischen Ausführungsbeispiel des Mikroprozessors 30 ist ersichtlich, dass eine begrenzte Duplizierung oder Replikation von Ressourcen gegeben ist. Zur Bereitstellung einer Multithreading-Fähigkeit in einem Prozessor, in dem eine begrenzte Replikation der funktionalen Einheiten gegeben ist, ist es erforderlich, zwischen den Threads eine gewisse gemeinsame Nutzung von Ressourcen zu implementieren. Hiermit wird festgestellt, dass das verwendete System zur gemeinsamen Nutzung von Ressourcen von der Anzahl der Threads abhängig ist, welche der Prozessor gleichzeitig verarbeiten kann. Da funktionale Einheiten in einem Prozessor für gewöhnlich eine gewisse Pufferfunktion (oder Speicherfunktion) und Ausbreitungs- bzw. Verteilungsfunktion bereitstellen, kann der Aspekt der gemeinsamen Nutzung von Ressourcen so gesehen werden, dass dies folgendes umfasst: (1) das Speichern und (2) Verarbeiten/Verteilen von Bandbreite gemeinsam nutzenden Komponenten. In einem Prozessor, der zum Beispiel die gleichzeitige Verarbeitung von zwei Threads unterstützt, können die Pufferressourcen in verschiedenen funktionalen Einheiten statisch oder logisch zwischen zwei Threads aufgeteilt werden. In ähnlicher Weise muss die Bandbreite, die durch einen Pfad für die Ausbreitung bzw. Verbreitung von Informationen zwischen zwei funktionalen Einheiten bereitgestellt wird, zwischen den beiden Threads aufgeteilt und zugeordnet werden. Da diese Aspekte der gemeinsamen Nutzung von Ressourcen an einer Reihe von Stellen in einer Prozessor-Pipeline auftreten können, können an diesen verschiedenen Stellen unterschiedliche Methoden für die gemeinsame Nutzung von Ressourcen eingesetzt werden, und zwar gemäß den Vorgaben und den Merkmalen der jeweiligen Stelle. Hiermit wird festgestellt, dass verschiedene Methoden für die gemeinsame Nutzung von Ressourcen für verschiedene Stellen geeignet sein können in Anbetracht unterschiedlicher Funktionalitäten und Betriebseigenschaften.
  • Die Abbildung aus 4 zeigt ein Blockdiagramm ausgewählter Komponenten für ein Ausführungsbeispiel des Mikroprozessors 30 aus 3 und veranschaulicht verschiedene funktionale Einheiten, die eine Pufferfähigkeit bereitstellen, als logisch partitioniert, so dass sie zwei Threads behandeln (d.h. Thread 0 und Thread 1). Die logische Partitionierung für die beiden Threads der Puffer- (oder Speicher-) und Verarbeitungsfunktionen einer funktionalen Einheit kann erreicht werden, indem eine erste vorbestimmte Gruppe von Einträgen in einer Pufferressource einem ersten Thread zugeordnet wird, und wobei eine zweite vorbestimmte Gruppe von Einträgen in der Pufferressource einem zweiten Thread zugeordnet wird. Dies kann speziell dadurch erreicht werden, dass zwei Paare von Lese- und Schreibzeigern bereitgestellt werden, wobei ein erstes Paar von Lese- und Schreibzeigern einem ersten Thread zugeordnet ist, und wobei ein zweites Paar von Lese- und Schreibzeigern einem zweiten Thread zugeordnet ist. Die erste Gruppe von Lese- und Schreibzeigern kann auf eine erste vorbestimmte Anzahl von Einträgen in einer Pufferressource beschränkt sein, während die zweite Gruppe von Lese- und Schreibzeigern auf eine zweite vorbestimmte Anzahl von Einträgen in der gleichen Pufferressource beschränkt sein kann. In dem veranschaulichten Ausführungsbeispiel sind der Befehls-Streaming-Puffer 106, der Trace-Cache 62 und eine Befehlswarteschlange 103 so dargestellt, dass sie jeweils eine Speicherkapazität bereitstellen, die logisch auf die ersten und zweiten Threads verteilt sind.
  • Der Aspekt der Bandbreitenzuweisung für einen Pfad zwischen funktionalen Einheiten in einem Prozessor wird nachstehend im Text näher beschrieben.
  • Befehls-Streaming-Puffer
  • In Bezug auf die Abbildung aus 3 speist der Befehls-Streaming-Puffer 106 einen Befehlsstrom in einen einzelnen Befehlsdecodierer 112 (d.h. es existiert keine Decodierer-Replikation). Zum die einzelne Decodierungsressource effektiv zu nutzen, ist es wünschenswert sicherzustellen, dass die Bandbreite des Pfads zwischen dem Befehls-Streaming-Puffer 106 und dem Befehlsdecodierer 112 und folglich die „Decodierungsbandbreite" des Befehlsdecodierers 112 effizient unterteilt und zugewiesen bzw. zugeordnet werden kann. Vorgesehen wird gemäß der vorliegenden Erfindung somit ein Verfahren, durch welches eine Thread-Umschaltung in Bezug auf zwei Befehlsströme implementiert wird, die von dem Befehls-Streaming-Puffer 106 zugeführt werden. Das vorliegende Verfahren der Thread-Umschaltung implementiert einen Thread-Umschaltalgorithmus, der versucht, die folgenden Ziele für das Thread-Umschalten zu erreichen:
    • • Das Ausführen eines Thread-Wechsels, wenn ein weiterer Thread Daten aufweist, die nachgeschaltet (Downstream) verteilt werden können (z.B. von dem Befehls-Streaming-Puffer 106);
    • • Das Umschalten von Threads, wenn ein aktueller Thread falsch ausgeführt wird (z.B. wenn ein aktueller Thread ein Löschen des Back-Ends empfängt);
    • • Das Thread-Umschalten, um in der Downstream-Pipeline Fortschritte nach vorne zu machen, bevor der Thread-Wechsel vorgenommen wird (z.B. indem sichergestellt wird, dass mindestens ein vollständiger Befehl für einen aktuellen Thread aus dem Befehls-Streaming-Puffer 106 ausgegeben wird, bevor ein Thread-Wechsel von einem aktuellen Thread zu einem Ziel-Thread ausgeführt wird);
    • • Das Verhindern, dass ein Thread andere Threads verkümmern lässt ( z.B. indem eine Thread-Umschaltoperation für einen aktuellen Thread nur dann ausgeführt wird, wenn eine vorbestimmte Menge von Befehlsdaten für einen aktuellen Thread sich entlang der Prozessor-Pipeline ausgebreitet hat, ohne dass andere Thread-Umschaltmechanismen aufgerufen worden sind); und
    • • Das Amortisieren eines Thread-Umschaltabzugs (z.B. durch Ausgabe einer vorbestimmten Mindestmenge von Befehlsdaten, bevor nach einer genommenen Abzweigung gesucht wird, welche eine Thread-Umschaltoperation auslösen kann).
  • Die vorliegende Erfindung wird nachstehend in Bezug auf ein exemplarisches Ausführungsbeispiel beschrieben, das für die Auswahl zwischen Thread-Daten verwendet wird, gepuffert in dem Befehls-Streaming-Puffer 106, zur Ausbreitung entlang eines unitären Pfads in Richtung des Befehlsdecodierers 112. Es ist jedoch leicht ersichtlich, dass die Lehren der vorliegenden Erfindung an jeder Stelle in einer Prozessor-Pipeline für die Zwecke des Thread-Umschaltens oder Interleaving bzw. Verschachtelns eingesetzt werden können. Die Abbildung aus 5 zeigt ein Blockdiagramm mit näheren Einzelheiten in Bezug auf die Struktur und die Architektur des Befehls-Streaming-Puffers 106. Im Besonderen weist der Befehls-Streaming-Puffer 106 in der Darstellung eine Speicheranordnung mit vier Einträgen 120 (Eintrag 0 – Eintrag 3) auf, die logisch partitioniert bzw. aufgeteilt sind in eine erste Partition 122, die für das Speichern von Befehlen eines ersten Threads (Thread 0) vorgesehen ist, und eine zweite Partition 124, die für das Speichern von Befehlen eines zweiten Threads (Thread 1) vorgesehen ist. In einem Ausführungsbeispiel bietet jeder der Einträge 120 Platz für 8 Informations-Chunks, und somit stellt der Befehls-Streaming-Puffer 106 16 Chunks Daten-Cache je Thread bereit.
  • Der Befehls-Streaming-Puffer 106 weist ferner einen Zuordnungsblock 125 auf, der das Schreiben und Lesen von Daten an und aus den logischen Partitionen 122 und 124 steuert.
  • Jede der Partitionen 122 und 124 weist eine entsprechende Zuordnungslogik 126 auf, die in dem Zuordnungsblock 125 vorhanden ist. Jede Zuordnungslogik 126 weist einen Schreibzeiger 128 und einen Lesezeiger 130 auf, die jeweils auf einen Eintrag 120 in der zugeordneten Partition 122 bzw. 124 verweisen. Jede Zuordnungslogik 26 empfängt einen Befehlsstrom von dem Unified-Cache 44 und schreibt Chunks (d.h. 8 Bytes) des Befehlsstroms in einen Eintrag 120 der ersten oder der zweiten Partition 122 bzw. 124 gemäß den Thread-Spezifikationen. Durch Prüfen des jedem Daten-Chunk zugeordneten „Thread-Bezeichners" ist jede Zuordnungslogik 26 im Besonderen in der Lage zu bestimmen, an welche Partition aus dem Unified-Cache 44 empfangene Daten geschrieben werden sollen.
  • Jede der Zuordnungslogiken 126 gibt Daten aus einer entsprechenden Partition 122 oder 124 an einen MUX 132 aus, der zwischen den Ausgaben der Partitionen 122 und 124 auf der Basis eines Thread-Auswahlsignals 134 auswählt, das durch die Thread-Umschalt-Steuerlogik 136 aktiviert bzw. geltend gemacht wird. In dem exemplarischen Ausführungsbeispiel der vorliegenden Erfindung ist es demgemäß die Thread-Umschalt-Steuerlogik 136, die den Thread-Verschachtelungs- bzw. Umschaltmechanismus implementiert. Die Thread-Umschalt-Steuerlogik 136 überwacht gemäß der Darstellung ferner die Ausgaben jeder der Partitionen 122 und 124 über die Leitungen 138 und 140, so dass sie bestimmen kann, wenn ein Daten-Chunk von einer der Partitionen 122 oder 124 verteilt wird, und um zu identifizieren, von welcher der Partitionen das Chunk verteilt worden ist. Das durch den MUX 132 zur Ausgabe ausgewählte Daten-Chunk wird danach in der Prozessor-Pipeline nach unten an den Befehlsvordecodierer 108 und schließlich an zum Decodieren an den Befehlsdecodierer 122 verteilt.
  • Die Abbildung aus 6 zeigt ein Blockdiagramm der logischen Komponenten der Thread-Umschalt-Steuerlogik 136. Im Besonderen weist die Thread-Umschalt-Steuerlogik 136 gemäß der Abbildung eine Switch-On-Idle-Logic (Einschalt- Ruhezustandslogik) 150, eine Switch-On-Branch-Logic (Einschalt-Verzweigungslogik) 152, eine Long-Latency-Stall-Logic (Anhaltelogik mit langer Latenzzeit) 154, eine innere Löschlogik 156, eine Logik für keinen Datenfluss 158, eine Logik für einen erzwungenen Thread-Wechsel 160, eine externe Löschlogik 162 und eine Logik für eingefügten Ablauf 164 auf. Während die Logiken 150 bis 164 in der Abbildung aus 6 als diskrete Logiken dargestellt sind, gibt es eine umfassende gemeinsame Komponentennutzung zwischen den verschiedenen Logiken, wie dies nachstehend im Text beschrieben ist. Jede der Logiken 150 bis 164 implementiert eine spezielle Funktion, die eine Aktivierung bzw. Geltendmachung oder eine Deaktivierung bzw. Aufhebung der Geltendmachung des Auswahlsignals 134 an den MUX 132 bewirken kann, so dass ein Thread-Wechsel bzw. eine Thread-Umschaltoperation gemäß der nachstehenden Beschreibung bewirkt wird. Die in jeder der Logiken 150 bis 164 enthaltene Funktionalität ist nachstehend im Text in Bezug auf die Flussdiagramme der Abbildungen der 7 bis 14 näher beschrieen. Einzelheiten eines besonderen Ausführungsbeispiels sind in Bezug auf die Abbildungen der 1516 beschrieben.
  • Die Switch-On-Idle-Logic (Einschalt-Ruhezustandslogik) (150)
  • Die Switch-On-Idle-Logic (Einschalt-Ruhezustandslogik) 150 bestimmt, welcher Thread einer Mehrzahl von Threads als Start-Thread ausgewählt wird, wenn alle Threads sich im Ruhezustand (Idle) befinden. Die Abbildung aus 7 zeigt ein Flussdiagramm eines Verfahrens gemäß einem exemplarischen Ausführungsbeispiel der vorliegenden Erfindung zur Bestimmung eines Start-Threads, wenn sich zwei Threads in einem multithreading-fähigen Prozessor im Ruhezustand befinden. Hiermit wird festgestellt, dass das Verfahren 200 auch Anwendung in einem Multithreading-Prozessor finden kann, der mehr als zwei Threads unterstützt. Das Verfahren 200 kann in der Switch-On-Idle-Logic 150 implementiert werden. Das Verfahren 200 beginnt mit dem Schritt 202 mit einem Ruhezustand des Threads, in dem sich beide Threads (d.h. Thread 0 und Thread 1) in dem Ruhezustand befinden. In dem Schritt 204 wird ein erster Thread (z.B. Thread 0) durch Aktivierung oder Deaktivierung des Auswahlsignals 134 ausgewählt, und zwar zum Beispiel nur auf der Basis der Anzeige in dem Mikrocode nach einem Pipeline-Löschereignis (z.B. einem Pipeline-„Nuke" bzw. Löschvorgang). In dem Entscheidungskästchen 206 wird bestimmt, ob eine Anforderung für einen Befehl von Thread 1 empfangen worden ist, bevor eine Anforderung für einen Befehl von Thread 0 empfangen worden ist. In Bezug auf die Abbildung aus 5 ist es ersichtlich, dass die Thread-Umschalt-Steuerlogik 136 so gekoppelt ist, dass sie über ein Thread-Signal 137 von dem Zeiger auf den nächsten Befehl 100 eine Anzeige in Bezug auf den nächsten aus dem Unified-Cache 44 abgerufenen Befehl empfängt. Auf diese Weise ist die Thread-Umschalt-Steuerlogik 136 und im Besonderen die Switch-On-Idle-Logic 150 in der Lage, den Thread zu identifizieren, an den die nächste Befehlsanforderung gerichtet ist. Wenn in erneutem Bezug auf die Abbildung aus 7 eine Anforderung für einen Befehl von Thread 1 vor einer Anforderung für einen Befehl von Thread 0 empfangen wird, wird in dem Schritt 208 ein Thread-Wechsel vorgenommen. Alternativ bleibt die aktuelle Thread-Auswahl in dem Schritt 210 erhalten. Das Verfahren 200 endet mit dem Schritt 212.
  • Die Switch-On-Branch-Logic (Einschalt-Verzweigungslogik) (152)
  • In einem Mikroprozessor 30, wie etwa dem in der Abbildung aus 2 dargestellten Prozessor, der einen Verzweigungs-Prädiktionsmechanismus verwendet, ist natürlich die Möglichkeit für eine falsch vorhergesehene Verzweigung gegeben. Aus diesem Grund schlägt die vorliegende Erfindung eine Thread-Umschaltmethode vor, die beim Auftreten einer vorhergesehenen Verzweigungsprädiktion durch die Verzweigungs-Prädiktionseinheit, die in dem Befehlsstrom eines bestimmten Befehls AUSZUFÜHREN/GENOMMEN ist, einen Thread-Wechsel ausführt. Dies erfolgt zur Reduzierung der Zuordnung von Prozessorressourcen an einen bestimmten Thread angesichts der Möglichkeit, dass der relevante Verzweigungsbefehl falsch vorhergesagt worden ist sowie der spekulativen Beschaffenheit des Befehlsstroms, der auf den Verzweigungsbefehl folgt. Auf diese Weise kann verhindert werden, dass ein spekulativer Befehlsstrom für einen Thread, der einer falsch vorhergesehenen Verzweigung folgen kann, zu tief in die Prozessor-Pipeline eindringt, zu Lasten eines weiteren Threads, der für eine größere Strecke auch keinen Verzweigungsbefehl aufweisen kann.
  • Die Abbildung aus 8 zeigt ein Flussdiagramm eines Verfahrens 200 gemäß einem exemplarischen Ausführungsbeispiel der vorliegenden Erfindung zum Ausführen einer Thread-Umschaltoperation in einem multithreading-fähigen Prozessor bezüglich der Ablaufsteuerung (oder Verteilung) eines Verzweigungsbefehls eines aktuellen Threads (z.B. Thread 0) von dem Befehls-Streaming-Puffer 106 zu dem Befehlsvordecodierer 108. Das Verfahren 220 beginnt mit dem Schritt 222, in dem ein Verzweigungsbefehl durch den Zuordnungsblock 125 so ablaufgesteuert wird, dass er von einer logischen Partition 122 oder 124 der Anordnung ausgegeben wird (z.B. von der logischen Partition 122, die dem Thread 0 zugeordnet ist). Die Thread-Umschalt-Steuerlogik 136 und im Besonderen die Switch-On-Branch-Logic 152 empfängt ein Verzweigungsidentifikationssignal 224 (BPsbsawbranch) von dem Zuordnungsblock 125 gemäß der Abbildung aus 5.
  • Das Verzweigungsidentifikationssignal 224 wird durch den Zuordnungsblock 125 aktiviert, um einen Verzweigungsbefehl zu identifizieren, der durch die Verzweigungsprädiktionseinheit 99 als GENOMMEN prädiziert wird. Im Besonderen nimmt die Verzweigungsprädiktionseinheit bzw. der Verzweigungsprädiktor 104 eine Prädiktion vor, ob ein bestimmter Verzweigungsbefehl genommen oder nicht genommen wird unter Verwendung einer beliebigen einer Reihe allgemeiner Prädiktionen, Methoden oder Algorithmen (z.B. auf der Basis einer aufgezeichneten Verzweigungshistorie für den relevanten Verzweigungsbefehl). Der Verzweigungsprädiktor 104 setzt dann ein dem relevanten Befehl zugeordnetes Bit, das mit dem Befehl entlang der Prozessor-Pipeline in Verbindung mit dem „Anforderungsbezeichner" ausgebreitet worden ist, so dass eine Zuordnung zu der relevanten Zuordnung durch den Zuordnungsblock 125 möglich ist. Hiermit wird festgestellt, dass das Verzweigungsidentifikationssignal 224 nur für Verzweigungsbefehle aktiviert wird, für die GENOMMEN (TAKEN) prädiziert bzw. vorhergesagt wird, und nicht für Befehle, für die NICHT GENOMMEN (NOT TAKEN) prädiziert wird. In einem alternativen Ausführungsbeispiel der vorliegenden Erfindung kann das Verzweigungsidentifikationssignal 224 auch aktiviert werden, wenn ein beliebiger Verzweigungsbefehl auftritt, für den eine Prädiktion vorgenommen worden ist.
  • Die Abbildung aus 15 veranschaulicht das Verzweigungsidentifikationssignal 224, das eine Eingabe an ein UND-Gatter 225 bereitstellt.
  • In dem Entscheidungskästchen 226 wird bestimmt, ob eine vorbestimmte Mindestmenge von Befehlsdaten (z.B. eine vorbestimmte Mindestanzahl von Chunks) für den aktuellen Thread (Thread 0) von dem Befehls-Streaming-Puffer 106 verteilt (oder gesendet) worden ist. Zu diesem Zweck und in Bezug auf die Abbildung aus 15A weist die Umschalt-Steuerlogik 136 einen Zähler in Form eines Schrittzählers für gesendete Chunks 228 auf, der einen Zählwert der von einer aktuellen Logikpartition 122 oder 124 des Befehls-Streaming-Puffers 106 verteilten Chunks vor einem Thread-Wechsel führt. Der Schrittzähler für gesendete Chunks 228 wird durch die Ausgabe eines UND-Gatters 230 inkrementiert, wobei das Gatter drei Eingänge empfängt. Ein Signal BPready 232 wird durch den Zuordnungsblock 125 aktiviert, um anzuzeigen, dass ein Chunk für die Verteilung von der relevanten Logikpartition 122 oder 124 bereit steht. Ein Thread-Signal 234, das dem EINTRAG zugeordnet ist (von der Thread-Umschalt-Steuerlogik 136), identifiziert den Thread (und entsprechend die logische Partition 122 oder 124), zu dem das für die Verteilung bereit stehende Chunk gehört. Ein Signal NOT(IStall) 236 zeigt an, dass kein Anhaltezustand an der Befehlsleitlogik 110 empfangen worden ist. Beim Aktivieren der Signale 232236 wird der Ausgang des UND-Gatters 230 aktiviert bzw. geltend gemacht, und der Schrittzähler für gesendete Chunks 228 wird heraufgesetzt, um die Ablaufsteuerung eines Chunks zur Verteilung von dem Befehls-Streaming-Puffer 106 aufzuzeichnen.
  • Die Thread-Umschalt-Steuerlogik 136 weist ferner ein Register „Chunks vor Wechsel bei Verzweigung" 238 auf, das in einem Ausführungsbeispiel der vorliegenden Erfindung über einen Steuerregisterbus 240 programmierbar ist, um einen Wert zu speichern, der eine vorbestimmte Anzahl von Chunks anzeigt, die einer Ablaufsteuerung des Befehls-Streaming-Puffers 106 unterzogen werden müssen, bevor eine Thread-Umschaltoperation als Reaktion auf einen Verzweigungsbefehl auftreten kann. In einem alternativen Ausführungsbeispiel der vorliegenden Erfindung kann ein Wert, der die vorbestimmte Anzahl von Chunks anzeigt, fest verdrahtet werden. Die Umschalt- Steuerlogik 136 weist ferner einen Komparator 242 auf, der eine Vergleichsoperation in Bezug auf den Ausgang des Schrittzählers 228 und des Registers 238 vornimmt und ein Signal an das UND-Gatter 244 aktiviert, wenn der durch den Schrittzähler 228 angezeigte Wert einen Wert überschreitet, der in dem Register 238 gespeichert ist. Die Geltendmachung des Ausgangssignals des Komparators 242 entspricht einer positiven Bestimmung in dem Entscheidungskästchen 226 aus 8.
  • Das UND-Gatter 230 stellt ferner einen Eingang in das UND-Gatter 225 bereit, und die Aktivierung der Ausgabe des UND-Gatters 230 in Verbindung mit der Aktivierung des Verzweigungsidentifikationssignals 224 bewirken die Geltendmachung der Ausgabe des UND-Gatters 225 (d.h. ein Signal für eine gesendete Verzweigung 227) als Eingang in das UND-Gatter 244. Die Geltendmachung des Signals für eine gesendete Verzweigung 227 stellt das Auftreten des detektierten Ereignisses in dem Schritt 222 dar.
  • Nach einer positiven Bestimmung in dem Entscheidungskästchen 226 fährt das Verfahren 200 mit dem Entscheidungskästchen 248 fort, in dem bestimmt wird, ob eine vorbestimmte Menge von Befehlsdaten (z.B. eine vorbestimmte Mindestanzahl von Chunks) für einen alternativen Thread (z.B. Thread 1) aussteht und zur Verteilung von der logischen Partition 124 des Befehls-Streaming-Puffers 106 bereit steht. Diese Bestimmung ist dahingehend vorteilhaft, dass sie das Auftreten eines Thread-Wechsels verhindert, wenn unzureichende Befehlsdaten in dem Befehls-Streaming-Puffer 106 für den Ziel-Thread gepuffert worden sind, um einen Thread-Wechsel zu diesem ziel-Thread zu gewährleisten. Ein Thread-Wechsel kann im Besonderen mehr Taktzyklen verbrauchen als wie sie potenziell erforderlich wären, um erneut Befehlsdaten für einen aktuellen Thread bereitzustellen. Zum Beispiel kann eine Thread-Umschaltoperation sechs Zyklen voraussetzen, während eine hohe Wahrscheinlichkeit gegeben sein kann, dass Befehlsdaten für einen aktuellen Thread innerhalb von drei Taktzyklen empfangen werden.
  • In erneutem Bezug auf die Abbildung aus 15 kann eine beispielhafte Implementierung der Thread-Umschalt-Steuerlogik 136 ein Register „Ausstehende Chunks vor Wechsel" aufweisen, das über den Steuerregisterbus 240 programmierbar ist, so dass es einen Wert speichert, der eine vorbestimmte Mindestanzahl von Chunks für einen Ziel-Thread (z.B. Thread 1) anzeigt, die in einer Anordnungspartition (z.B. Partition 124) gepuffert werden sollte, bevor ein Thread-Wechsel zu einem Ziel-Thread zulässig ist. In einem alternativen Ausführungsbeispiel der vorliegenden Erfindung kann der diese vorbestimmte Anzahl von Chunks anzeigende Wert wiederum fest verdrahtet werden. Die Thread-Umschalt-Steuerlogik 136 weist ferner einen Schrittzähler „Ausstehende Chunks zählen" 252 auf, der einen Zählwert der Anzahl der Chunks für einen Ziel-Thread führt (d.h. nicht einen aktuellen Thread), die in dem Befehls-Streaming-Puffer 106 gespeichert werden. Der Schrittzähler 252 wird durch ein Signal „IPD ausstehenden Chunk senden" 254 inkrementiert, das durch den Zuordnungsblock 125 aktiviert wird, wenn von dem Unified-Cache 44 empfangener Chunk von Befehlsdaten einem Eintrag in dem Puffer 106 zugeordnet ist. Der Zuordnungsblock 125 verwendet den vorstehend beschriebenen „Thread-Bezeichner", der jedem als Reaktion auf eine Anforderung des nächsten Befehls abgerufenen Chunk zugeordnet ist, um zu identifizieren, ob ein bestimmter Chunk für den Ziel-Thread bestimmt ist und nicht für den aktuellen Thread. Ein Komparator 256 vergleicht die entsprechenden in dem Register 250 und dem Schrittzähler 252 gespeicherten Werte und aktiviert ein Ausgangssignal an das UND-Gatter 244, wenn der durch den Schrittzähler 202 geführte Wert den Wert überschreitet, der in dem Register 250 gespeichert ist. Die Aktivierung bzw. Geltendmachung des Ausgangssignals des Komparators 256 entspricht einer positiven Bestimmung in dem in der Abbildung aus 8 dargestellten Entscheidungskästchen 248.
  • Nach einer positiven Bestimmung in dem Entscheidungskästchen 248 fährt das Verfahren 220 mit dem Entscheidungskästchen 260 fort, wo bestimmt wird, ob eine vorbestimmte Menge von Befehlsdaten für den aktuellen Thread entlang der Pipeline des Mikroprozessors 30 einer Ablaufsteuerung unterzogen worden ist. Diese Bestimmung ist dahingehend vorteilhaft, dass sie den Fortschritt des aktuellen Threads nach vorne vor einer Thrad-Umschaltoperation gewährleistet. In einem exemplarischen Ausführungsbeispiel der vorliegenden Erfindung, das den Befehlsvorrat der Intel Architektur (IA) einsetzt, wird bestimmt, ob drei (3) Chunks von Befehlsdaten für den aktuellen Thread ablaufgesteuert worden sind, da dies mindestens einen vollständigen Befehl für den aktuellen Thread gewährleistet.
  • In einem alternativen Ausführungsbeispiel der vorliegenden Erfindung kann auf die Bestimmung in dem Entscheidungskästchen 260 verzichtet werden, da das Detektieren der Ablaufsteuerung des Verzweigungsbefehls, das selbst mindestens einen vollständigen Befehl darstellt, eine Konformität mit der Bestimmung in dem Entscheidungskästchen 260 gewährleistet.
  • In Bezug auf die Abbildung aus 15A kann ein exemplarisches Ausführungsbeispiel der Thread-Umschalt-Steuerlogik 136 einen Komparator 262 aufweisen, der bestimmt, ob der von dem Schrittzähler „Gesendeter Chunk" 228 geführte Zählwert größer oder gleich einem vorbestimmten Mindestwert von zum Beispiel 3 ist. In alternativen Ausführungsbeispielen der vorliegenden Erfindung kann dieser vorbestimmte Mindestwert entweder programmierbar oder fest verdrahtet sein. Wenn der durch den Schrittzähler 228 geführte Wert größer oder gleich dem vorbestimmten Mindestwert ist, so aktiviert der Komparator 262 ein Ausgangssignal an das UND-Gatter 244. Die Aktivierung des Ausgangssignals des Komparators 262 entspricht einer positiven Bestimmung in dem Entscheidungskästchen 260, dargestellt in 8.
  • Nach einer positiven Bestimmung in dem Entscheidungskästchen 260 wird in dem Schritt 264 eine Thread-Umschaltoperation ausgeführt, sofern die Bedingungen aus den Entscheidungskästchen 226, 248 und 260 erfüllt werden. Wenn eine der Bedingungen aus den Entscheidungskästchen 226, 248 oder 260 hingegen nicht erfüllt wird, wird in dem Schritt 266 eine aktuelle Thread-Auswahl geführt. Das Verfahren 220 endet danach mit dem Schritt 268.
  • Hiermit wird festgestellt, dass die durch den Schritt 222 und die Entscheidungskästchen 226, 248 und 260 dargestellten Bedingungen die vier Eingänge in das UND-Gatter 244 aus 15A darstellen, und für den Fall, dass diese Bedingungen alle erfüllt werden, wird der Ausgang des UND-Gatters 244 aktiviert und stellt einen Eingang in ein ODER-Gatter 245 berreit. Der Ausgang des ODER-Gatters 245 bildet das Thread-Auswahlsignal 134, das von der Thread-Umschalt-Steuerlogik 136 ausgegeben wird. Die Geltendmachung des Ausgangs des ODER-Gatters 245 entspricht der Ausführung der Thread-Umschaltoperation in dem Schritt 264.
  • Das vorstehende Ausführungsbeispiel der vorliegenden Erfindung ist zwar in Bezug auf eine Implementierung mit einem Schrittzähler 223, einem Register „Chunks vor dem Einschalten der Verzweigung" 238 und dem Komparator 242 beschrieben, wobei hiermit festgestellt wird, dass die Erfindung implementiert werden kann, indem der Schrittzähler bzw. Aufwärtszähler 228 durch einen Abwärtszähler ersetzt wird, der vorab mit dem Wert aus dem Register 238 geladen wird, wenn ein Thread-Wechsel eintritt. Der Abwärtszähler wird in dem vorliegenden Ausführungsbeispiel immer dann herabgesetzt, wenn ein Chunk von einer aktuellen Logikpartition 122 oder 124 des Befehls-Streaming-Puffers 106 verteilt wird. Der Abwärtszähler aktiviert danach ein Ausgangssignal (das dem Ausgangssignal des Komparators 242 in dem vorstehend beschriebenen Ausführungsbeispiel entspricht), um eine positive Bestimmung in dem Entscheidungskästchen 226 anzuzeigen. Der Abwärtszähler kann in dem vorliegenden Ausführungsbeispiel auch durch den Ausgang des UND-Gaters 230 herabgesetzt werden.
  • Die Long-Latency-Stall-Logic (Anhaltelogik mit langer Latenzzeit) (154)
  • Aufgrund der beschränkten Ressourcen, die für die Zuordnung an einen Befehlsstrom eines bestimmten Threads in einer Prozessor-Pipeline eines Multithread-Prozessors zur Verfügung stehen, und aufgrund fehlerhafter Verzweigungsprädiktionen und Cache-Misses, treten Anhaltevorgänge in einer derartigen Prozessor-Pipeline regelmäßig auf. Im Besonderen in Bezug auf den Mikroprozessor 30 aus 2 kann es vorkommen, dass die Zuordnungseinrichtung 76 bestimmt, dass unzureichende Ressourcen (z.B. physikalische Register oder Einträge in den Reservestationen oder dem Umordnungspuffer 78, die logisch auf Thread 0 und Thread 1 aufgeteilt sind) für Befehle (d.h. Mikrobefehle) für einen bestimmten Thread, der von der Warteschlange 68 empfangen wird, zur Verfügung stehen. In diesem Fall aktiviert die Zuordnungseinrichtung 76 ein für einen Thread spezifisches Anhaltesignal 82, das über die Trace-Zustellungs--Engine bzw. Trace Delivery Engine 60 an die Mikrobefehls-Umsetzungs-Engine 54 verteilt wird. Bei der Geltendmachung eines derartigen Anhaltesignals 82 für einen bestimmten Thread kann es wünschenswert sein, eine Thread-Umschaltoperation auszuführen. Die Long-Latency-Stall-Logic 154 weist eine Schaltkreisanordnung für die Implementierung einer Thread-Umschaltoperation für den Fall eines Anhaltens der Prozessor-Pipeline auf.
  • Die Abbildung aus 9 zeigt ein Flussdiagramm eines Verfahrens 280 gemäß einem exemplarischen Ausführungsbeispiel der vorliegenden Erfindung zum Ausführen einer Thread-Umschaltoperation in einem multithreading-fähigen Prozessor beim Eintreten eines Anhaltens mit langer Latenzzeit zum Beispiel aufgrund eines Anhaltens in einer Prozessor-Pipeline als Folge der fehlenden Verfügbarkeit von Ressourcen, einer falschen Verzweigungsprädiktion oder eines Cache-Miss-Ereignisses. Das Verfahren 280 beginnt mit dem Schritt 282, in dem ein Anhaltezustand detektiert wird. Wie dies bereits vorstehend im Text beschrieben worden ist, kann dieser Anhaltezustand detektiert werden, indem die Geltendmachung des Thread-spezifischen Anhaltesignals 82 bestimmt wird, wie dies in 2 dargestellt ist. Alternativ kann der Anhaltezustand detektiert werden, indem die Aktivierung anderer Anhaltesignale bestimmt wird, die etwa durch die Zuordnungseinrichtung 76, den Trace-Cache 62 (beide als „Back-End-Anhaltezustände bezeichnet), den Befehlsdecodierer 112 oder die Befehlsieitlogik 110. In dem Entscheidungskästchen 284 wird bestimmt, ob eine vorbestimmte Anzahl von Taktzyklen vergangen ist, seit der Anhaltezustand in dem Schritt 282 detektiert worden ist. In Bezug auf die Abbildung aus 15 kann eine exemplarische Implementierung der Thread-Umschalt-Steuerlogik 136 ein Register für einen „langen Latenzzählwert" 286 aufweisen, das über den Steuerregisterbus 240 programmierbar ist, so dass ein Wert gespeichert wird, der diese vorbestimmte Mindestanzahl von Taktzyklen anzeigt, die vergangen sein müssen seit dem Detektierendes Anhaltezustands, bevor ein Thread-Wechsel zu einem Ziel-Thread zulässig ist. In einem alternativen Ausführungsbeispiel der vorliegenden Erfindung kann der Wert, der diese vorbestimmte Anzahl von Taktzyklen anzeigt, fest verdrahtet werden. Die Umschalt-Steuerlogik 136 weist ferner einen Aufwärtszähler „lange Latenz" 288 auf, der einen Zählwert der Taktzyklen führt, die seit dem Detektieren des Anhaltezustands in dem Schritt 282 detektiert worden sind. Der Aufwärtszähler 288 wird durch ein Signal „IXstall" oder Befehlsumsetzungsanhaltezustand 290 inkrementiert, das bei jedem Taktzyklus aktiviert wird, wenn die Prozessor-Pipeline angehalten wird. Der Aufwärtszähler bzw. Schrittzähler 288 wird ferner zurückgesetzt durch die Deaktivierung des Signals „TCFBstall" 292, das deaktiviert wird, wenn der Anhaltezustand überwunden ist. Das Signal „TCFBstall" 292 wird durch einen Trace Cache 0Fill Buffer (TCFB bzw. Trace-Cache-Füllpuffer) (nicht abgebildet) aktiviert, der ein Zuordnungsanhaltesignal 58 von der Trace Delivery Engine 60 vor der Mikrobefehls-Umsetzungs-Engine 54 ausbreitet. Ein Komparator 294 vergleicht die entsprechenden in dem Register 286 und dem Aufwärtszähler 288 gespeicherten Werte und aktiviert das Ausgangssignal an ein UND-Gatter 296, wenn der durch den Aufwärtszähler 288 geführte Wert einen in dem Register 286 gespeicherten Wert überschreitet. Die Aktivierung des Ausgangssignals des Komparators 294 entspricht einer positiven Bestimmung in dem Entscheidungskästchen 284 aus 9.
  • Wenn in dem Entscheidungskästchen 284 bestimmt wird, dass die vorbestimmte Anzahl von Taktzyklen nicht abgelaufen ist, wird die aktuelle Thread-Auswahl in dem Schritt 285 erhalten, und das Verfahren 280 springt zurück zu dem Entscheidungskästchen 284.
  • Nach einer positiven Bestimmung in dem Entscheidungskästchen 284 fährt das Verfahren 280 mit dem Entscheidungskästchen 284 fort, in dem bestimmt wird, ob eine vorbestimmte Mindestmenge an Befehlsdaten für den aktuellen Thread einer Ablaufsteuerung in der Pipeline des Mikroprozessors 30 ausgeführt worden ist. Wie dies vorstehend in Bezug auf das Entscheidungskästchen 260 aus 8 beschrieben worden ist, erfolgt diese Bestimmung durch die Kombination aus dem Aufwärtszähler „Chunk gesendet" 228 und dem Komparator 262. Der Komparator 262 stellt einen Eingang an das UND-Gatter 296 bereit, wobei der Ausgang des Komparators 262 aktiviert wird, sobald die vorbestimmte Anzahl von Chunks für den aktuellen Thread einer Ablaufsteuerung in der Mikroprozessor-Pipeline einer Ablaufsteuerung unterzogen worden ist.
  • Das Ausgangssignal 297 des UND-Gatters 296 wird zu der Verzweigungsadressen-Berechnungseinrichtung 114 geleitet, welche danach einen Neustartbefehlszeiger für den Thread bestimmt, von dem der Wechsel erfolgt ist (d.h. der aktuelle Thread), und wobei ein Signal Verzweigungsadresse löschen (BAclear) für den aktuellen Thread deaktiviert wird. Wenn auf allgemeinerer Ebene ein Thread-Wechsel erfolgt, ist ein Befehlszeiger erforderlich, um eine Position zu identifizieren, von der der Thread neu begonnen wird, von dem der Wechsel erfolgt ist. Der Befehlszeiger kann (1) das Ziel eines Verzweigungsbefehls sein, der als GENOMMEN vorhergesagt wird, wobei der Befehlszeiger in diesem Fall durch die Switch-On-Branch-Logic 152 bereitgestellt wird; (2) durch den Mikrocode bereitgestellt werden; oder (3) durch die Verzweigungsadressen-Berechnungseinrichtung 114 bereitgestellt werden (wie dies in der unmittelbar vorstehend erörterten Situation der Fall ist).
  • Nach einer positiven Bestimmung in dem Entscheidungskästchen 298 erfolgt in dem Entscheidungskästchen 300 eine weitere Bestimmung, ob ein Befehlsumsetzungs-Back-End-Löschsignal 302 aktiviert worden ist. Wenn dies der Fall ist, wird ein Thread-Wechsel in dem Schritt 303 ausgeführt. Nach negativen Bestimmungen in den Entscheidungskästchen 298 bzw. 300 wird in dem Schritt 304 alternativ die aktuelle Thread-Auswahl beibehalten. Das Verfahren 280 endet danach in dem Schritt 306.
  • Die innere Löschlogik (156)
  • Eine interne Pipeline-Löschoperation wird aus dem inneren der Mikrobefehls-Umsetzungs-Engine 54 selbst aufgerufen im Gegensatz zu einer externen Löschoperation, die von außerhalb der Mikrobefehls-Umsetzungs-Engine 54 (z.B. über die Rückordnungslogik in Form einer Löschoperation) aufgerufen wird. Derartige Löschoperationen sind wünschenswerte Ereignisse für eine Thread-Umschaltoperation, da eine hohe Wahrscheinlichkeit gegeben ist, dass die Löschoperation als Folge eines Zustands aufgerufen worden ist, der einem aktuellen Thread zugeordnet ist, und wobei ein alternativer Thread besser auf die Verarbeitung in der Pipeline vorbereitet sein kann (z.B. mit gefüllten Puffern).
  • Die Abbildung aus 10 zeigt ein Flussdiagramm eines Verfahrens 310 gemäß einem exemplarischen Ausführungsbeispiel der vorliegenden Erfindung zum Ausführen einer Thread-Umschaltoperation in einem multithreading-fähigen Prozessor beim Auftreten einer internen Pipeline-Löschoperation. Das Verfahren 310 beginnt mit dem Schritt 312, in dem die Geltendmachung bzw. Aktivierung eines Löschsignals detektiert wird. In Bezug auf das exemplarische Ausführungsbeispiel der Umschalt-Steuerlogik 136 aus 15A kann dies durch Detektieren der Geltendmachung des Signals „IXbaclear" 302 für einen Löschvorgang der Befehlsumsetzungs-Verzweigungsadressen-Berechnungseinrichtung ausgeführt werden. Im Besonderen stellt dieses Signal 302 in der Abbildung einen Eingang in ein UND-Gatter 314 bereit, das ferner einen Eingang von dem Komparator 256 empfängt. Wie dies bereits vorstehend im Text beschrieben worden ist, wird der Ausgang des Komparators 256 aktiviert, wenn die Anzahl der ausstehenden Chunks in dem Befehls-Streaming-Puffer 106 gemäß der Umordnung durch den Aufwärtszähler „Ausstehende Chunks zählen" 252 den in dem Register „Ausstehende Chunks vor Wechsel" 250 gespeicherten Wert überschreitet. Folglich wird der Ausgang des Komparators 256 aktiviert, um eine positive Bestimmung des Zustands darzustellen, der durch das Entscheidungskästchen 316 des Verfahrens 310 dargestellt ist, woraufhin in dem Schritt 318 eine Thread-Umschaltoperation ausgeführt wird. Wenn im Besonderen beide Eingänge des UND-Gatters 314 aktiviert werden, wird der Ausgang des UND-Gaters 314 aktiviert, was wiederum einen aktivierten Eingang an das ODER-Gatter 245 bereitstellt. Wenn andererseits die Bestimmung in dem Entscheidungskästchen 316 negativ ausfällt, so bleibt in dem Schritt 320 die aktuelle Thread-Auswahl erhalten. Das Verfahren 310 endet dann mit dem Schritt 322.
  • Die Logik für keinen Datenfluss (158)
  • In Fällen, wenn ein Level-1-Cache-Miss für einen aktuellen Thread auftritt, resultiert eine Operation mit langer Latenzzeit, die eine verhältnismäßig hohe Anzahl von Taktzyklen für die Ausführung erfordern kann. Wenn die Bedingungen für eine Operation mit langer Latenzzeit erfüllt sind, die in dem Flussdiagramm aus 9 dargestellt sind, so kann die Anhaltelogik mit langer Latenzzeit 154 in dieser Situation eine Thread-Umschaltoperation auslösen kann. Wenn hingegen alle Bedingungen für eine Operation mit langer Latenzzeit nicht erfüllt sind, löst die Anhaltelogik mit langer Latenzzeit 154 keine Thread-Umschaltoperation aus. In diesen Fällen ist eine alternative Logik erforderlich.
  • Die Abbildung aus 11 zeigt ein Flussdiagramm eines Verfahrens 330 gemäß einem exemplarischen Ausführungsbeispiel der vorliegenden Erfindung zum Ausführen einer Thread-Umschaltoperation in einem multithreading-fähigen Prozessor beim Auftreten eines Zustands „Kein Datenfluss" in Bezug auf einen bestimmten Thread in dem multithreading-fähigen Prozessor. Das Verfahren 330 beginnt mit dem Schritt 332, in dem das Fehlen eines Befehlsflusses für einen aktuellen Thread aus dem Unified-Cache 44 zu dem Befehls-Streaming-Puffer 106 detektiert wird. In Bezug auf die Abbildung aus 15A kann dies in einem exemplarischen Ausführungsbeispiel detektiert werden durch die Aktivierung (oder Deaktivierung) eines Datenflusssignals 334, das durch den Unified-Cache 44 für jeden Taktzyklus aktiviert wird, während dem ein Befehlsstrom an den Befehls-Streaming-Puffer 106 bereitgestellt wird. Der Zustand „Kein Datenfluss" kann auch als eine Verriegelung des Datenflusses an den Befehls-Vordecodierer 108 detektiert werden, da dies eine Verriegelung des Datenflusses von den Unified-Cache 44 an den Befehls-Streaming-Puffer 106 impliziert. Der Zustand „Kein Datenfluss" kann auch als eine Verriegelung des Datenflusses an den Befehls-Vordecodierer 108 detektiert werden, da dies eine Verriegelung des Datenflusses von dem Unified-Cache 44 mit dem Befehls-Streaming-Puffer 106 impliziert.
  • In dem Entscheidungskästchen 336 wird bestimmt, ob eine vorbestimmte Anzahl von Taktzyklen ohne Datenfluss von dem Unified-Cache 44 zu dem Befehls-Streaming-Puffer 106 abgelaufen ist. Zu diesem Zweck ist die Thread-Umschaltlogik 136 in der Abbildung aus 15A so dargestellt, dass sie einen Zähler für „Keinen Datenfluss" 338 aufweist, der für jeden sequentiellen Taktzyklus heraufgesetzt wird, für den das Datenflusssignal 334 deaktiviert ist, was das Fehlen eines Befehlsstroms an den Befehls-Streaming-Puffer 106 für den aktuellen Thread anzeigt. Der Zähler 338 kann durch die Aktivierung des Signals 335 zurückgesetzt werden, das auftritt, wenn ein Datenfluss zu dem Befehlsvordecodierer 108 von dem Befehls-Streaming-Puffer 106 wieder aufgenommen wird. Das Signal 335 kann als Reaktion auf eine an den Signalen 232 und 236 (d.h. den Signalen BPready und NOTISstall) ausgeführte UND-Funktion aktiviert werden. Die Logik 136 weist ferner ein Register „Keine Datenflusszyklen" 340 auf, das über den Steuerregisterbus 240 programmierbar ist, so dass es einen Wert speichert, der eine vorbestimmte Mindestanzahl von Taktzyklen anzeigt, bevor ein Zustand von keinem Datenfluss detektiert werden kann. In einem alternativen Ausführungsbeispiel der vorliegenden Erfindung kann der Wert, der diese vorbestimmte Anzahl von Taktzyklen anzeigt, fest verdrahtet sein. Der Zähler 338 und das Register 340 stellen einen Eingang an einen Komparator 342 bereit, der einen Ausgang an das UND-Gatter 344 geltend macht, wenn der von dem Zähler 338 geführt Wert den in dem Register 340 gespeicherten Wert übersteigt. Die Aktivierung des Ausgangssignals des Komparators 342 entspricht einer positiven Bestimmung in dem Entscheidungskästchen 336 aus 11.
  • Für den Fall einer negativen Bestimmung in dem Entscheidungskästchen 336 fährt das Verfahren 330 mit dem Schritt 345 fort, in dem die aktuelle Thread-Auswahl beibehalten wird.
  • Nach einer positiven Entscheidung in dem Entscheidungskästchen 336 fährt das Verfahren mit den Bestimmungen in den Entscheidungskästchen 346 und 348 fort, die den Bestimmungen in den Entscheidungskästchen 248 und 260 des Verfahrens 220 aus 8 entsprechen. Folglich sind die Ausgänge bzw. Ausgaben der Komparatoren 256 und 262, welche die Bestimmungen in den Entscheidungskästchen 346 und 348 implementieren, in der Abbildung so dargestellt sind, dass sie einen Eingang in das UND-Gatter 344 bereitstellen. Der Ausgang des UND-Gatters 344 stellt wiederum einen Eingang in das ODER-Gatter 245 bereit. Dies stellt eine Implementierung der Logik zur Ausführung der Thread-Umschaltoperation in dem Schritt 350 des Verfahrens 330 bereit, wenn positive Bestimmungen in Bezug auf die Entscheidungskästchen 336, 346 und 348 auftreten. Wenn alternativ eine negative Bestimmung in einem der Entscheidungskästchen 336, 346 oder 348 auftritt, so wird die aktuelle Thread-Auswahl in dem Schritt 352 beibehalten. Das Verfahren 330 endet danach mit dem Schritt 354.
  • Die Logik für einen erzwungenen Thread-Wechsel (160)
  • In bestimmten Fällen kann ein Befehlsstrom (der entweder einen ersten oder zweiten Thread umfasst) auftreten, der besonders linear ist und somit keine Verzweigungsbefehle aufweist. Wenn angenommen wird, dass keine der vorstehend und nachstehend beschriebenen Bedingungen auftritt, so ist es erkennbar, dass ein derartiger linearer Thread einen überproportionalen Anteil der Prozessorressourcen verbrauchen kann, wenn kein Ereignis zum Auslösen eines Thread-Wechsels auftritt. Um es zu verhindern, dass ein derartiger linearer Thread in Bezug auf die Prozessorressourcen über das Ziel hinaus schießt, schlägt die vorliegende Erfindung eine Logik vor, welche nach der Ablaufsteuerung oder dem Verteilen einer vorbestimmte Menge von Befehlsdaten für einen einzelnen Thread von einer Ressource, wie etwa dem Befehls-Streaming-Puffer 106, eine Thread-Umschaltoperation auslöst.
  • Die Abbildung aus 12 zeigt ein Flussdiagramm eines Verfahrens 360 gemäß einem exemplarischen Ausführungsbeispiel der vorliegenden Erfindung zum Ausführen einer Thread-Umschaltoperation in einem multithreading-fähigen Prozessor bei der Ablaufsteuerung (oder dem Verteilen) einer vorbestimmten Befehlsmenge für einen bestimmten Thread (z.B. Thread 0) von dem Befehls-Streaming-Puffer 106 zu dem Befehlsvordecodierer 108. Das Verfahren beginnt mit dem Schritt 362, in dem Befehlsdaten für einen bestimmten Thread (z.B. Thread 0) für die Ablaufsteuerung und Verteilung von dem Befehls-Streaming-Puffer 106 ausgewählt werden. Diese Auswahl kann durch den Zustand des Thread-Auswahlsignals 134 dargestellt werden, das von der Thread-Umschalt-Steuerlogik 136 an den MUX 132 ausgegeben wird.
  • In dem Entscheidungskästchen 364 wird bestimmt, ob eine vorbestimmte maximale Menge von Befehlsdaten für einen aktuellen Thread (z.B. Thread 0) einer Ablaufsteuerung von dem Befehls-Streaming-Puffer 106 unterzogen worden ist. Di in der Abbildung aus 15A veranschaulichte exemplarische Thread-Umschalt-Steuerlogik 136 weist ein Register „Ressourcenbindung" 366 auf, das über den Steuerregisterbus 240 so programmierbar ist, dass es einen Wert speichert, der eine vorbestimmte maximale Anzahl von Chunks für einen bestimmten Thread anzeigt, die von dem Befehls-Streaming-Puffer 106 einer Ablaufsteuerung unterzogen werden können, bevor eine Thread-Umschaltoperation ausgelöst wird. In einem alternativen Ausführungsbeispiel der vorliegenden Erfindung kann der Wert, der die vorbestimmte maximale Anzahl von Chunks anzeigt, fest verdrahtet werden. Das Register „Ressourcenbindung" 366 und der Aufwärtszähler „Chunk gesendet" 228, der einen Zählwert der aus dem Puffer 106 für einen bestimmten Thread ausgegebenen Chunks verwaltet, stellen einen Eingang in den Komparator 368 bereit, der einen Ausgang an das UND-Gatter 344 aktiviert, wenn der durch den Aufwärtszähler 228 ausgegebene Wert den in dem Register „Ressourcenbindung" 366 gespeicherten Wert überschreitet. Folglich entspricht die Aktivierung des Ausgangssignals des Komparators 368 einer positiven Bestimmung in dem Entscheidungskästchen 364 aus 12.
  • Der Ausgang des UND-Gatters 344 stellt gemäß der Abbildung einen Eingang in das ODER-Gatter 245 bereit sowie einen Ausgang „FTC einfügen" 434.
  • Für den Fall einer negativen Bestimmung in dem Entscheidungskästchen 364 fährt das Verfahren 360 mit dem Schritt 370 fort, in dem die aktuelle Thread-Auswahl erhalten bleibt, woraufhin das Verfahren 330 zu dem Entscheidungskästchen 364 zurück springt.
  • Nach einer positiven Bestimmung in dem Entscheidungskästchen 364 fährt das Verfahren 360 mit Bestimmungen in den Entscheidungskästchen 372 und 374 fort, die den Bestimmungen in den Entscheidungskästchen 248 und 260 des Verfahrens 220 aus 8 entsprechen. Folglich stellen die Ausgaben bzw. Ausgänge der Komparatoren 256 und 262, welche die Bestimmungen in den Entscheidungskästchen 372 und 374 implementieren, gemäß der Abbildung einen Eingang in das UND-Gatter 344 bereit.
  • Nach positiven Bestimmungen in den Entscheidungskästchen 336, 346 und 348 wird in den von dem Befehls-Streaming-Puffer 106 verteilten Befehlsstrom eine Albaufmarkierung (oder „eingefügter Ablauf") (z.B. '1000) eingefügt. Der eingefügte Fluss bzw. Ablauf ist erforderlich, da die Verzweigungsadressen-Berechnungseinrichtung 114 die Erfassung des aktuellen Threads neu starten muss, da die Thread-Umschaltoperation an einem unvollständigen Befehl aufgetreten sein kann. In diesem Fall fügt die Verzweigungsprädiktionseinheit 113 den eingefügten Ablauf in den Befehlsstrom ein, um den erzwungenen Thread-Wechsel anzuzeigen. Für den eingefügten Ablauf ist ForceUOPValid aktiviert. Der eingefügte Ablauf wird nur eingefügt, nachdem die Übermittlung eines Chunks von dem Befehls-Streaming-Puffer 106 an den Befehlsvordecodierer 108 terminiert bzw. zeitlich geplant worden ist. Nachdem der relevante Chunk verteilt worden ist, wird der eingefügte Ablauf über Multiplexierung in das Feld ForceUOPVector (event_info Feld) eingefügt. Zu diesem Zweck wird auf die Abbildung aus 16 verwiesen, die das Feld event_info für Chunks veranschaulicht, die in einer beispielhaften Anordnungspartition 122 in dem Befehls-Streaming-Puffer 106 gepuffert worden sind. Der Ausgang „insert FTC" bzw. „FTC einfügen" 434 ist so dargestellt, dass er einen MUX 450 so betreibt, dass zwischen (1) dem aktuellen Inhalt des Felds event_info 121 eines in einem Eintrag 120 in der Partition 122 und (2) dem eingefügten Ablauf 452 ausgewählt wird. Für den Fall, dass der Ausgang 244 nach einer Aktivierung des Ausgangs des Komparators 368 aktiviert wird, wird der eingefügte Ablauf 452 in das Feld event_info 121 eines von der Partition 122 verteilten Chunks eingefügt.
  • Eine Thread-Umschaltoperation wird danach in dem Schritt 376 durch Aktivierung des Auswahlsignals 134 als Reaktion auf die Aktivierung des Ausgangs des UND-Gatters 344 ausgeführt. Wenn alternativ in einem der Entscheidungskästchen 364, 372 oder 374 eine negative Bestimmung auftritt, so wird in dem Schritt 378 die aktuelle Thread-Auswahl beibehalten. Das Verfahren 360 endet mit dem Schritt 380.
  • Eine durch die Logik für einen erzwungenen Thread-Wechsel 160 eingeleitete Thread-Umschaltoperation unterscheidet sich von anderen in der vorliegenden Patentschrift beschriebenen Thread-Umschaltoperationen daduch, dass das Daten-Chunk, an dem der Thread-Wechsel auftritt, kein besonders oder Unterscheidungsmerkmal aufweist, das eine gewisse Vorwarnung hinsichtlich einer Thread-Umschaltoperation bereitstellen kann. Im Besonderen werden die durch die anderen Logiken 150 bis 164 in der Thread-Umschalt-Steuerlogik 136 ausgeführten Thread-Umschaltoperationen von einem Zustand begleitet, der die Thread-Umschaltoperation gutartig macht, so dass die betroffene Hardware keine Vorwarnung benötigt. Die Befehlsleitlogik 110 ist nicht so ausgestattet, dass sie eine plötzliche und unerwartete Thread-Umschaltoperation behandelt. Somit stellt die eingefügte Ablaufmarkierung einen Mechanismus bereit, um die Befehlsleitlogik 110 über die Thread-Umschaltoperation zu informieren, die Upstream aufgetreten ist.
  • Ferner ist in Verbindung mit einem erzwungenen Thread-Wechsel ebenso wie bei den anderen in der vorliegenden Beschreibung beschriebenen Thread-Umschaltoperationen ein Befehlszeiger für einen „Neustart" erforderlich. Wenn eine Unterbrechung des Befehlsstroms durch die Logik für einen erzwungenen Thread-Wechsel 160 erzwungen wird, so ist es wünschenswert, Mikrocode an den Neustartzeiger bereitzustellen im Gegensatz zu dem Zeiger auf den nächsten Befehl 100.
  • Die externe Löschlogik (162)
  • Wie dies vorstehend im Text in Bezug auf die innere Löschlogik 156 beschrieben werden ist, wird eine externe Löschoperation von außerhalb der Mikrobefehls-Umsetzungs-Engine 54 aufgerufen.
  • Die Abbildung aus 13 veranschaulicht ein Verfahren 400 gemäß einem exemplarischen Ausführungsbeispiel der vorliegenden Erfindung zur Ausführung einer Thread-Umschaltoperation in einem multithreading-fähigen Prozessor beim Auftreten einer externen Pipeline-Löschoperation. Das Verfahren 400 beginnt mit dem Schritt 402, in dem eine Geltendmachung eines externen Löschsignals detektiert wird. In Bezug auf das exemplarische Ausführungsbeispiel der Thread-Umschalt-Steuerlogik 136 aus der Abbildung aus 15A kann dies ausgeführt werden durch das Detektieren der Aktivierung eines Trace-Cache-/Mikrobefehls-Umsetzungs-Engine-Löschsignals „TCmiteclear" 404, das einen direkten Eingang in das ODER-Gatter 245 bereitstellt. Folglich bewirkt die Geltendmachung des Signals 404 die Geltendmachung des Thread-Auswahlsignals 134, das von der Thread-Umschalt-Steuerlogik 136 zu dem MUX 132 geleitet worden ist, wie dies in der Abbildung aus 5 dargestellt ist. Dies zeigt sich in dem Schritt 406 des Verfahrens 400, das danach mit dem Schritt 408 endet.
  • Die Logik für eingefügten Ablauf (164)
  • Wenn in der Mikrobefehls-Umsetzungs-Engine 54 der Instruction Translation Lookaside Buffer (ITLB) 102 aus der Abbildung aus 3 einen Seitenfehler registriert, wird eine Ablaufmarkierung (auch als „eingefügter Fluss bzw. Ablauf" bezeichnet) in den Befehlsstrom eingefügt, um dieses Ereignis zu markieren. Ein derartiger Seitenfehler führt zu einer verhältnismäßig langen Page-Walk-Operation durch einen Page-Miss-Handler (nicht abgebildet), der zum Beispiel bis zu 150 Taktzyklen verbrauchen kann. Wenn in einem multithreading-fähigen Prozessor ein Seitenfehler (Page Miss) für einen Befehlsstrom eines aktuellen Threads auftritt, so kann es vorteilhaft sein, eine Thread-Umschaltoperation auszuführen, um es zu ermöglichen, dass ein alternativer Thread die Latenz nutzt, die durch die Page-Walk-Operation eingefügt worden ist. Die Logik für eingefügten Ablauf 164 stellt gemäß der vorstehenden Beschreibung ein exemplarisches Ausführungsbeispiel der Logik bereit, die beim Auftreten eines Seitenfehlers eine Thread-Umschaltfunktion implementiert und ausführt.
  • Im Fach sind weitere Ereignisse neben einem Seitenfehler allgemein bekannt, die zu einem eingefügten Ablauf führen können, wobei diese aber auch anderweitig für eine Mikroprozessorarchitektur spezifisch sein können.
  • Die Abbildung aus 14 zeigt ein Verfahren 420 gemäß einem exemplarischen Ausführungsbeispiel der vorliegenden Erfindung zum Ausführen einer Thread-Umschaltoperation in einem Multithreaded-Prozessor beim Detektieren eines eingefügten Ablaufs in einen Befehlsstrom für einen aktuellen Thread, wobei der eingefügte Ablauf als reines Beispiel einen Seitenfehler in Bezug auf den Befehls-TLB 102 anzeigt. Das Verfahren 420 beginnt mit dem Schritt 422 und der Auswahl eines aktuellen Threads (z.B. Thread 0). Die Auswahl kann durch den Zustand des aus der Thread-Umschalt-Steuerlogik 136 an den MUX 132 ausgegebenen Thread-Auswahlsignals 134 ausgegeben werden. In dem Entscheidungskästchen 424 wird bestimmt, ob ein Feld für ein Befehlsumsetzungsereignis „ITeventid" 426 in dem Befehlsstrom für den aktuellen Thread einen eingefügten Ablauf spezifiziert (z.B. keinen Wert von '0000 oder '0111 aufweist. Im Besonderen kann das Vorhandensein der oben genannten Werte in dem Befehlsumsetzungs-Ereignisfeld 426 das Fehlen eines eingefügten Ablaufs anzeigen. In Bezug auf die Abbildung aus 15A zeigt das Feld 426 die Eingabe in ein Paar von Komparatoren (oder andere Logik) 428 und 430, welche bestimmen, ob das Feld 426 den Wert '0000 oder '0111 aufweist. Wenn dies der Fall ist, aktiviert ein Komparator 428 oder 430 einen Ausgang an ein NOR-Gatter 432, wobei dessen Ausgang einen Eingang in das OR-Gatter 245 bereitstellt.
  • In dem Entscheidungskästchen 436 wird optional bestimmt, ob eine vorbestimmte Mindestmenge von Befehlsdaten für einen Ziel-Thread (z.B. Thread 1) zum Verteilen von dem Befehls-Streaming-Puffer 106 bereit steht. Die Bestimmung kann unter Verwendung des Ausgangs des NOR-Gatters 42 mit dem Ausgang des Komparators 262 vorgenommen werden.
  • Nach positiven Bestimmungen in den Entscheidungskästchen 424 und 436 kann in dem Schritt 438 eine Thread-Umschaltoperation ausgeführt werden. Im Besonderen kann die Aktivierung des Ausgangs des NOR-Gatters 42, der durch das OR-Gatter 245 geleitet wird, um eine Aktivierung des Auswahlsignals 134 zu bewirken, der in dem Schritt 438 ausgeführten Thread-Umschaltoperation entsprechen. Wenn alternativ eine negative Bestimmung in einem der Entscheidungskästchen 424 oder 436 erfolgt, so wird die aktuelle Thread-Auswahl in dem Schritt 440 beibehalten. Das Verfahren 420 endet danach mit dem Schritt 442.
  • SCHLUSSFOLGERUNG
  • In dem exemplarischen Ausführungsbeispiel der vorstehend in Bezug auf die Abbildung aus 15 beschriebenen Thread- Umschalt-Steuerlogik 136 sind eine Reihe von Logiken 150 bis 164 mit einer Implementierung unter Verwendung der Kombination auf Aufwärtszähler, Register und Komparator beschrieben. In einem alternativen Ausführungsbeispiel der vorliegenden Erfindung können einige oder alle der Logiken unter Verwendung eines Abwärtszählers implementiert, der nur von einem vorbestimmten, programmierbaren Wert herabzählt und ein Signal aktiviert, wenn ein Wert von Null erreicht wird. Ein Beispiel für ein derartiges Ausführungsbeispiel ist in der Abbildung aus 15B veranschaulicht.
  • Zusammengefasst ist die vorstehend beschriebene Thread-Umschaltlogik 136 dahingehend vorteilhaft, dass sie eine Reihe flexibler Mechanismen zur Implementierung und Ausführung von Thread-Umschaltoperationen als Reaktion auf das Auftreten von Ereignissen bereitstellt, bei denen es vorteilhaft sein kann, derartige Thread-Umschaltoperationen auszuführen. Durch die Integration von programmierbaren Parametern ermöglicht die vorliegende Erfindung ferner die Modifikation und Feinabstimmung der Thread-Umschaltmechanismen für eine Vielzahl von Situationen und Aspekten. Wenn zum Beispiel eine bestimmte Art von Anwendung ausgeführt wird, wie zum Beispiel eine Multimedia-Anwendung, so kann es wünschenswert sein, dass die Parameter der Thread-Umschaltmechanismen auf unterschiedliche Werte gesetzt sind als bei einer Ausführung einer andersartigen Anwendung, wie etwa einer Textverarbeitungsanwendung.
  • Die Thread-Umschaltlogik 136 eignet sich für ein Tirne-Slicing der Bandbreite eines Pfads (zwischen einer Quellenressource und einer Zielressource) und/oder einer Verarbeitungsressource in einem multithreading-fähigen Prozessor. Während die Thread-Umschaltlogik 136 vorstehend für eine Verteilung von Befehlsdaten für zwei Threads von einem Befehls-Streaming- Puffer an einen Befehlsvordecodierer beschrieben ist, ist es allgemein ersichtlich, dass die Lehren der vorliegenden Erfindung auch eingesetzt werden können, um Befehlsdaten für mehrere Threads von jeder Ressource an jedes Ziel in einer Prozessor-Pipeline zu verteilen.
  • Beschrieben wurden somit ein Verfahren und eine Vorrichtung für einen Thread-Wechsel in einem multithreading-fähigen Prozessor. Die vorliegende Erfindung wurde zwar in Bezug auf bestimmte exemplarische Ausführungsbeispiele beschrieben, wobei hiermit jedoch festgestellt wird, dass verschiedene Modifikationen und Abänderungen in Bezug auf diese Ausführungsbeispiele möglich sind, ohne dabei vom weiteren Umfang der Erfindung abzuweichen. Die Beschreibung und die Zeichnungen dienen somit der Veranschaulichung und haben keine einschränkende Wirkung.

Claims (20)

  1. Verfahren zum Ausführen einer Thread-Umschaltoperation in einem Multithread-Prozessor, wobei das Verfahren folgendes umfasst: das Detektieren der Verteilung einer ersten vorbestimmten Menge von Befehlsdaten für einen ersten Thread von einer Befehlsdatenquelle in einem Multithread-Prozessor; und als Reaktion auf das Detektieren der Verteilung der ersten vorbestimmten Menge von Befehlsdaten für den ersten Thread das Beginnen des Verteilens von Befehlsdaten für einen zweiten Thread von der Befehlsdatenquelle.
  2. Verfahren nach Anspruch 1, wobei das Detektieren der Verteilung der ersten vorbestimmten Menge von Befehlsdaten für den ersten Thread das Führen eines Zählwerts diskreter Mengen der Befehlsdaten für den ersten, von der Befehlsdatenressource verteilten Thread umfasst, und das Bestimmen, wann der Zählwert der diskreten Mengen der Befehlsdaten einen ersten vorbestimmten Schwellenwert überschreitet.
  3. Verfahren nach Anspruch 2, wobei das Zählen der Verteilung der diskreten Menge der Befehlsdaten für den ersten Thread das Heraufsetzen eines Zählers nach dem Verteilen einer diskreten Menge der Befehlsdaten von der Befehlsdatenquelle umfasst.
  4. Verfahren nach Anspruch 2, wobei das Zählen der Verteilung der diskreten Menge der Befehlsdaten für den ersten Thread das Herabsetzen eines Zählers nach dem Verteilen einer diskreten Menge der Befehlsdaten von der Befehlsdatenquelle umfasst.
  5. Verfahren nach Anspruch 1, wobei das Detektieren das Ausführen einer Vergleichsoperation zwischen dem Inhalt einer programmierbaren Speichereinheit und dem Inhalt eines Heraufsetzungszählers umfasst, der den Zählwert der diskreten Mengen von Befehlsdaten für den von der Befehlsdatenquelle verteilten ersten Thread führt.
  6. Verfahren nach Anspruch 1, wobei das Detektieren das Laden des vorbestimmten Schwellenwertes aus der programmierbaren Speichereinheit in einen Herabsetzungszähler als ein Initialisierungswert umfasst und das Detektieren, wann der Herabsetzungszähler einen Wert von Null verzeichnet.
  7. Verfahren nach Anspruch 1, wobei die Befehlsdatenquelle eine Speichereinheit umfasst, die partitioniert ist, so dass die Befehlsdaten für den ersten Thread in einer ersten Partition gespeichert werden, und wobei die Befehlsdaten für den zweiten Thread in einer zweiten Partition gespeichert werden, und wobei der Beginn der Verteilung der Befehlsdaten für den zweiten Thread den Betrieb einer Thread-Auswahllogik umfasst, um Befehlsdaten für die Verteilung von der zweiten Partition an Stelle der ersten Partition der Befehlsdatenquelle auszuwählen.
  8. Verfahren nach Anspruch 1, wobei dieses ferner folgendes umfasst: das Bestimmen, ob eine zweite vorbestimmte Menge von Befehlsdaten für den zweiten Thread zur Verteilung von der Befehlsdatenquelle zur Verfügung steht; und das Beginnen der Verteilung der Befehlsdaten für den zweiten Thread von der Befehlsdatenquelle nur dann, wenn die zweite vorbestimmte Menge von Befehlsdaten für den zweiten Thread zur Verteilung zur Verfügung steht.
  9. Verfahren nach Anspruch 8, wobei die Befehlsdatenquelle eine Speichereinheit umfasst, und wobei das Bestimmen, ob die zweite vorbestimmte Menge von Befehlsdaten für den zweiten Thread zur Verteilung von der Befehlsdatenquelle zur Verfügung steht, das Führen eines Zählwerts diskreter Mengen der Befehlsdaten für den zweiten Thread umfasst, die in der Speichereinheit empfangen werden, und wobei bestimmt wird, wann der Zählwert der diskreten Mengen der Befehlsdaten, die in der Speichereinheit empfangen werden, einen zweiten vorbestimmten Schwellenwert überschreitet.
  10. Verfahren nach Anspruch 1, wobei das Verfahren ferner folgendes umfasst: das Bestimmen, ob eine dritte vorbestimmte Menge der Befehlsdaten für den ersten Thread von der Befehlsdatenquelle verteilt worden ist; und das Beginnen mit der Verteilung der Befehlsdaten für den zweiten Thread von der Befehlsdatenquelle nur dann, wenn die dritte vorbestimmte Menge der Befehlsdaten für den ersten Thread von der Befehlsdatenquelle verteilt worden ist.
  11. Verfahren nach Anspruch 10, wobei die dritte vorbestimmte Menge von Befehlsdaten größer oder gleich einer Mindestmenge von Befehlsdaten für einen vollständigen Befehl einer ersten Befehlsgruppe ist.
  12. Verfahren nach Anspruch 10, wobei das Bestimmen, ob die dritte vorbestimmte Menge von Befehlsdaten für den ersten Thread von der Befehlsdatenquelle verteilt worden ist, das Zählen der Verteilung diskreter Mengen der Befehlsdaten für den ersten Thread von der Befehlsdatenquelle umfasst, und das Bestimmen, ob der Zählwert der diskreten Mengen der Befehlsdaten, die von der Befehlsdatenquelle verteilt worden sind, einen dritten vorbestimmten Zählwert überschreitet.
  13. Verfahren nach Anspruch 1, mit dem Einfügen einer Flussmarkierung in einen Befehlsstrom vor dem Beginn der Verteilung der Befehlsdaten für den zweiten Thread von der Befehlsdatenquelle, wobei der Befehlsstrom die Befehlsdaten für den ersten Thread aufweist, die von der Befehlsdatenquelle verteilt werden.
  14. Verfahren nach Anspruch 1, wobei bestimmt wird, ob eine weitere vorbestimmte Menge von Befehlsdaten für den ersten Thread von der Befehlsdatenquelle verteilt worden ist, und wenn dies der Fall ist, wird ein Verzweigungsbefehl in den Befehlsdaten für den ersten von der Befehlsdatenquelle zu verteilenden Thread detektiert, und wobei als Reaktion auf das Detektieren des Verzweigungsbefehls mit der Verteilung der Befehlsdaten für den zweiten Thread von der Befehlsdatenquelle begonnen wird.
  15. Verfahren nach Anspruch 14, mit dem Detektieren der Verteilung der weiteren vorbestimmten Menge von Befehlsdaten für den ersten Thread von der Befehlsdatenquelle, als Reaktion auf das Detektieren der Verteilung der weiteren vorbestimmten Menge von Befehlsdaten, wobei die in der Folge zu verteilenden Befehlsdaten für den ersten Thread untersucht werden, um einen Verzweigungsbefehl zu identifizieren, und wobei als Reaktion auf die Identifikation eines Verzweigungsbefehls in den Befehlsdaten für den zu verteilenden ersten Thread mit der Verteilung der Befehlsdaten für den zweiten Thread von der Befehlsdatenquelle begonnen wird.
  16. Verfahren nach Anspruch 15, wobei das Detektieren der Verteilung der weiteren vorbestimmten Menge von Befehlsdaten für den ersten Thread das Zählen der Verteilung diskreter Mengen von Befehlsdaten für den ersten Thread von der Befehlsdatenquelle umfasst, und das Bestimmen, wann der Zählwert der diskreten Mengen von Daten einen weiteren vorbestimmten Schwellenwert übersteigt.
  17. Verfahren nach Anspruch 1, mit dem Detektieren eines Anhaltezustands für den ersten Thread in einer Prozessor-Pipeline des Multithread-Prozessors, wobei detektiert wird, wann ein erstes vorbestimmtes Zeitintervall nach dem Detektieren des Anhaltezustands abgelaufen ist, und wobei als Reaktion auf das Detektieren des Ablaufs des ersten vorbestimmten Zeitintervalls mit der Verteilung der Befehlsdaten für den zweiten Thread von der Befehlsdatenquelle begonnen wird.
  18. Verfahren nach Anspruch 1, mit dem Detektieren des Fehlens eines Flusses von Befehlsdaten für den ersten Thread in die Befehlsdatenquelle von einer Upstream-Quelle in einer Prozessor-Pipeline, wobei detektiert wird, wann ein zweites vorbestimmtes Zeitintervall nach dem Detektieren des Fehlens des Flusses von Befehlsdaten abgelaufen ist, und wobei als Folge auf das Detektieren des Ablaufs des zweiten vorbestimmten Zeitintervalls mit der Verteilung der Befehlsdaten für den zweiten Thread von den Befehlsdatenquelle begonnen wird.
  19. Verfahren nach Anspruch 1, mit dem Detektieren einer Flussmarkierung in den Befehlsdaten für den ersten Thread, die an der Befehlsdatenquelle empfangen werden, und wobei als Reaktion auf das Detektieren der Flussmarkierung mit der Verteilung der Befehlsdaten für den zweiten Thread von der Befehlsdatenquelle begonnen wird.
  20. Verfahren nach Anspruch 13, wobei die Flussmarkierung das Eintreten eines Seitenfehlers an einer Position in der Prozessor-Pipeline vor der Datenbefehlsquelle anzeigt.
DE60032481T 1999-04-29 2000-04-20 Verfahren und vorrichtung zur threadumschaltung in einem multithreadprozessor Expired - Lifetime DE60032481T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US302633 1999-04-29
US09/302,633 US6535905B1 (en) 1999-04-29 1999-04-29 Method and apparatus for thread switching within a multithreaded processor
PCT/US2000/010800 WO2000067113A2 (en) 1999-04-29 2000-04-20 Method and apparatus for thread switching within a multithreaded processor

Publications (2)

Publication Number Publication Date
DE60032481D1 DE60032481D1 (de) 2007-02-01
DE60032481T2 true DE60032481T2 (de) 2007-09-27

Family

ID=23168579

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60032481T Expired - Lifetime DE60032481T2 (de) 1999-04-29 2000-04-20 Verfahren und vorrichtung zur threadumschaltung in einem multithreadprozessor

Country Status (10)

Country Link
US (8) US6535905B1 (de)
EP (1) EP1185924B1 (de)
CN (2) CN1196060C (de)
AU (1) AU4480200A (de)
BR (1) BR0010602B1 (de)
DE (1) DE60032481T2 (de)
HK (1) HK1042363A1 (de)
IL (2) IL146159A0 (de)
TW (1) TW476915B (de)
WO (1) WO2000067113A2 (de)

Families Citing this family (224)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2728559B1 (fr) * 1994-12-23 1997-01-31 Saint Gobain Vitrage Substrats en verre revetus d'un empilement de couches minces a proprietes de reflexion dans l'infrarouge et/ou dans le domaine du rayonnement solaire
US6385715B1 (en) * 1996-11-13 2002-05-07 Intel Corporation Multi-threading for a processor utilizing a replay queue
US7257814B1 (en) * 1998-12-16 2007-08-14 Mips Technologies, Inc. Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors
US7237093B1 (en) 1998-12-16 2007-06-26 Mips Technologies, Inc. Instruction fetching system in a multithreaded processor utilizing cache miss predictions to fetch instructions from multiple hardware streams
US7020879B1 (en) 1998-12-16 2006-03-28 Mips Technologies, Inc. Interrupt and exception handling for multi-streaming digital processors
US7529907B2 (en) 1998-12-16 2009-05-05 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
US6389449B1 (en) * 1998-12-16 2002-05-14 Clearwater Networks, Inc. Interstream control and communications for multi-streaming digital processors
US7035997B1 (en) * 1998-12-16 2006-04-25 Mips Technologies, Inc. Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6507862B1 (en) * 1999-05-11 2003-01-14 Sun Microsystems, Inc. Switching method in a multi-threaded processor
US6671795B1 (en) * 2000-01-21 2003-12-30 Intel Corporation Method and apparatus for pausing execution in a processor or the like
US7139901B2 (en) * 2000-02-08 2006-11-21 Mips Technologies, Inc. Extended instruction set for packet processing applications
US7032226B1 (en) * 2000-06-30 2006-04-18 Mips Technologies, Inc. Methods and apparatus for managing a buffer of events in the background
US7065096B2 (en) 2000-06-23 2006-06-20 Mips Technologies, Inc. Method for allocating memory space for limited packet head and/or tail growth
US20010052053A1 (en) * 2000-02-08 2001-12-13 Mario Nemirovsky Stream processing unit for a multi-streaming processor
US7076630B2 (en) * 2000-02-08 2006-07-11 Mips Tech Inc Method and apparatus for allocating and de-allocating consecutive blocks of memory in background memo management
US7082552B2 (en) * 2000-02-08 2006-07-25 Mips Tech Inc Functional validation of a packet management unit
US7042887B2 (en) 2000-02-08 2006-05-09 Mips Technologies, Inc. Method and apparatus for non-speculative pre-fetch operation in data packet processing
US7165257B2 (en) * 2000-02-08 2007-01-16 Mips Technologies, Inc. Context selection and activation mechanism for activating one of a group of inactive contexts in a processor core for servicing interrupts
US7502876B1 (en) 2000-06-23 2009-03-10 Mips Technologies, Inc. Background memory manager that determines if data structures fits in memory with memory state transactions map
US7155516B2 (en) * 2000-02-08 2006-12-26 Mips Technologies, Inc. Method and apparatus for overflowing data packets to a software-controlled memory when they do not fit into a hardware-controlled memory
US7058065B2 (en) * 2000-02-08 2006-06-06 Mips Tech Inc Method and apparatus for preventing undesirable packet download with pending read/write operations in data packet processing
US7058064B2 (en) * 2000-02-08 2006-06-06 Mips Technologies, Inc. Queueing system for processors in packet routing operations
US7649901B2 (en) * 2000-02-08 2010-01-19 Mips Technologies, Inc. Method and apparatus for optimizing selection of available contexts for packet processing in multi-stream packet processing
US7856633B1 (en) * 2000-03-24 2010-12-21 Intel Corporation LRU cache replacement for a partitioned set associative cache
US7162615B1 (en) * 2000-06-12 2007-01-09 Mips Technologies, Inc. Data transfer bus communication using single request to perform command and return data to destination indicated in context to allow thread context switch
WO2002006959A1 (en) * 2000-07-14 2002-01-24 Clearwater Networks, Inc. Instruction fetch and dispatch in multithreaded system
US6701518B1 (en) * 2000-08-03 2004-03-02 Hewlett-Packard Development Company, L.P. System and method for enabling efficient processing of a program that includes assertion instructions
US6981129B1 (en) * 2000-11-02 2005-12-27 Intel Corporation Breaking replay dependency loops in a processor using a rescheduled replay queue
US7757065B1 (en) * 2000-11-09 2010-07-13 Intel Corporation Instruction segment recording scheme
US20020087844A1 (en) * 2000-12-29 2002-07-04 Udo Walterscheidt Apparatus and method for concealing switch latency
US6895520B1 (en) 2001-03-02 2005-05-17 Advanced Micro Devices, Inc. Performance and power optimization via block oriented performance measurement and control
US20020156999A1 (en) * 2001-04-19 2002-10-24 International Business Machines Corporation Mixed-mode hardware multithreading
US6651158B2 (en) * 2001-06-22 2003-11-18 Intel Corporation Determination of approaching instruction starvation of threads based on a plurality of conditions
US20030120896A1 (en) * 2001-06-29 2003-06-26 Jason Gosior System on chip architecture
US7363474B2 (en) * 2001-12-31 2008-04-22 Intel Corporation Method and apparatus for suspending execution of a thread until a specified memory access occurs
US20030126416A1 (en) * 2001-12-31 2003-07-03 Marr Deborah T. Suspending execution of a thread in a multi-threaded processor
US7127561B2 (en) * 2001-12-31 2006-10-24 Intel Corporation Coherency techniques for suspending execution of a thread until a specified memory access occurs
US7366884B2 (en) * 2002-02-25 2008-04-29 Agere Systems Inc. Context switching system for a multi-thread execution pipeline loop and method of operation thereof
US7747989B1 (en) 2002-08-12 2010-06-29 Mips Technologies, Inc. Virtual machine coprocessor facilitating dynamic compilation
US7065596B2 (en) * 2002-09-19 2006-06-20 Intel Corporation Method and apparatus to resolve instruction starvation
US7200721B1 (en) * 2002-10-09 2007-04-03 Unisys Corporation Verification of memory operations by multiple processors to a shared memory
US7149900B2 (en) * 2002-12-12 2006-12-12 Intel Corporation Method of defending software from debugger attacks
US20040128488A1 (en) * 2002-12-26 2004-07-01 Thimmannagari Chandra M. R. Strand switching algorithm to avoid strand starvation
US20040128476A1 (en) * 2002-12-26 2004-07-01 Robert Nuckolls Scheme to simplify instruction buffer logic supporting multiple strands
US7657893B2 (en) * 2003-04-23 2010-02-02 International Business Machines Corporation Accounting method and logic for determining per-thread processor resource utilization in a simultaneous multi-threaded (SMT) processor
US20040216103A1 (en) * 2003-04-24 2004-10-28 International Business Machines Corporation Mechanism for detecting and handling a starvation of a thread in a multithreading processor environment
US7363625B2 (en) * 2003-04-24 2008-04-22 International Business Machines Corporation Method for changing a thread priority in a simultaneous multithread processor
US7401207B2 (en) 2003-04-25 2008-07-15 International Business Machines Corporation Apparatus and method for adjusting instruction thread priority in a multi-thread processor
US7401208B2 (en) * 2003-04-25 2008-07-15 International Business Machines Corporation Method and apparatus for randomizing instruction thread interleaving in a multi-thread processor
US7360062B2 (en) * 2003-04-25 2008-04-15 International Business Machines Corporation Method and apparatus for selecting an instruction thread for processing in a multi-thread processor
US20040268099A1 (en) * 2003-06-30 2004-12-30 Smith Peter J Look ahead LRU array update scheme to minimize clobber in sequentially accessed memory
US7441245B2 (en) * 2003-08-14 2008-10-21 Intel Corporation Phasing for a multi-threaded network processor
US7873785B2 (en) * 2003-08-19 2011-01-18 Oracle America, Inc. Multi-core multi-thread processor
US20050047439A1 (en) * 2003-08-26 2005-03-03 Madajczak Tomasz Bogdan System to process packets according to an assigned sequence number
US7496921B2 (en) * 2003-08-29 2009-02-24 Intel Corporation Processing block with integrated light weight multi-threading support
US20050055594A1 (en) * 2003-09-05 2005-03-10 Doering Andreas C. Method and device for synchronizing a processor and a coprocessor
US7133969B2 (en) * 2003-10-01 2006-11-07 Advanced Micro Devices, Inc. System and method for handling exceptional instructions in a trace cache based processor
US7555633B1 (en) 2003-11-03 2009-06-30 Advanced Micro Devices, Inc. Instruction cache prefetch based on trace cache eviction
EP1692619B1 (de) * 2003-11-07 2013-01-09 Sharp Kabushiki Kaisha Verfahren und systeme für die netzwerkkoordination
DE10353267B3 (de) * 2003-11-14 2005-07-28 Infineon Technologies Ag Multithread-Prozessorarchitektur zum getriggerten Thread-Umschalten ohne Zykluszeitverlust und ohne Umschalt-Programmbefehl
US8069336B2 (en) * 2003-12-03 2011-11-29 Globalfoundries Inc. Transitioning from instruction cache to trace cache on label boundaries
US7631307B2 (en) * 2003-12-05 2009-12-08 Intel Corporation User-programmable low-overhead multithreading
US7441101B1 (en) 2003-12-10 2008-10-21 Cisco Technology, Inc. Thread-aware instruction fetching in a multithreaded embedded processor
US7360064B1 (en) 2003-12-10 2008-04-15 Cisco Technology, Inc. Thread interleaving in a multithreaded embedded processor
US20060212874A1 (en) * 2003-12-12 2006-09-21 Johnson Erik J Inserting instructions
US7493621B2 (en) * 2003-12-18 2009-02-17 International Business Machines Corporation Context switch data prefetching in multithreaded computer
US7206922B1 (en) 2003-12-30 2007-04-17 Cisco Systems, Inc. Instruction memory hierarchy for an embedded processor
US7213126B1 (en) 2004-01-12 2007-05-01 Advanced Micro Devices, Inc. Method and processor including logic for storing traces within a trace cache
US20050166177A1 (en) * 2004-01-27 2005-07-28 Ylian Saint-Hilaire Thread module chaining
US20050183065A1 (en) * 2004-02-13 2005-08-18 Wolczko Mario I. Performance counters in a multi-threaded processor
US20090299756A1 (en) * 2004-03-01 2009-12-03 Dolby Laboratories Licensing Corporation Ratio of speech to non-speech audio such as for elderly or hearing-impaired listeners
US7426731B2 (en) * 2004-03-22 2008-09-16 Hewlett-Packard Development Company, L.P. Determining processor usage by a thread
US9189230B2 (en) 2004-03-31 2015-11-17 Intel Corporation Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution
US7197630B1 (en) 2004-04-12 2007-03-27 Advanced Micro Devices, Inc. Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation
US7418582B1 (en) 2004-05-13 2008-08-26 Sun Microsystems, Inc. Versatile register file design for a multi-threaded processor utilizing different modes and register windows
US7571284B1 (en) 2004-06-30 2009-08-04 Sun Microsystems, Inc. Out-of-order memory transactions in a fine-grain multithreaded/multi-core processor
US7290116B1 (en) 2004-06-30 2007-10-30 Sun Microsystems, Inc. Level 2 cache index hashing to avoid hot spots
US20060009265A1 (en) * 2004-06-30 2006-01-12 Clapper Edward O Communication blackout feature
US7366829B1 (en) 2004-06-30 2008-04-29 Sun Microsystems, Inc. TLB tag parity checking without CAM read
US7519796B1 (en) 2004-06-30 2009-04-14 Sun Microsystems, Inc. Efficient utilization of a store buffer using counters
US7509484B1 (en) 2004-06-30 2009-03-24 Sun Microsystems, Inc. Handling cache misses by selectively flushing the pipeline
US7543132B1 (en) 2004-06-30 2009-06-02 Sun Microsystems, Inc. Optimizing hardware TLB reload performance in a highly-threaded processor with multiple page sizes
US7365007B2 (en) * 2004-06-30 2008-04-29 Intel Corporation Interconnects with direct metalization and conductive polymer
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
US9626194B2 (en) 2004-09-23 2017-04-18 Intel Corporation Thread livelock unit
US7748001B2 (en) * 2004-09-23 2010-06-29 Intel Corporation Multi-thread processing system for detecting and handling live-lock conditions by arbitrating livelock priority of logical processors based on a predertermined amount of time
US7533139B2 (en) * 2004-09-27 2009-05-12 Microsoft Corporation Method and system for multithread processing of spreadsheet chain calculations
CN100384181C (zh) * 2004-11-09 2008-04-23 北京中星微电子有限公司 一种ip网络环境下的多路音频缓冲处理的方法
US7254693B2 (en) * 2004-12-02 2007-08-07 International Business Machines Corporation Selectively prohibiting speculative execution of conditional branch type based on instruction bit
US8756605B2 (en) * 2004-12-17 2014-06-17 Oracle America, Inc. Method and apparatus for scheduling multiple threads for execution in a shared microprocessor pipeline
US7937709B2 (en) 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
US7430643B2 (en) * 2004-12-30 2008-09-30 Sun Microsystems, Inc. Multiple contexts for efficient use of translation lookaside buffer
US7490230B2 (en) * 2005-02-04 2009-02-10 Mips Technologies, Inc. Fetch director employing barrel-incrementer-based round-robin apparatus for use in multithreading microprocessor
US7681014B2 (en) * 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
US7506140B2 (en) * 2005-02-04 2009-03-17 Mips Technologies, Inc. Return data selector employing barrel-incrementer-based round-robin apparatus
US7631130B2 (en) * 2005-02-04 2009-12-08 Mips Technologies, Inc Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor
US7752627B2 (en) * 2005-02-04 2010-07-06 Mips Technologies, Inc. Leaky-bucket thread scheduler in a multithreading microprocessor
US7853777B2 (en) * 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7657883B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
US7664936B2 (en) * 2005-02-04 2010-02-16 Mips Technologies, Inc. Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages
US7657891B2 (en) 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US7613904B2 (en) * 2005-02-04 2009-11-03 Mips Technologies, Inc. Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler
DE102005009083B4 (de) * 2005-02-28 2007-05-10 Infineon Technologies Ag Multithread-Prozessor mit einer Synchronisationseinheit und Verfahren zum Betreiben eines solchen
US20060206902A1 (en) * 2005-03-14 2006-09-14 Sujat Jamil Variable interleaved multithreaded processor method and system
US20060212853A1 (en) * 2005-03-18 2006-09-21 Marvell World Trade Ltd. Real-time control apparatus having a multi-thread processor
US8195922B2 (en) 2005-03-18 2012-06-05 Marvell World Trade, Ltd. System for dynamically allocating processing time to multiple threads
US8230423B2 (en) * 2005-04-07 2012-07-24 International Business Machines Corporation Multithreaded processor architecture with operational latency hiding
WO2006120367A1 (en) * 2005-05-11 2006-11-16 Arm Limited A data processing apparatus and method employing multiple register sets
US20070067502A1 (en) * 2005-09-22 2007-03-22 Silicon Integrated Systems Corp. Method for preventing long latency event
US8015359B1 (en) 2005-09-28 2011-09-06 Oracle America, Inc. Method and system for utilizing a common structure for trace verification and maintaining coherency in an instruction processing circuit
US8019944B1 (en) * 2005-09-28 2011-09-13 Oracle America, Inc. Checking for a memory ordering violation after a speculative cache write
US7546420B1 (en) 2005-09-28 2009-06-09 Sun Microsystems, Inc. Efficient trace cache management during self-modifying code processing
US8370576B1 (en) 2005-09-28 2013-02-05 Oracle America, Inc. Cache rollback acceleration via a bank based versioning cache ciruit
US8499293B1 (en) 2005-09-28 2013-07-30 Oracle America, Inc. Symbolic renaming optimization of a trace
US7966479B1 (en) 2005-09-28 2011-06-21 Oracle America, Inc. Concurrent vs. low power branch prediction
US7987342B1 (en) 2005-09-28 2011-07-26 Oracle America, Inc. Trace unit with a decoder, a basic-block cache, a multi-block cache, and sequencer
US7937564B1 (en) 2005-09-28 2011-05-03 Oracle America, Inc. Emit vector optimization of a trace
US8032710B1 (en) 2005-09-28 2011-10-04 Oracle America, Inc. System and method for ensuring coherency in trace execution
US7949854B1 (en) 2005-09-28 2011-05-24 Oracle America, Inc. Trace unit with a trace builder
US8051247B1 (en) 2005-09-28 2011-11-01 Oracle America, Inc. Trace based deallocation of entries in a versioning cache circuit
US8024522B1 (en) 2005-09-28 2011-09-20 Oracle America, Inc. Memory ordering queue/versioning cache circuit
US7953961B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Trace unit with an op path from a decoder (bypass mode) and from a basic-block builder
US8037285B1 (en) 2005-09-28 2011-10-11 Oracle America, Inc. Trace unit
US7877630B1 (en) 2005-09-28 2011-01-25 Oracle America, Inc. Trace based rollback of a speculatively updated cache
US7870369B1 (en) 2005-09-28 2011-01-11 Oracle America, Inc. Abort prioritization in a trace-based processor
US20070101102A1 (en) * 2005-10-27 2007-05-03 Dierks Herman D Jr Selectively pausing a software thread
CN101366004A (zh) * 2005-12-06 2009-02-11 波士顿电路公司 用于带有专用线程管理的多核处理的方法和设备
US8275942B2 (en) * 2005-12-22 2012-09-25 Intel Corporation Performance prioritization in multi-threaded processors
JP4519082B2 (ja) * 2006-02-15 2010-08-04 株式会社ソニー・コンピュータエンタテインメント 情報処理方法、動画サムネイル表示方法、復号化装置、および情報処理装置
US7877757B2 (en) * 2006-05-05 2011-01-25 Microsoft Corporation Work item event monitor for procession of queued events
US8032821B2 (en) 2006-05-08 2011-10-04 Microsoft Corporation Multi-thread spreadsheet processing with dependency levels
US9146745B2 (en) * 2006-06-29 2015-09-29 Intel Corporation Method and apparatus for partitioned pipelined execution of multiple execution threads
US20080022283A1 (en) * 2006-07-19 2008-01-24 International Business Machines Corporation Quality of service scheduling for simultaneous multi-threaded processors
US8495649B2 (en) * 2006-07-19 2013-07-23 International Business Machines Corporation Scheduling threads having complementary functional unit usage on SMT processors
US7941643B2 (en) * 2006-08-14 2011-05-10 Marvell World Trade Ltd. Multi-thread processor with multiple program counters
US8046775B2 (en) 2006-08-14 2011-10-25 Marvell World Trade Ltd. Event-based bandwidth allocation mode switching method and apparatus
US20090012564A1 (en) * 2007-03-07 2009-01-08 Spineworks Medical, Inc. Transdiscal interbody fusion device and method
US7773621B2 (en) * 2006-09-16 2010-08-10 Mips Technologies, Inc. Transaction selector employing round-robin apparatus supporting dynamic priorities in multi-port switch
US7990989B2 (en) * 2006-09-16 2011-08-02 Mips Technologies, Inc. Transaction selector employing transaction queue group priorities in multi-port switch
US7961745B2 (en) * 2006-09-16 2011-06-14 Mips Technologies, Inc. Bifurcated transaction selector supporting dynamic priorities in multi-port switch
US7760748B2 (en) * 2006-09-16 2010-07-20 Mips Technologies, Inc. Transaction selector employing barrel-incrementer-based round-robin apparatus supporting dynamic priorities in multi-port switch
US8370609B1 (en) 2006-09-27 2013-02-05 Oracle America, Inc. Data cache rollbacks for failed speculative traces with memory operations
US8010745B1 (en) * 2006-09-27 2011-08-30 Oracle America, Inc. Rolling back a speculative update of a non-modifiable cache line
US8516462B2 (en) * 2006-10-09 2013-08-20 International Business Machines Corporation Method and apparatus for managing a stack
US8380966B2 (en) 2006-11-15 2013-02-19 Qualcomm Incorporated Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging
US8533530B2 (en) 2006-11-15 2013-09-10 Qualcomm Incorporated Method and system for trusted/untrusted digital signal processor debugging operations
US8341604B2 (en) 2006-11-15 2012-12-25 Qualcomm Incorporated Embedded trace macrocell for enhanced digital signal processor debugging operations
US8370806B2 (en) 2006-11-15 2013-02-05 Qualcomm Incorporated Non-intrusive, thread-selective, debugging method and system for a multi-thread digital signal processor
US20080148022A1 (en) * 2006-12-13 2008-06-19 Arm Limited Marking registers as available for register renaming
US8347068B2 (en) * 2007-04-04 2013-01-01 International Business Machines Corporation Multi-mode register rename mechanism that augments logical registers by switching a physical register from the register rename buffer when switching between in-order and out-of-order instruction processing in a simultaneous multi-threaded microprocessor
US8521993B2 (en) * 2007-04-09 2013-08-27 Intel Corporation Providing thread fairness by biasing selection away from a stalling thread using a stall-cycle counter in a hyper-threaded microprocessor
US8261049B1 (en) 2007-04-10 2012-09-04 Marvell International Ltd. Determinative branch prediction indexing
US8484516B2 (en) 2007-04-11 2013-07-09 Qualcomm Incorporated Inter-thread trace alignment method and system for a multi-threaded processor
US20080263325A1 (en) * 2007-04-19 2008-10-23 International Business Machines Corporation System and structure for synchronized thread priority selection in a deeply pipelined multithreaded microprocessor
US7711935B2 (en) * 2007-04-30 2010-05-04 Netlogic Microsystems, Inc. Universal branch identifier for invalidation of speculative instructions
US7958323B1 (en) 2007-05-09 2011-06-07 Marvell Israel (M.I.S.L.) Ltd. Multithreading implementation for flops and register files
EP2192483B1 (de) * 2007-06-20 2016-04-20 Fujitsu Limited Verarbeitungseinrichtung
KR101100145B1 (ko) * 2007-06-20 2011-12-29 후지쯔 가부시끼가이샤 명령실행 제어장치 및 명령실행 제어방법
WO2008155804A1 (ja) * 2007-06-20 2008-12-24 Fujitsu Limited 同時マルチスレッドの命令完了制御装置
JP5088371B2 (ja) * 2007-06-20 2012-12-05 富士通株式会社 情報処理装置と負荷調停制御方法
EP2159685B1 (de) * 2007-06-20 2013-08-21 Fujitsu Limited Prozessor
US7779234B2 (en) * 2007-10-23 2010-08-17 International Business Machines Corporation System and method for implementing a hardware-supported thread assist under load lookahead mechanism for a microprocessor
US20090172370A1 (en) * 2007-12-31 2009-07-02 Advanced Micro Devices, Inc. Eager execution in a processing pipeline having multiple integer execution units
US7793080B2 (en) * 2007-12-31 2010-09-07 Globalfoundries Inc. Processing pipeline having parallel dispatch and method thereof
US8086825B2 (en) * 2007-12-31 2011-12-27 Advanced Micro Devices, Inc. Processing pipeline having stage-specific thread selection and method thereof
US8479173B2 (en) * 2008-07-09 2013-07-02 International Business Machines Corporation Efficient and self-balancing verification of multi-threaded microprocessors
US8161493B2 (en) * 2008-07-15 2012-04-17 International Business Machines Corporation Weighted-region cycle accounting for multi-threaded processor cores
US8386547B2 (en) 2008-10-31 2013-02-26 Intel Corporation Instruction and logic for performing range detection
US8347309B2 (en) * 2009-07-29 2013-01-01 Oracle America, Inc. Dynamic mitigation of thread hogs on a threaded processor
WO2011051280A1 (en) * 2009-10-26 2011-05-05 Externautics S.P.A. Ovary tumor markers and methods of use thereof
US20110191775A1 (en) * 2010-01-29 2011-08-04 Microsoft Corporation Array-based thread countdown
US9354926B2 (en) * 2011-03-22 2016-05-31 International Business Machines Corporation Processor management via thread status
JP5861354B2 (ja) * 2011-09-22 2016-02-16 富士通株式会社 演算処理装置及び演算処理装置の制御方法
CN102495762B (zh) * 2011-11-16 2014-04-02 华为技术有限公司 一种线程调度方法、线程调度装置及多核处理器系统
US9052909B2 (en) 2011-12-07 2015-06-09 Arm Limited Recovering from exceptions and timing errors
US8738971B2 (en) 2011-12-07 2014-05-27 Arm Limited Limiting certain processing activities as error rate probability rises
US8935574B2 (en) 2011-12-16 2015-01-13 Advanced Micro Devices, Inc. Correlating traces in a computing system
US8640008B2 (en) 2011-12-23 2014-01-28 Arm Limited Error recovery in a data processing apparatus
US9075621B2 (en) 2011-12-23 2015-07-07 Arm Limited Error recovery upon reaching oldest instruction marked with error or upon timed expiration by flushing instructions in pipeline pending queue and restarting execution
US10146545B2 (en) 2012-03-13 2018-12-04 Nvidia Corporation Translation address cache for a microprocessor
US9880846B2 (en) 2012-04-11 2018-01-30 Nvidia Corporation Improving hit rate of code translation redirection table with replacement strategy based on usage history table of evicted entries
US9665375B2 (en) 2012-04-26 2017-05-30 Oracle International Corporation Mitigation of thread hogs on a threaded processor and prevention of allocation of resources to one or more instructions following a load miss
US9875105B2 (en) * 2012-05-03 2018-01-23 Nvidia Corporation Checkpointed buffer for re-entry from runahead
US9824013B2 (en) 2012-05-08 2017-11-21 Qualcomm Incorporated Per thread cacheline allocation mechanism in shared partitioned caches in multi-threaded processors
US10241810B2 (en) 2012-05-18 2019-03-26 Nvidia Corporation Instruction-optimizing processor with branch-count table in hardware
US9514069B1 (en) 2012-05-24 2016-12-06 Schwegman, Lundberg & Woessner, P.A. Enhanced computer processor and memory management architecture
US8832500B2 (en) 2012-08-10 2014-09-09 Advanced Micro Devices, Inc. Multiple clock domain tracing
US9323315B2 (en) * 2012-08-15 2016-04-26 Nvidia Corporation Method and system for automatic clock-gating of a clock grid at a clock source
US8959398B2 (en) 2012-08-16 2015-02-17 Advanced Micro Devices, Inc. Multiple clock domain debug capability
US9645929B2 (en) 2012-09-14 2017-05-09 Nvidia Corporation Speculative permission acquisition for shared memory
US9317297B2 (en) * 2012-09-27 2016-04-19 Intel Corporation Replay execution of instructions in thread chunks in the chunk order recorded during previous execution
US10001996B2 (en) 2012-10-26 2018-06-19 Nvidia Corporation Selective poisoning of data during runahead
US9740553B2 (en) 2012-11-14 2017-08-22 Nvidia Corporation Managing potentially invalid results during runahead
US9632976B2 (en) 2012-12-07 2017-04-25 Nvidia Corporation Lazy runahead operation for a microprocessor
US20140181484A1 (en) * 2012-12-21 2014-06-26 James Callister Mechanism to provide high performance and fairness in a multi-threading computer system
US20140189310A1 (en) 2012-12-27 2014-07-03 Nvidia Corporation Fault detection in instruction translations
US9569214B2 (en) 2012-12-27 2017-02-14 Nvidia Corporation Execution pipeline data forwarding
US9823931B2 (en) 2012-12-28 2017-11-21 Nvidia Corporation Queued instruction re-dispatch after runahead
US9547602B2 (en) 2013-03-14 2017-01-17 Nvidia Corporation Translation lookaside buffer entry systems and methods
US10108424B2 (en) 2013-03-14 2018-10-23 Nvidia Corporation Profiling code portions to generate translations
US9471318B2 (en) 2013-03-15 2016-10-18 International Business Machines Corporation System management and instruction counting
CN104123195B (zh) * 2013-04-23 2018-03-13 华为技术有限公司 一种指令清除方法及装置
US9367472B2 (en) 2013-06-10 2016-06-14 Oracle International Corporation Observation of data in persistent memory
US9582280B2 (en) 2013-07-18 2017-02-28 Nvidia Corporation Branching to alternate code based on runahead determination
KR20150019349A (ko) * 2013-08-13 2015-02-25 삼성전자주식회사 다중 쓰레드 실행 프로세서 및 이의 동작 방법
GB2519103B (en) * 2013-10-09 2020-05-06 Advanced Risc Mach Ltd Decoding a complex program instruction corresponding to multiple micro-operations
TWI602113B (zh) * 2013-11-14 2017-10-11 宏碁股份有限公司 操作介面切換方法及使用該方法之行動通訊裝置
US9535746B2 (en) * 2013-12-19 2017-01-03 International Business Machines Corporation Honoring hardware entitlement of a hardware thread
US10241498B1 (en) * 2014-05-15 2019-03-26 Feetz, Inc. Customized, additive-manufactured outerwear and methods for manufacturing thereof
US9824413B2 (en) * 2014-11-15 2017-11-21 Intel Corporation Sort-free threading model for a multi-threaded graphics pipeline
CN105786448B (zh) * 2014-12-26 2019-02-05 深圳市中兴微电子技术有限公司 一种指令调度方法及装置
JP6477216B2 (ja) * 2015-05-08 2019-03-06 富士通株式会社 演算装置、スレッド切替方法、及びマルチスレッドプログラム
GB2544994A (en) * 2015-12-02 2017-06-07 Swarm64 As Data processing
CN106126336B (zh) 2016-06-17 2019-06-04 上海兆芯集成电路有限公司 处理器以及调度方法
US10269088B2 (en) * 2017-04-21 2019-04-23 Intel Corporation Dynamic thread execution arbitration
US10325341B2 (en) 2017-04-21 2019-06-18 Intel Corporation Handling pipeline submissions across many compute units
US10503550B2 (en) 2017-09-30 2019-12-10 Intel Corporation Dynamic performance biasing in a processor
US11789741B2 (en) * 2018-03-08 2023-10-17 Sap Se Determining an optimum quantity of interleaved instruction streams of defined coroutines
US10831492B2 (en) 2018-07-05 2020-11-10 International Business Machines Corporation Most favored branch issue
US10997058B2 (en) * 2018-07-30 2021-05-04 EMC IP Holding Company LLC Method for performance analysis in a continuous integration pipeline
US20190253357A1 (en) * 2018-10-15 2019-08-15 Intel Corporation Load balancing based on packet processing loads
US11856073B1 (en) * 2019-03-22 2023-12-26 Amazon Technologies, Inc. Message batching for communication protocols
US11886916B2 (en) 2020-06-30 2024-01-30 Microsoft Technology Licensing, Llc System for adaptive multithreaded recalculation operations

Family Cites Families (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3771138A (en) 1971-08-31 1973-11-06 Ibm Apparatus and method for serializing instructions from two independent instruction streams
JPH06105460B2 (ja) 1988-06-07 1994-12-21 富士通株式会社 マルチプロセッサのプロセッサ切換え装置
GB8817911D0 (en) 1988-07-27 1988-09-01 Int Computers Ltd Data processing apparatus
WO1990014629A2 (en) 1989-05-26 1990-11-29 Massachusetts Institute Of Technology Parallel multithreaded data processing system
GB2234613B (en) 1989-08-03 1993-07-07 Sun Microsystems Inc Method and apparatus for switching context of state elements in a microprocessor
US5396635A (en) 1990-06-01 1995-03-07 Vadem Corporation Power conservation apparatus having multiple power reduction levels dependent upon the activity of the computer system
DE4129614C2 (de) 1990-09-07 2002-03-21 Hitachi Ltd System und Verfahren zur Datenverarbeitung
US5088788A (en) * 1991-03-22 1992-02-18 Moulton Lee A Vehicle cover apparatus
US5430850A (en) * 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
JP2520544B2 (ja) * 1991-09-26 1996-07-31 インターナショナル・ビジネス・マシーンズ・コーポレイション タスクのオ―バ―ラン状態を監視する方法及びタスク実行サイクルのオ―バ―ランを検出する装置
US5357617A (en) 1991-11-22 1994-10-18 International Business Machines Corporation Method and apparatus for substantially concurrent multiple instruction thread processing by a single pipeline processor
US5404469A (en) 1992-02-25 1995-04-04 Industrial Technology Research Institute Multi-threaded microprocessor architecture utilizing static interleaving
US5452401A (en) 1992-03-31 1995-09-19 Seiko Epson Corporation Selective power-down for high performance CPU/system
US5386561A (en) 1992-03-31 1995-01-31 International Business Machines Corporation Method of integrated system load control through dynamic time-slicing in a virtual storage environment
US5325526A (en) * 1992-05-12 1994-06-28 Intel Corporation Task scheduling in a multicomputer system
JPH0695898A (ja) * 1992-09-16 1994-04-08 Hitachi Ltd 仮想計算機の制御方法および仮想計算機システム
US5392437A (en) 1992-11-06 1995-02-21 Intel Corporation Method and apparatus for independently stopping and restarting functional units
DE69422448T2 (de) 1992-12-23 2001-08-23 Eta Sa Fabriques D Ebauches Gr Multi-tasking-steuerungsgerät mit geringem energieverbrauch
US5586332A (en) 1993-03-24 1996-12-17 Intel Corporation Power management for low power processors through the use of auto clock-throttling
EP0617361B1 (de) * 1993-03-26 2001-11-28 Cabletron Systems, Inc. Ablaufssteuerungsverfahren und -gerät für ein Kommunikationsnetzwerk
US5528513A (en) * 1993-11-04 1996-06-18 Digital Equipment Corp. Scheduling and admission control policy for a continuous media server
US5524263A (en) * 1994-02-25 1996-06-04 Intel Corporation Method and apparatus for partial and full stall handling in allocation
US5809271A (en) * 1994-03-01 1998-09-15 Intel Corporation Method and apparatus for changing flow of control in a processor
JP3547482B2 (ja) * 1994-04-15 2004-07-28 株式会社日立製作所 情報処理装置
US6009454A (en) * 1994-09-30 1999-12-28 Allen-Bradley Company, Llc Multi-tasking operation system for industrial controller
US5724565A (en) 1995-02-03 1998-03-03 International Business Machines Corporation Method and system for processing first and second sets of instructions by first and second types of processing systems
JPH08320797A (ja) 1995-05-24 1996-12-03 Fuji Xerox Co Ltd プログラム制御システム
JPH096633A (ja) 1995-06-07 1997-01-10 Internatl Business Mach Corp <Ibm> データ処理システムに於ける高性能多重論理経路の動作用の方法とシステム
US5983339A (en) 1995-08-21 1999-11-09 International Business Machines Corporation Power down system and method for pipelined logic functions
GB2306147B (en) 1995-10-13 1999-11-17 Marconi Gec Ltd Drag-producing aerodynamic device
US5701432A (en) 1995-10-13 1997-12-23 Sun Microsystems, Inc. Multi-threaded processing system having a cache that is commonly accessible to each thread
US5809522A (en) 1995-12-18 1998-09-15 Advanced Micro Devices, Inc. Microprocessor system with process identification tag entries to reduce cache flushing after a context switch
GB2311880A (en) 1996-04-03 1997-10-08 Advanced Risc Mach Ltd Partitioned cache memory
DE69739726D1 (de) * 1996-08-27 2010-02-11 Panasonic Corp Vielfadenprozessor zur Verarbeitung von mehreren Befehlsströmen unabhängig von einander durch eine flexible Durchsatzsteuerung in jedem Befehlsstrom
US6088788A (en) 1996-12-27 2000-07-11 International Business Machines Corporation Background completion of instruction and associated fetch request in a multithread processor
EP0856797B1 (de) 1997-01-30 2003-05-21 STMicroelectronics Limited Cachespeichersystem für gleichzeitig laufende Prozesse
EP0863462B8 (de) * 1997-03-04 2010-07-28 Panasonic Corporation Zur effizienten Ausführung vieler asynchronen Ereignisaufgaben geeigneter Prozessor
US5835705A (en) 1997-03-11 1998-11-10 International Business Machines Corporation Method and system for performance per-thread monitoring in a multithreaded processor
GB2323188B (en) 1997-03-14 2002-02-06 Nokia Mobile Phones Ltd Enabling and disabling clocking signals to elements
US6314530B1 (en) * 1997-04-08 2001-11-06 Advanced Micro Devices, Inc. Processor having a trace access instruction to access on-chip trace memory
US5996085A (en) 1997-07-15 1999-11-30 International Business Machines Corporation Concurrent execution of machine context synchronization operations and non-interruptible instructions
US6076157A (en) 1997-10-23 2000-06-13 International Business Machines Corporation Method and apparatus to force a thread switch in a multithreaded processor
US6105051A (en) 1997-10-23 2000-08-15 International Business Machines Corporation Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor
US6212544B1 (en) 1997-10-23 2001-04-03 International Business Machines Corporation Altering thread priorities in a multithreaded processor
US6256775B1 (en) 1997-12-11 2001-07-03 International Business Machines Corporation Facilities for detailed software performance analysis in a multithreaded processor
US6092175A (en) 1998-04-02 2000-07-18 University Of Washington Shared register storage mechanisms for multithreaded computer systems with out-of-order execution
US6330584B1 (en) * 1998-04-03 2001-12-11 Mmc Networks, Inc. Systems and methods for multi-tasking, resource sharing and execution of computer instructions
US6317820B1 (en) 1998-06-05 2001-11-13 Texas Instruments Incorporated Dual-mode VLIW architecture providing a software-controlled varying mix of instruction-level and task-level parallelism
US6289461B1 (en) * 1998-06-09 2001-09-11 Placeware, Inc. Bi-directional process-to-process byte stream protocol
US6625635B1 (en) 1998-11-02 2003-09-23 International Business Machines Corporation Deterministic and preemptive thread scheduling and its use in debugging multithreaded applications
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor

Also Published As

Publication number Publication date
US6850961B2 (en) 2005-02-01
US20030023835A1 (en) 2003-01-30
US6795845B2 (en) 2004-09-21
US20030018687A1 (en) 2003-01-23
CN1645317A (zh) 2005-07-27
US20030018685A1 (en) 2003-01-23
DE60032481D1 (de) 2007-02-01
IL146159A (en) 2006-12-10
HK1042363A1 (en) 2002-08-09
WO2000067113A2 (en) 2000-11-09
WO2000067113A3 (en) 2001-09-07
BR0010602A (pt) 2005-01-11
US6981261B2 (en) 2005-12-27
US6865740B2 (en) 2005-03-08
US6785890B2 (en) 2004-08-31
US20030023659A1 (en) 2003-01-30
US6854118B2 (en) 2005-02-08
EP1185924A2 (de) 2002-03-13
US6535905B1 (en) 2003-03-18
CN1364261A (zh) 2002-08-14
CN100399263C (zh) 2008-07-02
AU4480200A (en) 2000-11-17
US20030018686A1 (en) 2003-01-23
CN1196060C (zh) 2005-04-06
US6971104B2 (en) 2005-11-29
BR0010602B1 (pt) 2012-12-11
US20030023834A1 (en) 2003-01-30
IL146159A0 (en) 2002-07-25
US20030023658A1 (en) 2003-01-30
TW476915B (en) 2002-02-21
EP1185924B1 (de) 2006-12-20

Similar Documents

Publication Publication Date Title
DE60032481T2 (de) Verfahren und vorrichtung zur threadumschaltung in einem multithreadprozessor
DE60029619T2 (de) Verfahren, vorrichtung, medium und programm zur aufnahme und zum verlassen von mehreren fäden in einem vielfadenprozessor
DE10085363B4 (de) Verfahren und Einrichtung zum Verwalten von Ressourcen in einem Multithreaded-Prozessor
DE60038693T2 (de) Verfahren und vorrichtung zur ausschaltung eines taktsignals in einem vielfadenprozessor
DE102014011332B4 (de) Priorisieren von anweisungen basierend auf typ
DE60109748T2 (de) Verfahren und gerät zur ausführungsunterbrechung in einem prozessor
DE102013014169B4 (de) Dynamisch grössenveränderbare Zirkularpuffer
DE69631778T2 (de) Flexible implementierung eines systemverwaltungsmodus in einem prozessor
DE19781850B4 (de) Mikroprozessor zum spekulativen Ausführen von Befehlen aus mehreren von einem Verzweigungsbefehl angezeigten Befehlsströmen, Verfahren und Computersystem mit Mikroprozessor
DE69829693T2 (de) Prozessor mit mehrfachprogrammzählern und ablaufverfolgungspuffern ausserhalb einer ausführungspipeline
DE112005003874B3 (de) Transaktionsgestützter Verarbeitungsbetrieb mit gemeinsam genutzten Daten in einer Multiprozessorumgebung
DE112005002305B4 (de) Thread-Livelock-Einheit
DE112004002296B4 (de) Anwenderprogrammierbares Multithreading mit geringem Overhead
DE69727773T2 (de) Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor
DE112011101364B4 (de) Fehlerbehebung in Multithread-Code
DE60005002T2 (de) Vertikal-threaded prozessor mit multidimensionalem speicher
DE112018006124B4 (de) ZUSAMMENFÜHREN VON EINTRÄGEN GLOBALER ABSCHLUSSTABELLEN IN EINEM OoO-PROZESSOR
DE10296980B4 (de) Multi-Threaded-Prozessor und Verfahren zum Zuweisen eines Thread-Vorrangs in einem Multi-Threaded-Prozessor
DE69908175T2 (de) Verbesserte befehlsdekodierung durch paralleldekodierungsalgorithmus
US20040215932A1 (en) Method and logical apparatus for managing thread execution in a simultaneous multi-threaded (SMT) processor
US20040216101A1 (en) Method and logical apparatus for managing resource redistribution in a simultaneous multi-threaded (SMT) processor
DE112011100715T5 (de) Hardware-hilfs-thread
DE112011101086T5 (de) Optimieren von Energieverbrauch und Anwendungsleistung in einem Multithread-Mehrkernprozessorsystem
DE112004001133T5 (de) Warteschlangen-Sperren mit Monitor-Memory-Wait
DE19506435C2 (de) Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8328 Change in the person/name/address of the agent

Representative=s name: HEYER, V., DIPL.-PHYS. DR.RER.NAT., PAT.-ANW., 806