DE60002200T2 - Umschaltungsverfahren in einem multithreadprozessor - Google Patents

Umschaltungsverfahren in einem multithreadprozessor Download PDF

Info

Publication number
DE60002200T2
DE60002200T2 DE60002200T DE60002200T DE60002200T2 DE 60002200 T2 DE60002200 T2 DE 60002200T2 DE 60002200 T DE60002200 T DE 60002200T DE 60002200 T DE60002200 T DE 60002200T DE 60002200 T2 DE60002200 T2 DE 60002200T2
Authority
DE
Germany
Prior art keywords
thread
processor
threads
cache
pipeline
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
DE60002200T
Other languages
English (en)
Other versions
DE60002200D1 (de
Inventor
N. William JOY
Marc Tremblay
Gary Lauterbach
I. Joseph CHAMDANI
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Application granted granted Critical
Publication of DE60002200D1 publication Critical patent/DE60002200D1/de
Publication of DE60002200T2 publication Critical patent/DE60002200T2/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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • 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
    • 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
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling

Description

  • HINTERGRUND DER ERFINDUNG
  • Gebiet der Erfindung
  • Die vorliegende Erfindung bezieht sich auf einen Prozessor oder eine Computerarchitektur. Im Besonderen bezieht sich die vorliegende Erfindung auf multiple Threading-Prozessor-Architekturen und Verfahren zum Betrieb und zur Ausführung davon.
  • Beschreibung des Stands der Technik
  • In vielen kommerziellen Rechneranwendungen vergeht viel Zeit während des Stallings und des Leerlaufs (idling) der Pipeline, anstatt während produktiver Ausführung der Programme, infolge von Cache-Fehltreffern und einer Latenzzeit beim Zugreifen auf externe Cache-Speicher oder externe Speicher nach den Cache-Fehltreffern. Das Stalling und das Leerlaufen sind infolge von häufigen Cache-Fehltreffern besonders nachteilig beim Betrieb von Datenbanken, wie zum Beispiel OLTP, DSS, Datensuche, finanziellen Vorhersagen, beim rechnerunterstützten mechanischen und elektronischen Entwurf (MCAD/ECAD), Webservern, Datenbankservern und dergleichen. Somit wird beim leerlaufenden Warten auf Daten viel Zeit verschwendet, obwohl ein Prozessor mit einer höheren Geschwindigkeit arbeiten kann.
  • Eine Technik, um das Stalling und das Leerlaufen zu reduzieren, ist das Hardware-Multithreading, um damit eine Prozessorverarbeitung während anderer Leerlaufzyklen zu erreichen. Das Hardware-Multithreading bedingt eine Nachbildung (replication) von einigen Prozessorressourcen, zum Beispiel die Nachbildung von konstruierten Registern (architected registers) für jeden Thread. Die Nachbildung wird für die meisten Prozessorressourcen einschließlich der Befehls- und Datencaches, Adress-Umsetzpuffer (translation look-aside buffers (TLB)), Befehls-Holelemente und Dispatcher, Branch-Units, Ausführungseinheiten und dergleichen, nicht benötigt.
  • Eine nachteilige Duplizierung von Ressourcen ist in Bezug auf den Einsatz von integrierten Schaltungen und deren Leistung kostenintensiv. Ein Beispiel für eine Vorrichtung, welche Ressourcen dupliziert, ist in US 5,361,337 beschrieben. Dort wird ein System offenbart, das mehrere Kopien von Zustandselementen auf einem Prozessor hat, der mit einem Multiplexer verbunden ist, um es dem Prozessor zu ermöglichen, den Kontext der aktuellen Befehle abzuspeichern und die Ausführung von neuen Befehlen innerhalb einem Taktzyklus wieder aufzunehmen. Die Duplizierung von Zustandselementen und die Aufnahme von vielen Multiplexern erhöht den Verbrauch von integrierten Schaltungen und reduziert die Leistung.
  • Ein anderes Beispiel für eine Vorrichtung, bei der ein hoher Grad an Duplizierung von Ressourcen erreicht wird, ist in "The M-Machine Multicomputer" von Fillo et al., Proceedings of Micro-28, 29. November 1995, Seiten 146–156 beschrieben. Die Vorrichtung von Fillo enthält vier Cache-Speicher und vier entsprechende MAP-Ausführungscluster, jeweils einen 64-Bit-Dreifachausgabe-Pipeline-Prozessor, der aus zwei Integer-Recheneinheiten, einer Fließkomma-Recheneinheit, dazugehörigen Registerdateien und einem 1 KW-Befehls-Cache besteht.
  • Berekovic et al. beschreibt in "An Algorithm-Hardware-System Approach to VLIW Multimedia Processors", Journal of VLSI Signal Processing 20, Seiten 163–180 (1998) eine andere Prozessorarchitektur, die duplizierte Ressourcen verwendet, um ein Multithreading zu erreichen. Der Prozessor hat drei unabhängige Befehlsströme, drei Befehlsreihen und Decodereinheiten, jede wird als ein Thread-Schlitz bezeichnet. Jeder Thread-Schlitz ist mit einem Programmzähler verbunden, um einen logischen Prozessor zu bilden. Befehls- und Funktionseinheiten werden unter den logischen Prozessoren gemeinsam genutzt.
  • Auf ähnliche Art und Weise diskutiert Byrd et al. in "Multithreaded Processor Architectures", IEEE Spectrum, V32, N8, August 1995 verschiedene Techniken für Multithreading, in denen eine Multi-Thread-Prozessorarchitektur einen Überhang beim Umschalten von Kontext reduziert oder eliminiert, indem multiple Hardware-Kontexte zur Verfügung gestellt werden, das heißt, multiple Sätze von Registern für allgemeine Aufgaben, Statusregistern und Programmzählern.
  • Gulati et al offenbart in "Performance study of a multithreaded superscalar microprocessor", Proceedings International Symposium on High-Performance Computer Architecture, 1996 einen Prozessor, welcher Multithreading unterstützt, der dieses aber nicht durch Hinzufügen von duplizierten Ressourcen unterstützt, sondern durch Hinzufügen von neuen Multithreading Ressourcen. Gulati et al. lehrt die Hinzufügung einer Zeitplaneinheit (scheduling unit) einschließlich einer Zeitplanlogik (scheduling logic), welche einen Befehls-FIFO aufrechterhält und die Befehle des FIFOs von unten nach oben analysiert und Befehle ausgibt, welche zur Ausführung bereit sind. Entsprechend werden zusätzliche Ressourcen benötigt, um Multithreading zu erreichen, was die Schaltungsgröße, den Leistungsverbrauch und die Komplexität erhöht, obwohl Gulati et al. keine Duplizierung von Ressourcen lehren.
  • Was benötigt wird, ist eine Architektur, die ein Multithreading ohne Duplizierung oder Hinzufügung von Hardware-Ressourcen erreicht, so dass Schaltungsfläche und Leistung eingespart werden. Entsprechend werden verbesserte Multithreading-Schaltungen und Betriebsverfahren benötigt, die in ihren Ressourcen wirtschaftlich sind und einen kostenintensiven Überhang vermeiden, welcher die Prozessorleistung reduziert.
  • Zusammenfassung der Erfindung
  • Ein Prozessor reduziert die verschwendete Zykluszeit, welche vom Stalling und Leerlaufen resultiert und erhöht den Anteil an Verarbeitungszeit, indem er sowohl das vertikale Multithreading als auch das horizontale Multithreading unterstützt und implementiert. Das vertikale Multithreading ermöglicht ein Überlappen oder "Verbergen" von Wartezeiten aufgrund von Cache-Fehlerraten. Beim vertikalen Multithreading nutzen Multi-Hardware-Threads gemeinsam dieselbe Prozessor-Pipeline. Ein Hardware-Thread ist typischerweise ein Prozess, ein von der Funktion her reduzierter Prozess (light weight process), ein nativer Thread oder dergleichen in einem Betriebssystem, welches Multithreading unterstützt. Horizontales Multithreading erhöht die Parallelität innerhalb der Prozessorschaltungsstruktur, zum Beispiel innerhalb einem einzelnen integrierten Schaltungs-Die, der einen Ein-Chip-Prozessor bildet. Um die Systemparallelität in manchen Prozessorausführungsbeispielen weiter zu erhöhen, werden Multiprozessorkerne auf einem einzigen Die hergestellt. Die Vorteile von einem horizontalen Threading bei einem Ein-Chip-Multiprozessor werden erreicht, wenn die Prozessorkerngröße durch den technologischen Fortschritt reduziert wird.
  • Die beschriebene Prozessorstruktur und das Betriebsverfahren können in vielen strukturellen Variationen implementiert werden. Zum Beispiel werden zwei Prozessorkerne mit einem On-Chip-Set-Associative-L2-Cache in einem System kombiniert. In einem anderen Beispiel werden vier Prozessorkerne mit einem direkten RAMBUS-Interface ohne externen L2-Cache kombiniert. Es sind zahllose Variationen möglich. In manchen Systemen ist jeder Prozessorkern eine vertikale gethreadete Pipeline.
  • In einem weiteren Aspekt einiger Ausführungsbeispiele von Multithreading-Systemen und -Verfahren kann ein Rechnersystem aus vielen unterschiedlichen Prozessorvariationen aufgebaut sein, die einen Ausführungsort einer Vielzahl von Execution-Threads bilden, zum Beispiel in einer "1C2T"-Konfiguration enthält ein einzelner Prozessor-Die zwei vertikale Threads. In einer "4C4T"-Konfiguration wird ein Multiprozessor aus vier Prozessoren auf einem einzigen Die hergestellt, wobei jeder der vier Prozessoren vertikal Vier-Wege-Threaded ist. Zahllose andere "nCkT"-Strukturen und Kombinationen können auf einem oder mehreren integrierten Schaltungsdies implementiert werden, abhängig vom verwendeten Herstellungsprozess und den Anwendungen, für die der Prozessor gedacht ist. Verschiedene Systeme können Cache-Speicher enthalten, welche wahlweise konfiguriert sind, zum Beispiel als getrennte L1-Cache-Speicher und getrennte L2-Cache-Speicher oder getrennte L1-Cache-Speicher und gemeinsam benutzte L2-Cache-Speicher, oder getrennte L1-Cache-Speicher und gemeinsam genutzte L2-Cache-Speicher. In einem Aspekt einiger Ausführungsbeispiele von Multithreading-Systemen und -Verfahren friert ein Prozessor als Reaktion auf eine Cache-Speicher-Fehltreffer-Blockierung den gesamten Zustand einer Pipeline beim Ausführung eines Threads ein. Für jeden Thread getrennt und unabhängig voneinander führt der Prozessor die Befehle aus und verwaltet den Maschinenzustand. Die funktionellen Eigenschaften eines unabhängigen Thread-Zustandes werden über die Pipeline in den Pipeline-Registern abgespeichert, um es dem Prozessor zu ermöglichen, die Ausführung eines blockierten Threads zu verschieben, die Pipeline für einen vorher leerlaufenden Thread freizugeben und um später die Ausführung des aufgeschobenen blockierten Threads bei genau dem Zustand des blockierten Threads wieder aufzunehmen, der unmittelbar vor dem Umschalten des Threads vorlag.
  • In einem anderen Aspekt von Ausführungsbeispielen von einigen Multithreading-Systemen und -Verfahren enthält ein Prozessor eine "vier-dimensionale" Registerstruktur, in welcher Registerdatenstrukturen N mal für das vertikale Threading in Kombination mit einer dreidimensionalen Speicherschaltung vorhanden sind. Der multidimensionale Speicher ist aufgebaut, indem ein Speicher, wie zum Beispiel eine Registerdatei oder ein Speicher, als eine Vielzahl von zweidimensionalen Speicherebenen aufgebaut ist.
  • In einem anderen Aspekt von einigen Ausführungsbeispielen von Multithreading-Systemen und -Verfahren implementiert ein Prozessor eine N-Bit-Flip-Flop-globale Substitution. Um multiple Maschinenzustände zu implementieren, konvertiert der Prozessor die 1-Bit-Flip-Flops in den Speicherzellen des blockierten vertikalen Threads in ein N-Bit-globales Flip-Flop, wobei N die Anzahl der vertikalen Threads ist.
  • In einem Aspekt von einigen Ausführungsbeispielen von Prozessoren und Prozessorverfahren verbessert der Prozessor die Durchgangseffizienz und erhält eine erhöhte Parallelität durch Einführung von Multithreading in einem existierenden und bereitstehenden Prozessorkern. Das Multithreading wird in zwei Schritten implementiert, welche das vertikale und das horizontale Multithreading enthalten. Der Prozessorkern wird ergänzt, um multiple Maschinenzustände zu unterstützen. Ausführungsbeispiele des Systemes, welche die Ergänzung eines bestehenden Prozessorkernes vorteilhafterweise nutzen, beeinflussen hunderte von Mannjah ren von Hardware- und Softwareentwicklung, indem die Lebenszeit einer erprobten Prozessor-Pipelinegeneration verlängert wird.
  • In einem anderen Aspekt von einigen Ausführungsbeispielen von Multithreading-Systemen und -Verfahren enthält ein Prozessor eine Logik zur Markierung (tagging) einer Thread-Identifikation (TID) für den Gebrauch mit Prozessorblöcken, welche nicht blockiert sind. Die relevanten nicht blockierten Blöcke enthalten Cache-Speicher, Adressumsetzpuffer (TLB), eine Ladepuffer-asynchrone Schnittstelle, eine externe Speichermanagement-Einheit (MMU)-Schnittstelle und andere Elemente.
  • In einem weiteren Aspekt der Ausführungsbeispiele von Multithreading-Systemen und -Verfahren enthält ein Prozessor einen Cache-Speicher, der in eine Vielzahl von N Cache-Speicherabschnitten aufgeteilt ist. Die Aufteilung des Cache-Speichers vermeidet eine Interferenz, "Verschmutzung" oder ein "Übersprechen" zwischen den Threads. Eine Technik zur Aufteilung des Cache-Speichers nutzt die Logik zum Abspeichern und zur Kommunikation der Thread-Identifikations-(TID)-Bits. Der Cache-Speicher nutzt die Cache-Indizierungslogik. Zum Beispiel können die TID-Bits beim Bit mit der höchsten Bedeutung des Cache-Indexes eingefügt werden.
  • In einem anderen Aspekt der Ausführungsbeispiele von Multithreading-Systemen und -Verfahren enthält ein Prozessor eine Steuerlogik zum Umschalten von Threads, welche einen schnellen Umschaltbetrieb von Threads als Reaktion auf eine L1-Cache-Speicher-Fehltrefferblockierung ausführt. Der schnelle Betrieb zum Umschalten von Threads implementiert ein oder mehrere unterschiedliche Umschaltverfahren für Threads. Ein erster Betrieb zum Umschalten von Threads ist das "unbewusste" (oblivious) Umschalten eines Threads bei jedem N-ten Zyklus, in welchen die einzelnen Flip-Flops lokal eine Thread-Umschaltung bestimmen, ohne eine Mitteilung über die Blockierung abzugeben. Diese "unbewusste" Technik vermeidet den Gebrauch einer zusätzlichen globalen Verbindung zwischen den Threads für die Thread-Auswahl. Ein zweiter Betrieb zum Umschalten von Threads ist das "semiunbewusste" (semi-oblivious) Umschalten von Threads, für den Gebrauch mit einem vorhandenen "Pipeline-Blockierungs"-Signal (wenn eines vorhanden ist). Das Pipeline-Blockierungssignal hat zwei Funktionen, erstens als eine Mitteilung einer Pipeline-Blockierung und zweitens als ein Thread-Auswahlsignal zwischen den Threads, so dass wieder der Gebrauch einer zusätzlichen globalen Verbindung zwischen den Threads für die Thread-Auswahl vermieden wird. Ein dritter Betrieb zum Umschalten von Threads ist ein "intelligentes globales Zeitplan"-Thread-Umschalten, in welchem eine Entscheidung zum Umschalten eines Threads auf einer Vielzahl von Signalen basiert, die folgende Signale enthält: (1) ein L1-Datencache-Fehltreffer-Blockierungssignal, (2) ein Befehlspuffer-Leersignal, (3) ein L2-Cache-Fehltreffersignal, (4) ein Thread-Prioritätssignal, (5) ein Thread-Zeitsignal, (6) ein Unterbrechungssignal oder andere Quellen zum Triggern. In manchen Ausführungsbeispielen wird das Thread-Auswahlsignal ähnlich der Verteilung eines Taktsignales mittels eines Clocktrees, so schnell wie möglich ausgesendet. In manchen Systemen leitet ein Prozessor ein Auswahlsignal für Threads, das an die Flip-Flops angelegt wird, ab, indem ein Scan-Freigabe-(SE)-Signal eines scanbaren Flip-Flops überlastet wird.
  • In einem zusätzlichen Aspekt von Ausführungsbeispielen von Multithreading-Systemen und -Verfahren enthält ein Prozessor eine Anti-Aliasing-Logik, die mit einem L1-Cache verbunden ist, so dass der L1-Cache über das Anti-Aliasing von den Threads gemeinsam benutzt wird. Der L1-Cache ist ein virtuell indizierter, physikalisch markierter Cache-Speicher, der unter den Threads gemeinsam benutzt wird. Die Anti-Aliasing-Logik vermeidet Probleme, die vom multi-virtuellen Adress-Mapping auf eine virtuelle Adresse resultieren. Die Anti-Aliasing-Logik erklärt wahlweise duplizierte L1-Cache-Speichereinträge für ungültig oder bringt diese auf den neuesten Stand.
  • Bei einem anderen Aspekt von einigen Ausführungsbeispielen des Multithreading-Systems und -Verfahrens enthält ein Prozessor eine Logik zur Erlangung einer sehr schnellen Funktionalität zur Behandlung von Ausnahmen während der Ausführung von nichtgethreadeten Programmen, indem ein Multi-Thread-Funktionalitätstyp als Reaktion auf eine Ausnahmebedingung aufgerufen wird. Der Prozessor arbeitet sich während der Ausführung durch die multiplen Maschinenzustände, während er die Multi-Thread-Bedingungen ausführt oder während er die nicht-gethreadeten Programme ausführt. Die sehr schnelle Behandlungslogik enthält eine Verbindung zu einer Ausnahmesignalleitung, um eine Auswahllogik zu threaden, was ein Ausnahmesignal dazu bringt, eine Umschaltung im Thread- und Maschinenzustand durchzuführen. Die Umschaltung im Thread- und Maschinenzustand veranlasst den Prozessor, ohne auf die Ausgabe der Pipeline oder der Schlange zu warten und ohne die inhärente Zeitstrafe der Betriebsystems-Software, welche die Register abspeichert und wieder herstellt, sofort in die Ausnahmebehandlungsroutine einzutreten und diese wieder zu verlassen.
  • Ein zusätzlicher Aspekt von einigen Multithreading-Systemen und -Verfahren ist ein Thread-Reservierungssystem oder ein Thread-Verriegelungssystem, in welchem ein Threadpfad für den Gebrauch durch einen ausgewählten Thread reserviert wird. Eine Thread- Steuerlogik kann einen besonderen Thread auswählen, der mit Priorität im Vergleich zu anderen Threads, auszuführen ist. Ein Thread mit hoher Priorität kann mit einem Betrieb mit strikten Zeitbegrenzungen verbunden werden, wobei dies ein Betrieb ist, der im Vergleich zu anderen Threads häufig und überwiegend ausgeführt wird. Die Thread-Steuerlogik steuert den Betrieb des Umschaltens der Threads, so dass ein bestimmter Hardware-Thread für den Gebrauch durch den ausgewählten Thread reserviert wird.
  • In einem anderen Aspekt einiger Ausführungsbeispiele von Multithreading-Systemen und -Verfahren enthält ein Prozessor Logikunterstützungs-Leichtgewichtsprozesse und native Threads. Die Logik enthält einen Block, welcher die Markierung von Thread-IDs sperrt und die Aufrennung von Cache-Speichern sperrt, da die Leichtgewichtsprozesse und die nativen Threads denselben virtuellen Markierungsraum gemeinsam benutzen.
  • In einem weiteren zusätzlichen Aspekt von einigen Ausführungsbeispielen der Multithreading-Systeme und -Verfahren enthalten einige Prozessoren eine Thread-Reservierungs-Funktionalität.
  • Kurze Beschreibung er Figuren
  • Die Merkmale der beschriebenen Ausführungsbeispiele werden im Besonderen in den angefügten Ansprüchen weiter ausgeführt. Jedoch können die Ausführungsbeispiele der Erfindung in Bezug auf sowohl die Struktur als auch auf das Verfahren des Betriebes am besten mit Bezug auf die folgende Beschreibung und die begleitenden Zeichnungen verstanden werden.
  • 1A und 1B sind Zeitdiagramme, die jeweils den Ausführungsfluss eines einzelnen Thread-Prozessors und eines vertikalen Multi-Thread-Prozessors darstellen.
  • 2A, 2B und 2C sind Zeitdiagramme, die jeweils den Ausführungsfluss eines Einzel-Thread-Prozessors, eines vertikalen Multi-Thread-Prozessors und eines vertikalen und horizontalen Multi-Thread-Prozessors darstellen.
  • 3 ist ein schematisches und funktionelles Blockdiagramm, welches eine Entwurfskonfiguration für einen Einzelprozessor-vertikal gethreadeten Prozessor darstellt, der zur Implementierung verschiedener Multithreading-Techniken und -Systeme geeignet ist, welche die Multithreading-Leistung und -Funktion verbessern.
  • 4A, 4B und 4C sind Diagramme, welche ein Ausführungsbeispiel eines pulsbasierten Hochgeschwindigkeits-Flip-Flops darstellen, welches vorteilhaft benutzt werden kann, um ein Multithreading in einer integrierten Schaltung zu erreichen. 4A ist ein schematisches Blockdiagramm, welches die Steuerung und Abspeicherung von Schaltungsblöcken darstellt, die Hochgeschwindigkeits-Multibit-Flip-Flops benutzen. 4B ist eine schematische Schaltungsdarstellung, welche eine Multibit-bistabile Multivibrator-(Flip-Flop)-Schaltung zeigt. 4C ist ein Zeitdiagramm, welches den Zeitablauf des Multibit-Flip-Flops darstellt.
  • 5 ist ein schematisches Blockdiagramm, das eine N-Bit-"thread-auswählbare" Flip-Flop-Ersetzungslogik darstellt, die benutzt wird, um eine vertikal multi-gethreadete Funktionalität in einer Prozessor-Pipeline herzustellen, während dieselbe Schaltungsgröße wie bei einer einzel-gethreadeten Pipeline beibehalten wird.
  • 6 ist ein schematisches Blockdiagramm, welches eine Thread-Umschaltlogik darstellt, die sehr schnell ein Thread-Identifizierungs-(TID)-Signal erzeugt, welches einen aktiven Thread aus einer Vielzahl von Threads identifiziert.
  • 7A und 7B sind jeweils schematische Blockdiagramme, die ein Beispiel für einen aufgetrennten Cache-Speicher und ein Diagramm, welches ein Beispiel für eine Adresstechnik für den aufgetrennten Cache-Speicher ist, zeigen.
  • 8 ist ein schematisches Blockdiagramm, das eine geeignete Anti-Aliasing-Logik für den Gebrauch von verschiedenen Prozessor-Implementierungen einschließlich einem Cache, wie zum Beispiel einem L1-Cache und L2-Cache oder anderen zeigt.
  • 9 ist ein schematisches funktionelles Blockdiagramm, das eine Entwurfskonfiguration für einen Einzelchip-Dualprozessor-vertikal-getreadeten Prozessor zeigt, der zur Implementierung von verschiedenen Multi-Thread-Techniken und System-Implementationen geeignet ist, die die Multi-Thread-Leistung und Funktion verbessern.
  • 10 ist ein schematisches funktionelles Blockdiagramm, das einen alternativen Entwurf für eine Konfiguration für einen Einzelprozessor-vertikal-gethreadeten Prozessor zeigt, welche in der Lage ist, verschiedene Multithreading-Techniken und System-Implementierungen zu implementieren, welche die Multithreading-Leistung und -Funktion verbessern.
  • 11 ist ein schematisches funktionelles Blockdiagramm, welches einen alternativen Entwurf für eine Konfiguration für einen Einzelchip-Dualprozessor-vertikal-gethreadeten Prozessor zeigt, der zur Implementierung von verschiedenen Multithreading-Techniken und System-Implementierungen geeignet ist, welche die Multithreading-Leistung und -Funktion verbessern.
  • 12 ist ein schematisches Blockdiagramm, welches einen Prozessor und eine Pro zessorarchitektur zeigt, die zur Implementierung verschiedener Multithreading-Techniken und System-Implementierungen geeignet sind, welche die Multithreading-Leistung und -Funktion verbessern.
  • 13 ist ein schematisches perspektivisches Diagramm, welches eine multidimensionale Registerdatei zeigt.
  • 14 ist ein schematisches Schaltungsdiagramm, welches eine herkömmliche Implementierung von Registerfenstern zeigt.
  • 15 ist ein schematisches Schaltungsdiagramm, welches eine Vielzahl von Bitzellen eines Registerfensters der multi-dimensionalen Registerdatei zeigt, welche eine Verschwendung von Fläche einer integrierten Schaltung vermeidet, indem es die Bedingung nutzt, dass gleichzeitig nur ein Fenster gelesen wird und nur ein Fenster geschrieben wird.
  • 16 zeigt ein schematisches Schaltungsdiagramm, welches eine geeignete Bit-Speicherschaltung darstellt, die ein Bit des lokalen Registers für die multi-dimensionale Registerdatei mit acht Fenstern abspeichert.
  • 17A und 17B sind jeweils schematisches Diagramm und ein schematisches Blockdiagramm, welche das gemeinsame Benutzen von Registern unter den nebeneinander liegenden Fenstern zeigen.
  • 18 ist ein schematisches Schaltungsdiagramm, das eine Implementierung einer multi-dimensionalen Registerdatei für Register, welche von einer Vielzahl von Fenstern gemeinsam benutzt werden, zeigt.
  • Die Benutzung von gleichen Referenzsymbolen in unterschiedlichen Zeichnungen gibt gleiche oder identische Teile an.
  • Beschreibung der Ausführungsbeispiele
  • Bezüglich den 1A und 1B stellen zwei Zeitdiagramme jeweils den Ausführungsfluss 110 in einem Einzel-Thread-Prozessor und den Ausführungsfluss 120 in einem vertikalen Multi-Thread-Prozessor dar. Verarbeitungsanwendungen, wie zum Beispiel Datenbankanwendungen, verbringen einen beträchtlichen Anteil der Ausführungszeit in einem blockierten Zustand, wo sie auf die Reaktion vom Speicher warten. 1A ist ein hochschematisches Zeitdiagramm, welches den Ausführungsfluss 110 eines Einzel-Thread-Prozessors darstellt, welcher eine Datenbankanwendung ausführt. In einem erklärenden Beispiel ist der Einzel-Thread-Prozessor ein Vier-Wege-Superskalar-Prozessor. Schraffierte Flächen 112 entsprechen den Perioden der Ausführung, in welchen der Einzel-Thread-Prozessor Befehle ausgibt. Freie Flächen 114 entsprechen Zeitperioden, in denen der Einzel-Thread-Prozessorkern blockiert ist und auf Daten oder Befehle vom Speicher oder einem externen Cache wartet. Ein typischer Einzel-Thread-Prozessor, der eine typische Datenbankanwendung ausführt, führt zu 30% der Zeit Befehle aus, wobei 70% der Zeit in einem blockierten Zustand vergeht. Die Rate von 30% der Benutzung ist ein Beispiel für den ineffizienten Gebrauch der Ressourcen durch einen Einzel-Thread-Prozessor.
  • 1B ist ein hochschematisches Zeitdiagramm, welches den Ausführungsfluss 120 von ähnlichen Datenbankanwendungen durch einen Multi-Thread-Prozessor zeigt. Anwendungen, wie zum Beispiel Datenbankanwendungen, haben einen großen Grad an inhärenter Parallelität infolge der Orientierung an starkem Durchlauf der Datenbankanwendung und der gemeinsamen Datenbankfunktion beim Verarbeiten einiger unabhängiger Transaktionen zur gleichen Zeit. Das Basiskonzept zur Nutzung der Multi-Thread-Funktion setzt Prozessorressourcen effizient ein, wenn ein Thread durch das Ausführen eines anderen Threads blockiert wird, während der blockierte Thread blockiert bleibt. Der Ausführungsfluss 120 stellt einen ersten Thread 120, einen zweiten Thread 124, einen dritten Thread 126 und einen vierten Thread 128 dar, wobei alle mit einer Schraffur im Zeitdiagramm dargestellt sind. Wenn ein Thread blockiert ist, zum Beispiel der erste Thread 122, dann schaltet ein anderer Thread, zum Beispiel der zweite Thread 124, auf die Ausführung in einer anderen nicht benutzten oder leerlaufenden Pipeline um. Freie Flächen 130 entsprechen Leerlaufzeiten, wenn alle Threads blockiert sind. Der gesamte Einsatz des Prozessors wird durch das Multithreading deutlich verbessert. Die illustrative Technik des Multithreadings benutzt die Nachbildung von aufgebauten Registern für jeden Thread und wird "vertikales Multithreading" genannt.
  • Vertikales Multithreading ist beim Verarbeiten von Anwendungen vorteilhaft, in welchen häufige Cache-Fehltreffer zu empfindlichen Taktstrafen führen. Wenn die Cache-Fehltreffer bewirken, dass ein erster Thread blockiert, dann erlaubt das vertikale Multithreading Cache einem zweiten Thread, dass dieser ausgeführt wird, wenn der Prozessor sonst leerlaufend bleiben würde. Somit übernimmt der zweite Thread die Ausführung auf der Pipeline. Ein Kontextumschalter vom ersten Thread auf den zweiten Thread bedingt das Abspeichern von nützlichen Zuständen des ersten Threads und das Zuweisen von neuen Zuständen an den zweiten Thread. Wenn der erste Thread nach dem Stalling wieder beginnt, dann werden die abgespeicherten Zustände wieder hergestellt und der erste Thread geht in die Verarbeitung über. Das vertikale Multithreading geht auf Kosten der Prozessor-Ressourcen, die zum Abspeichern und zum Wiederherstellen der Thread-Zustände benutzt werden.
  • Bezüglich den 2A, 2B und 2C stellen drei hochgradig schematische Zeitdiagramme jeweils den Ausführungsfluss 210 eines Einzel-Thread-Prozessors, einen Ausführungsfluss 230 eines vertikalen Multi-Thread-Prozessors und einen Ausführungsstrom 250 eines kombinierten vertikalen und horizontalen Multi-Thread-Prozessors dar. In 2A stellen die schraffierten Flächen 212 Ausführungsperioden dar und freie Flächen 214 stellen Zeitperioden dar, in denen der Einzel-Thread-Prozessorkern infolge von Blockierung leerläuft, was die Ineffizienz eines Einzel-Thread-Prozessors darstellt.
  • In 2B enthält der Ausführungsfluss 230 in einem vertikal gethreadeten Prozessor eine Ausführung eines ersten Threads 232 und eines zweiten Threads 234, wobei beide im Zeitdiagramm schraffiert sind, und eine Leerlaufzeit, die in einer freien Fläche 240 dargestellt ist. Eine effiziente Befehlsausführung zeigt sich, wenn ein Thread blockiert und als Reaktion auf die Blockierung ein anderer Thread in den Zustand der Verarbeitung auf der sonst nicht genutzten oder leerlaufenden Pipeline umschaltet. In den freien Flächen 240 tritt eine Leerlaufzeit auf, wenn alle Threads blockiert sind. Für den vertikalen Multi-Thread hält der Prozessor einen getrennten Verarbeitungszustand für T Ausfiihrungs-Threads aufrecht. Nur ein Thread ist gleichzeitig aktiv. Der vertikale Multi-Thread-Prozessor schaltet die Ausführung auf einen anderen Thread bei einem Cache-Fehltreffer, zum Beispiel einem L1-Cache-Fehltreffer, um.
  • Ein horizontal gethreadeter Prozessor, welcher eine Technik benutzt, die multiple Chip-Verarbeitung genannt wird, kombiniert Multi-Prozessoren auf einem integrierten Schaltungsdie. Die multiplen Prozessoren sind vertikal gethreadet, um einen Prozessor mit sowohl vertikalem als auch horizontalem Threading zu bilden, welche die Ausführungseffizienz vergrößern und die Latenz in einer multiplikativen Art verringern. In 2C enthält der Ausführungsfluss 250 in einem vertikal und horizontal gethreadeten Prozessor die Ausführung eines ersten Threads 252, der auf einem ersten Prozessor ausgeführt wird, einen zweiten Thread 254, welcher auf dem ersten Prozessor ausgeführt wird, einen ersten Thread 256, der auf einem zweiten Prozessor ausgeführt wird und einem zweiten Thread 258, der auf dem zweiten Prozessor ausgeführt wird. Eine Leerlaufzeit wird durch die freie Fläche 260 für sowohl den ersten als auch den zweiten Prozessor dargestellt. Die Ausführung des ersten Threads 252 und des zweiten Threads 254 auf dem ersten Prozessor stellt das vertikale Threading dar. Auf ähnliche Art und Weise stellt die Ausführung des ersten Threads 256 und des zweiten Threads 258 auf dem zweiten Prozessor das vertikale Threading dar. In dem beschreibenden Ausführungsbeispiel enthält eine einzelne integrierte Schaltung sowohl den er sten Prozessor als auch den zweiten Prozessor, wobei die multiplen Prozessoren parallel arbeiten, so dass der Multithreading-Betrieb ein Horizontal-Multithreading oder eine integrierte Schaltungschip-Multiverarbeitung (CMP) in Kombination mit dem vertikalen Multithreading des ersten Prozessors und des zweiten Prozessors ist. Die Kombination des vertikalen Multithreadings und des horizontalen Multithreadings erhöht die Parallelität und die Leistung des Prozessors und erreicht eine Ausführungswirksamkeit, welche die Effizienz eines Prozessors übersteigt, der nur vertikales Multithreading benutzt. Die Kombination aus vertikalem Multithreading und horizontalem Multithreading reduziert auch mit Vorteil die Verbindungslatenzzeit zwischen den lokalen (On-Chip) Multi-Prozessor-Aufgaben, indem ein großer Aufwand an Signalisierung auf Verbindungsleitungen mit hoher Latenzzeit zwischen den integrierten Schaltungschips eliminiert wird. Horizontales Multithreading nutzt des weiteren vorteilhaft die Prozessorgeschwindigkeit und die Leistungsverbesserungen aus, welche inhärent von der reduzierten Schaltungsgröße bei der Entwicklung der Siliciumverarbeitung resultieren.
  • Für jeden vertikal gethreadeten Prozessor wird die effiziente Befehlsausführung ausgeführt, wenn ein Thread blockiert ist und als Reaktion auf die Blockierung schaltet ein anderer Thread auf die Ausführung auf einer ansonsten nicht benutzten oder leerlaufenden Pipeline um. In den freien Flächen 260 tritt eine Leerlaufzeit auf, wenn alle Threads blockiert sind.
  • Das vertikale Multithreading wird mit Vorteil benutzt, um die Blockierungen durch Cache-Fehltreffer zu überwinden oder zu verbergen und um dadurch die Ausführungen durch den Prozessor fortzusetzen, anstatt die Ausführung zu blockieren. Vertikales Multithreading verbessert somit die Leistung in kommerziellen Multi-Prozessor- und Multithreading-Anwendungen. Das vertikale Multithreading verkürzt mit Vorteil die Zeit zum Umschalten von Kontexten vom Millisekundenbereich in den Nanosekundenbereich. Vertikales Multithreading ist sehr von Vorteil in allen Verarbeitungsumgebungen, einschließlich von eingebetteten, Desktop- und Serveranwendungen und dergleichen.
  • Das horizontale Multithreading oder die Schaltungschip-Multiverarbeitung erhöht folglich die Parallelität auf dem Chip, indem es die zunehmend kleineren Prozessorkerngrößen nutzt.
  • Obwohl das erklärende Beispiel die Ausführung von zwei gegensätzlichen vertikalen Multithreading-Prozessoren zeigt, wobei jeder gegensätzliche vertikale Multithreading-Prozessor zwei Threads ausführt, können in einem anderen Beispiel eine unterschiedliche Anzahl von gegensätzlichen Ausführungsprozessoren unterschiedliche Anzahlen von Threads ausführen. Die Anzahl der Threads, welche ein Prozessor ausführt, können gleich oder unter schiedlich zu der Zahl von Threads sein, welche gegensätzlich und parallel auf einem anderen Prozessor ausgeführt werden.
  • Bei manchen Prozessorentwürfen fließt das vertikale und horizontale Multithreading in den fundamentalen Entwurf des Prozessors mit ein, was den Vorteil hat, dass dabei modulare und flexible Strukturen geschaffen werden, welche die Skalierbarkeit des Entwurfes fördern. Bei anderen Prozessorentwürfen fließt das Multithreading in bestehende und ausgereifte Prozessorentwürfe ein, um bestehende technologische Grundlagen zu beeinflussen und die Leistung von Multiverarbeitungs- und Multithreading-Anwendungen zu erhöhen. Ein besonders geeignetes Beispiel des Prozessorentwurfs zum Umbau mit Multithreading-Funktionalität ist ein Ultra-SPARC-Prozessor. In manchen Entwürfen wird ein vertikales und horizontales Multithreading durch einen minimalen Umbau eines bereits bestehenden Prozessorkernes erreicht, wobei die Veränderungen beim logischen und physikalischen Entwurf reduziert und das gesamte Überarbeiten der Verschaltung, die Umarbeitung und die Kosten für eine massive Überarbeitung der integrierten Schaltungen vermieden werden.
  • Bezüglich 3 stellt ein schematisches funktionelles Blockdiagramm einen Entwurf für eine Konfiguration für einen einzelprozessor-vertikal-gethreadeten Prozessor 300 dar, der zur Implementierung verschiedener Multithreading-Techniken und System-Implementierungen geeignet ist, welche die Multithreading-Leistung und Funktion verbessern. Der einzel-Prozessor-vertikal-gethreadete Prozessor 300 hat eine einzige Pipeline, welche von einer Vielzahl von Maschinenzuständen oder Threads gemeinsam benutzt wird, was eine Vielzahl von Maschinenzuständen gleichzeitig aufrechterhält. Momentan ist ein Thread aktiv, das heißt nicht blockiert, der ausgewählt wird und Daten an funktionelle Blöcke liefert, welche mit der Pipeline verbunden sind. Wenn der aktive Thread blockiert ist, dann schaltet die Pipeline sofort auf einen nicht-blockierten Thread um, falls es überhaupt einen nichtblockierten Thread gibt, und beginnt mit der Ausführung des nicht-blockierten Threads.
  • Der Einzel-Prozessor-vertikal-gethreadete Prozessor 300 enthält einen Thread 0-Maschinenzustandsblock 310, welcher einen Maschinenzustand eines ersten Threads (Thread 0) bildet. Der Einzel-Prozessor-vertikal-gethreadete Prozessor 30 enthält auch einen Thread 1-Maschinenzustandsblock 312, welcher einen Maschinenzustand eines zweiten Threads (Thead 1) bildet, welcher den Maschinenzustand des Thread 0 abbildet. Der Thread 0-Maschinenzustandsblock 310 und der Thread 1-Maschinenzustandsblock 312 werden in einer einzigen integrierten Schaltungslogikstruktur hergestellt, wobei ein Hochgeschwindigkeits-Multibit-Flip-Flop-Entwurf und eine "vierdimensionale Registerdateistruktur" verwendet wird, und Instruktionen von Thread 0 und Thread 1 unter Benutzung eines vertikalen Threadings an eine gemeinsam benutzte Prozessor-Pipeline 314 zugeführt werden. Die multidimensionale Registerdatei benutzt Registerdateistrukturen, welche N mal für das vertikale Threading in Kombination mit einer dreidimensionalen Speicherschaltung vorhanden sind. Der dreidimensionale Speicher wird hergestellt, indem ein Speicher, wie zum Beispiel eine Registerdatei oder ein Speicher, als eine Vielzahl von zweidimensionalen Speicherebenen aufgebaut wird.
  • Als Reaktion auf ein Cache-Fehltreffer-Stalling (Cache-Fehltreffer-Blockierung) friert der Prozessor 300 den gesamten Pipeline-Zustand eines auszuführenden Threads in der gemeinsam benutzten Prozessor-Pipeline 314 ein. Der Prozessor 300 gibt Instruktionen aus, welche den Maschinenzustand eines jeden Threads getrennt und unabhängig verwalten. Die funktionellen Eigenschaften eines unabhängigen Thread-Zustandes werden in der ganzen Pipeline, welche sich zu den Pipeline-Registern erstreckt, abgespeichert, um es dem Prozessor 300 zu ermöglichen, die Ausführung eines blockierten Threads zu verschieben, indem der aktive Zustand in der Pipeline eingefroren wird, die Pipeline 304 für einen vorher leerlaufenden Thread freigibt, indem der vorher leerlaufende Thread in der Pipeline aktiviert wird, während der Zustand des neu leerlaufenden Threads in der Pipeline gehalten wird und später die Ausführung des aufgeschobenen blockierten Threads zu genau dem Zustand des blockierten Threads wieder aufgenommen wird, der unmittelbar vor der Umschaltung des Threads lag.
  • Die gemeinsam benutzte Prozessor-Pipeline 314 ist mit einer dualen Lade/Speichereinheit verbunden, welche eine Thread 0-Lade-/Speichereinheit 316 und eine Thread 1-Lade-/Speichereinheit 318 enthält, die jeweils die Zugriffe zum Laden und zum Speichern der Daten der Instruktions-Threads 0 und 1 ausführen. Die Lade-/Speichereinheiten erzeugen eine virtuelle Adresse aller Lade- und Speicheroperationen beim Zugriff auf einen Datencache, entkoppeln die Ladefehler von der Pipeline über Ladepuffer (nicht dargestellt) und entkoppeln das Speichern über Speicherpuffer. Es wird bis zu einer Lade- oder Speicheroperation pro Zyklus ausgegeben.
  • Die gemeinsam benutzte Prozessor-Pipeline 314 und die duale Lade-/Speichereinheit sind mit einer Datenspeicher-Schnittstelle 320 verbunden, welche einen gemeinsam benutzten Datencache und eine gemeinsam benutzte Datenspeicher-Managementeinheit (DMMU) enthält. Der gemeinsam benutzte Datencache wird benutzt, um Daten von sowohl Thread 0- als auch Thread 1-Befehlssequenzen im Cache-Speicher abzuspeichern. In einem beispielhaften Prozessor 300 ist der Datencache ein write-through-non-allocating-l6-Kilobyte-direct mapped-32-Byte-line-Cache-Speicher. Der Datencache ist virtuell indiziert und physikalisch markiert, indem ein Markierungsfeld (tag array) benutzt wird, welches zwei Anschlüsse hat, so dass Markierungs-Updates, welche von Zeileneingaben (line fills) resultieren, nicht mit dem Lesen der Markierungen für eingehende Ladebefehle kollidieren. Spezielle Überwachungsbusse (snoops) des Datencaches nutzen den zweiten Markierungsanschluss, so dass eine eingehende Ladeanweisung ohne Verzögerung durch den speziellen Überwachungsbus verarbeitet wird. Die gemeinsam benutzte Datenspeicher-Managementeinheit (DMMU) führt die Umsetzung der virtuellen auf die physikalische Adresse durch.
  • Die dualen Lade-/Speichereinheiten sind auch mit einer externen Cache-Steuereinheit (ECU) 322 verbunden, die mit einem externen Cache-Bus 324 verbunden ist. Die externe Cache-Steuereinheit 322 ist auch mit einem Ultraport-Architekturverbindungs(UPA)-Bus 326 über eine Speicherschnittstelleneinheit (MIU 328 verbunden. Die externe Cache-Steuereinheit 322 und die Speicherschnittstelleneinheit (MIU) 328 sind zwischen Thread 0 und Thread 1 vereinigt, um die Funktionen der Verarbeitung eines Cache-Fehltreffers und eine Schnittstelle zu externen Geräten zu schaffen, um in Kombination über einen gemeinsam genutzten Instruktionssteuerblock 330 eine Vielzahl von Ausführungs-Threads an den Thread 0-Maschinenzustandsblock 310 und den Thread 1-Maschinenzustandsblock 312 zuzuführen. Die vereinheitlichte externe Cache-Steuereinheit 322 und die Speicherschnittstelleneinheit (MIU) 328 beinhalten eine Thread-Kennzeichnungsmarkierung (TID), um eine Transaktion zu bezeichnen und zu identifizieren, auf die über den externen Cache-Bus 324 und den UPA-Bus 326 zugegriffen wird. In dem Prozessor 300 wird die TID nur intern von dem Prozessor 300 (integrierter Schaltungschip) erfasst. Außerhalb des integrierten Schaltungschips interagiert die Hardware mit dem Prozessor 300, so wie sie mit einer einzelnen CPU mit einem UPA-Bus und einer externen Cache-Bus-Schnittstelle interagiert. Im Gegensatz dazu interagiert die Software außerhalb des integrierten Schaltungschips mit dem Prozessor 300, so wie sie mit zwei logischen CPUs interagiert.
  • Der Befehlssteuerblock 330 enthält einen Befehls-Cache (L1), eine Branch-Prediction-Einheit, NFRAM, und einer Befehlsspeicher-Managementeinheit (IMMU), wobei alle von den multiplen Threads, Thread 0 und Thread 1, gemeinsam benutzt werden. In einem beispielhaften Prozessor ist der Befehls-Cache ein 16-Kilobyte-Zweiwege-Set-Associative-Cache mit 32 Byte Blöcken. Der Befehls-Cache ist physikalisch indiziert und physikalisch markiert. Der Satz wird im voraus berechnet als ein Teil eines "nächsten Feldes", so dass nur Index-Bits einer Adresse benötigt werden, um den Cache-Speicher zu adressieren. Die Befehlsspeicher- Managementeinheit (IMMU) unterstützt die Adressumsetzung von virtuellen auf physikalische Adressen von Befehlsprogrammzählern (PCs). Um die Bedingungszweige vorab auszulesen, wird eine dynamische Branch-Prediction in Hardware implementiert, die auf einer Zwei-Bit-Geschichte eines Zweiges basiert. Bei einem beispielhaften Prozessor ist ein als nächstes zu besetzendes Feld mit jeweils vier Befehlen in dem Befehls-Cache verbunden, der auf die nächste vorab auszulesende Zeile zeigt. Bis zu zwölf Befehle werden in einem Befehlspuffer abgespeichert und an die Pipeline ausgegeben.
  • Die externe Cache-Steuereinheit 322 verwaltet den Befehls-Cache (L1) und die Datencache-Fehltreffer und erlaubt bei jedem anderen Zyklus einen Zugriff auf den externen Cache. Speicheroperationen, welche im Datencache fehlschlagen, werden durch multiple Bytedatencache-Eingaben durch zwei aufeinanderfolgende Zugriffe auf den externen Cache geheilt. Das Vorablesen von Befehlen, welche im Befehls-Cache einen Fehltreffer erzielen, werden durch die multiplen Byte-Befehls-Cache-Eingaben geheilt, die vier aufeinanderfolgende Zugriffe auf den paritätsgeschützten externen Cache benutzen.
  • Die externe Cache-Steuereinheit 322 unterstützt die DMA-Zugriffe auf den externen Cache und hält eine Datenkohärenz zwischen dem externen Cache und dem Hauptspeicher (nicht dargestellt) aufrecht.
  • Die Speicherschnittstelleneinheit (MIU) 328 steuert Transaktionen auf den UPA-Bus 326. Der UPA-Bus 326 läuft bei einem Bruchteil (zum Beispiel 1/3) des Prozessortaktes.
  • Mit Vorteil verbessert das vertikale Multithreading die Prozessorleistung bei der Belastung bei herkömmlichen Anwendungen, welche hohe Cache-Fehltrefferraten mit einer hohen Fehltrefferstrafe, niedriger Prozessorauslastung (30% bis 50% von OLTP) und Latenzperioden, welche eine Möglichkeit darstellen, um die Ausführung überlappen zu lassen, um die Cache-Fehltreffer-Wartezeiten zu nutzen.
  • Vertikales Multithreading ist auch bei Anwendungen mit sequenziellen und parallelen Verarbeitungsanwendungen mit häufigen Kontextumschaltungen von Vorteil.
  • Vertikales Multithreading wirft in Bezug auf einen Prozessor einige Kosten auf in Bezug auf die Ressourcen, die benutzt werden, um die Thread-Zustände zu speichern und wiederherzustellen. Die Kosten verändern sich in Abhängigkeit von der Implementierung der Multithreading-Ressourcen. Zum Beispiel verursacht eine Software-Implementation typischerweise einen Zeitanstieg, der jeden Gewinn an Latenz negiert. In einem anderen Beispiel können die Pipelinestufen dupliziert werden, während versucht wird, so viele Ressourcen wie nur möglich gemeinsam zu benutzen, wobei dies als Nachteil zu hohen Kosten im Siliciumbe reich führt.
  • Eine vorteilhafte Technik zur Implementierung von vertikalem Multithreading, die als ein Hochgeschwindigkeits-Multibit-Flip-Flop-Entwurf bezeichnet wird, enthält den Entwurf von Pipeline-Registern (Flops) mit multiplen Speicherbits. Die einzelnen Bits eines Flip-Flops werden einem getrennten Thread zugeordnet. Wenn ein erster Thread blockiert, typischerweise infolge eines Cache-Fehltreffers, dann wird das aktive Bit eines Flip-Flops von dem Pipeline-Pfadweg entfernt und ein anderes Bit des Flip-Flops wird aktiv. Die Zustände des blokkiertes Threads werden in einem vorübergehend inaktiven Bit des einzelnen Flip-Flops in einer Pipeline-Stufe aufbewahrt. Der Hochgeschwindigkeits-Multibit-Flip-Flop-Entwurf setzt die Platzierung eines Multibit-Flip-Flops am Ende der einzelnen Pipeline-Stufen ein. Die einzelnen Bits des Multibit-Flip-Flops sind einzeln zugänglich und steuerbar, um ein Umschalten von einem ersten Thread auf einen zweiten Thread zu ermöglichen, wenn der erste Thread blockiert.
  • Bezüglich 4A stellt ein schematisches Blockdiagramm Steuer- und Speicherblöcke einer Schaltung dar, die Hochgeschwindigkeits-Multibit-Flip-Flops benutzt. Ein Multibit-Flip-Flop-Speicherblock 410 enthält einen Speicherkopfblock 412 und einen Multibit-Flip-Flop-Block 414. Der Speicherkopfblock 412 leitet Zeitsignale und Threadauswahlsignale dem Multibit-Flip-Flop-Block 414 zu. Eingabesignale in den Speicherkopfblock 412 enthalten ein Taktsignal 14clk, das extern an den Multibit-Flip-Flop-Speicherblock 410 zugeführt wird, ein kombiniertes Scanfreigabe- und Taktfreigabesignal se_ce_1 und ein Thread-Identifikationssignal (TID) tid_g, das dem Multibit-Flip-Flop-Speicherblock 410 extern von der Thread-Auswahlschaltung zugeführt wird. Der Speicherkopfblock 412 leitet ein internes Flip-Flop-Taktsignal clk, das Inverse des internen Flip-Flop-Taktsignales clk_1 und ein Scan-Taktsignal sclk von dem externen Takt 14clk und dem Scanfreigabe- und dem Taktfreigabesignal se_ce_1 ab. Der Speicherkopfblock 412 gibt ein internes Thread-ID-Signal tid auf der Basis des Thread-Identifikations-Signals (TID) tid_g aus. Der Speicherkopfblock 412 betreibt eine oder mehrere Flip-Flop-Zellen in dem Multibit-Flip-Flop-Block 414. Typischerweise enthält der Multibit-Flip-Flop-Block 414 eine bis 32 bistabile Multivibratorzellen, obwohl mehr Zellen benutzt werden könnten. Das interne Flip-Flop-Taktsignal clk, das Inverse des internen Flip-Flop-Taktsignales clk_1, das Scan-Taktsignal sclk und das interne Thread-ID-Signal tid werden von dem Speicherkopfblock 412 an den Multibit-Flip-Flop-Block 414 zugeführt.
  • Zusätzlich zu dem internen Flip-Flop-Taktsignal clk, dem Inversen des internen Flip- Flop-Taktsignales clk_1, des Scan-Taktsignales sclk und dem internen Thread-ID-Signal tid empfängt der Multibit-Flip-Flop-Block 414 auch ein Eingabesignal d und ein Scanketten-Eingabesignal si.
  • Bezüglich 4B zeigt ein schematisches Schaltungsdiagramm eine multiple Bit bistabile Multivibrator (Flip-Flop)-Schaltung. Ein herkömmliches Flip-Flop ist eine Einzelbit-Speicherstruktur und wird gewöhnlich dazu benutzt, um zuverlässig Daten abzutasten und zu speichern. Ein Flip-Flop ist typischerweise eine grundlegende Komponente eines Halbleiterchips mit einem einzelnen Phasentakt und einem bestimmenden Hauptfaktor der gesamten Taktgeschwindigkeit eines Mikrocontrollers oder Mikroprozessors. Ein neues pulsbasiertes Multibit-Hochgeschwindigkeits-Flip-Flop 400 wird benutzt, um die Funktionalität und die Leistung eines Prozessors zu beschleunigen.
  • Eine einzelne Zelle des puls-basierten Multibit-Hochgeschwindigkeits-Flip-Flops 400 enthält eine Eingangsstufe mit einer Gegentakt-Tortreiberstufe 402. Die Gegentakt-Tortreiberstufe 402 arbeitet als eine Gegentaktschaltung, um Pulse mit einer kurzen Dauer über einen Inverter 438 an eine Multibit-Speicherschaltung 428 und eine Ausgangsleitung q auszugeben. Die Gegentakt-Tortreiberstufe 402 hat vier MOSFETs, die in Serie in einem Source-Drain-Pfadweg zwischen den VDD- und VCC-Referenzen verbunden sind, die einen p-Kanal-MOSFET 418, einen p-Kanal-MOSFET 420, einen n-Kanal-MOSFET 422 und einen n-Kanal-MOSFET 424 enthalten. Der p-Kanal-MOSFET 418 und der n-Kanal-MOSFET 424 haben Gate-Anschlüsse, welche mit dem Eingabesignal d verbunden sind. Der p-Kanal-MOSFET 420 hat einen Source-Drain-Pfadweg, der zwischen dem p-Kanal-MOSFET 418 und dem Knoten 426 liegt, und einen Gate-Anschluss, der mit dem Inversen des internen Flip-Flop-Taktsignales clk_1 verbunden ist. Der n-Kanal-MOSFET 422 hat einen Source-Drain-Pfadweg, der zwischen dem Knoten 426 und dem n-Kanal MOSFET 424 liegt, und einen Gate-Anschluss, der mit dem internen Flip-Flop-Taktsignal clk verbunden ist. Wenn das inverse Taktsignal clk_1 und das Eingabesignal d gleichzeitig einen Low-Zustand haben, dann wird der Knoten 426 durch den p-Kanal MOSFET 418 und den p-Kanal 420 auf einen High-Zustand gebracht. Wenn das interne Flip-Flop-Taktsignal clk und das Eingabesignal d gleichzeitig einen High-Zustand haben, dann wird der Knoten 426 durch den n-Kanal-MOSFET 424 und den n-Kanal-MOSFET 422 auf einen Low-Zustand gebracht. Entsprechend werden die Pulse mit der kurzen Dauer durch den Betrieb des p-Kanal-MOSFETs 420 und des n-Kanal-MOSFETs 422 erzeugt, welche die abzutastenden Daten am Eingabeanschluss d an den Knoten 426 auf Anweisung des Taktsignales clk weiterleiten. Wenn das interne Flip-Flop- Taktsignal clk ausgegeben wird, dann hält der Knoten 426 einen Wert, der das Inverse des Eingabesignals d ist. Die treibenden Kräfte der Transistoren 418, 420, 422 und 424 werden für unterschiedliche Funktionen während unterschiedlicher Bedingungen, wie zum Beispiel Datenabtastung und -weiterleitung, Thread-Umschaltung und Scanning, ausgewählt.
  • Die beispielhafte Multibit-Speicherschaltung 428 enthält zwei Speicherzellen 430 und 440, obwohl andere Ausführungsbeispiele eine einzelne Speicherzelle oder mehrere Speicherzellen enthalten können. Eine Speicherzelle 430 oder 440 enthält einen Umschalter 432 bzw. 442 und ein statisches Speicherelement oder Latch 434 bzw. 444. Der Umschalter wird benutzt, um ein bestimmtes Latch entsprechend dem Thread-Identifizierer (TID) auszuwählen, der während einem Takt-Impuls mit einer kurzen Dauer aktiv ist. Wenn das interne Flip-Flop-Taktsignal clk ausgegeben wird, dann wird das Inverse des Eingabesignales d durch die Speicherzelle 430 oder 440, welche durch den Thread-Identifizierer (TID) ausgewählt wird, abgespeichert. In dem beispielhaften System wird die Speicherzelle 430 abgespeichert, wenn der TID-Wert 0 ist, so dass das Speicherelement 434 das Inverse des Eingabesignales d speichert. Auf ähnliche Art und Weise wird die Speicherzelle 440 abgespeichert, so dass der Wert des Eingabesignales d gehalten wird, wenn der TID-Wert 1 ist. Andere Ausführungsbeispiele eines puls-basierten Multibit-Hochgeschwindigkeits-Flip-Flops 400 können benutzt werden, welche zusätzliche Speicherzellen enthalten, die zum Beispiel einen Multibit-TID und eine Vielzahl von Umschaltern, Multiplexern oder anderen funktionell gleichwertigen Schaltern benutzen, um zwischen den Speicherzellen auszuwählen.
  • Die Multibit-Speicherschaltung 428 ist mit dem Knoten 426 verbunden und ist folglich mit dem Datenpfad von dem Knoten 426 zur Ausgabeleitung q verbunden, wird aber nicht in den Datenpfad zwischen dem Knoten 426 und der Ausgabeleitung q eingefügt. Im Besonderen bildet eine einzige Leitung den Eingangsanschluss und den Ausgangsanschluss zu den Speicherzellen 430 und 440, so dass die Multibit-Speicherschaltung 428 keine Verzögerung zwischen dem Knoten 426 und dem Inverter 438 erzeugt. Die Verbindung der Multibit-Speicherschaltung 428 außerhalb des Pfades des Datenflusses verhindert eine Verzögerung des Datensignales und erhöht damit die Ausbreitungsrate der Datensignale. Die resultierende Verbesserung der Datenübertragungsrate erhöht die verfügbare Zeit zur Signalverarbeitung in einem Rechnersystem, was die Systemverarbeitungsgeschwindigkeit verbessert. Im Gegensatz dazu enthält eine herkömmliche Pipeline im Allgemeinen konventionelle Speicherelemente oder Latches, die sich im Pfad des Datenflusses befinden und dadurch die Ausbreitung eines Signales verlangsamen und die Zeit zur Signalverarbeitung in einem Prozessor reduzieren, was zu einer Reduzierung der Prozessorverarbeitungsgeschwindigkeit führt.
  • Der Puls mit der kurzen Dauer am Knoten 426 aktiviert das statische Speicherelement oder das Latch 434, 444, welches durch das TID-Signal ausgewählt wird. Die Latches 434 und 444 sind zum Abtasten von Daten in einem schmalen Zeitfenster flankengetriggert und können zum Betrieb mit sowohl positiven Flanken als auch negativen Flanken der Pulssignale eingerichtet werden. Das Multibit-pulsbasierte Hochgeschwindigkeits-Flip-Flop 400 ist mit den Busauswahlleitungen verbunden, um zu bestimmen, welches Bit aus einer Vielzahl von Bits aktiv ist. Zu jeder Zeit ist nur ein einziges Bit aktiv und das aktive Bit hält und treibt ein Ausgangssignal über den Inverter 438 auf der Ausgangsleitung q. Wenn das aktive Bit mit einem der inaktiven Bits umgeschaltet wird, dann ändert sich das Ausgangssignal des Latches 434 oder 444 entsprechend.
  • Die Bits des pulsbasierten Hochgeschwindigkeits-Flip-Flops 400 können wahlweise abtastbar hergestellt werden.
  • Bei einem Beispiel ist das Hochgeschwindigkeits-Flip-Flop 400 ein Master-Slave-Flip-Flop, welches ein Einzelbit-Master-Slave-Flip-Flop ersetzt. Andere Typen von Flip-Flops, die in der Elektronik bekannt sind, können in Multibit-Flip-Flops zum Gebrauch in einem Multi-Thread-Prozessor konvertiert werden.
  • Bezüglich 4C stellt ein Zeitdiagramm den zeitlichen Ablauf des Multibit-Flip-Flops 400 dar. Das Takt- und das invertierte Taktsignal clk und clk_1 erzeugen einen Taktimpuls 450, so dass Daten, die genau vor dem Taktübergang oder der "Flanke" auf der Ausgabeleitung d vorhanden sind, den Ausgangszustand auf der Leitung q bestimmen, nachdem sich der Takt verändert hat. Das interne Flip-Flop-Taktsignal clk wird ausgegeben, um den Taktimpuls 450 zu erzeugen, so dass der Knoten 426 einen Wert hält, der das Inverse des Eingangssignales d ist. Während dem Taktimpuls 450 wird das Inverse des Eingangssignales d in der Speicherzelle 430 oder der Speicherzelle 440 abgespeichert, so wie dies durch den Thread-Identifizierer (TID) bestimmt wird. Das Flip-Flop 400 tastet das Signal in einem Fenster mit kurzer Zeitdauer ab, um eine Flankentriggerfunktion zu erzeugen.
  • Wenn das interne Flip-Flop-Taktsignal clk nicht mehr weiter ausgegeben wird, dann wird das Signal am Knoten 426 durch die Speicherzellen 430 und 444 bestimmt, wobei dies durch das TID-Steuersignal bestimmt wird. Nach einer geeigneten Verzögerung, die ausreichend ist, um das Abtastsignal am Knoten 426 im Latch 434 oder 444 abzuspeichern, wird ein zweiter Puls 452 an den Knoten 426 ausgegeben, durch den Inverter 438 invertiert und auf die Ausgangsleitung q ausgegeben.
  • In dem beispielhaften pulsbasierten Hochgeschwindigkeits-Flip-Flop 400 sind die Latches 434 und 444 mit Vorteil von dem direkten Pfad der Signalübertragung entfernt und verschlechtern somit die Signalgeschwindigkeit nicht. Das pulsbasierte Hochgeschwindigkeits-Flip-Flop 400 hat keine Einstellzeit, aber eine relativ lange Haltezeit.
  • Im Gegensatz dazu enthält ein herkömmliches Flip-Flop ein Speicherelement, das sich im Pfad des Datenflusses befindet, die Signalausbreitung verlangsamt und die Zeitdauer verkürzt, die zur Signalverarbeitung benötigt wird und dadurch die Systembetriebsgeschwindigkeit reduziert. Das beschriebene Flip-Flop 400 enthält ein Speicherelement, das sich nicht im direkten Pfad der Signalausbreitung befindet und kein Hindernis für die Systembetriebsgeschwindigkeit darstellt.
  • Bezüglich 5 stellt ein schematisches Blockdiagramm eine N-Bit-"Threadauswählbare"-Flip-Flop-Substitutionslogik 500 dar, welche in manchen Multithreading-Systemen und Verfahrenskonfigurationen benutzt wird. Ein Prozessor enthält eine Implementierung von N-Bit-Flip-Flop-Gesamtsubstitutionen, um Multimaschinenzustände zu unterstützen. Der Prozessorenentwurf enthält eine logische Ersetzung der 1-Bit-Flip-Flops des blokkierten vertikalen Threads bis zu N-Bit-Gesamt-Flip-Flops, wo N die Anzahl der vertikalen Threads ist. Die Flip-Flop-Substitutionslogik 500 konvertiert mit Vorteil die Einzelbit-Flip-Flop-Logik in Multibit-Flip-Flop-Logik, ohne die Oberfläche der integrierten Schaltung zu erhöhen, wobei dieselbe Basisfläche beibehalten wird, so dass die Größe der integrierten Schaltung während der Bildung von Multi-Thread-Datenpfaden gleich bleibt. Die Flip-Flop-Substitutionslogik 500 erzeugt mit Vorteil die Multi-Thread-Pfade, ohne Multiplexer zu benutzen, um zwischen den Threads umzuschalten. Die Verwendung von Multiplexern würde die integrierte Schaltungsfläche vergrößern und dadurch die inhärenten Vorteile der Flip-Flop-Substitutionslogik 500 negieren.
  • Die N-Bit-"Thread-auswählbare"-Flip-Flop-Substitutionslogik 500 wird benutzt, um eine vertikale multi-gethreadete Funktion in einer Prozessor-Pipeline zu erzeugen, während dieselbe Schaltungsgröße, einschließlich der Fläche, dem Stufenabstandsverhältnis (aspect ratio), der metallischen Basisfläche und den Anschlussstellen wie bei einer Einzelgethreadeten Pipeline beibehalten wird. Die N-Bit-"Thread-auswählbare"-Flip-Flop-Substitutionslogik 500 fügt ein zusätzliches Bit oder eine Vielzahl von zusätzlichen Speicherbits in jedem 1-Bit-Flip-Flop hinzu, das zur Verarbeitung der Pipeline-Blockierungen vorhanden ist. Die N-Bit-"Thread-auswählbare"-Flip-Flop-Substitutionslogik 500 wird durch ein Scan-Freigabe(SE)-Signal eines scanbaren Flip-Flops aktiviert, um einen aktiven Thread aus zuwählen. Der Thread wird auf der Basis eines Thread-Identifizierungssignales (TID) ausgewählt. Die beispielhafte N-Bit-"Thread-auswählbare" Flip-Flop-Substitutionslogik 500 stellt eine Zwei-Bit-Substitutionslogik dar, die einen T0-Bit-Speicher 510 und einen T1-Bit-Speicher 512 zur Speicherung von zwei auszuführenden Threads enthält. Die beispielhafte N-Bit-"Thread-auswählbare" Flip-Flop-Substitutionslogik 500 ist ein einfaches D-Flip-Flop mit einem Einzelbit-Thread-Identifizierer (TID), welcher den T1-Bit-Speicher 512 auswählt, und dem inversen Signal des TID-Signales, welches den T0-Bit-Speicher 510 auswählt.
  • In einer Klasse von Prozessorentwürfen wird die N-bit-"Thread-auswählbare" Flip-Flop-Substitutionslogik 500 mit Vorteil benutzt, um einen bestehenden Einzel-Thread-Prozessor auf eine multi-gethreadete Konfiguration umzustellen. Entsprechend wird die N-Bit-"Thread-auswählbare" Flip-Flop-Substitutionslogik 500 benutzt, um die meisten der Standard-1-Bit-Flip-Flops in einem Prozessor durch einen Spezialtyp von Flip-Flop (FF) zu ersetzen, der multiple Zustands-Bits hat und der Thread-auswählbar ist. In einer besonderen Anwendung wird die N-Bit-"Thread-auswählbare" Flip-Flop-Substitutionslogik 500 benutzt, um einen MegaSPARC-Multiple-Thread-Prozessor ausgehend von einem bereits bestehenden Ultra-SPARC-II-Prozessor-Kernentwurf zu implementieren.
  • Jedes Bit in der N-Bit-"Thread-auswählbaren" Flip-Flop-Substitutionslogik 500 korrespondiert mit einem einzelnen Maschinenzustand eines Threads und bildet eine sogenannte "virtuelle CPU". Nur ein Bit ist gleichzeitig aktiv, so dass nur eine aus einer Vielzahl von virtuellen CPUs die Pipeline zur gleichen Zeit beansprucht. Wenn die aktive virtuelle CPU einen Datencache- oder einen Befehls-Cache-Fehltreffer empfängt, dann sendet die virtuelle CPU eine Eingabe-Anforderungen an einen externen Cache und initiiert eine Thread-Umschaltung, was einer anderen virtuellen CPU ermöglicht, aktiv zu werden.
  • Obwohl das erklärende Beispiel eine N-Bit-"Thread-auswählbare" Flip-Flop-Substitutionslogik 500 darstellt, wobei N gleich Zwei ist und die Prozessor-Implementierung zwei Threads verarbeitet, kann jede geeignete Anzahl von Bits für die Anzahl N, die auf den gewünschten Berechnungsanwendungen basiert, als auch Verarbeitungsbetrachtungen beim Erzeugen von Speicherstrukturen und Umschaltern in einer vorgegebenen Schaltungsgröße, implementiert werden.
  • In dem beispielhaften Prozessor ist die N-Bit-"Thread-auswählbare" Flip-Flop-Substitutionslogik 500 in den meisten, aber nicht in allen Funktionskomponenten des Prozessors implementiert. Die N-Bit-"Thread-auswählbare" Flip-Flop-Substitutionslogik 500 wird für Flip-Flops in funktionellen Komponenten einschließlich Steuer-/Status-Registern und Pipeline-Stufenregistern implementiert. Andere Komponenten des Prozessors einschließlich der Prozessor-Back-End-Logik, wie zum Beispiel externe Cache- und Speicherschnittstellen-Komponenten, können herkömmliche Flip-Flops implementieren. Die Back-End-Logik, welche die Cache-Eingaben-Anforderungen bearbeitet, wird von allen virtuellen CPUs gemeinsam benutzt, so dass eine Multibit-Flip-Flop-Konversion nicht notwendig ist.
  • Die Eingabeanforderung für die virtuelle CPU, die ersetzt wird, wird sogar dann verarbeitet, wenn die virtuelle CPU inaktiv ist. Wenn auf die Dateneingabeanforderung Daten zurückgegeben werden, dann werden die Daten vorübergehend gepuffert, um sie später, wenn der Thread wieder aktiv wird, in den L1-Cache einzugeben (entweder den Datencache oder den Befehls-Cache). Bis die ersetzte virtuelle CPU aktiv wird, setzt die gegenwärtig aktive (ersetzende) virtuelle CPU ihre Verarbeitung fort, bis die ersetzende virtuelle CPU auf einen Thread-Umschalter, wie zum Beispiel einen L1-Cache-Fehltreffer, trifft. Beim Auftreten des Thread-Umschaltsignales, welches die ersetzende virtuelle CPU beendet, schaltet der Prozessor auf eine andere virtuelle CPU um, die nicht blockiert ist (möglichst die zuerst ersetzte virtuelle CPU). Wenn alle virtuellen CPUs blockiert sind und auf Cache-Fehltreffer warten, ist die Pipeline frei und blockiert, bis Daten von wenigstens einer virtuellen CPU zurückgegeben werden.
  • Bei Fehltreffern bei einer Befehlsaufnahme behandelt die Back-End-Logik die Eingabe in den Instruktions-Cache einer nicht-aktiven virtuellen CPU auf eine ähnliche Art und Weise. Um eine falsch eingestellte Thread-Umschaltung zu vermeiden, wird eine virtuelle CPU nicht ersetzt, bis der Instruktions-Cache-Fehltreffer eine Leerbedingung des Instruktionspuffers bewirkt.
  • In manchen vertikalen Multithreading-Prozessor-Entwürfen wird das vertikale Multithreading mit Vorteil implementiert, indem eine schnelle, zum Beispiel von der Dauer von Nanosekunden, Umschaltung des Kontextes verwendet wird, welche die Leistung von sequenziellen und parallelen Verarbeitungsanwendungen verbessert, welche häufigen Kontext-Umschaltungen unterworfen sind. Die schnelle im Nanosekundenbereich liegende Umschaltung des Kontextes oder des Threads ist von Vorteil im Vergleich zu herkömmlichen Kontextumschaltungstechniken, welche im Allgemeinen in einem Zeitbereich in der Größenordnung von Mikrosekunden bis Millisekunden ablaufen, welche um einige Größenordnungen langsamer sind als die hier beschriebene Kontext-Umschaltung. Die schnelle im Nanosekundenbereich liegende Kontext-Umschaltung wird durch die Fähigkeit des Einfrierens der Pipeline und durch das Weiterleiten von multiplen Daten-Threads durch eine multiple gethreadete Struktur erreicht, welche gleichzeitig Daten von multiplen Threads zum Beispiel durch den Einsatz von multiplen Bit-Flip-Flops abspeichert. Daten eines aktiven Threads bringen die abgespeicherten Daten auf den neuesten Stand, während Daten in nicht-aktiven Threads eingefroren bleiben. Das Umschalten geschieht, indem die Thread-Pfadwege zwischen den Zuständen, wo die Daten auf den neuesten Stand gebracht werden, und den Zuständen, wo die Daten eingefroren bleiben, umgeschalten werden. Im Gegensatz dazu erfordert das herkömmliche Umschalten des Kontexts das Entleeren der gesamten Pipeline und das Abspeichern der Daten von den Registerdateien eines ersten Threads in einem Speicher und das Wiederherstellen von Daten eines zweiten Threads von einem Speicher in den Registerdateien. Dies alles sind sehr zeitaufwändige Ausführungen.
  • In manchen Anwendungen wird der Kontext typischerweise als Reaktion auf die Interrupts umgeschalten, wobei Hardware- und Software-Interrupts enthalten sind, wobei dies sowohl intern als auch extern eines Prozessors geschieht. Anwendungen zur Berechnung, welche häufigen Kontext-Umschaltungen unterliegen, enthalten Disk-Server, Network-Server, Web-Server, Telekommunikations-Anwendungen und dergleichen.
  • In einem beispielhaften System ist der schnelle im Nanosekundenbereich liegende Kontext-Umschalter in Hardware implementiert, wobei er mit Vorteil einen Überhang von Software während dem Abspeichern und Wiederherstellen des Prozessorzustandes eliminiert. Bezüglich 6 stellt ein schematisches Blockdiagramm eine Thread-Umschaltlogik 610 dar, welche ein Thread-Identifikationssignal (TID) erzeugt, welches einen aktiven Thread unter einer Vielzahl von Threads identifiziert.
  • Ein Prozessor enthält die Thread-Umschaltlogik 610, um eine sehr schnelle Ausnahmeverarbeitungsfunktion zu erreichen, während er nicht-gethreadete Programme ausführt, indem er einen Typ einer multi-gethreadeten Funktion als Reaktion auf die Ausnahmebedingungen aufruft. Während der Bearbeitung der multi-gethreadeten Bedingungen oder während der Ausführung der nicht-gethreadeten Programme durchläuft der Prozessor während der Ausführung die multiplen Maschinenzustände. Die sehr schnelle Ausführungs-Behandlungs-Logik enthält eine Verbindung einer Ausnahmesignalleitung zu der Thread-Auswahl-Logik, welche ein Ausnahmesignal oder eine Falle enthält, um einen Umschalter in den Thread- und Maschinenzustand zu bringen. Der Umschalter im Thread- und Maschinenzustand bewirkt, dass der Prozessor sofort in die Ausnahmeverarbeitungsroutine eintritt und diese wieder verlässt, ohne typischerweise das Betriebssystem oder eine Software-Abarbeitung und ohne die inhärente Zeitstrafe der Betriebssystems-Software aufzurufen, welche die Register abspeichert und wiederherstellt. Die Verbindung der Ausführungsleitung direkt zu der Thread-Auswahl-Logik bewirkt mit Vorteil eine Ausnahmebedingung, um einen Kontext oder einen Thread-Umschalter aufzurufen, was die Software- oder Systemüberhangsstrafe bemerkenswert reduziert.
  • Der Gebrauch der multi-gethreadeten Multi-Prozessor-Konfiguration in Kombination mit der Thread-Umschaltlogik 610 und dem Einsatz von verschiedenen Compiler-Techniken beschleunigt die Ausführung von sequenziellen Programmen. Zum Beispiel kann ein Compiler optimiert werden, dass er automatisch spekulative parallele Threads in sequenziellen, nicht-numerischen Programmen erzeugt. Der Compiler kann auch dahingehend optimiert werden, dass er die Ladeinstruktionen spekulativ vor Speicherinstruktionen verschiebt und die Lade- und Speicherinstruktionen in getrennten parallelen Threads ausführt.
  • In einem anderen Beispiel kann der Compiler so gesteuert werden, dass er spekulative parallele Threads (Epochen) bei Schleifendurchläufen mit spekulativer Ausführung startet, in welchen die Branch-Bedingungen vorhergesagt werden. Bei einer unsicheren Spekulation kann der Compiler die Ausführung steuern, um eine Vielzahl von Threads auszuführen, um alle möglichen Branch-Bedingungen zu behandeln und um die Ergebnisse von dem Thread der richtigen Branch auszuwählen. In manchen Prozessor-Implementierungen werden zwei zusätzliche Bits den Leitungen des L1-Datencaches hinzugefügt, um eine Angabe abzuspeichern, ob Daten in der Leitung spekulativ geladen oder spekulativ abgespeichert sind, so dass nicht-spekulative Ergebnisse schnell ausgeschieden werden.
  • Sequenzielle Programme werden auch effizienter durch die Erweiterung eines Invalidations-basierten Cache-Kohärenz-Protokolls, um die Epochenzahlen einer Speicher-Snoop-Trefferbedingung mit einer spekulativ geladenen Cache-Leitung zu vergleichen.
  • Die schnelle im Nanosekundenbereich liegende Kontext-Umschaltung arbeitet in Verbindung mit der Thread-Umschaltlogik, wie zum Beispiel das pulsbasierte Hochgeschwindigkeits-Flip-Flop 400, um die Geschwindigkeit des Umschaltens des Threads zu verbessern. Das pulsbasierte Hochgeschwindigkeits-Flip-Flop 400 ermöglicht das virtuelle sofortige Umschalten zwischen den Threads, dem Abspeichern des Maschinenzustandes eines blockierten Threads, und dem Wiederherstellen eines Maschinenzustandes eines aktivierten Threads. Die schnelle im Nanosekundenbereich liegende Kontext-Umschaltung steuert schnell durch das pulsbasierte Hochgeschwindigkeits-Flip-Flop 400, welcher Thread-aktiviert ist. Die Thread-Umschaltlogik 610 empfängt eine Vielzahl von Eingabesignalen, die einen Kontext-Umschalter und einen Thread-Umschalter aufrufen. In einem beispielhaften Prozessor enthal ten die Eingabekontakte der Thread-Umschaltlogik 610 einen L1 Lade_Fehleranschluss, einen L1_Instruktions Fehleranschluss, einen Instruktions_Puffer_Leeranschluss, einen Thread_Prioritätsanschluss, einen MT_Modusanschluss, einen externen_Interrupt-Anschluss und einen internen_Interrupt-Anschluss. Die Thread-Umschaltlogik 610 erzeugt auf der Basis von Signalen der Eingabeanschlüsse ein Thread-Identifikationssignal (TID). Die Thread-Umschaltlogik 610 erzeugt das TID-Signal mit einer Thread-Umschaltverzögerung oder einem Überhang eines Prozessor-Zyklusses.
  • Andere Prozessoren können andere Signale enthalten, welche ein Thread-Umschaltsignal (TID) erzeugen. Zum Beispiel können manche Prozessoren so konfiguriert werden, dass sie Threads bei einem L2-Cache-Fehltreffer umschalten.
  • Die Thread-Umschaltlogik 610 erzeugt Signale, um es dem Prozessor zu ermöglichen, den Kontext auf einen anderen Thread umzuschalten, wobei dies als Reaktion auf einen L1-Cache-Lade-Fehltreffer geschieht, welche einen Impuls auf den L1 Lade Fehltrefferanschluss abgibt und als Reaktion auf einen L1-Cache-Lade-Fehltreffer, welcher einen Impuls auf den L1_Instruktions Fehltrefferanschluss abgibt. Die Thread-Umschaltlogik 610 erzeugt auch Signale, die es dem Prozessor erlauben, den Kontext auf einen anderen Thread umzuschalten, wenn ein Instruktionspuffer leer ist und um ein Signal für den Instruktions_Puffer_Leeranschluss zu erzeugen. Die Thread-Umschaltlogik 610 schaltet auch den Kontext als Reaktion auf externe und interne Interrupts um, welche einen Impuls auf den externen_Interruptanschluss und den internen_Interruptanschluss jeweils abgeben.
  • Die Thread-Umschaltlogik 610 erlaubt über die Signale zu dem Thread_Prioritätsanschluss die Steuerung der Thread-Auswahl auf der Basis der Priorität eines besonderen Threads. Die Thread-Umschaltlogik 610 wird typischerweise als ein Steuerprozessor, ein Mikrocontroller, eine Mikrocode-Steuerlogik, eine logische Schaltung oder dergleichen implementiert, wobei alle in der Elektronik wohlbekannt sind. Entsprechend kann ein schnelles Umschalten des Threads beim Auftreten eines L1-Cache-Fehltreffers ausgewählt werden.
  • In anderen Anwendungen kann auf der Basis, welcher Prozess oder Kontext am meisten beschäftigt ist, ausgewählt werden welcher Thread reserviert wird. Bei diesen Anwendungen implementiert die Thread-Umschaltlogik 610 ein Thread-Reservierungssystem oder ein Thread-Verriegelungssystem, in welchem ein Thread-Pfadweg für den Einsatz durch einen ausgewählten Thread reserviert ist. Die Thread-Auswahllogik 610 kann einen besonderen Thread auswählen, der im Vergleich zu anderen Threads mit Priorität auszuführen ist. Ein Thread mit hoher Priorität kann mit einem Betrieb mit strikten Zeitvorgaben verbunden werden, oder mit einem Betrieb, der im Vergleich zu anderen Threads häufig und überwiegend ausgeführt wird. Die Thread-Umschaltlogik 610 steuert den Thread-Umschaltbetrieb, so dass ein besonderer Hardware-Thread für den Gebrauch durch den ausgewählten Thread reserviert wird.
  • In einem Beispiel eines Prioritätsbetriebes enthält ein JAVATM-Server typischerweise einen Masterprozess und eine Vielzahl von Slaveprozessen. Die Thread-Umschaltlogik 610 reserviert einen Hardware-Thread für den Masterprozess, der bestimmt, welchem Slaveprozess es erlaubt wird, jederzeit ausgeführt zu werden. Der Masterprozess wird deshalb als ein reservierter Thread ausgewählt, der einen bestimmten reservierten Hardware-Thread reserviert und folglich in dem reservierten Hardware-Thread verriegelt ist. Der Masterprozess führt die Ausführung in dem reservierten Hardware-Thread durch, aber ordnet nicht-reservierte Hardware-Threads unter der Vielzahl der Slave-Threads zu.
  • In anderen Anwendungen kann die Thread-Umschaltlogik 610 so konfiguriert sein, dass sie native Threads in einem Betriebssystem unterstützt, zum Beispiel Solaris-native Threads können in Java-Anwendungen unterstützt werden.
  • Die Thread-Umschaltlogik 610 enthält einen MT_Modusanschluss, welcher Multithreading-Modussignale zur Verfügung stellt, um besondere Threads für die Multiprozessor-Ausführung auszuwählen.
  • Die Thread-Umschaltlogik 610 unterstützt eine schnelle Thread-Umschaltung mit einer sehr kleinen Zeitverzögerung, zum Beispiel drei Zyklen oder weniger. In Multithreading-Systemen und Verfahrensausführungsbeispielen führt ein Prozessor eine schnelle Thread-Umschaltung als Reaktion auf eine L1-Cache-Fehltrefferblockierung durch.
  • Bei anderen Implementierungen implementiert die Thread-Umschaltlogik 610 eine oder mehrere Thread-Umschaltverfahren. Ein erster Thread-Umschaltbetrieb ist sich der Thread-Umschaltung bei allen N Zyklen, in welchen die einzelnen Flip-Flops lokal eine Thread-Umschaltung bestimmen, ohne eine Blockierung anzugeben, "bewusst". Diese bewusste Technik, die typischerweise implementiert wird, indem ein einzelner Zähler zum Zählen der Zyklen zwischen den Umschaltungen benutzt wird, vermeidet den Gebrauch einer zusätzlichen globalen Verbindung, wie zum Beispiel ein Draht oder Metall, zwischen den Threads zur Thread-Auswahl.
  • Ein zweiter Thread-Umschaltbetrieb ist eine "semi-bewusste" Thread-Umschaltung für die Benutzung mit einem Lade-Benutzungsblockierungs- oder "Pipeline-Blockierungs"- Signal. Das Pipeline-Blockierungssignal hat zwei Aufgaben, erstens als eine Angabe einer Pipeline-Blockierung und zweitens als ein Thread-Auswahlsignal zwischen den Threads, so dass wieder der Gebrauch einer zusätzlichen globalen Verbindung zwischen den Threads zur Thread-Auswahl vermieden wird. Eine geeignete Implementierung der semi-bewussten Thread-Umschalttechnik benutzt eine Verbindung mit einem Lade-/Speichereinheit-globalen Blockierungssignal (lsu_stall_e) in UltraSPARC-I und UltraSPARC-II-Prozessoren.
  • Ein dritter Thread-Umschaltbetrieb ist eine "intelligente globale Zeitplan"-Thread-Umschaltung, in welcher eine Thread-Umschaltentscheidung wahlweise auf der Basis eines oder mehrerer Signale programmiert ist. Bei einem Beispiel benutzt ein intelligenter globaler Zeitplan Signale, wie zum Beispiel: (1) ein L1-Datencache-Fehltreffer-Blockierungssignal, (2) ein L1-Lade-Fehltreffersignal (3), ein Instruktionspuffer-Leersignal, (4) ein Befehlsschlangen-Leersignal, (5) ein L2-Cache-Fehltreffersignal, (6) ein Thread-Prioritätssignal, (7) ein Thread-Zeitgebersignal, (8) ein Interruptsignal oder andere Quellen zur Triggerung. In manchen Ausführungsbeispielen wird das Thread-Auswahlsignal so schnell wie möglich ausgesendet, was ähnlich zu einer Taktbaumverteilung ist. In manchen Systemen leitet ein Prozessor ein Thread-Auswahlsignal ab, welches an die Flip-Flops angelegt wird, indem ein Scanfreigabesignal (SE) eines scanbaren Flip-Flops überlastet wird.
  • Verschiedene Implementierungen von Prozessoren enthalten eine Thread-Umschaltlogik 610, die einen Cache in einem Prozessor in eine Vielzahl von N Cache-Teilen aufteilt. Bezüglich 7A zeigt ein schematisches Blockdiagramm ein Beispiel eines Caches 700, der in einen ersten aufgeteilten Cache-Abschnitt 710 und einen zweiten aufgeteilten Cache-Abschnitt 712 aufgeteilt wird, wobei jeder Abschnitt eine Vielzahl von Speicherbereichen enthält. In einem Beispiel teilen der erste aufgeteilte Cache-Abschnitt 710 und der zweite aufgeteilte Cache-Abschnitt 712 jeweils mit einer Kapazität von 8 kB einen 16 kB direct-mapped-32-Byte-Line-Cache auf. Obwohl das erklärende Beispiel den Cache 700 zeigt, in dem dieser in zwei gleich große Abschnitte aufgeteilt ist, können andere Beispiele einen Cache in jede beliebige Anzahl von Abschnitten aufteilen. Die Cache-Abschnitte können gleich oder unterschiedlich groß sein. Bezüglich 7B zeigt ein Diagramm ein Beispiel einer Adressierungstechnik für den aufgeteilten Cache 700. Ein 64-Bit-virtueller Adressspeicher 720 enthält ein Cache-virtuelles Adressmarkierungs-Bitfeld 722 mit virtuellen Adressbits [63 : 13], ein Thread-ID(TID)- und Index-Bitfeld 724 mit Index-Bits [12 : 5] und ein Byte-Offset-Bitfeld 726 mit virtuellen Adressbits [4 : 0]. Die Index-Bitfelder 724 teilen den Cache in zwei Thread-Abschnitte, nämlich den ersten thread-aufgeteilten Cache-Abschnitt 710 und den zweiten Thread-aufgeteilten Cache-Abschnitt 712 auf.
  • Die Cache-Aufteilung wird wahlweise in einem einzelnen Cache oder einer Vielzahl von Caches angewandt, die L1-Caches, L2-Caches, externe Caches und dergleichen enthalten. Die Cache-Aufteilung vermeidet eine Interferenz, "Übersprechen" oder "Verunreinigung" zwischen den Threads. Eine Technik zur Cache-Aufteilung benutzt eine Logik zum Abspeichern und zum Mitteilen von Thread-Identifizierungs-Bits (TID). Der Cache nutzt eine Cache-Indizierungslogik. Zum Beispiel können die TID-Bits beim Bit mit der höchsten Wertigkeit des Cache-Indexes eingefügt werden. Das gemeinsame Benutzen eines L2-Caches unter den Threads wird einfach implementiert, da der L2-Cache physikalisch indiziert ist.
  • Verschiedene Prozessor-Implementierungen enthalten eine Anti-Aliasing-Logik, die in 8 dargestellt ist, die mit einem Cache 810, wie zum Beispiel einem L1-Cache und L2-Cache oder anderen verbunden ist. Zum Beispiel kann ein Prozessor eine Anti-Aliasing-Logik enthalten, die mit einem L1-Cache verbunden ist, so dass der L1-Cache über das Anti-Aliasing gemeinsam von den Threads benutzt wird. In einem erklärenden Beispiel ist der Cache ein 16 kB direct-mapped-virtuell-indizierter physikalisch markierter (VIPT) Cache 810, welcher von den Threads gemeinsam benutzt wird. Der Cache 810 wird unter Benutzung eines 64-Bit-virtuellen Adressspeichers 820, welcher ein Cache-virtuelles Adress-Markierungsbitfeld 822, einen Cache-Index 812 und ein Byte-Offset-Bitfeld 826 enthält, adressiert. Der Cache-Index 812 ist so konfiguriert, dass er eine Thread-ID (TID) 823 und ein Index-Bitfeld 824 enthält.
  • Die Anti-Aliasing-Logik speichert die Daten von zwei unterschiedlichen Threads, welche sich auf zwei unterschiedlich indizierte Einträge n und n + 256 beziehen, auf dieselbe physikalische Adresse (PA) ab, die als PA = B dargestellt ist. Die Anti-Aliasing-Logik arbeitet während einer Abspeicherung auf den Cache-Speicher 810 durch das Vergleichen der physikalischen Adresse an den zwei indizierten Einträgen. Wenn die physikalischen Adressen übereinstimmen, dann wird der duplizierte Eintrag entweder für ungültig erklärt oder auf den neuesten Stand gebracht. Die Anti-Aliasing-Logik vermeidet Probleme, welche vom multivirtuellen Adress-Mapping auf eine physikalische Adresse resultieren. Die Anti-Aliasing-Logik erklärt wahlweise die duplizierten L1-Cache-Einträge für ungültig oder bringt diese auf den neuesten Stand.
  • Verschiedene Prozessor-Implementierungen enthalten eine native Thread-Logik, welche mit der Thread-Umschaltlogik 610 und der Anti-Aliasing-Logik verbunden ist, welche Leichtgewichtsprozesse und native Threads unterstützt. Die Logikunterstützungs-nativen Threads und die Leichtgewichtsprozesse enthalten eine Logik, die das Thread-ID markieren und die Cache-Aufteilung außer Kraft setzen, da die Leichtgewichtsprozesse und die nativen Threads den gemeinsamen virtuellen Adressraum teilen. Ein Leichtgewichtsprozess ist ein vereinfachter minimaler Kontextprozess oder Thread, der typischerweise entworfen wurde, um effizient Kernel-Funktionen auszuführen. Der Leichtgewichtsprozess hat sehr wenig Kontext, und somit kann die Ausführung einfach und effektiv ein- und ausgeschalten werden. Der Leichtgewichtsprozess führt folglich seine Aufgaben effizient ohne Thread-ID-Markierung und Cache-Aufteilung durch. Die Thread-Umschaltlogik 610 beherbergt Leichtgewichtsprozesse, indem die Thread-ID-Markierung und die Cache-Aufteilung außer Kraft gesetzt wird, was mit Vorteil die Zuordnung von Cache und anderen Ressourcen zu Threads, welche diese Ressourcen nicht nutzen, vermeidet.
  • Bezüglich 9 stellt ein schematisches funktionelles Blockdiagramm eine Entwurfskonfiguration für einen Einzelchip-Dualprozessor-vertikal-gethreadeten Prozessor 900 dar, der zur Implementierung verschiedener Multithreading-Techniken und Systemimplementierungen geeignet ist, welche die Multithreading-Leistung und Funktion verbessern. Der Einzelprozessor-vertikal-gethreadete Prozessor 300, der in 3 dargestellt ist, führt alleine ein vertikales Multithreading durch. Im Gegensatz dazu führt der Einzelchip-Dualprozessorvertikal-gethreadete Prozessor 900 sowohl ein horizontales Multithreading als auch ein vertikales Multithreading durch. Der enzelchip-dualprozessor-vertikal-gethreadete Prozessor 900 hat zwei Prozessoren auf einem einzelnen Chip, der einen ersten vertikal-multigethreadeten Prozessor 902 und einen zweiten vertikal-multigethreadeten Prozessor 904 enthält.
  • Der erste Multithreading-Prozessor 902 enthält einen Thread 0-Maschinenzustandsblock 910, der einen Maschinenzustand aus einem ersten Thread (Thread 0) bildet, und einen Thread 1-Maschinenzustandsblock 912, der einen Maschinenzustand aus einem zweiten Thread (Thread 1) bildet, welcher den Maschinenzustand von Thread 0 wiedergibt. Der Thread-0-Maschinenzustandsblock 910 und der Thread-1-Maschinenzustandsblock 912 haben die einzeln integrierte Schaltungslogikstruktur, die einen Hochgeschwindigkeits-Multibit-Flip-Flop-Entwurf und eine vierdimensionale Registerdatenstrukturen benutzt, und Versorgungsbefehle von Thread 0 und Thread 1 für eine gemeinsam benutzte Prozessor-Pipeline 904, welche vertikales Threading nutzt. Die gemeinsam benutzte Prozessor-Pipeline 914 ist mit einer dualen Lade-/Speichereinheit verbunden, die eine Thread 0-Lade-/Speichereinheit 916 und eine Thread 1-Lade-/Speichereinheit 918 enthält, die Lade- und Speicherdatenzugriffe für die Instruktionsthreads 0 und 1 jeweils ausführt.
  • Die gemeinsam benutzte Prozessor-Pipeline 914 und die duale Lade-/Speichereinheit sind mit einem gemeinsam benutzten Datencache und einer gemeinsam benutzten Datenspeicher-Verwaltungseinheit (DMMU) verbunden. Der gemeinsam benutzte Datencache wird benutzt, um Daten für Berechnungen von sowohl Thread 0 als auch Thread 1 abzuspeichern.
  • Der zweite vertikale Multithreading-Prozessor 904 enthält einen Thread 2-Maschinenzustandsblock 940, welcher einen Maschinenzustand eines dritten Threads (Thread 2) und eines Thread 3-Maschinenzustandsblocks 942 bildet, der einen Maschinenzustand eines vierten Threads (Thread 3) bildet, der den Maschinenzustand von Thread 2 nachbildet. Der Thread 2-Maschinenzustandsblock 940 und der Thread 3-Maschinenzustandsblock 942 haben einzeln integrierte Schaltungslogikstrukturen, welche Hochgeschwindigkeits-Multibit-Flip-Flop-Entwürfe und vierdimensionale Registerdatenstrukturen nutzen, und Versorgungsbefehle von Thread 2 und Thread 3 an eine gemeinsam benutzte Prozessor-Pipeline 944, die vertikales Threading nutzt. Die gemeinsam benutzte Prozessor-Pipeline 944 ist mit einer dualen Lade-/Speichereinheit verbunden, die eine Thread 2-Lade-/Speichereinheit 946 und eine Thread 3-Lade-/Speichereinheit 948 enthält, die jeweils Lade- und Speicherdatenzugriffe für die Befehls-Threads 0 bzw. 1 ausführt.
  • Die gemeinsam benutzte Prozessor-Pipeline 944 und die duale Lade-/Speichereinheit sind mit einem gemeinsam benutzten Datencache und einer gemeinsam benutzten Datenspeicher-Managementeinheit (DMMU) verbunden. Der gemeinsam benutzte Datencache wird benutzt, um Daten für die Berechnung von sowohl Thread 2 als auch Thread 3 abzuspeichern.
  • Ein Befehlssteuerblock 960 enthält einen Befehls-Cache (L1), eine Branch-Prediction-Einheit NFRAM und eine Befehlsspeicher-Managementeinheit (IMMU), von denen alle von den multiplen Threads, Thread 2 und Thread 3, gemeinsam benutzt werden.
  • Die zwei dualen Lade-/Speichereinheiten sind auch mit einer externen Cache-Steuereinheit (ECU) 922 verbunden, die mit einem externen Cache-Bus 924 verbunden ist. Die externe Cache-Steuereinheit 922 ist auch über eine Speicherschnittstelleneinheit (MIU) 928 mit einem Ultraportarchitektur-Verbindungs-(UPA)-Bus 926 verbunden. Die externe Cache-Steuereinheit 922 und die Speicherschnittstelleneinheit (MIU) 928 sind zwischen den vier Threads, Thread 0, Thread 1, Thread 2 und Thread 3, einheitlich, um die Funktionen der Cache-Fehltrefferverarbeitung und der Verbindung mit externen Geräten durchzuführen, um in Kombination, über gemeinsam benutzte Befehlssteuerblöcke 930 und 960 eine Vielzahl von Execution-Threads dem Thread 0-Maschinenzustandsblock 910, dem Thread 1-Maschinenzustandsblock 912, dem Thread 2-Maschinenzustandsblock 940 und dem Thread 3-Maschinenzustandsblock 942 zuzuführen. Die einheitliche externe Cache-Steuereinheit 922 und die Speicherschnittstelleneinheit (MIU) 928 enthalten eine Thread-Identifizierungs-(TID)-Markierung um den Thread, auf den über den externen Cache-Bus und den UPA-Bus 926 zugegriffen werden soll, zu spezifizieren und zu identifizieren.
  • Die einheitliche externe Cache-Steuereinheit 922 und die Speicherschnittstelleneinheit (MIU) 928 führen die Verarbeitung von Cache-Fehltreffern und die Verbindung mit externen Geräten durch. Die Verarbeitung eines Fehltreffers für einen Thread (eine virtuelle CPU) findet dann statt, wenn der Thread nicht aktiv ist. Zusätzlich wird die Multiverarbeitung vereinfacht, wenn ein Multithread-Prozessor in der Art und Weise eines Einzelprozessors mit einem externen Gerät arbeitet. Deshalb werden in manchen Prozessoren die einheitliche externe Cache-Steuereinheit 922 und die Speicherschnittstelleneinheit (MIU) 928 als Strukturen gemeinsam mit logischen Verbesserungen benutzt, um die multiplen Threads zu unterstützen, die aber nicht die Flip-Flops nutzen, um die ECU- und MIU-Funktion für jeden Thread zu duplizieren.
  • Die externen Cache-Bus 924 Schnittstellen und die UPA-Bus 926 Schnittstelle werden gemeinsam zwischen den Threads unter Benutzung eines Einzelanschluss-Identifizierers benutzt.
  • Die externe Cache-Steuereinheit 922 verwaltet die Befehls-Cache-(L1) und Datencache-Fehltreffer in sowohl dem ersten vertikalen Multithreading-Prozessor 902 als auch dem zweiten vertikalen Multithreading-Prozessor 904 und erlaubt pro Zyklus bis zu einem Zugriff auf den externen Cache. Die externe Cache-Steuereinheit 922 unterstützt den DMA-Zugriff, welcher einen Treffer beim externen Cache erzielte, und hält die Datenkohärenz zwischen dem externen Cache und dem Hauptspeicher (nicht dargestellt) aufrecht. Die Speicherschnittstelleneinheit (MIU) 928 steuert die Transaktionen zu dem UPA-Bus 926.
  • Der einzelchip-dualprozessor-vertikal-gethreadete Prozessor 900 enthält auch einen On-Chip-L2-Cache-Markierungs-RAM 938, um einen externen Zweiwege-L2-Cache zu unterstützen.
  • Der einzelchip-dualprozessor-vertikal- gethreadete Prozessor 900 reduziert die verschwendete Zykluszeit, welche vom Stalling und Leerlaufen resultiert, und erhöht das Verhältnis an Ausführungszeit, indem er sowohl das vertikale Multithreading als auch das horizontale Multithreading unterstützt und implementiert. Das vertikale Multithreading erlaubt ein Überlappen oder "Verstecken" von Cache-Fehltreffer-Wartezeiten. Beim vertikalen Multithreading teilen sich die multiplen Hardware-Threads dieselbe Prozessor-Pipeline. Ein Hard ware-Thread ist typischerweise ein Prozess, ein Leichtgewichtsprozess, ein nativer Thread oder dergleichen in einem Betriebssystem, welches Multithreading unterstützt, wie zum Beispiel ein Solaris UNIX-Betriebssystem. Horizontales Multithreading wird erreicht, indem eine Vielzahl von Pipelines benutzt wird und die Parallelität innerhalb der Prozessorschaltungsstruktur erhöht wird. Der einzelchip-dualprozessor-vertikal-gethreadete Prozessor 900 weist das vertikale Multithreading innerhalb eines einzelnen integrierten Schaltungsdies auf, das einen Einzel-Chip-Prozessor bildet. Für eine weitere Erhöhung der Systemparallelität nutzt der einzelchip-dualprozessor-vertikal-gethreadete Prozessor 900 das horizontale Multithreading, welches Multiprozessorenkerne nutzt, die in einem einzigen Die gebildet werden. Fortschritte beim On-Chip-Multiprozessor-Horizontal-Threading werden erreicht, sowie die Prozessorkerngrößen durch den technologischen Fortschritt reduziert werden.
  • Der beispielhafte Prozessor 900 und andere multi-gethreadeten Prozessoren, die hier beschrieben werden, benutzten Thread-Level-Parallelitäten und arbeiten mit multiunabhängigen Threads, erreichen dabei möglichst einen multiplikativen Leistungsfaktor eines Prozessors mit denselben Ressourcen und derselben Taktrate, benutzen dabei aber traditionelle Non-Thread-Parallelitäten.
  • Die Thread-Level-Parallelität ist besonders nützlich für JavaTM-Anwendungen, von denen bekannt sind, dass sie Multi-Execution-Threads haben. JavaTM-Verfahren, die "Unterbrechen", "Fortsetzen", "Schlafen" und dergleichen enthalten, enthalten eine wirksame Unterstützung für den gethreadeten Programmcode. Zusätzlich sind JavaTM-Klassenbibliotheken Thread-sicher, um Parallelität zu fördern. (JavaTM, Sun, Sun-Microsystems und das Sun Logo sind Marken oder registrierte Marken von Sun Microsystems, Inc. in den Vereinigten Staaten und anderen Ländern. Alle SPARC-Marken, einschließlich UltraSPARC I und UltraSPARC II, werden unter Lizenz benutzt und sind Marken von SPARC International, Inc. in den Vereinigten Staaten und anderen Ländern. Produkte, welche die SPARC-Marke aufweisen, basieren auf einer Architektur, die von Sun Microsystems, Inc. entwickelt worden ist.) Darüber hinaus unterstützt das Thread-Modell des multi-gethreadeten Prozessors 900 und anderer beschriebener multi-gethreadeter Prozessoren einen dynamischen Compiler, der als ein Thread läuft, während ein zweiter Thread durch die aktuelle Anwendung benutzt wird. In dem beispielhaften System führt der Compiler eine Optimierung auf der Basis der "on-the-fly"zurückgeführten Profilinformation durch, während er dynamisch den Ausführungscode modifiziert, um die Ausführung bei jedem folgenden Durchlauf zu verbessern. Zum Beispiel kann ein "garbage collector" als ein erster Thread ausgeführt werden, der Objekte kopiert oder Zei gerinformation sammelt, während die Anwendung als ein zweiter Thread ausgeführt wird.
  • Bezüglich 10 zeigt ein schematisches funktionelles Blockdiagramm eine alternative Entwurfskonfiguration für einen Einzelprozessor-vertikal-gethreadeten Prozessor 1000, der zur Implementierung verschiedener Multithreading-Techniken und Systemimplementierungen geeignet ist, welche die Multithreading-Leistung und Funktion verbessern. Der Einzelprozessor-vertikal-gethreadete Prozessor 1000 ist Zweiwege-vertikal-gethreadet mit einem einzelnen Prozessor, aber mit dualen Thread-Pipelines in einem Die. In einem erklärenden Ausführungsbeispiel ist die Pipeline auf einem UltraSPARC IIi-Entwurf mit einer peripheren Komponentenverbindung (PCI)-Schnittstelle begründet und arbeitet bis zu einer Prozessortaktfrequenz von 600 MHz. Der Einzelprozessor-vertikal-gethreadete Prozessor 1000 enthält einen Thread 0-Maschinenzustandsblock 1010, der einen Maschinenzustand eines ersten Threads (Thread 0) bildet und eine Prozessor-Pipeline enthält. Der Thread 0-Maschinenzustand und Pipelineblock 1010 wird durch einen Thread 1-Maschinenzustandsblock 1012 abgebildet, der einen Maschinenzustand eines zweiten Threads (Thread 1) bildet. Der Thread 0-Maschinenzustands- und Pipelineblock 1010 und der Nachbildungsthread 1-Maschinenzustandsblock 1012 werden in einer einzelnen integrierten Schaltungslogikstruktur gebildet, welche das vorher beschriebene Hochgeschwindigkeits-Multibit-Flip-Flop-Design und eine "vierdimensionale" Registerdateistruktur benutzt. Die vierdimensionale Registerdateistruktur wird in einer Vielzahl von Lagen von Speicherzellen gebildet. Die Speicherzellenlagen haben eine zweidimensionale Form, die einen Speicher zum Abspeichern von Datenbytes oder Wörtern enthalten, die eine Vielzahl von Bits enthalten. Vertikales Threading führt eine vierte Dimension ein, da die dreidimensionale Registerdatei für eine Vielzahl von Maschinenzuständen definiert ist, die von den Registern dupliziert werden. Die multiple Dimensionsregisterdatei erhöht multiplikativ die Registerdateispeicherkapazität, ohne die integrierte Schaltungsgröße zu verändern, da die Größe von der Anzahl und der Dichte der Bauelemente auf der Oberfläche eines Halbleiterdies abhängt. Eine geeignete multidimensionale Registerdatei wird detailliert im US-Patent 5,721,868 offenbart.
  • Die multiple Dimensionsregisterdateistruktur ist sehr vorteilhaft zur Erhöhung der Prozessorleistung, ohne die Größe zu erhöhen, und zur Verkleinerung der Prozessorgröße, während die Prozessorleistung gleichgehalten oder erhöht wird. Ein weiterer Vorteil der multiplen Dimensionsregisterdatei ist, dass ein einzel-gethreadeter Prozessor in einen multigethreadeten Prozessor konvertiert werden kann, während dieselbe Schaltungsbasisflächengröße, die Verdrahtungskonfiguration, die Verpackung und ähnliches beibehalten wird. Ent sprechend wird ein multi-gethreadeter Prozessor vorteilhaft produziert, während die Charakteristiken eines einzeln-gethreadeten Prozessormodelles ausgenutzt werden.
  • Der Thread 0-Maschinenzustands- und Pipelineblock 1010 und der abbildende Thread 1-Maschinenzustandsblock 1012 führen die Befehle von Thread 0 und Thread 1 unter Verwendung des vertikalen Threadings aus. Der Thread 0-Maschinenzustands- und Pipelineblock 1010 und der nachbildende Thread 1-Maschinenzustandsblock 1012 sind mit einer externen Cache-Steuereinheit (ECU) 1022 verbunden, welche mit einem externen L2-Cache-statischen Arbeitsspeicher (SRAM) 1024 verbunden ist.
  • Die externe Cache-Steuereinheit 1022 ist auch über einen PCI-Controller 1030 mit einem peripheren Komponenten-Verbindungsbus (PCI) 1032 verbunden. Die externe Cache-Steuereinheit 1022 ist ferner über eine Speicher-Steuereinheit (MCU) 1028 mit einem dynamischen Arbeitsspeicher (DRAM) 1034 und einem Ultraport-Architekturverbindungsbus (UPA) 1026 verbunden. Die externe Cache-Steuereinheit 1022 und die Speichersteuereinheit (MCU) 1028 sind zwischen Thread 0 und Thread 1 einheitlich ausgeführt, um die Funktionen der Cache-Fehltrefferverarbeitung und der Verbindung mit externen Geräten auszuführen, um in Kombination dazu eine Vielzahl von Ausführungs-Threads dem Thread 0-Maschinenzustandsblock 1010 und dem Thread 1-Maschinenzustandsblock 1012 zuzuführen. Die einheitliche externe Cache-Steuereinheit 1022 und die Speichersteuereinheit (MCU) 1028 enthalten eine Thread-Identifikationsmarkierung (TID), um den Thread zu spezifizieren und zu identifizieren, auf den über den L2-Cache SRAM 1024, den PCI-Bus 1032, das DRAM 1034 und den UPA-Bus 1026 zugegriffen wird. Der PCI-Controller 1030 und der MCU 1028 werden gemeinsam von Threads benutzt, welche einen Einzeltor-Identifizierer benutzen. Die Thread-ID-Markierung wird in Prozessorkomponenten implementiert, welche nicht blockieren, zum Beispiel einen Carry(logN)-Bit TID im L1- und L2-Cache (sowohl Daten als auch Instruktions-Caches), Adressumsetzpuffer (TLBs), asynchrone Schnittstellen von Ladepuffern, einer externen Speicherverwaltungseinheits-(MMU)-Schnittstelle und dergleichen. In nicht-blockierenden (non-stalling) Komponenten läuft nur eine einzige Sache gleichzeitig durch die Komponente, so dass kein blockierter Zustand existiert, der abgespeichert würde. Die Thread-ID-Bits geben an, welcher Thread in der Komponente aktiv ist.
  • Die externe Cache-Steuereinheit 1022 verwaltet die Instruktions-(L1)-Cache- und Datencache-Fehltreffer und erlaubt bis zu einem Zugriff pro Zyklus auf den externen Cache. Ladeoperationen, welche im Datencache einen Fehltreffer landen, werden durch Multibyte-Datencache-Eingaben bei zwei aufeinanderfolgenden Zugriffen auf den externen Cache ge heilt. Speicheroperationen sind vollständig gepipelined und schreiben direkt auf den externen Cache. Vorab-Lesebefehle, welche einen Fehltreffer beim Instruktions-Cache landen, werden durch Multibyte-Instruktions-Cache-Eingaben geheilt, welche vier aufeinanderfolgende Zugriffe auf den paritätsgeschützten externen Cache benutzen.
  • Die externe Cache-Steuereinheit 1022 unterstützt DMA-Zugriffe, welche einen Treffer im externen Cache landen, und hält die Datenkohärenz zwischen dem externen Cache und dem Hauptspeicher (nicht dargestellt) aufrecht.
  • Die Speichersteuereinheit (MCU) 1028 steuert die Transaktionen zu dem UPA-Bus 1026 und zu dem DRAM 1034. Der UPA-Bus 1026 läuft bei einem Bruchteil (zum Beispiel 1/3) des Prozessortaktes.
  • Ein beispielhafter Einzelprozessor-vertikal-gethreadeter Prozessor 1000 ist auf einem Die aufgebaut, welches kleiner als 100 mm2 ist, und hat eine Verlustleistung von weniger als 10 W bei einer Taktrate von 200 MHz. Der beispielhafte Einzelprozessor-vertikal-gethreadete Prozessor 1000 hat einen geschätzten Wirkungsgrad bei einem Berechnungswirkungsgrad von 30% bei einem Single-Thread-Prozessor mit ähnlichen Leistungsspezifikationen pro Thread.
  • Bezüglich 11 stellt ein schematisches funktionelles Blockdiagramm eine alternative Entwurfskonfiguration für einen Einzelchip-Dualprozessor-vertikal-gethreadeten Prozessor 1100 dar, der zur Implementierung verschiedener Multithreading-Techniken und Systemimplementationen geeignet ist, welche die Multithreading-Leistung und -Funktion verbessern. Der Einzelchip-Dualprozessor-vertikal-gethreadete Prozessor 1100 enthält zwei Prozessorkerne auf einem einzigen Die, wobei jeder Prozessorkern zweiwege-vertikal-gethreadet ist, was zu einer effizienten Herstellung von vier Prozessoren auf einem Die führt. Die zwei Prozessorkerne teilen sich gemeinsam einen On-Chip-Vierwege-Set-Associative-L2-Cache und teilen sich gemeinsam eine externe Cache-Steuereinheit, welche einen Zugriff auf den L2-Cache steuert. Das gemeinsame Benutzen des On-Chip-L2-Caches führt vorteilhafterweise zu einer Cache-Kohärenz zwischen der Vielzahl von Prozessoren auf einem einzigen Die. In dem beispielhaften Einzelchip-Dualprozessor-vertikal-gethreadeten Prozessor 1100 enthält jeder der zwei Prozessorkerne getrennte periphere Komponentenschnittstellen (PCI), DRAM und UltraPort-Architektur-Verbindungs-(UPA)-Schnittstellen.
  • Der Einzelchip-vertikal-gethreadete Prozessor 1000, der in 10 dargestellt ist, führt allein ein vertikales Multithreading durch. Im Gegensatz dazu führt der Einzelchip-Dualprozessor-vertikal-gethreadete Prozessor 1100 sowohl ein horizontales Multithreading als auch ein vertikales Multithreading durch. Der Einzelchip-Dualprozessor-vertikal-gethreadete Prozessor 1100 hat zwei Prozessoren auf einem Chip, der einen ersten vertikalen Multithreading-Prozessor 1102 und einen zweiten vertikalen Multithreading-Prozessor 1104 enthält, wobei beide zweiwege-vertikal-gethreadet mit einem Einzelprozessor sind, die aber duale Thread-Pipelines in einem Die haben. In einem beispielhaften Ausführungsbeispiel basieren die Pipelines auf einem UltraSPARC II-Entwurf mit einer peripheren Komponentenverbindungs-(PCI)-Schnittstelle und arbeiten bis zu einer Prozessortaktfrequenz von 600 MHz.
  • Der erste vertikale Multithreading-Prozessor 1102 enthält einen Thread 0-Maschinenzustandsblock 1110, der einen Maschinenzustand eines ersten Threads (Thread 0) definiert, und eine Prozessor-Pipeline enthält. Der Thread 0-Maschinenzustands- und Pipeline-Block 1110 wird durch einen Thread 1-Maschinenzustandsblock 1112 abgebildet, der einen Maschinenzustand eines zweiten Threads (Thread 1) bildet. Der Thread 0-Maschinenzustands- und Pipeline-Block 1110 und der Abbildungs-Thread 1 Maschinenzustandsblock 1112 sind in einer einzigen integrierten logischen Schaltungsstruktur hergestellt, die ungefähr die Hälfte eines Halbleiterdies belegt und den vorher beschriebenen Hochgeschwindigkeits-Multibit-Flip-Flop-Entwurf und eine "vierdimensionale" Registerdateistruktur benutzt. Bei manchen Prozessoren kann die Registerdatei bei einem einzelnen vertikalen Multithreading-Prozessor angeordnet sein. In anderen Prozessoren kann die Registerdatei zwischen einer Vielzahl von vertikalen Multithreading-Prozessoren gemeinsam benutzt werden.
  • Der Thread 0 Maschinenzustands- und Pipeline-Block 1110 und der abbildende Thread 1 Maschinenzustandsblock 1112 führen die Befehle des Threads 0 und des Threads 1 aus, die vertikales Threading benutzen. Der Thread 0 Maschinenzustands- und Pipeline-Block 1110 und der abbildende Thread 1 Maschinenzustandsblock 1112 sind mit einer externen Cache-Steuereinheit (ECU) 1122 verbunden, die über einen externen Cache-Steuereinheits(ECU)-Schiedsrichter 1125 mit einem On-Chip-L2-Cache-SRAM 1124 verbunden ist. Der L2-Cache SRAM 1124 und der ECU-Schiedsrichter 1125 werden gemeinsam von dem ersten vertikalen Multithreading-Prozessor 1102 und dem zweiten vertikalen Multithreading-Prozessor 1104 gemeinsam benutzt. In einem beispielhaften Prozessor 1100 ist der L2-Cache-SRAM 1124 ein 1-Megabyte-Vierwege-L2-Cache.
  • Die externe Cache-Steuereinheit 1122 ist auch über einen PCI-Controller 1130 mit einem peripheren Komponenten-Verbindungs-Bus (PCI) 1132 verbunden. Die externe Cache-Steuereinheit 1122 ist des weiteren mit einem DRAM 1134 und einem UltraPort-Architekturverbindungs(UPA)-Bus über eine Speichersteuereinheit (MCU) 1128 verbunden. Die externe Cache-Steuereinheit 1122 und die Speichersteuereinheit (MCU) 1128 sind zwi schen Thread 0 und Thread 1 einheitlich, um die Funktionen der Cache-Fehltrefferverarbeitung und der Verbindung mit externen Geräten auszuführen, um in Kombination dazu eine Vielzahl von Ausführungs-Threads dem Thread 0 Maschinenzustandsblock 1110 und dem Thread 1 Maschinenzustandsblock 1112 zuzuführen. Die einheitliche externe Cache-Steuereinheit 1122 und die Speichersteuereinheit (MCU) 1128 enthalten eine Thread-Identifikations-(TID)-Markierung, um den Thread zu spezifizieren und zu identifizieren, auf den über den L2-Cache-SRAM 1124, den PCI-Bus 1132, das DRAM 1134 und den UPA-Bus 1126 zugegriffen wird. Der PCI-Controller 1130 und das MCU 1128 werden gemeinsam zwischen Thread 0 und Thread 1 unter Verwendung eines Einzelport-Identifizierers benutzt.
  • Die externe Cache-Steuereinheit 1122 verwaltet die Speicher-(L1)-Cache- und Datencache-Fehltreffer und erlaubt bis zu einem Zugriff pro Zyklus auf den externen Cache. Ladeoperationen, welche einen Fehltreffer im Datencache erzeugen, werden durch multiple Byte-Datencache-Eingaben bei zwei aufeinanderfolgenden Zugriffen auf den externen Cache geheilt. Speicheroperationen sind vollständig gepipelined und schreiben direkt auf den externen Cache. Das Vorablesen von Befehlen, welche einen Fehltreffer auf den Instruction-Cache landen, werden durch multiple Byte-Befehls-Cache-Eingaben geheilt, welche vier aufeinanderfolgende Zugriffe auf den paritätsgeschützten externen Cache benutzen.
  • Die externe Cache-Steuereinheit 1122 unterstützt die DMA-Zugriffe, welche einen Treffer im externen Cache landen, und hält die Datenkohärenz zwischen dem externen Cache und dem Hauptspeicher (nicht dargestellt) aufrecht.
  • Die Speichersteuereinheit (MCU) 1128 steuert die Transaktionen zu dem UPA-Bus 1126 und zu dem DRAM 1134. Der UPA-Bus 1126 läuft bei einem Bruchteil (zum Beispiel 1/3) des Prozessortaktes.
  • Der zweite vertikale Multithreading-Prozessor 1104 enthält einen Thread 2-Maschinenzustandsblock 1140, der einen Maschinenzustand eines dritten Threads (Thread 2) bildet und eine Prozessor-Pipeline enthält. Der Thread 2-Maschinenzustands- und Pipeline-Block 1140 wird durch einen Thread 3 Maschinenzustandsblock 1142 abgebildet, welcher einen Maschinenzustand eines vierten Threads (Thread 3) definiert. Der Thread 2 Maschinenzustands- und Pipeline-Block 1140 und der Abbildungsthread 3 Maschinenzustandsblock 1142 werden in einer einzelnen integrierten logischen Schaltungsstruktur hergestellt, die ungefähr die Hälfte eines Halbleiterdies abdeckt und die das vorher beschriebene Hochgeschwindigkeits-Multibit-Flip-Flop-Design und eine "vierdimensionale" Registerdateistruktur benutzt. Der Thread 2-Maschinenzustands- und Pipeline-Block 1140 und der Abbildung sthread 3 Maschinenzustandsblock 1142 führen die Befehle von Thread 2 und Thread 3 unter Benutzung von vertikalem Threading aus. Der Thread 2 Maschinenzustands- und Pipeline-Block 1140 und der Abbildungs-Thread 3 Maschinenzustandsblock 1142 sind mit einer externen Cache-Steuereinheit (ECU) 1152 verbunden, die über den externen Cache-Steuereinheits(ECU)-Schiedsrichter 1125 mit dem On-Chip-L2-Cache-SRAM 1124 verbunden ist. Der L2-Cache-SRAM 1124 und der ECU-Schiedsrichter 1125 werden gemeinsam von dem ersten vertikalen Multithreading-Prozessor 1102 und dem zweiten vertikalen Multithreading-Prozessor 1104 benutzt.
  • Die externe Cache-Steuereinheit 1152 ist auch über einen PCI-Controller 1160 mit dem peripheren Komponenten-Verbindungs-(PCI)-Bus 1132 verbunden. Die externe Cache-Steuereinheit 1152 ist des weiteren über eine Speichersteuereinheit MCU 1158 mit einem DRAM 1164 und dem Ultraport-Architektur-Verbindungs-(UPA)-Bus 1126 verbunden. Die externe Cache-Steuereinheit 1152 und die Speichersteuereinheit (MCU) 1158 sind einheitlich zwischen Thread 2 und Thread 3, um die Funktionen der Cache-Fehltrefferverarbeitung und der Verbindung zu externen Geräten durchzuführen, um in Kombination dazu eine Vielzahl von Ausführungs-Threads dem Thread 2 Maschinenzustandsblock 1140 und dem Thread 3 Maschinenzustandsblock 1142 zuzuführen. Die einheitliche externe Cache-Steuereinheit 1152 und die Speicher-Steuereinheit (MCU) 1158 enthalten Thread-Identifizierer-Markierungen (TID), um den Thread zu spezifizieren und zu identifizieren, auf den über den L2-Cache-SRAM 1124, den PCI-Bus 1132, den DRAM 1134 und den UPA-Bus 1126 zugegriffen wird. Das TDI wird durch die Logik für den Einsatz mit Prozessorblöcken unterstützt, welche nicht blockiert sind. Entsprechende nicht-blockierte Blöcke enthalten Cache-Adress-Umsetzpuffer (TLB), eine Ladepuffer-asynchrone Schnittstelle, eine Speicherpuffer-asynchrone Schnittstelle, eine externe Speicherverwaltungseinheit-(MMU)-Schnittstelle und andere Komponenten. Der PCI-Controller 1160 und der MCU 1158 werden gemeinsam von Thread 2 und Thread 3 benutzt, die einen Einzelport-Identifizierer benutzen.
  • Die Ladepuffer- und Speicherpuffer-Schnittstellen sind gemeinsam benutzte Strukturen, die implementiert sind, um die Kompatibilität mit multiplen Threads aufrechtzuerhalten. Beim Umschalten eines Threads verändert ein neuer Thread nicht den Zustand einer gemeinsam benutzten Struktur in einer Art und Weise, die nicht kompatibel ist mit dem ersetzten Thread. Die Ladepuffer- und Speicherpuffer-Schnittstelle halten die Thread-Kompatibilität durch physikalische Duplizierung von Strukturen und durch das Kontrollieren des sogenannten Lese-nach-Schreibe-Status der Speicher aufrecht. Im Besonderen werden Ladetätigkeiten gegenüber einem Speicherpuffer in einem alternativen Thread kontrolliert, so dass die Lesenach-Schreibe-Statusinformation abgespeichert und erweitert wird, um Ergebnisse von Lesenach-Schreibe-Kontrollen gegenüber allen Speicherpuffern abzuspeichern.
  • Die Speicherpuffer-Datencache-Treffer-Bits werden nicht zurückgesetzt. Deshalb kann als Folge einer Thread-Umschaltung ein Laden in Thread 2 eine Zeile ersetzen, die das Ziel einer bisher nicht vollständigen Abspeicherung in Thread 1 ist. Da die Speicherpuffer-Datencache-Treffer-Bits nicht zurückgesetzt werden, kann eine andere Thread-Umschaltung dazu führen, dass der Thread 1 in einer anderen Zeile abspeichert. Die Lese-nach-Schreibe-Kontrolle in dem anderen Speicherpuffer verhindert das weitere Laden in dem anderen Speicherpuffer und verhindert das Ersetzen einer Zeile, die ein Ziel einer unvollständigen Abspeicherung ist.
  • Wenn zusätzlich eine Abspeicherung in Thread 1 in den Datencache, aber nicht in den externen Cache schreibt, ohne Lese-nach-Schreibekontrolle in dem anderen Speicherpuffer, dann kann eine Ladeoperation in Thread 2 die auf den neuesten Stand gebrachten Werte vor den anderen Prozessoren in dem System empfangen, was zu einer TSO-Verletzung führt. Deshalb sollte die vollständige Beschreibung eines Schreibens in den Datencache für eine Speicheroperation nicht Lese-nach-Schreibe-Threads sperren.
  • Die externe Cache-Steuereinheit 1152 verwaltet den Befehls-(L1)-Cache und die Datencache-Fehltreffer und erlaubt bis zu einem Zugriff pro Zyklus auf den externen Cache. Die externe Cache-Steuereinheit 1152 unterstützt DMA-Zugriffe, welche einen Treffer in dem externen Cache landen, und hält die Datenkohärenz zwischen dem externen Cache und dem Hauptspeicher (nicht dargestellt) aufrecht.
  • Die Speichersteuereinheit (MCU) 1158 steuert die Transaktionen zu dem UPA-Bus 1126 und zu dem DRAM 1134.
  • Ein beispielhafter Einzelchip-Dualprozessor-vertikal-gethreadeter Prozessor 1100 arbeitet bei einer Taktfrequenz von bis zu 600 MHz, ist auf einem Die aufgebaut, der kleiner als 250 mm2 ist und hat eine Verlustleistung von weniger als 10 W bei einer Taktrate von 200 MHz. Der beispielhafte Einzelchip-Dualprozessor-vertikal-gethreadete Prozessor 1100 hat eine geschätzte Effektivität bei der Berechnungseffizienz von 130% bei einem Single-Thread-Prozessor mit ähnlichen Leistungsspezifikationen pro Thread.
  • Zahllose andere Strukturen und Kombinationen können auf einen oder mehreren integrierten Schaltungsdies implementiert werden, die von dem benutzten Fabrikationsprozess und von den beabsichtigten Anwendungen für den Prozessor abhängen. Die anderen Prozes sorkonfigurationen können mit variierenden Anzahlen von On-Chip- oder Off-Chip-Prozessorkernen, variierenden Zahlen von vertikalen Threads pro Pipeline und unterschiedlichen Konfigurationen von Schnittstellen, Speicher und Eingabe-/Ausgabe-Steuereinheiten, Speichereinrichtungen und dergleichen konfiguriert werden. Zum Beispiel enthält in einer "1C2T"-Konfiguration ein einzelner Prozessor die zwei vertikalen Threads. In einem anderen Beispiel enthält eine vorteilhafte Konfiguration vier Prozessorkerne mit jeweils vertikalen multi-gethreadeten Kernen, um einen viereckigen Die herzustellen. In einer "4C4T"-Konfiguration wird ein Vierprozessor-Multiprozessor auf einem einzelnen Die hergestellt, wobei jeder der vier Prozessoren Vierwege-vertikal-gethreadet ist. Ein Betriebssystem steuert den Betrieb des 4C4T-Konfigurationsprozessors als ein 16-Wege-sequenzieller Multiprozessor.
  • Manche Prozessoren können entweder einen On-Chip- oder einen externen rücksetzbaren dynamischen RAM (RDRAM) anstatt eines externen Caches enthalten. Verschiedene Prozessoren können einen On-Chip-L2-Cache enthalten. Verschiedene Systeme können Cache-Speicher enthalten, die wahlweise konfiguriert sind, zum Beispiel als aufgetrennte L1-Cache-Speicher und aufgetrennte L2-Cache-Speicher oder aufgetrennte L1-Cache-Speicher und gemeinsam benutzte L2-Cache-Speicher oder gemeinsam benutzte L1-Cache-Speicher und gemeinsam benutzte L2-Cache-Speicher.
  • Bezüglich 12 stellt ein schematisches Blockdiagramm einen Prozessor 1200 und eine Prozessorarchitektur dar, die zur Implementierung verschiedener Multithreading-Techniken und Systemimplementierungen geeignet sind, welche die Multithreading-Leistung und -Funktion verbessern. Ein Befehls-Cache 1212 liefert Befehle an eine Decodiereinheit 1214. Der Befehls-Cache 1214 empfängt Befehle von einer Vorab-Leseeinheit 1216, welche über eine Cache-Steuer-/Systemschnittstelle 1222 mit Befehlen von entweder einer Branch-Einheit 1218 oder einem externen Cache (nicht dargestellt) versorgt wird. In manchen Prozessoren enthält die Cache-Steuer-/Systemschnittstelle 1222 eine externe Cache-Steuereinheit (ECU) und eine Speicher-Schnittstellen-Einheit (MUI). Befehle von dem externen Cache werden abgegeben, wenn die Vorab-Leseeinheit 1216 eine virtuelle Adresse an einen Befehlsadress-Umsetzpuffer (TLB) 1220 abgibt. Befehle von dem externen Cache werden an eine Prädecodiereinheit 1224 abgegeben und enthalten verschiedene Steuerinformationen für den Befehls-Cache 1212. Die verschiedenen Steuerinformationen enthalten Signale, wie zum Beispiel eine Bezeichnung, dass ein Befehl ein Branch-Befehl ist.
  • Befehle von der Decodiereinheit 1214 werden an einen Instruktionspuffer 1226 abge geben und werden durch eine Dispatch-Einheit 1228 verarbeitet. In manchen Prozessoren wird das Puffern von Instruktionen durch mehrere Instruktionspuffer 1226, die miteinander parallel verbunden sind, realisiert. In dem beispielhaften Prozessor 1200 gibt die Dispatch-Einheit 1228 vier decodierte Instruktionen gleichzeitig an einen Bus 1230 ab. Die Instruktionen werden an eine von acht Funktionseinheiten abgegeben. Die Dispatch-Einheit 1228 kontrolliert auf Datenabhängigkeiten, Steuerabhängigkeiten und strukturellen Problemen, wie zum Beispiel die Verfügbarkeit von Funktionseinheiten und Speicheranschlüssen. Die Dispatch-Einheit 1228 fertigt dann auf der Grundlage der Kontrolloperation bis zu vier Instruktionen pro Zyklus ab.
  • Funktionseinheiten vom Integer-Typ, die eine Lade-/Speichereinheit 1232, eine erste Integer-Recheneinheit (ALU) 1234 und eine zweite Integer-ALU-Einheit 1236 enthalten, benutzen gemeinsam einen Satz von Integer-Registern 1248. Funktionseinheiten vom Gleitkommatyp, die eine erste Gleitkommaeinheit 1238, eine zweite Gleitkommaeinheit 1240, eine dritte Gleitkommaeinheit 1242, eine erste graphische Einheit 1244 und eine zweite graphische Einheit 1246 enthalten, benutzen gemeinsam die Gleitkommaregister 1250. Die Funktionseinheiten vom Integer-Typ benutzen gemeinsam eine Integer-Vervollständigungseinheit 1252 und die Funktionseinheiten vom Gleitkommatyp benutzen gemeinsam eine Gleitkommavervollständigungseinheit) 1254. Der Prozessor 1200 enthält auch einen On-Chip-Datencache 1256 und einen Datenadress-Umsetzpuffer (TLB) 1258.
  • Bezüglich 13 zeigt ein schematisches perpektivisches Diagramm eine multidimensionale Registerdatei 1300, die vorteilhaft für den Gebrauch in einem multi-gethreadeten Prozessor ist. Sowohl Integer- als auch Gleitkommaregisterdateien werden typischerweise nicht mit Flip-Flops implementiert, so dass das Multibit-Flip-Flop nicht hilfreich in der typischen Registerdatei ist, um die Speicherkapazität zu erhöhen. Die Kapazität der Registerdateien kann jedoch anders erweitert werden, indem andere Techniken und Strukturen, wie die multidimensionale Registerdateistruktur 1300 verwendet wird.
  • Eine Registerdatei ist eine Datenpfadkomponente, die sehr bestimmend für die Leistung in einem superskalaren Prozessor ist. Die Zugriffszeit auf die Registerdatei ist ein Faktor, der die Prozessorzykluszeit beeinflusst. Die Registerdatei verbraucht einen relativ großen Anteil des superskalaren Prozessors, da eine große Anzahl von Anschlüssen sehr nützlich in solchen Prozessoren ist. Typischerweise werden zehn oder mehr Anschlüsse für einen dreiskalaren Mikroprozessor benutzt und die Größe der Registerdatei steigt mit dem Quadrat der Anzahl von Anschlüssen an.
  • Die multidimensionale Registerdatei 1300 benutzt mit Vorteil die Fläche, die inhärent durch die Metalldrähte verbraucht wird, die für die Bitzeilen und Wortzeilen für jede Speicherzelle benutzt werden, um N Sätze von Registern zu speichern. Die einzelnen Sätze der N Sätze sind logisch eine Ebene in der dritten Dimension. Die Konfiguration der multiplen Ebenen wird benutzt, um eine Vielzahl von Registerfenstern zu bilden und um extra Registereinstellungen für Realzeitaufgaben, Umschaltung von Mikroaufgaben oder Abspeicherung von multiplen Ausführungs-Threads zu bilden. In manchen Speichern ist ein Daten-Array eines dreidimensionalen, achtfenstrigen, mit zehn Anschlüssen ausgestatteten Registerdatei sechsmal kleiner als eine flache Registerdatei. Die Zugriffszeit wird durch das Verkürzen von Busleitungen und durch das gemeinsame Benutzen eines großen Puffers zwischen den Bitzellen verbessert. Die multidimensionale Registerdatei 1300 wird mit Vorteil in Hochleistungssuperskalaren Prozessoren implementiert.
  • Die große Anzahl von Registern und die erhöhte Funktionalität einer Registerdatei, die eine Vielzahl von Registerfenstern enthält, werden konventionell in einem Mikroprozessor auf Kosten eines starken Anwachsens der Schaltungsgröße, Kosten und Schwierigkeiten bei der Implementierung implementiert. Zum Beispiel würde eine herkömmliche Registerdatei mit einem Fenster von 32 Registern mit acht überlappenden Registern zwischen den Fenstern insgesamt 128 Register enthalten, ohne globale Register zu enthalten, und wäre um einiges größer als herkömmliche Registerdateien ohne Fenster. Die durch die Fenster plus die größere Anzahl von Registern hinzugefügte Funktionalität macht die Implementierung einer Registerdatei mit Fenstern zu einer Herausforderung, da RISC-Prozessoren aufgrund starkem Pipelining auf Basisdatenpfadblöcken, wie zum Beispiel den Registerdateien, ALUs und Cache-Speichern, zu Basiszykluszeit neigen. Eine herkömmliche Registerdatei mit Fenstern, die in einer herkömmlichen Art und Weise implementiert sind, hat genau ein aktives Fenster für alle Leseoperationen und ein aktives Fenster für alle Schreiboperationen.
  • Die multidimensionale Registerdatei 1300 nutzt die Tatsache aus, dass nicht auf alle Fenster gleichzeitig zugegriffen werden muss, um einen Schaltungsaufwand zwischen den Fenstern einzusparen. Die einzelnen Ebenen 1310 in der multidimensionalen Registerdatei 1300 stellen ein eigenes Fenster dar. Im Sinne der Einfachheit ist die multidimensionale Registerdatei 1300 mit vier nicht-überlappenden Fenstern dargestellt. Das Konzept der multidimensionalen Registerdatei 1300 stellt auf die Unterstützung durch das Umschalten von Kontext ab, so dass die einzelnen Flächen 1310 einen separaten Kontext darstellen. Das Umschalten von Kontext zwischen Mikrotasks wird durch das einfache Verändern der Kontext zahl, so wie dies in 13 dargestellt ist, durch das Verändern des Fensterzeigers 1312, schnell durchgeführt.
  • Die aktuelle Kontextzahl oder der Fensterzeiger 1312 wird durch einen separaten Decoder 1314 decodiert und eine entsprechende Ebene 1310 wird ausgewählt. Der Registerindex für das ausgewählte Fenster wird in der Art und Weise einer herkömmlichen Registerdatei decodiert. Beim Auswählen eines Registers werden die Registerinhalte auf einen Datenbus gegeben, der von allen Fenstern oder Kontexten gemeinsam benutzt wird. Im Sinne der Einfachheit stellt 13 nur einen Leseabschnitt der Logik für die multidimensionale Registerdatei 1300 dar. Die Schreiblogik (nicht dargestellt) enthält einen separaten Decoder (nicht dargestellt) für einen Schreibfensterzeiger, der eine andere Ebene 1310 auswählt. Separate Datenleitungen sind inhärent für einzelne Phasen-Pipelines enthalten, so dass keine zusätzliche Leitung für den separaten Schreibfensteranschluss enthalten sein muss. Es ist zu beachten, dass eine zusätzliche Fensterdecodierzeile hinzugefügt werden kann, um eine höhere Leistung zu erreichen.
  • Eine herkömmliche Implementierung von Registerfenstern in einer Registerdatei führt zu einer großen flachen Konfiguration. Für einen superskalaren Prozessor mit mehreren Anschlüssen resultiert die herkömmliche Implementation in einem einzigen Informationsbit, das verschwenderisch zwischen einigen Metalldrähten abgespeichert ist. 14 ist ein schematisches Schaltungsdiagramm, das eine Bitzelle 1410 einer herkömmlichen Implementierung eines Registerfensters einer Registerdatei mit zehn Anschlüssen einschließlich sieben Leseanschlüssen und drei Schreibanschlüssen darstellt. Zehn separate Wortleitungen 1412, sieben single-ended Abtastverstärkerleitungen (nicht dargestellt) für die Leseleitungen und drei single-ended Schreib-bit-Leitungen 1416 sind enthalten, was zu einem 10X10-Gitter 1418 führt. Für einen Vierlagenmetallprozess sind die Wortleitungen typischerweise auf der zweiten Lage und die Bitleitungen auf der dritten Lage. Die Betriebsspannungs- und Massepotentiale werden auf der vierten Lage geführt und die erste Lage wird für lokale Verbindungen in den Bitzellen benutzt. Für einen 0,5-Mikronprozess mit einem Metallpitch von 1,5 Micron, führt dies zu einem 10X10-Gitter 1418 in einer Fläche von 225 Quadratmicrons. Zwischen dem 10X10-Gitter 1418 wird ein einzelnes Informationsbit abgespeichert, was eine schlechte Nutzung der verfügbaren Fläche für logische Bauelemente ist. Für doppelabgetastete Abtastverstärker und für ein differenzielles Schreiben sind die verschwendeten Flächen sogar noch größer. Typischerweise wird ein Gitter von 10X20 benötigt, was zu einer effektiven Fläche von 450 Microns führt, um ein einzelnes Informationsbit abzuspeichern.
  • Das Daten-Array einer gefensterten Registerdatei mit 128 64-Bit-Registern, das in der beispielhaften herkömmlichen Art und Weise implementiert ist, misst ungefähr 128 * 64 * 225 = 1,84 Quadratmillimeter für das single-ended Schema und 128 * 64 * 450 = 3,68 Quadratmillimeter für die doppel-ended Konfiguration. Für einen 64-Bit-Superskalarprozessor mit einer relativ großen Registerdatei, zum Beispiel 32 Registern, stellt das Daten-Array ungefähr 2/3 der Gesamtfläche der Registerdatei dar.
  • Bezüglich 15 stellt ein schematisches Schaltungsdiagramm eine Vielzahl von Bitzellen 1510 eines Registerfensters der multidimensionalen Registerdatei 1300 dar, welches eine Verschwendung von integrierter Schaltungsfläche vermeidet, indem die Bedingung ausgenutzt wird, dass nur ein Fenster gelesen und nur ein Fenster gleichzeitig beschrieben wird. Die sonst verschwendete Fläche wird benutzt, um Informationsbits einer Vielzahl von Fenstern bei einer entsprechenden Vielzahl von Tiefen bei einer lateralen Position in der integrierten Schaltungsfläche abzuspeichern. Zum Beispiel wird das Bit i eines Registers j für eine Vielzahl von Fenstern {0, 1, 2, ..., 7} bei einer Position in einem 10X10-Gitter 1518 bei einer Vielzahl von Tiefen abgespeichert. Die Vielzahl von Bits bei einer Vielzahl von Tiefen werden durch die Spezifizierung eines Bits i, eines Registers j und eines Fensters k adressiert. Folglich wird eine Registerdatei mit acht Fenstern unter Benutzung von drei zusätzlichen Leitungen zur Spezifizierung eines ausgewählten Fensters unter acht Fenstern adressiert. Folglich wird das 10X10-Gitter 1518 durch das Hinzufügen von drei Adress-Leitungen zusätzlich zu den Adress-Leitungen zur Adressierung einer 10X10-Einzelfensterregisterdatei adressiert. Entsprechend wird das 10X10-Gitter 1518 durch 13X10-Adressleitungen adressiert. In der beispielhaften multidimensionalen Registerdatei 1300 werden acht Informationsbits anstatt einem Informationsbit in einer Fläche abgespeichert, die nur um 30% größer ist als die Fläche für ein Einzelfenster 10X10-Gitter 1418.
  • Für ein Beispiel einer Abspeicherung einer single-ended-Registerdatei benützt jedes Bit ungefähr 36 Quadratmicrons (6,15 mal kleiner) im Vergleich zu den 225 Quadratmicrons in einer herkömmlichen Implementierung eines einzelnen Fensters. Die Vorzüge sind sogar noch größer für eine double-ended-Implementierung, in welcher ein Bit ungefähr 73 Quadratmicrons im Vergleich zu den 450 Quadratmicrons eines herkömmlichen Doppelfensterspeichers benutzt. Der double-ended Speicher erreicht dieselben Speicherraten, 6,15 mal kleiner, was aber sogar zu einem größeren Gewinn an insgesamt eingesparter Fläche führt.
  • Das 10X10-Gitter 1518 ist nur für erklärende Zwecke dargestellt. Ein Gitter kann jede geeignete Dimension (zum Beispiel 10X20 oder andere) in Abhängigkeit von einer ge wünschten Anwendung, Funktion und Kapazität haben.
  • Bezüglich 16 stellt ein schematisches Schaltungsdiagramm eine geeignete Bit-Speicherschaltung 1600 dar, welche ein Bit des lokalen Registers für die multidimensionale Registerdatei 1300 mit acht nicht-überlappenden Fenstern abspeichert. Die multidimensionale Registerdatei 1300 ist nützlich für das schnelle Umschalten von Kontext oder zur Implementierung von lokalen Registern, die nicht über ein Fenster hinweg gemeinsam benutzt werden.
  • Die beispielhafte Bit-Speicherschaltung 1600 stellt eine Speicherzelle 1610 mit sieben Leseanschlüssen 1612, single-ended Lesebitleitungen 1614, drei Schreibanschlüssen 1616, unterschiedlichen Schreibbitleitungen 1618, getrennten Lese- 1619 und Schreibfenstern 1620 und einem decodierten (einen aktiven) aktuellen Fensterzeiger 1622. Die Speicherzelle 1610 erlaubt keine gleichzeitigen mehrfachen Schreiboperationen auf dasselbe Register. Die singleended Lesebitleitungen 1614 benutzen deutlich weniger Fläche als eine differenzielle Abtastverstärker-Implementierung (sieben Leitungen gegen vierzehn Leitungen). Das Abtasten von single-ended Lesebitleitungen verbessert die Leseabtastgeschwindigkeit, ohne den Rauschbereich zu beeinträchtigen, indem die Lesebitleitung über die Maximalspannung des Abtastverstärkers vorbelastet wird. Zum Beispiel wird in einem typischen 3,3 V CMOS-Prozess, unter der Annahme von TTLH, die Lesebitleitung auf 1,31 V vorgespannt, was 0,61 V über dem Maximalwert des Abtastverstärkers von 0,70 V ist. Nachdem die Lesebitleitung vorgespannt ist, kann die Auswahl einer der Speicherzellen auf der Lesebitleitung zu entweder einer Fortsetzung des vorgespannten Zustandes führen, den der Abtastverstärker als eine logische "1" einliest, oder kann zu einem Entladen der Bitleitung unter den maximalen Spannungswert des Abtastverstärkers führen, was dazu führt, dass dieser Zustand als eine logische "0" gelesen wird.
  • Die differenziellen Schreibbitleitungen 1618 erlauben schnelle Schreib- und zuverlässige Rauschgrenzen. Das Benutzen eines getrennten Fensterzeigers zum Lesen und Schreiben führt zu einer höheren Leistung, indem es mehr als einem Fenster erlaubt ist, in einer Pipeline zu coexistieren. Durch das Verbieten von mehrfachen Schreibzugriffen auf dasselbe physikalischen Register in demselben Zyklus wird der Entwurf, ohne die Leistung zu beeinflussen, vereinfacht, da solche Schreibzugriffe ein Anzeichen für eine nicht-effiziente Bedingung sind und inhärent nicht geeignet sind für einen ordentlichen Prozessor. Zwei aufeinanderfolgende Schreibzugriffe in demselben Zyklus ohne einen dazwischenliegenden Lesezugriff sind keine gewöhnliche Programmierpraxis.
  • Die Decodierung von Schreibadressen findet in zwei Stufen statt. Prädecodierer (nicht dargestellt) sind einfache statische Gatter. UND-Gatter mit vier Eingängen führen die Decodierung der zweiten Stufe durch. Eines der vier Eingabesignale ist ein Schreibfreigabesignal. Schreibdecodierer werden gesperrt, wenn das entsprechende Schreibfreigabesignal gesperrt wird.
  • Der decodierte aktuelle Fensterzeiger 1622 vereinfacht die Logik für jede Bitzelle und erzeugt einen Geschwindigkeitsvorteil, da der Zeiger parallel mit einem Registerindex decodiert werden kann.
  • Die Auswahlleitungen 1624 (rps0, rps1, ... rps7) für die Speicherzelle 1610 wählen ein Register N aus und decken die volle Breite des 64-Bit-Registers ab. Die Decodierung der Leseadressen wird in zwei Stufen unter Benutzung von Präcodierern (nicht dargestellt), das einfache statische Gatter sind, während Endstufendecodierer (nicht dargestellt) NAND-Gatter vom Domino-Typ mit drei Eingängen sind, durchgeführt. Um die Adress-Decodierungsrate deutlich zu erhöhen, werden die Leseadresssignale unterschiedlich vorbelastet, um es einer Bewertung zu ermöglichen, sofort zu beginnen, wenn die eingegebenen Adresssignale gültig werden.
  • Der decodierte aktuelle Fensterzeiger 1622 wird durch acht Signale (rcwp0, rcwp1, ... recwp7) dargestellt, von denen nur eines gleichzeitig aktiv ist. Der aktuell decodierte Fensterzeiger 1622 wählt das Fenster innerhalb dem Register N aus, auf das zugegriffen wird. Über Kreuz verbundene Inverter 1626 werden benutzt, um jede Bitzelle abzuspeichern. Ein lokaler Inverter 1628 verstärkt die Signale lokal und isoliert jede Zelle, was eine gemeinsame Benutzung von Ladung vermeidet. Das Lesen von Daten von den einzelnen Bitzellen wird durch einen Inverter INV2 gepuffert, der einen großen Pull-Down-Transistor enthält (50 Microns gegen 8 Microns für einen entsprechenden Pull-up-Transistor). Die sieben Bitleitungen 1624 werden vorgeladen, so dass die Lesezugriffszeit bestimmt wird durch die Lesebitleitungs-Pulldown-Geschwindigkeit. Der Inverter Inv1 und ein PMOS-Transistor TPFB ziehen einen Knoten cc eines lokalen Zwischendatenbusses auf VDD.
  • Drei Schreibauswahlleitungen 1630 sind wps0, wps1 und wps2. Es werden unterschiedliche Schreibarten implementiert, so dass drei Paare von unterschiedlichen Schreibbitleitungen 1632 benutzt werden (wdc0, wdt0, wdc1, wdt1, wdc2 und wdc2). Der separate decodierte aktuelle Fensterzeiger 1622 wird für die Schreiboperationen benutzt, so dass nur eines der acht Signale (wcwp0, wcwp1, ..., wcwp7) gleichzeitig aktiv ist.
  • Bezüglich 17A stellt ein schematisches Diagramm die gemeinsame Benutzung von Registern zwischen den nebeneinanderliegenden Fenstern dar. Überlappende Fenster er möglichen eine Aufruffunktion, um Parameter zu einem Sender ohne zusätzliche Lade- und Speicheroperationen zu senden. Eine Aufruffunktion hat ein aktuelles Aufruffenster 1710, das "Ausgabe"-Register 1712 benutzt, um Parameter zu einem danebenliegenden aktuellen Empfängerfenster 1720 weiterzuleiten, wo die "INS"-Register 1722 Register für den Empfänger werden. Auf ähnliche Art und Weise kann der Empfänger beim Zurückkehren von einem Funktionsaufruf die Ergebnisse durch die "INS"-Register 1722 zurück geben, welche die "Ausgabe"-Register für den ursprünglichen Empfänger werden.
  • Die Diskussion von 16 beschrieb, wie Bitzellen von nebeneinanderliegenden Fenstern gemeinsam zwischen den Metalldrähten bleiben, welche für den Zugriff auf eine einzelne Zelle und zur Zuführung eines Fensterdekodierungssignales benutzt werden. Unter Benutzung desselben Konzepts für die "INS"- und "Ausgabe"-Register bestehen alle Bits für Inn von Fensterw alle in einem Punkt in der Schaltungsfläche fort. Bezüglich 17B zeigt ein schematisches Blockdiagramm eine Vierfensterregisterdatei, die einen Satz von vier Bits enthält, welche Daten für das Bit; des Registers INn des Fenstersw+1 enthält, was dasselbe ist als Bit; von Registerausgaben von Fensterw. Für einen besonderen Fensterzeiger, zum Beispiel Fenster0, sind zwei Bitzellen, welche die IN- und die OUT-Register darstellen, zugreifbar.
  • Bezüglich 18 stellt ein schematisches Schaltungsdiagramm eine Implementierung einer multidimensionalen Registerdatei 1300 dar, die Register enthält, welche durch eine Vielzahl von Fenstern gemeinsam benutzt werden. Eine beispielhafte Abspeicherung 1800 enthält Bitzellen 1810, welche Daten für die INi und OUTi-Register von Fensterj enthalten, wobei auf zwei Bitzellen gleichzeitig zugegriffen werden kann, indem immer zwei mögliche adressierte Zellen in dem Satz von acht Zellen für jede Fensterauswahl ausgewählt werden. Zum Beispiel wählt die Auswahl des aktuellen Fensterzeigers rcwp1 zwei Zellen aus, cc0 als mögliches IN-Register und ccl als ein mögliches OUT-Register. Der Inhalt der zwei Zellen cc0 und ccl wird auf getrennten lokalen Bussen ccIN und ccOUT ausgegeben. Die Auswahl der Daten für jeden Einleseanschluss des IN-Registers oder des OUT-Registers wird durch einen Decoder (nicht dargestellt) ausgeführt. Getrennte Leitungen versorgen die IN-Register und die OUT-Register, um das korrekte Register auszuwählen. Ein einzelner großer Puffer mit einem breiten Pulldown-Transistor ist in jedem Bus enthalten, um die Bitleitungen je nach Bedingung zu entladen.
  • Eine Schreibschaltung enthält eine spezielle Logik, um fehlerhaftes Überschreiben zwischen den IN-Registern und den OUT-Registern zu vermeiden. Die Logik 1820, welche das aktuelle Schreibfenster versorgt, ist ähnlich zu der Logik 1822, welche das aktuelle Lese fenster versorgt. Ein und nur ein aktueller Fensterzeiger (wcwp0, wcwp1, ..., wcwp7) wird benutzt und wählt zwei Zellen aus, eine IN-Bitzelle und eine OUT-Bitzelle. Signale, welche an den Schreibdecoderwert angelegt werden, bestimmen, ob entweder die Daten von der IN-Bitzelle oder der OUT-Bitzelle ausgegeben werden. Getrennte Signale wählen eine Schreiboperation für eine IN-Zelle (zum Beispiel wps0 in) und eine Schreiboperation für eine OUT-Zelle (zum Beispiel wps1_out) aus. Da eine Schreiboperation datenbeschädigend ist, wird eine Schreiboperation auf ein IN-Register unterbunden, um nicht das entsprechende OUT-Register zu korrumpieren und umgekehrt, was sogar dann auftreten könnte, wenn die Schreibdaten auf einen der zwei lokalen Schreibdatenbusse ausgegeben werden. Schreibdaten von einem Anschluss werden entweder zu dem IN-lokalen Bus oder zu dem OUT-lokalen Bus gesendet, aber nicht zu beiden. Die relativ große Kapazität der lokalen Busse könnte eventuell den Inhalt eines der Bitzellen überschreiben, da der Schreibfensterzeiger direkten Zugriff ermöglicht. Um die Potentialschreibstörung zu vermeiden, werden Pullup-Transistoren TPPU1, TPPU2, TPPU3 und TPPU4 benutzt, um die lokalen Schreibdatenleitungen von nicht-aktiven Anschlüssen vorzuspannen, welche wirksam als eine Lesestörung der Bitzelle mit einem geringen Einfluss auf die Spannungswerte wirken. Eine Zustand von zwei Schreibanschlüssen, welche versuchen, auf dasselbe IN-Register oder dasselbe OUT-Register zu schreiben, wird verhindert, da Multischreiboperationen auf dasselbe Zielregister nicht erlaubt sind.
  • Die multidimensionale Registerdatei 1300 hat viele vorteilhafte Charakteristika. Zum Beispiel eine Fähigkeit, um Parameter von Funktionsaufrufen und Funktionsaufrufrückgaben ohne die Notwendigkeit der Speicherung und Wiederherstellung der Daten durch den Stack-Speicher zu leiten, was die Leistung bedeutsam erhöht, da Lade- und Speicheroperationen oft ein Flaschenhals in modernen Hochleistungsprozessoren sind.
  • Die Kontext-Umschaltleistung des Prozessors 1200 wird durch kontext-umschaltbare Speicherstrukturen, wie eine Registerdatei mit "Fenstern", verbessert. Die Fenster unterstützen unterschiedliche "Kontexte" für Funktionsaufrufe. In einem Beispiel ist die Registerdatei mit Fenstern als eine multidimensionale Struktur mit "Ebenen" für ein schnelles Umschalten des Kontextes konfiguriert.
  • In herkömmlichen Prozessoren verbraucht der Datenarrayabschnitt ungefähr 2/3 der Gesamtfläche einer Registerdatei. Der Gebrauch der multidimensionalen Registerdatei 1300 reduziert mit Vorteil die Datenarraygröße um einen Faktor von 4 für eine Registerdatei mit acht Ebenen. Die insgesamt eingesparte Fläche hängt von verschiedenen Entwurfsmerkmalen ab, einschließlich: (1) differenziellem gegen single-ended Bitleseabtasten, (2) decodiertem gegen codiertem Ebenen-/Fenster-Routing und (3) differenziellem gegen single-ended Schreiben. Im Vergleich zu herkömmlichen "Einzelfenster"-Registerdateien werden multiple Kontexte erreicht im Wesentlichen ohne Kosten in Bezug auf die integrierte Schaltungsfläche, die eine multidimensionale Registerdatei 1300 in Schaltungen benutzt, wobei hier Leseanschluss- und Schreibanschluss-Verbindungen die Zellfläche der Register dominieren.
  • Zusätzlich zur starken Einsparung von Schaltungsfläche führt die multidimensionale Registerdatei 1300 mit Vorteil zu schnelleren Zugriffszeiten, die in der Hauptsache durch die Reduzierung der Gesamtkapazität auf den Bitleitungen erreicht werden. In einer herkömmlichen "Einzelfenster"-Implementierung verbindet nur eine Bitleitung ein Fenster im Vergleich zu allen Fenstern in der multidimensionalen Registerdatei 1300. Die multidimensionale Registerdatei 1300 führt zu einer reduzierten Gesamtfläche und kürzeren Bitleitungen, was die Kapazität reduziert. Ein Bitleitungstreiber kann infolge der Logik, welche von den Bitzellen gemeinsam benutzt wird, vergrößert werden, was die Bitleitungsentladung vergrößert. Zusätzlich führt das unabhängige Decodieren zwischen dem Fensterzeiger und dem Registerindex zu einem schnelleren Betrieb.
  • Die multidimensionale Registerdatei 1300 wird mit Vorteil für Prozessoren einschließlich Hochleistungs-Superskalarprozessoren als eine Registerdatei benutzt, wobei aber die angewandten Techniken und Strukturen ansonsten in anderen Typen von Speicherbauelementen benutzt werden können. Zum Beispiel können multidimensionale Speicherstrukturen ansonsten in verschiedenen VLIW-Speicherstrukturen, welche typischerweise viele Anschlüsse benutzen, und in Prozessoren implementiert werden, die schnell Kontext umschalten, welche verschiedene Kontexte durch eine einzige Struktur unterstützen.
  • Die beschriebene Prozessorstruktur und das Betriebsverfahren können in vielen strukturellen Variationen implementiert werden. Zum Beispiel werden zwei Prozessorkerne mit einem On-Chip-Set-assoziativen L2-Cache in einem System kombiniert. In einem anderen Beispiel werden vier Prozessorkerne mit einer direkten RAMBUS-Schnittstelle ohne externem L2-Cache kombiniert. Eine zahllose Anzahl von Variationen ist möglich. In manchen Systemen ist jeder Prozessorkern eine vertikal gethreadete Pipeline.
  • Während die Erfindung mit Bezug zu verschiedenen Ausführungsbeispielen beschrieben worden ist, ist es so zu verstehen, dass diese Ausführungsbeispiele nur erklärenden Charakter haben und dass der Bereich der Erfindung nicht durch sie begrenzt ist. Viele Variationen, Modifikationen, Hinzufügungen und Verbesserungen der beschriebenen Ausführungsbeispiele sind möglich. Zum Beispiel wird der Fachmann leicht die notwendigen Schritte imple mentieren können, um die hier offenbarten Strukturen und Verfahren zur Verfügung zu stellen und wird verstehen, dass die Prozessparameter, Materialien und Dimensionen nur als Beispiel angegeben wurden und verändert werden können, um die gewünschten Strukturen als auch Modifikationen zu erreichen, welche innerhalb dem Bereich der Erfindung liegen. Variationen und Modifikationen der Ausführungsbeispiele, die hier offenbart sind, können auf der hier fortgesetzten Beschreibung und dem Wissen und der Erfahrung des Fachmanns ohne den Bereich der Erfindung zu verlassen, so wie er in den folgenden Ansprüchen beschrieben ist, basieren. Zum Beispiel kann, obwohl die beispielhaften Prozessoren eine vorgegebene Anzahl von Threads pro Pipeline und eine vorgegebene Anzahl von Pipelines pro integriertem Schaltungschip enthalten, in Abhängigkeit von den gewünschten Prozessoranwendungen, Halbleiterherstellungstechniken und verschiedenen Größenparametern des Prozessors, in anderen Beispielen eine unterschiedliche Anzahl von Threads und Pipelines implementiert werden.
  • Die hier enthaltenen Beschreibungen beziehen sich auf viele Aspekte der Prozessorstruktur und der Verarbeitungstechniken, wobei diese strukturelle und funktionelle Aspekte von verschiedenen Prozessorkomponenten enthalten. Die Strukturen und Techniken sind so beschrieben, dass sie sehr nützlich in der Kombination sind. Jedoch sind auch verschiedene Strukturen und Techniken innovativ und sehr vorteilhaft, wenn sie alleine oder in vielen verschiedenen Unterkombinationen verwendet werden. Die Erfindung wird durch die Ansprüche allein abgegrenzt und verschiedene Begrenzungen, welche in der Beschreibung beschrieben sind, die aber nicht in einem besonderen Anspruch enthalten sind, sollen nicht als inhärenter Bestandteil des Anspruchs durch bloße Einbeziehung in die Beschreibung betrachtet werden.

Claims (17)

  1. Verfahren zum Betreiben eines Prozessors umfassend: Auswählen eines Threads unter einer Vielzahl von Execution-Threads (122, 124, 126, 128), wobei andere Threads nicht ausgewählte Threads sind; Aktivieren eines Maschinenzustandes (310, 312) für den ausgewählten Ausführungsthread in einer gemeinsam genutzten Pipeline (314); und Einfrieren der nicht ausgewählten Threads in der gemeinsam genutzten Pipeline ohne Ausführen derselben, dadurch gekennzeichnet, dass die gemeinsam genutzte Pipeline eine Vielzahl von auf Puls basierende Hochgeschwindigkeits-Vielfach-Bit- Flip-Flops (400) umfasst, die eine Vielzahl von Threadpfaden in im Wesentlichen dem gleichen Oberflächenbereich der integrierten Schaltung wie ein herkömmliches Ein-Bit-Flip-Flop erzeugen, um unter der Vielzahl der Execution-Threads auszuwählen.
  2. Verfahren nach Anspruch 1, ferner umfassend: Zuordnen einer Lade/Speichereinheit (316, 318) zu individuellen Threads der Vielzahl der Execution-Threads; und Zugreifen auf die zugeordneten Lade/Speichereinheiten entsprechend dem Execution-Thread.
  3. Verfahren nach entweder Anspruch 1 oder Anspruch 2 ferner umfassend: gemeinsames Nutzen einer Datenspeichereinheit (320) unter der Vielzahl der Execution-Threads.
  4. Verfahren nach einem der Ansprüche 1 bis 3 ferner umfassend: gemeinsames Nutzen einer Instruktions-Steuerlogik (330) unter der Vielzahl der Execution-Threads.
  5. Verfahren nach einem der Ansprüche 1 bis 4 ferner umfassend: gemeinsames Nutzen einer externen Cache-Steuereinheit (322) unter der Vielzahl der Execution-Threads.
  6. Verfahren zum Betreiben eines Prozessors nach einem der Ansprüche 1 bis 5 ferner umfassend: gleichzeitiges Laufenlassen von einer oder mehreren Programmanwendungen; Ausführen einer Vielzahl von Execution-Threads in einer Multithread-Pipeline, die eine Vielzahl von Multibit-Flip-Flops umfasst, die eine Vielzahl von Execution-Threads halten, wobei die Execution-Threads zum Ausführen ausgegebener Instruktionen für die Programmanwendungen dient; Umschalten der Execution-Threads in der Multithread-Pipeline umfassend: Einfrieren eines aktiven Zustands in der Pipeline; Aktivieren eines vorher freilaufenden Threads in der Pipeline, während der Zustand des neuerlich eingefrorenen Threads in der Pipeline erhalten wird; und danach wieder Aufnehmen der Ausführung des eingefrorenen Threads an dem präzisen Zustand des eingefrorenen Threads unmittelbar vor der Threadumschaltung.
  7. Verfahren zum Betreiben eines Prozessors nach einem der Ansprüche 1 bis 5 ferner umfassend: gleichzeitiges Laufenlassen von einer oder mehreren Programmanwendungen; Ausführen einer Vielzahl von Execution-Threads in einer Multithread-Pipeline, die eine Vielzahl von Multibit-Flip-Flops umfasst, die eine Vielzahl von Execution-Threads halten, wobei die Execution-Threads zum Ausführen ausgegebener Instruktionen für die Programmanwendungen dienen, wobei die Ausführungsoperation umfasst: gleichzeitiges Halten einer Vielzahl von Threads in der Multithread-Pipeline einschließlich einem aktiven Thread und einem oder mehreren inaktiven Threads; Empfangen einer Mitteilung eines Blockierzustandes; in Antwort auf den Empfang des Stall-Zustandes sofortiges Stalling des aktiven Threads einschließlich sofortiges Deaktivieren eines gegenwärtig aktiven Threads und Aktivieren eines gegenwärtig inaktiven Threads, während der Zustand der Threads in der Multithread-Pipeline der gleiche bleibt.
  8. Verfahren zum Betreiben eines Prozessors entsprechend einem der Ansprüche 1 bis 5 ferner umfassend: Laufenlassen einer non-threaded Programmanwendung; Ausführung des non-threaded Programms in einer Multithread-Pipeline, die eine Vielzahl von Multi-Bit-Flip-Flops umfasst, die in der Lage sind, eine Vielzahl von Execution-Threads zu halten; Umschalten von Kontext in einer schnellen Kontext Umschaltoperation umfassend: Ausführen eines ersten Kontexts in einem ersten Threadweg in der Multithread-Pipeline; Empfangen eines Ausnahme-Zustandsignals; In Antwort auf den Empfand des Ausnahme-Zustandssignals, sofortiges Blockieren des ersten Kontexts einschließlich sofortiges Deaktivieren des ersten Kontexts und Aktivieren eines Ausnahme-Handhabungskontexts, während der Zustand der Kontexts in der Multithread-Pipeline der gleiche bleibt.
  9. Verfahren nach Anspruch 8, worin der Ausnahme-Handhabungskontext ohne Betriebssystem Strafe aktiviert wird.
  10. Verfahren nach Anspruch 8, worin: der Ausnahme-Handhabungskontext in Hardware aktiviert wird, ohne dass eine Betriebssystem-Geschwindigkeitsstrafe der Softwarespeicher-/Wiederherstellungsoperationen in Kauf genommen wird.
  11. Verfahren nach einem der Ansprüche 1 bis 10 worin: die Multithread-Pipeline eine Vielzahl von auf Puls basierende Hochgeschwindigkeits-Flip-Flops (400) aufweist, wobei die auf Puls basierenden Hochgeschwindigkeits-Flip-Flops einen Latchstruktur haben, die mit einer Vielzahl von Auswahl-Busleitungen gekoppelt sind, wobei die Auswahl-Busleitungen einen aktiven Thread aus der Vielzahl der Execution-Threads auswählen.
  12. Verfahren nach einem der Ansprüche 1 bis 11, worin das Ausführen eines Execution-Threads in der Multithread-Pipeline umfasst: Speichern von Daten in den auf Puls basierenden Hochgeschwindigkeits-Flip-Flops; und Auswählen eines aktiven Threads aus der Vielzahl der Execution-Threads unter Verwendung der Auswahl-Busleitungen.
  13. Verfahren nach einem der Ansprüche 1 bis 12 ferner umfassend: Detektieren eines Cache-Fehltreffers; Erzeugen eines Cache-Fehltreffer-Blockiersignals in Antwort auf eine Cache-Fehltreffer-Blockierung; und Einfrieren eines aktiven Zustandes in der Pipeline in Antwort auf das Cache-Fehltreffer-Blockiersignal.
  14. Verfahren nach einem der Ansprüche 1 bis 13 ferner umfassend: der Reihenfolge entsprechendes Ausgeben von Instruktionen für die Programmanwendungen.
  15. Verfahren nach einem der Ansprüche 1 bis 14 ferner umfassend: der Reihe nach Ausgeben von Instruktionen für die Programmanwendungen; und separates und unabhängiges Managen eines Maschinenzustandes der individuellen Execution-Threads.
  16. Verfahren nach einem der Ansprüche 1 bis 15 ferner umfassend: Laden von Daten von einem Speicher und Speichern von Daten in einen Speicher über eine Vielzahl von Lade-/Speichereinheiten, die individuell in individuellen Threads in der Multithread-Pipeline zugeordnet sind.
  17. Verfahren nach einem der Ansprüche 1 bis 16 ferner umfassend: gleichzeitiges Ausführen einer Vielzahl von Execution-Threads in einer Vielzahl von Multithread-Pipelines, so dass der Prozessor die eine oder die mehreren Programmanwendungen mit einem vertikalen Threadverfahren und einem horizontalen Threadverfahren ausführt.
DE60002200T 1999-05-11 2000-05-10 Umschaltungsverfahren in einem multithreadprozessor Expired - Lifetime DE60002200T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/309,735 US6507862B1 (en) 1999-05-11 1999-05-11 Switching method in a multi-threaded processor
US309735 1999-05-11
PCT/US2000/013094 WO2000068781A2 (en) 1999-05-11 2000-05-10 Switching method in a multi-threaded processor

Publications (2)

Publication Number Publication Date
DE60002200D1 DE60002200D1 (de) 2003-05-22
DE60002200T2 true DE60002200T2 (de) 2004-04-01

Family

ID=23199454

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60002200T Expired - Lifetime DE60002200T2 (de) 1999-05-11 2000-05-10 Umschaltungsverfahren in einem multithreadprozessor

Country Status (4)

Country Link
US (3) US6507862B1 (de)
EP (1) EP1185929B1 (de)
DE (1) DE60002200T2 (de)
WO (1) WO2000068781A2 (de)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11615084B1 (en) 2018-10-31 2023-03-28 Splunk Inc. Unified data processing across streaming and indexed data sets
US11614923B2 (en) 2020-04-30 2023-03-28 Splunk Inc. Dual textual/graphical programming interfaces for streaming data processing pipelines
US11636116B2 (en) 2021-01-29 2023-04-25 Splunk Inc. User interface for customizing data streams
US11645286B2 (en) 2018-01-31 2023-05-09 Splunk Inc. Dynamic data processor for streaming and batch queries
US11663219B1 (en) 2021-04-23 2023-05-30 Splunk Inc. Determining a set of parameter values for a processing pipeline
US11687487B1 (en) * 2021-03-11 2023-06-27 Splunk Inc. Text files updates to an active processing pipeline
US11727039B2 (en) 2017-09-25 2023-08-15 Splunk Inc. Low-latency streaming analytics
US11886440B1 (en) 2019-07-16 2024-01-30 Splunk Inc. Guided creation interface for streaming data processing pipelines

Families Citing this family (130)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6385715B1 (en) * 1996-11-13 2002-05-07 Intel Corporation Multi-threading for a processor utilizing a replay queue
US6826749B2 (en) * 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
US6542991B1 (en) * 1999-05-11 2003-04-01 Sun Microsystems, Inc. Multiple-thread processor with single-thread interface shared among threads
US6507862B1 (en) * 1999-05-11 2003-01-14 Sun Microsystems, Inc. Switching method in a multi-threaded processor
US6668317B1 (en) * 1999-08-31 2003-12-23 Intel Corporation Microengine for parallel processor architecture
US6983350B1 (en) 1999-08-31 2006-01-03 Intel Corporation SDRAM controller for parallel processor architecture
US6532509B1 (en) 1999-12-22 2003-03-11 Intel Corporation Arbitrating command requests in a parallel multi-threaded processing system
US6694380B1 (en) 1999-12-27 2004-02-17 Intel Corporation Mapping requests from a processing unit that uses memory-mapped input-output space
US6661794B1 (en) * 1999-12-29 2003-12-09 Intel Corporation Method and apparatus for gigabit packet assignment for multithreaded packet processing
US6931641B1 (en) 2000-04-04 2005-08-16 International Business Machines Corporation Controller for multiple instruction thread processors
US7140018B1 (en) * 2000-06-20 2006-11-21 International Business Machines Corporation Method of using a distinct flow of computational control as a reusable abstract data object
US6420903B1 (en) * 2000-08-14 2002-07-16 Sun Microsystems, Inc. High speed multiple-bit flip-flop
US6920515B2 (en) * 2001-03-29 2005-07-19 Intel Corporation Early exception detection
US7320065B2 (en) * 2001-04-26 2008-01-15 Eleven Engineering Incorporated Multithread embedded processor with input/output capability
US20020184290A1 (en) * 2001-05-31 2002-12-05 International Business Machines Corporation Run queue optimization with hardware multithreading for affinity
US7752423B2 (en) * 2001-06-28 2010-07-06 Intel Corporation Avoiding execution of instructions in a second processor by committing results obtained from speculative execution of the instructions in a first processor
US20030097541A1 (en) * 2001-11-19 2003-05-22 Abrosimov Igor Anatolievich Latency tolerant processing equipment
US20030225816A1 (en) * 2002-06-03 2003-12-04 Morrow Michael W. Architecture to support multiple concurrent threads of execution on an arm-compatible processor
US7471688B2 (en) * 2002-06-18 2008-12-30 Intel Corporation Scheduling system for transmission of cells to ATM virtual circuits and DSL ports
US20040034759A1 (en) * 2002-08-16 2004-02-19 Lexra, Inc. Multi-threaded pipeline with context issue rules
US7577816B2 (en) * 2003-08-18 2009-08-18 Cray Inc. Remote translation mechanism for a multinode system
US8176298B2 (en) 2002-10-08 2012-05-08 Netlogic Microsystems, Inc. Multi-core multi-threaded processing systems with instruction reordering in an in-order pipeline
US7924828B2 (en) * 2002-10-08 2011-04-12 Netlogic Microsystems, Inc. Advanced processor with mechanism for fast packet queuing operations
US7346757B2 (en) * 2002-10-08 2008-03-18 Rmi Corporation Advanced processor translation lookaside buffer management in a multithreaded system
US7961723B2 (en) * 2002-10-08 2011-06-14 Netlogic Microsystems, Inc. Advanced processor with mechanism for enforcing ordering between information sent on two independent networks
US7984268B2 (en) * 2002-10-08 2011-07-19 Netlogic Microsystems, Inc. Advanced processor scheduling in a multithreaded system
US9088474B2 (en) * 2002-10-08 2015-07-21 Broadcom Corporation Advanced processor with interfacing messaging network to a CPU
US8478811B2 (en) * 2002-10-08 2013-07-02 Netlogic Microsystems, Inc. Advanced processor with credit based scheme for optimal packet flow in a multi-processor system on a chip
US20050033889A1 (en) * 2002-10-08 2005-02-10 Hass David T. Advanced processor with interrupt delivery mechanism for multi-threaded multi-CPU system on a chip
US20050044324A1 (en) * 2002-10-08 2005-02-24 Abbas Rashid Advanced processor with mechanism for maximizing resource usage in an in-order pipeline with multiple threads
US7627721B2 (en) * 2002-10-08 2009-12-01 Rmi Corporation Advanced processor with cache coherency
US8037224B2 (en) 2002-10-08 2011-10-11 Netlogic Microsystems, Inc. Delegating network processor operations to star topology serial bus interfaces
US20040103248A1 (en) * 2002-10-08 2004-05-27 Hass David T. Advanced telecommunications processor
US7461213B2 (en) * 2002-10-08 2008-12-02 Rmi Corporation Advanced processor system using request, data, snoop, and response rings
US7334086B2 (en) * 2002-10-08 2008-02-19 Rmi Corporation Advanced processor with system on a chip interconnect technology
US8015567B2 (en) 2002-10-08 2011-09-06 Netlogic Microsystems, Inc. Advanced processor with mechanism for packet distribution at high line rate
US7433307B2 (en) * 2002-11-05 2008-10-07 Intel Corporation Flow control in a network environment
US7310710B1 (en) * 2003-03-11 2007-12-18 Marvell International Ltd. Register file with integrated routing to execution units for multi-threaded processors
US6981113B2 (en) * 2003-04-21 2005-12-27 Intel Corporation Storage registers for a processor pipeline
US7441245B2 (en) * 2003-08-14 2008-10-21 Intel Corporation Phasing for a multi-threaded network processor
US7735088B1 (en) * 2003-08-18 2010-06-08 Cray Inc. Scheduling synchronization of programs running as streams on multiple processors
US8307194B1 (en) 2003-08-18 2012-11-06 Cray Inc. Relaxed memory consistency model
US7743223B2 (en) 2003-08-18 2010-06-22 Cray Inc. Decoupling of write address from its associated write data in a store to a shared memory in a multiprocessor system
US7614056B1 (en) 2003-09-12 2009-11-03 Sun Microsystems, Inc. Processor specific dispatching in a heterogeneous configuration
DE10353268B3 (de) * 2003-11-14 2005-07-28 Infineon Technologies Ag Paralleler Multithread-Prozessor (PMT) mit geteilten Kontexten
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
US20050132363A1 (en) * 2003-12-16 2005-06-16 Vijay Tewari Method, apparatus and system for optimizing context switching between virtual machines
US7206922B1 (en) * 2003-12-30 2007-04-17 Cisco Systems, Inc. Instruction memory hierarchy for an embedded processor
US7263599B2 (en) * 2004-02-06 2007-08-28 Infineon Technologies Thread ID in a multithreaded processor
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
US7702887B1 (en) 2004-06-30 2010-04-20 Sun Microsystems, Inc. Performance instrumentation in a fine grain multithreaded multicore processor
US7861063B1 (en) 2004-06-30 2010-12-28 Oracle America, Inc. Delay slot handling in a processor
US7890734B2 (en) 2004-06-30 2011-02-15 Open Computing Trust I & II Mechanism for selecting instructions for execution in a multithreaded processor
US7185178B1 (en) 2004-06-30 2007-02-27 Sun Microsystems, Inc. Fetch speculation in a multithreaded processor
US7330988B2 (en) * 2004-06-30 2008-02-12 Sun Microsystems, Inc. Method and apparatus for power throttling in a multi-thread processor
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
US7401206B2 (en) * 2004-06-30 2008-07-15 Sun Microsystems, Inc. Apparatus and method for fine-grained multithreading in a multipipelined processor core
US7941642B1 (en) 2004-06-30 2011-05-10 Oracle America, Inc. Method for selecting between divide instructions associated with respective threads in a multi-threaded processor
US7216216B1 (en) 2004-06-30 2007-05-08 Sun Microsystems, Inc. Register window management using first pipeline to change current window and second pipeline to read operand from old window and write operand to new window
US7747771B1 (en) 2004-06-30 2010-06-29 Oracle America, Inc. Register access protocol in a multihreaded multi-core processor
US8225034B1 (en) 2004-06-30 2012-07-17 Oracle America, Inc. Hybrid instruction buffer
US7370243B1 (en) 2004-06-30 2008-05-06 Sun Microsystems, Inc. Precise error handling in a fine grain multithreaded multicore processor
US7523330B2 (en) * 2004-06-30 2009-04-21 Sun Microsystems, Inc. Thread-based clock enabling in a multi-threaded processor
US7478225B1 (en) 2004-06-30 2009-01-13 Sun Microsystems, Inc. Apparatus and method to support pipelining of differing-latency instructions in a multithreaded processor
US8095778B1 (en) 2004-06-30 2012-01-10 Open Computing Trust I & II Method and system for sharing functional units of a multithreaded processor
US7533248B1 (en) 2004-06-30 2009-05-12 Sun Microsystems, Inc. Multithreaded processor including a functional unit shared between multiple requestors and arbitration therefor
US7426630B1 (en) 2004-06-30 2008-09-16 Sun Microsystems, Inc. Arbitration of window swap operations
US7676655B2 (en) * 2004-06-30 2010-03-09 Sun Microsystems, Inc. Single bit control of threads in a multithreaded multicore processor
US7434000B1 (en) 2004-06-30 2008-10-07 Sun Microsystems, Inc. Handling duplicate cache misses in a multithreaded/multi-core processor
US7343474B1 (en) 2004-06-30 2008-03-11 Sun Microsystems, Inc. Minimal address state in a fine grain multithreaded processor
US7178005B1 (en) 2004-06-30 2007-02-13 Sun Microsystems, Inc. Efficient implementation of timers in a multithreaded processor
US7774393B1 (en) 2004-06-30 2010-08-10 Oracle America, Inc. Apparatus and method for integer to floating-point format conversion
US7353364B1 (en) 2004-06-30 2008-04-01 Sun Microsystems, Inc. Apparatus and method for sharing a functional unit execution resource among a plurality of functional units
US7437538B1 (en) 2004-06-30 2008-10-14 Sun Microsystems, Inc. Apparatus and method for reducing execution latency of floating point operations having special case operands
US7373489B1 (en) 2004-06-30 2008-05-13 Sun Microsystems, Inc. Apparatus and method for floating-point exception prediction and recovery
US7383403B1 (en) 2004-06-30 2008-06-03 Sun Microsystems, Inc. Concurrent bypass to instruction buffers in a fine grain multithreaded processor
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
US7634774B2 (en) * 2004-09-13 2009-12-15 Integrated Device Technology, Inc. System and method of scheduling computing threads
US7827555B2 (en) * 2004-09-13 2010-11-02 Integrated Device Technology, Inc. Scheduler for a multiprocessing computing system
US7765547B2 (en) 2004-11-24 2010-07-27 Maxim Integrated Products, Inc. Hardware multithreading systems with state registers having thread profiling data
US8037250B1 (en) 2004-12-09 2011-10-11 Oracle America, Inc. Arbitrating cache misses in a multithreaded/multi-core processor
US9606821B2 (en) * 2004-12-17 2017-03-28 Intel Corporation Virtual environment manager for creating and managing virtual machine environments
US7937709B2 (en) * 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
DE102005009083B4 (de) * 2005-02-28 2007-05-10 Infineon Technologies Ag Multithread-Prozessor mit einer Synchronisationseinheit und Verfahren zum Betreiben eines solchen
US7882505B2 (en) * 2005-03-25 2011-02-01 Oracle America, Inc. Method and apparatus for switching between per-thread and per-processor resource pools in multi-threaded programs
US20080134196A1 (en) * 2005-05-19 2008-06-05 Intel Corporation Apparatus, System, and Method of a Memory Arrangement for Speculative Multithreading
US7308565B2 (en) * 2005-06-15 2007-12-11 Seiko Epson Corporation Saving/restoring task state data from/to device controller host interface upon command from host processor to handle task interruptions
US7398371B2 (en) * 2005-06-23 2008-07-08 Qualcomm Incorporated Shared translation look-aside buffer and method
US20070014240A1 (en) * 2005-07-12 2007-01-18 Alok Kumar Using locks to coordinate processing of packets in a flow
US7823158B2 (en) * 2005-08-18 2010-10-26 International Business Machines Corporation Adaptive scheduling and management of work processing in a target context in resource contention
US20070101325A1 (en) * 2005-10-19 2007-05-03 Juraj Bystricky System and method for utilizing a remote memory to perform an interface save/restore procedure
US7502913B2 (en) * 2006-06-16 2009-03-10 Microsoft Corporation Switch prefetch in a multicore computer chip
US7454596B2 (en) * 2006-06-29 2008-11-18 Intel Corporation Method and apparatus for partitioned pipelined fetching of multiple execution threads
US7952184B2 (en) * 2006-08-31 2011-05-31 Micron Technology, Inc. Distributed semiconductor device methods, apparatus, and systems
US7754532B2 (en) 2006-10-19 2010-07-13 Micron Technology, Inc. High density chip packages, methods of forming, and systems including same
US7493436B2 (en) * 2006-10-26 2009-02-17 International Business Machines Corporation Interrupt handling using simultaneous multi-threading
US20080229026A1 (en) * 2007-03-15 2008-09-18 Taiwan Semiconductor Manufacturing Co., Ltd. System and method for concurrently checking availability of data in extending memories
US7958323B1 (en) 2007-05-09 2011-06-07 Marvell Israel (M.I.S.L.) Ltd. Multithreading implementation for flops and register files
EP2159690A4 (de) * 2007-06-20 2010-09-01 Fujitsu Ltd Informationsverarbeitungseinheit und verfahren zum steuern eines registers
US8250254B2 (en) * 2007-07-31 2012-08-21 Intel Corporation Offloading input/output (I/O) virtualization operations to a processor
US8261284B2 (en) * 2007-09-13 2012-09-04 Microsoft Corporation Fast context switching using virtual cpus
US8131941B2 (en) * 2007-09-21 2012-03-06 Mips Technologies, Inc. Support for multiple coherence domains
US20090089510A1 (en) * 2007-09-28 2009-04-02 Mips Technologies, Inc. Speculative read in a cache coherent microprocessor
US8392663B2 (en) * 2007-12-12 2013-03-05 Mips Technologies, Inc. Coherent instruction cache utilizing cache-op execution resources
US20090165004A1 (en) * 2007-12-21 2009-06-25 Jaideep Moses Resource-aware application scheduling
US9596324B2 (en) * 2008-02-08 2017-03-14 Broadcom Corporation System and method for parsing and allocating a plurality of packets to processor core threads
US20090248988A1 (en) * 2008-03-28 2009-10-01 Mips Technologies, Inc. Mechanism for maintaining consistency of data written by io devices
US7921195B2 (en) * 2008-06-09 2011-04-05 International Business Machines Corporation Optimizing service processing based on business information, operational intelligence, and self-learning
WO2010025074A1 (en) * 2008-08-28 2010-03-04 Sandbridge Technologies, Inc. Latch-based implementation of a register file for a multi-threaded processor
US20100115494A1 (en) * 2008-11-03 2010-05-06 Gorton Jr Richard C System for dynamic program profiling
US8024719B2 (en) 2008-11-03 2011-09-20 Advanced Micro Devices, Inc. Bounded hash table sorting in a dynamic program profiling system
US8478948B2 (en) * 2008-12-04 2013-07-02 Oracle America, Inc. Method and system for efficient tracing and profiling of memory accesses during program execution
US8386753B2 (en) * 2009-04-14 2013-02-26 International Business Machines Corporation Completion arbitration for more than two threads based on resource limitations
US8397088B1 (en) 2009-07-21 2013-03-12 The Research Foundation Of State University Of New York Apparatus and method for efficient estimation of the energy dissipation of processor based systems
JP5636109B2 (ja) 2010-08-23 2014-12-03 エンパイア テクノロジー ディベロップメント エルエルシー コンテキスト切り替え
US8869167B2 (en) 2011-05-19 2014-10-21 International Business Machines Corporation Application hibernation
US8966232B2 (en) * 2012-02-10 2015-02-24 Freescale Semiconductor, Inc. Data processing system operable in single and multi-thread modes and having multiple caches and method of operation
US9063906B2 (en) * 2012-09-27 2015-06-23 International Business Machines Corporation Thread sparing between cores in a multi-threaded processor
US9336057B2 (en) * 2012-12-21 2016-05-10 Microsoft Technology Licensing, Llc Assigning jobs to heterogeneous processing modules
CN104657204B (zh) * 2013-11-22 2018-05-04 华为技术有限公司 短任务处理方法、装置及操作系统
CN104899093B (zh) * 2014-03-04 2018-06-05 华为技术有限公司 数据处理方法、装置和系统
US9552223B2 (en) * 2014-09-30 2017-01-24 International Business Machines Corporation Post-return asynchronous code execution
US9996354B2 (en) * 2015-01-09 2018-06-12 International Business Machines Corporation Instruction stream tracing of multi-threaded processors
JP5996691B2 (ja) * 2015-02-19 2016-09-21 株式会社シミュラティオ ファイル転送方法及びファイル転送プログラム
US10318356B2 (en) 2016-03-31 2019-06-11 International Business Machines Corporation Operation of a multi-slice processor implementing a hardware level transfer of an execution thread
US10706101B2 (en) 2016-04-14 2020-07-07 Advanced Micro Devices, Inc. Bucketized hash tables with remap entries
CN106844029B (zh) * 2017-01-19 2020-06-30 努比亚技术有限公司 一种自管理的Android进程冻结和解冻的装置及方法
US10325341B2 (en) * 2017-04-21 2019-06-18 Intel Corporation Handling pipeline submissions across many compute units
US10229061B2 (en) 2017-07-14 2019-03-12 International Business Machines Corporation Method and arrangement for saving cache power

Family Cites Families (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3728692A (en) * 1971-08-31 1973-04-17 Ibm Instruction selection in a two-program counter instruction unit
JPH06105460B2 (ja) 1988-06-07 1994-12-21 富士通株式会社 マルチプロセッサのプロセッサ切換え装置
GB2234613B (en) 1989-08-03 1993-07-07 Sun Microsystems Inc Method and apparatus for switching context of state elements in a microprocessor
US5255211A (en) 1990-02-22 1993-10-19 Redmond Productions, Inc. Methods and apparatus for generating and processing synthetic and absolute real time environments
US5452452A (en) 1990-06-11 1995-09-19 Cray Research, Inc. System having integrated dispatcher for self scheduling processors to execute multiple types of processes
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
JP2823767B2 (ja) * 1992-02-03 1998-11-11 松下電器産業株式会社 レジスタファイル
US5404469A (en) * 1992-02-25 1995-04-04 Industrial Technology Research Institute Multi-threaded microprocessor architecture utilizing static interleaving
US5442756A (en) * 1992-07-31 1995-08-15 Intel Corporation Branch prediction and resolution apparatus for a superscalar computer processor
GB9223226D0 (en) 1992-11-05 1992-12-16 Algotronix Ltd Improved configurable cellular array (cal ii)
US5684993A (en) * 1993-01-04 1997-11-04 Microsoft Corporation Segregation of thread-specific information from shared task information
JP2748822B2 (ja) * 1993-07-05 1998-05-13 日本電気株式会社 情報処理装置
US5584023A (en) 1993-12-27 1996-12-10 Hsu; Mike S. C. Computer system including a transparent and secure file transform mechanism
JP3676411B2 (ja) 1994-01-21 2005-07-27 サン・マイクロシステムズ・インコーポレイテッド レジスタファイル装置及びレジスタファイルアクセス方法
US5742806A (en) 1994-01-31 1998-04-21 Sun Microsystems, Inc. Apparatus and method for decomposing database queries for database management system including multiprocessor digital data processing system
US5692193A (en) 1994-03-31 1997-11-25 Nec Research Institute, Inc. Software architecture for control of highly parallel computer systems
US5761285A (en) 1994-06-01 1998-06-02 Davox Corporation Universal telephony application client that is configurable from a profile for a telphone call campaign
JP2677202B2 (ja) * 1994-08-12 1997-11-17 日本電気株式会社 マイクロプロセッサ
JP3569014B2 (ja) * 1994-11-25 2004-09-22 富士通株式会社 マルチコンテキストをサポートするプロセッサおよび処理方法
US5752027A (en) 1994-11-30 1998-05-12 Dun & Bradstreet Software Services, Inc. Apparatus and process for creating and accessing a database centric object
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
EP0729097A1 (de) * 1995-02-07 1996-08-28 Sun Microsystems, Inc. Verfahren und Vorrichtung zur Überwachung der Speicherzugriffe eines Vielfadenprogramms
US5704054A (en) * 1995-05-09 1997-12-30 Yale University Counterflow pipeline processor architecture for semi-custom application specific IC's
JPH08320797A (ja) * 1995-05-24 1996-12-03 Fuji Xerox Co Ltd プログラム制御システム
US5828880A (en) * 1995-07-06 1998-10-27 Sun Microsystems, Inc. Pipeline system and method for multiprocessor applications in which each of a plurality of threads execute all steps of a process characterized by normal and parallel steps on a respective datum
JP3661235B2 (ja) * 1995-08-28 2005-06-15 株式会社日立製作所 共有メモリシステム、並列型処理装置並びにメモリlsi
US5860138A (en) * 1995-10-02 1999-01-12 International Business Machines Corporation Processor with compiler-allocated, variable length intermediate storage
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
JP3348367B2 (ja) * 1995-12-06 2002-11-20 富士通株式会社 多重アクセス方法および多重アクセスキャッシュメモリ装置
US5809415A (en) 1995-12-11 1998-09-15 Unwired Planet, Inc. Method and architecture for an interactive two-way data communication network
US5778247A (en) 1996-03-06 1998-07-07 Sun Microsystems, Inc. Multi-pipeline microprocessor with data precision mode indicator
US6148395A (en) * 1996-05-17 2000-11-14 Texas Instruments Incorporated Shared floating-point unit in a single chip multiprocessor
US5881277A (en) * 1996-06-13 1999-03-09 Texas Instruments Incorporated Pipelined microprocessor with branch misprediction cache circuits, systems and methods
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
JP3139392B2 (ja) * 1996-10-11 2001-02-26 日本電気株式会社 並列処理システム
US5887166A (en) * 1996-12-16 1999-03-23 International Business Machines Corporation Method and system for constructing a program including a navigation instruction
US5913925A (en) * 1996-12-16 1999-06-22 International Business Machines Corporation Method and system for constructing a program including out-of-order threads and processor and method for executing threads out-of-order
US6463527B1 (en) * 1997-03-21 2002-10-08 Uzi Y. Vishkin Spawn-join instruction set architecture for providing explicit multithreading
US5875461A (en) * 1997-04-03 1999-02-23 Sun Microsystems, Inc. Method of synchronizing one of the objects with one of the threads at a time
US6058466A (en) * 1997-06-24 2000-05-02 Sun Microsystems, Inc. System for allocation of execution resources amongst multiple executing processes
US5890008A (en) * 1997-06-25 1999-03-30 Sun Microsystems, Inc. Method for dynamically reconfiguring a processor
US6076157A (en) 1997-10-23 2000-06-13 International Business Machines Corporation Method and apparatus to force a thread switch in a multithreaded processor
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
US6061710A (en) * 1997-10-29 2000-05-09 International Business Machines Corporation Multithreaded processor incorporating a thread latch register for interrupt service new pending threads
US6298431B1 (en) * 1997-12-31 2001-10-02 Intel Corporation Banked shadowed register file
US6205519B1 (en) * 1998-05-27 2001-03-20 Hewlett Packard Company Cache management for a multi-threaded processor
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
US6420903B1 (en) * 2000-08-14 2002-07-16 Sun Microsystems, Inc. High speed multiple-bit flip-flop

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11727039B2 (en) 2017-09-25 2023-08-15 Splunk Inc. Low-latency streaming analytics
US11645286B2 (en) 2018-01-31 2023-05-09 Splunk Inc. Dynamic data processor for streaming and batch queries
US11615084B1 (en) 2018-10-31 2023-03-28 Splunk Inc. Unified data processing across streaming and indexed data sets
US11886440B1 (en) 2019-07-16 2024-01-30 Splunk Inc. Guided creation interface for streaming data processing pipelines
US11614923B2 (en) 2020-04-30 2023-03-28 Splunk Inc. Dual textual/graphical programming interfaces for streaming data processing pipelines
US11636116B2 (en) 2021-01-29 2023-04-25 Splunk Inc. User interface for customizing data streams
US11650995B2 (en) 2021-01-29 2023-05-16 Splunk Inc. User defined data stream for routing data to a data destination based on a data route
US11687487B1 (en) * 2021-03-11 2023-06-27 Splunk Inc. Text files updates to an active processing pipeline
US11663219B1 (en) 2021-04-23 2023-05-30 Splunk Inc. Determining a set of parameter values for a processing pipeline

Also Published As

Publication number Publication date
WO2000068781A3 (en) 2001-07-19
WO2000068781B1 (en) 2002-04-18
US20040162971A1 (en) 2004-08-19
US6694347B2 (en) 2004-02-17
US7316021B2 (en) 2008-01-01
EP1185929A2 (de) 2002-03-13
WO2000068781A2 (en) 2000-11-16
DE60002200D1 (de) 2003-05-22
WO2000068781A9 (en) 2002-05-16
US20020078122A1 (en) 2002-06-20
EP1185929B1 (de) 2003-04-16
US6507862B1 (en) 2003-01-14

Similar Documents

Publication Publication Date Title
DE60002200T2 (de) Umschaltungsverfahren in einem multithreadprozessor
DE60005701T2 (de) Threadumschaltungslogik in einem multithreadprozessor
DE60005002T2 (de) Vertikal-threaded prozessor mit multidimensionalem speicher
DE60013115T2 (de) Prozessor mit vertikal-threaded pipeline mit mehreren thread und betriebsverfahren dafür
US7185185B2 (en) Multiple-thread processor with in-pipeline, thread selectable storage
DE60038693T2 (de) Verfahren und vorrichtung zur ausschaltung eines taktsignals in einem vielfadenprozessor
DE69727773T2 (de) Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor
DE60036016T2 (de) Schnell multithreading für eng gekoppelte multiprozessoren
DE112017000721T5 (de) Verfahren, einrichtung und befehle für thread-aussetzung auf benutzerebene
DE102010034555A1 (de) Bereitstellen von Zustandsspeicher in einem Prozessor für Systemmanagement-Modus
DE10045188B4 (de) Cacheadresskonfliktvorrichtung
DE102012216567A1 (de) Verwalten eines register-cachespeichers auf grundlage eines architekturdefinierten computeranweisungssatzes
DE112012007115T5 (de) Wahlweise Logikprozessor-Zählung und Typauswahl für eine gegebene Arbeitsbelastung basierend auf Wärme- und Leistungsbudget-Einschränkungen der Plattform
DE112013005368T5 (de) Prozessoren, verfahren und systeme für echtzeit-befehlsverfolgung
DE102020132893A1 (de) Vorrichtungen, verfahren und systeme für einen duplikationsbeständigen on-die-prefetcher für unregelmässige daten
US20030014612A1 (en) Multi-threaded processor by multiple-bit flip-flop global substitution
DE102021129313B4 (de) Flächen- und energieeffizienter mechanismus zum aufwecken speicherabhängiger ladevorgänge durch zusammenführungen beim abarbeiten von speichervorgängen
DE102020127707A1 (de) Hochleistungs-synchronisierungsmechanismen zur koordinierung von operationen auf einem computersystem

Legal Events

Date Code Title Description
8364 No opposition during term of opposition