DE112013003731T5 - Neue befehls- und hocheffiziente Mikroarchitektur zum ermöglichen einer sofortigen Kontextumschaltung für Benutzerebenen-Threading - Google Patents

Neue befehls- und hocheffiziente Mikroarchitektur zum ermöglichen einer sofortigen Kontextumschaltung für Benutzerebenen-Threading Download PDF

Info

Publication number
DE112013003731T5
DE112013003731T5 DE112013003731.9T DE112013003731T DE112013003731T5 DE 112013003731 T5 DE112013003731 T5 DE 112013003731T5 DE 112013003731 T DE112013003731 T DE 112013003731T DE 112013003731 T5 DE112013003731 T5 DE 112013003731T5
Authority
DE
Germany
Prior art keywords
context
processor
bank
thread
banks
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.)
Pending
Application number
DE112013003731.9T
Other languages
English (en)
Inventor
Doron Orenstein
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE112013003731T5 publication Critical patent/DE112013003731T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order 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 or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • 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 or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • 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/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • 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/466Transaction processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Ein Prozessor verwendet mehrere Banken eines erweiterten Registersatzes zum Speichern der Kontexte von mehreren Benutzerebenen-Threads. Ein aktuelles Bankregister stellt einen Zeiger auf die Bank, die aktuell aktiv ist, bereit. Ein erster Thread sichert seinen Kontext (ersten Kontext) in einer ersten Bank des erweiterten Registersatzes, und ein zweiter Thread sichert seinen Kontext (zweiten Kontext) in einer zweiten Bank des erweiterten Registersatzes. Wenn der Prozessor einen Befehl zum Wechseln von Kontexten zwischen dem ersten Thread und dem zweiten Thread empfängt, wechselt der Prozessor den Zeiger von der ersten Bank zu der zweiten Bank und führt den zweiten Thread unter Verwendung des zweiten Kontextes aus, der in der zweiten Bank gespeichert ist.

Description

  • Technisches Gebiet
  • Die vorliegende Offenlegung betrifft das Gebiet der Verarbeitungslogik, Mikroprozessoren und dazugehörigen Befehlssatzarchitektur, die, wenn sie von dem Prozessor oder einer anderen Verarbeitungslogik ausgeführt wird, logische, mathematische oder andere funktionale Operationen durchführt.
  • Hintergrund
  • Ein Befehlssatz oder eine Befehlssatzarchitektur (instruction set architecture – ISA) ist der Teil der Computerarchitektur, der das Programmieren betrifft, und kann die nativen Datentypen, Befehle, Registerarchitektur, Adressiermodi, Speicherarchitektur, Interrupt- und Ausnahmebehandlung und externen Eingang und Ausgang (I/O) umfassen. Der Ausdruck Befehl bezieht sich hier generell auf Makrobefehle – das heißt, Befehle, die dem Prozessor (oder dem Befehlsumwandler, der (z. B. unter Anwendung einer statischen binären Übersetzung, einer dynamischen binären Übersetzung, einschließlich einer dynamischer Kompilation) einen Befehl in einen oder mehrere Befehle, die von dem Prozessor zu verarbeiten sind, übersetzt, morpht, emuliert oder anderweitig, umwandelt) zur Ausführung bereitgestellt werden – im Gegensatz zu Mikrobefehlen oder Mikrooperationen (Mikro-Ops) – die das Ergebnis der Dekodierung von Makrobefehlen durch einen Dekodierer des Prozessors sind.
  • Die ISA unterscheidet sich von der Mikroarchitektur, die die interne Auslegung des Prozessors ist, der den Befehlssatz implementiert. Prozessoren mit unterschiedlichen Mikroarchitekturen können sich einen gemeinsamen Befehlssatz teilen. Zum Beispiel implementieren Intel® CoreTM-Prozessoren und Prozessoren von Advanced Micro Devices, Inc., Sunnyvale, CA, nahezu identische Versionen des x86-Befehlssatzes (mit einigen Erweiterungen, die neueren Versionen hinzugefügt worden sind), weisen jedoch unterschiedliche interne Auslegungen auf. Zum Beispiel kann die gleiche Registerarchitektur der ISA unter Anwendung bekannter Techniken auf unterschiedliche Arten in unterschiedliche Mikroarchitekturen implementiert werden, einschließlich zweckbestimmter physikalischer Register, eines oder mehrerer dynamisch zugeordneter physikalischer Register unter Verwendung eines Registerumbenennungsmechanismus etc.
  • Moderne Prozessorkerne unterstützen generell das Multithreading zum Verbessern seiner Leistungsfähigkeit. Zum Beispiel bieten Intel® CoreTM-Kerne derzeit ein 2-Wege-Simultan-Multithreading (SMT). Ein Erhöhen der Anzahl von Threads pro Kern kann eine höhere Leistung für Schlüssel-Serveranwendungen erbringen. Das Erhöhen der Anzahl pro SMT-Thread (von zwei auf vier oder mehr) ist jedoch sehr komplex, teuer und fehleranfällig.
  • Eine alternative Vorgehensweise hinsichtlich Multithreading ist das Implementieren von Benutzerebenen-Threads, die von einer Anwendungs-Software verwaltet werden. Zum Beispiel verwenden Microsoft®-Systeme einen Software-Mechanismus zum Verwalten von Benutzerebene-Threads, die als Fiber bezeichnet werden. Unter Verwendung der Fiber oder einer im Wesentlichen gleichen Vorgehensweise kann die Anwendung von einer ersten Fiber zu einer zweiten Fiber umschalten, wenn die erste Fiber auf ein Ereignis mit langer Latenz (z. B. I/O, ein Nicht-Benutzer-Ereignis, Warten-auf-Semaphor etc.) trifft. Die Verwaltung und Ausführung von Fibern kann von der Anwendung vollständig gehandhabt und sorgfältig abgestimmt werden. Eine Leistungsverbesserung durch die Vorgehensweise mittels der Fiber ist jedoch aufgrund der teuren Umschalteinbuße zwischen Fibern (z. B. Sichern, Zurückspeichern, Verzweigungsoperationen) und aufgrund der Beschränkungen der Software beim effizienten Veranschlagen, wann bei Hardware-Blockierungsereignissen sowohl mit langer als auch mit kurzer Latenz umgeschaltet werden soll, ziemlich eingeschränkt.
  • Kurzbeschreibung der Zeichnungen
  • Ausführungsformen sind beispielhaft und nicht einschränkend in den Figuren der beiliegenden Zeichnungen dargestellt:
  • 1A ist ein Blockschaltbild einer Befehlsverarbeitungseinrichtung mit einem erweiterten Registersatz gemäß einer Ausführungsform.
  • 1B ist ein Blockschaltbild einer Registerarchitektur mit einem erweiterten Registersatz gemäß einer Ausführungsform.
  • 2A zeigt ein Beispiel von Speicherregionen zum Speichern von mehreren Hiber-Kontexten gemäß einer Ausführungsform.
  • 2B zeigt ein Beispiel eines erweiterten Registersatzes mit Banken zum Speichern von mehreren Hiber-Kontexten gemäß einer Ausführungsform.
  • 2C zeigt ein weiteres Beispiel eines erweiterten Registersatzes mit Banken zum Speichern von mehreren Hiber-Kontexten gemäß einer Ausführungsform.
  • 3 zeigt ein Beispiel von Vektorregistern, die in Teilbereiche zum Speichern von mehreren Hiber-Kontexten aufgeteilt sind, gemäß einer Ausführungsform.
  • 4A zeigt ein Beispiel eines Programms, das einen Befehl aufweist, der wahrscheinlich Cachespeicher-Nichttreffer bewirkt, gemäß einer Ausführungsform.
  • 4B zeigt ein Beispiel für das Verwenden von Zustandswechselbefehlen zum Ausführen von mehreren Hibern.
  • 5 ist ein Ablaufdiagramm mit Darstellung von durchzuführenden Operationen gemäß einer Ausführungsform.
  • 6 ist ein Blockschaltbild mit Darstellung der Verwendung eines Software-Befehlsumwandlers zum Umwandeln von binären Befehlen in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß einer Ausführungsform.
  • 7A ist ein Blockschaltbild einer In-Order- und Out-of-Order-Pipeline gemäß einer Ausführungsform.
  • 7B ist ein Blockschaltbild eines In-Order- und Out-of-Order-Kerns gemäß einer Ausführungsform.
  • 8A-B sind Blockschaltbilder einer spezifischeren In-Order-Kernarchitektur gemäß einer Ausführungsform.
  • 9 ist ein Blockschaltbild eines Prozessors gemäß einer Ausführungsform.
  • 10 ist ein Blockschaltbild eines Systems gemäß einer Ausführungsform.
  • 11 ist ein Blockschaltbild eines zweiten Systems gemäß einer Ausführungsform.
  • 12 ist ein Blockschaltbild eines dritten Systems gemäß einer Ausführungsform der Erfindung.
  • 13 ist ein Blockschaltbild eines System-on-Chip (SoC) gemäß einer Ausführungsform.
  • Beschreibung der Ausführungsformen
  • In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt. Es versteht sich jedoch, dass Ausführungsformen der Erfindung ohne diese spezifischen Details ausgeführt sein können. In anderen Fällen sind bekannte Schaltungen, Strukturen und Techniken nicht detailliert gezeigt, um das Verständnis dieser Beschreibung nicht zu erschweren.
  • Hier beschriebene Ausführungsformen stellen einen Satz von Zustandswechselbefehlen (z. B. SXCHG, SXCHGL und deren Varianten) mit einer geeigneten Mikroarchitektur-Unterstützung bereit, der bewirkt, dass ein Prozessor eine sofortige Umschaltung (mit Nahe-null-Zyklus-Einbuße) zwischen Benutzerebenen-Threads durchführt. Es sind keine weiteren Änderungen der ISA erforderlich. Diese Benutzerebenen-Threads werden nachstehend als ”Hiber” bezeichnet, die hardwareunterstützte Fibern sind. Der Satz von Befehlen ermöglicht es der Software, durch Sichern und Zurückspeichern von Registerinhalt (auch als ”Registerzustand” bezeichnet) schnell zwischen N Hibern in N Banken von Benutzermodus-(Ring-3-)Registern umzuschalten. Diese Umschaltung kann von den Anwendungen ohne Einbeziehung eines Betriebssystems gesteuert werden. Diese N Banken von Benutzermodus-Registern werden nachstehend als erweiterter Registersatz bezeichnet. Die Anzahl N kann 2, 4, 8 oder jede Anzahl sein, die von der Mikroarchitektur unterstützt wird.
  • 1A ist ein Blockschaltbild einer Ausführungsform einer Befehlsverarbeitungseinrichtung 115 mit einer Ausführungseinheit 140, die so ausgelegt ist, dass sie Befehle ausführt. Bei einigen Ausführungsformen kann die Befehlsverarbeitungseinrichtung 115 ein Prozessor, ein Prozessorkern eines Multikern-Prozessors oder ein Verarbeitungselement in einem elektronischen System sein.
  • Ein Dekodierer 130 empfängt ankommende Befehle in Form von Maschinenbefehlen oder Makrobefehlen einer höheren Ebene und dekodiert sie, um Mikrooperationen, Mikrocode-Einsprungpunkte, Mikrobefehle einer niedrigeren Ebene oder andere Befehle oder Steuersignale einer niedrigeren Ebene, die von dem ursprünglichen Befehl einer höheren Ebene reflektiert und/oder abgeleitet sind, zu erzeugen. Die Befehle oder Steuersignale einer niedrigeren Ebene können die Operation des Befehls einer höheren Ebene durch Operationen einer niedrigeren Ebene (z. B. Schaltungsebene oder Hardware-Ebene) implementieren. Der Dekodierer 130 kann unter Anwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Beispiele für geeignete Mechanismen umfassen, sind jedoch nicht beschränkt auf Mikrocode, Lookup-Tabellen, Hardware-Implementierungen, programmierbare logische Arrays (PLAs), andere auf dem Sachgebiet bekannte Mechanismen, die zum Implementieren von Dekodierern verwendet werden, etc.
  • Die Ausführungseinheit 140 ist mit dem Dekodierer 130 gekoppelt. Die Ausführungseinheit 140 kann eine oder mehrere Mikrooperationen, Mikrocode-Einsprungpunkte, Mikrobefehle, andere Befehle oder andere Steuersignale, die von den empfangenen Befehlen reflektiert oder abgeleitet werden, aus dem Dekodierer 130 empfangen. Die Ausführungseinheit 140 empfängt ferner einen Eingang aus einer Registerdatei 170 oder einem Speicher 120 und erzeugt einen Ausgang zu dieser/diesem.
  • Um zu verhindern, dass die Beschreibung unklar wird, ist eine relativ einfache Befehlsverarbeitungseinrichtung 115 gezeigt und beschrieben worden. Es sei darauf hingewiesen, dass andere Ausführungsformen mehr als eine Ausführungseinheit aufweisen können. Zum Beispiel kann die Einrichtung 115 mehrere unterschiedliche Typen von Ausführungseinheiten aufweisen, wie zum Beispiel Arithmetik-Einheiten, Arithmetik-Logik-Einheiten (arithmetic logic units – ALUs), Ganzzahl-Einheiten, Gleitkomma-Einheiten etc. Noch weitere Ausführungsformen von Befehlsverarbeitungseinrichtungen oder Prozessoren können mehrere Kerne, logische Prozessoren oder Ausführungsmaschinen aufweisen. Eine Anzahl von Ausführungsformen der Befehlsverarbeitungseinrichtung 115 wird später mit Bezug auf 713 dargestellt.
  • Gemäß einer Ausführungsform speichert der Speicher 120 die Kontexte mehrerer Hiber. Die zu speichernden Hiber-Kontexte umfassen den Registerzustand der mehreren Hiber. Wenn ein Computersystem (z. B. ein Prozessor, der einen Kompilierungs- oder anderen Optimierungscode, eine Vorhersage- oder Optimierungsschaltungsanordnung etc. betreibt) oder eine Programmiereinrichtung vorhersagt, dass ein spezifischer Befehl in einer Anwendung eine Blockierung in einem seiner/ihrer Hiber bewirken kann, wird ein Befehl in die Anwendung eingebracht, um zu bewirken, dass die Ausführungseinheit 140 die Ausführung von einer Hiber zu einer anderen Hiber umschaltet.
  • Um die Verarbeitungsleistung zu verbessern, wird der Hiber-Kontext nicht notwendigerweise in dem Speicher 120 gespeichert und aus diesem zurückgespeichert, wenn eine Hiber-Umschaltung durchgeführt wird. Bei einer Ausführungsform kann die Befehlsverarbeitungseinrichtung 115 den erweiterten Registersatz 175 als ”Zurückschreibungs-Cache” zum temporären Speichern von Hiber-Kontext verwenden, um die Häufigkeit eines Speicherzugriffs zu verringern. Das Zugreifen auf den Hiber-Kontext aus dem erweiterten Registersatz 175 erfolgt viel schneller als das Zugreifen auf denselben aus dem Speicher 120. Somit kann die Geschwindigkeit der Kontextumschaltung zwischen Hibern beträchtlich erhöht werden.
  • Dadurch, dass ein Hiber-Kontext nicht konstant in dem Speicher 120 gespeichert und aus diesem zurückgespeichert wird, kann der Speicher 120 jedoch nicht den aktuellen Hiber-Kontext aufweisen. Um zu verhindern, dass von einer Anwendung oder einem Thread (der gleichzeitig auf den Kernen oder Prozessoren der Befehlsverarbeitungseinrichtung 115 läuft) auf die veralteten Informationen in dem Speicher 120 zugegriffen wird, verwendet die Befehlsverarbeitungseinrichtung 115 eine Snoop-Schaltungsanordnung 180 zum Nachverfolgen des Zugriffs auf die Speicherregionen, in denen ein Hiber-Kontext gespeichert ist. Immer wenn der Inhalt einer dieser Speicherregionen mit dem aktuellen Registerinhalt inkohärent wird (d. h. sich von diesem unterscheidet), werden die entsprechenden Speicheradressen in der Snoop-Schaltungsanordnung 180 als markierter Bereich markiert. Ein Zuruckschreibungs-Ereignis (z. B. ein nicht dekodierbarer Mikrocode) wird ausgelöst, wenn der markierte Bereich auszulesen oder in diesen zu schreiben ist, um die gespeicherten Kontexte zwischen dem markierten Bereich und dem erweiterten Registersatz 175 zu synchronisieren. Dieser nicht dekodierbare Mikrocode bewirkt, dass der aktuelle Registerzustand (d. h. der aktualisierte Hiber-Kontext) in den markierten Bereich geschrieben wird (falls eine Anwendung oder ein Thread versucht, aus diesem Bereich zu lesen) oder die Register aus dem markierten Bereich neu geladen werden (falls eine andere Anwendung oder ein anderer Thread in den Bereich geschrieben hat).
  • Bei einer Ausführungsform unterstützt die Befehlsverarbeitungseinrichtung 115 einen Satz von Hiber-Umschaltbefehlen, wie z. B. einen Zustandswechsel-(SXCHG-)Befehl und dessen Varianten. Der Satz von Hiber-Umschaltbefehlen weist einen Basis-SXCHG(I, J) auf, wobei der Kontext von Hiber[I] in dem Speicher 120 gesichert wird und der Kontext von Hiber[J] aus dem Speicher 120 zurückgespeichert und gelöscht wird. Der Satz von Hiber-Umschaltbefehlen weist ferner SXCHG (ohne Operanden), SXCHGL (eine Lightversion von SXCHG), SXCHG.0 (unbedingter SXCHG), SXCHG.c (bedingter SXCHG) und <SXCHG.start–SXCHG.end> (Block SXCHG) und dergleichen auf. Diese Befehle werden nachstehend genauer erläutert.
  • Vor dem Beschreiben der Hiber-Umschaltbefehle ist es sinnvoll, eine Ausführungsform der zugrunde liegenden Registerarchitektur zu zeigen, die diese Befehle unterstützt. Die mit Bezug auf 1B zu beschreibende Registerarchitektur basiert auf den Intel® CoreTM-Prozessoren, die einen Befehlssatz implementieren, der x86-, MMXTM-, Streaming SIMD Extension-(SSE-), SSE2-, SSE3-, SSE4.1- und SSE4.2-Befehle sowie einen weiteren Satz von SIMD-Erweiterungen aufweist, die sich auf Advanced Vector Extensions (AVX) (AVX1 und AVX2) beziehen. Es versteht sich jedoch, dass eine andere Registerarchitektur, die andere Registerlängen, andere Registertypen und/oder eine andere Anzahl von Registern unterstützt, ebenfalls verwendet werden kann.
  • 1B ist ein Blockschaltbild einer Registerarchitektur 100 gemäß einer Ausführungsform der Erfindung. Bei der dargestellten Ausführungsform gibt es zweiunddreißig Vektorregister 110, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 referenziert. Die niederwertigen 256 Bits der unteren sechszehn zmm-Register überlagern Register ymm0–16. Die niederwertigen 128 Bits der unteren sechszehn zmm-Register (die niederwertigen 128 Bits der ymm-Register) überlagern Registern xmm0–15. Bei der dargestellten Ausführungsform gibt es acht Schreibmaskenregister 112 (k0 bis k7) jeweils mit einer Größe von 64 Bits. Bei einer alternativen Ausführungsform weisen die Schreibmaskenregister 112 eine Größe von 16 Bits auf.
  • Bei der dargestellten Ausführungsform weist der erweiterte Registersatz 175 vier Banken von sechszehn 64-Bit-Universal-(general purpose-GP-)Registern auf, die hier als erweiterte GP-Register 125 bezeichnet werden. Bei einer Ausführungsform werden sie zusammen mit den bestehenden x86-Adressiermodi zum Adressieren von Speicheroperanden verwendet. Diese Register (in jeder Bank) werden mit den Bezeichnungen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, und R8 bis R15 referenziert. Die Ausführungsform zeigt ferner, dass der erweiterte Registersatz 175 erweiterte RFLAGS-Register 126, erweiterte RIP-Register 127 und erweiterte MXCSR-Register 128 aufweist, die alle vier Banken aufweisen.
  • Die Ausführungsform zeigt ferner eine Skalar-Gleitkomma-(floating point – FP-)Stapelregisterdatei (x87-Stapel) 145, auf der die MMX-Gepackt-Ganzzahl-Flachregisterdatei 150 aliasiert wird. Bei der dargestellten Ausführungsform ist der x87-Stapel ein Acht-Elemente-Stapel, der verwendet wird, um Skalar-Gleitkomma-Operationen an 32-/64-/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung durchzuführen; während die MMX-Register verwendet werden, um Operationen an 64-Bit-Gepackt-Ganzzahl-Daten durchzuführen und um Operanden für einige Operationen zu halten, die zwischen den MMX- und XMM-Registern durchgeführt werden.
  • Bei einer Ausführungsform kann der erweiterte Registersatz 175 des Weiteren vier Banken einer FP-Stapelregisterdatei 145 und/oder vier Banken von Vektorregistern 110 aufweisen, um eine temporäre Speicherung für bis zu vier Hibern mit Bezug auf deren FP-Registerzustand und/oder Vektorregisterzustand zu ermöglichen.
  • Bei alternativen Ausführungsformen der Erfindung können breitere oder schmalere Register und/oder mehr oder weniger Registerbanken verwendet werden. Des Weiteren können bei alternativen Ausführungsformen der Erfindung mehr, weniger oder andere Registerdateien und Register verwendet werden.
  • 2A ist eine schematische Darstellung der Operation, die von einem Prozessor (z. B. der Befehlsverarbeitungseinrichtung 115) in Reaktion auf den Basis-SXCHG(I, J)-Befehl durchgeführt wird, gemäß einer Ausführungsform. Bei dieser Ausführungsform ist der Speicher 120 so ausgelegt, dass er vier Regionen aufweist, wobei unterschiedliche Regionen so ausgelegt sind, dass sie die Kontexte von unterschiedlichen Hibern speichern. Der Basis-SXCHG(I, J) weist zwei Operanden auf – eine Quelle(I), die anzeigt, welcher Hiber-Kontext zu sichern ist, und ein Ziel(J), das anzeigt, welcher Hiber-Kontext zurückzuspeichern ist. In Reaktion auf diesen Befehl sichert der Prozessor den aktuellen Inhalt der Register in dem Speicher 120. Bei einer Ausführungsform weisen diese Register ein oder mehrere der GP-Register (z. B. RAX, RBX..., R15), Vektorregister (z. B. zmm0–31), Flagregister (z. B. RFLAGS), Befehlszeiger (z. B. RIP), MXCSR und jede Kombination daraus auf. Der aktuelle Inhalt dieser Register wird in einer bezeichneten Speicherregion (Region[I]) gesichert, auf die ein Speicherzeigerregister 210 (SMEM[I]) zeigt. Nach dem Sichern des aktuellen Registerinhalts lädt der Prozessor die oben genannten Register aus einer anderen Speicherregion (Region[J]), auf die das Speicherzeigerregister SMEM[J] zeigt, und löscht (d. h. eliminiert) diese Speicherregion (Region[J]). Infolge dieser Operation schaltet der Prozessor von einer Befehlsfluss-Hiber[I] zur Ausführung einer weiteren Befehlsfluss-Hiber[J] um.
  • Bei einem Szenario kann die Hiber[J] einen Befehl SXCHG(J, I) aufweisen, der bewirkt, dass der Prozessor zum Ausführen des vorhergehenden Befehlsflusses (d. h. Hiber[I]) zurück umschaltet, wobei der Registerinhalt in der Speicherregion[I] gespeichert wird. In Reaktion auf SXCHG(J, I), sichert der Prozessor den Registerzustand in der Speicherregion (Region[J]), auf die SMEM[J] zeigt, lädt die Register aus der Speicherregion (Region[I]), auf die SMEM[I] zeigt, und löscht (d. h. eliminiert) diese Speicherregion (Region[I]).
  • Das Beispiel von 2A zeigt die Speicherregion[0], -region[1], -region[2] und -region[3]. Die Ausführung von SXCHG(0, 2) führt zum Sichern des Registerinhalts in Region[0] (auf die SMEM[0] zeigt) und Zurückspeichern des Registerinhalts aus der Region[2] (auf die SMEM[2] zeigt).
  • Zum Verbessern der Geschwindigkeit der Benutzerebenen-Kontextumschaltung kann der Registerzustand gesichert und aus einem erweiterten Registersatz (z. B. dem erweiterten Registersatz 175 von 1A und 1B) statt aus dem Speicher zurückgespeichert werden. Das Abbilden von Speicherplätzen in physikalischen Registern wird manchmal als Speicherumbenennung bezeichnet.
  • 2B zeigt eine Ausführungsform des erweiterten Registersatzes 175. Bei dieser Ausführungsform weist jedes Register in dem Satz 175 vier Banken auf: Bank 0, Bank, 1, Bank 2 und Bank 3. Eine Mikroarchitektur, die die SXCHG-Befehle mit einer verbesserten Leistung unterstützt, kann mehrere Banken aufweisen; z. B. vier Banken, wobei die GP-Register in jeder Bank 64 Bit breit sind. Bei der Ausführungsform von 2B wird ein Register in einer vorgegebenen Bank in ihren ursprünglichen Namen, dem ein Bankindex angefügt ist, umbenannt, z. B. RAX.0, RAX.1, RAX.2 und RAX.3. Wenn der Prozessor zwischen zwei Hiber-Kontexten statt einer langen Sequenz von Speicher-Sicherungs- und Speicher-Zurückspeicher-Operationen umschaltet, braucht der Prozessor nur einen Zeiger (z. B. den Inhalt eines Aktuell-Bank-(current bank – CB-)Registers 220) von einer Registerbank zu einer anderen umzuschalten. Bei einer Ausführungsform kann der Dekodierer einen Registernamen (z. B. von RAX.0 in RAX.3) wechseln, auf den sich Befehle bei einer Kontextumschaltung beziehen. Ein hochentwickelter Out-of-Order-Prozessor mit einer Registerumbenennung kann leicht den Umbenennungszeiger umschalten. Folglich kann dann, wenn das Prozessor-Front-End den SXCHG vorhersagt, die Hiber-Umschaltung schnell in einem Nahe-Null-Zyklus durchgeführt werden.
  • Bei einer Ausführungsform des SXCHG-Befehls gibt es keine Operanden. Statt des Lieferns des Quellindexes (z. B. Index I) verwendet der Befehl das CB-Register 220, um die Bank der aktuell aktiven Hiber, die der Prozessor ausführt, zu identifizieren. Im Anschluss an einen SXCHG-Befehl (z. B. wenn ein Zurückschreibungs-Ereignis eintritt) sichert der Prozessor den aktuellen Registerzustand in der Speicherregion, auf die SMEM[CB] zeigt. Bei dem Beispiel von 2B ist CB = 0, was bedeutet, dass der Prozessor den Registerzustand in SMEM[0] sichert. Der Registerzustand in der Bank 0 des erweiterten Registersatzes 175 sollte zur künftigen Verwendung in der Bank 0 bleiben; wenn z. B. die Ausführung zurück zu Hiber[0] umschaltet.
  • Ferner benötigt der SXCHG-Befehl keinen Zielindex. Stattdessen verwendet der Prozessor ein Maskenregister 230, das ein Maskenbit für jeden der Hiber aufweist. Bei dem Beispiel von 2B weist jede Hiber ein zugehöriges Maskenbit auf. Falls das zugehörige Maskenbit einen vorbestimmte Wert (z. B. null) aufweist, wird die entsprechende Hiber deaktiviert, und es erfolgt keine Umschaltung zu dieser Hiber. Andernfalls (wenn z. B. der Maskenbitwert eins ist) ist die entsprechende Hiber aktiv (wird aktuell ausgeführt) oder im Ruhezustand (wartet auf Ausführung). Bei Ausführung von SXCHG schaltet der Prozessor zu der nächsten Hiber, die sich im Ruhezustand befindet, um und aktiviert diese, und zwar unter Anwendung einer Ringverteilungs- oder im Wesentlichen gleichen Methode. Bei dem Beispiel von 2B schaltet der Prozessor von CB = 0 zu CB = 2 μm, da das Maskenbit von Hiber[1] null ist.
  • 2C zeigt genauer eine Ausführungsform des erweiterten Registersatzes 175. Bei dieser Ausführungsform weist der erweiterte Registersatz 175 vier Banken auf, und jede Bank weist zmm0–31, die GP-Register, die RFLAGS und den RIP auf. Wie oben beschrieben worden ist, weist das Maskenregister 230 ein Maskenbit für jede Bank auf, um anzuzeigen, ob die entsprechende Bank aktiviert ist, und das CB-Register 220 zeigt auf die aktuell aktive Bank. Obwohl die Breiten der Register in derselben Bank in 2C die gleichen zu sein scheinen, versteht sich, dass unterschiedliche Register in derselben Bank die gleichen Breiten aufweisen oder nicht aufweisen können. Bei alternativen Ausführungsformen kann der erweiterte Registersatz 175 mehr oder weniger Register und/oder eine größere oder kleinere Anzahl von Banken aufweisen.
  • Bei einer Ausführungsform weist der SXCHG-Befehl eine Anzahl von Varianten auf. SXCHG.0 ist ein Befehl, der eine unbedingte Umschaltung zu einer nächsten Hiber bewirkt. SXCHG.c ist ein Befehl, der eine Umschaltung zu der nächsten Hiber auf der Basis der Laufzeit-Entscheidung der Mikroarchitektur bewirkt. Bei einer Ausführungsform kann die eine Entscheidung treffende Mikroarchitektur die Front-End-Schaltungsanordnung (z. B. die Verzweigungs-Vorhersageeinheit) sein, die den Befehlszeiger für häufig verfehlte Ladungen nachverfolgt. Auf der Basis von Hardware-Parametern kann die Mikroarchitektur bestimmen, ob eine Bedingung zum Durchführen einer Umschaltung erfüllt ist, und, falls eine Umschaltung durchzuführen ist, an welchem Punkt der Ausführung die Umschaltung durchzuführen ist. Zum Beispiel kann die Mikroarchitektur entscheiden, bei einem Vorabruf-Cache-Nichttreffer oder Ereignissen mit langer Latenz umzuschalten. SXCHG.start und SXCHG.end sind ein Paar von Befehlen, die die Grenze eines Blocks von Befehlen markieren, in dem jeder Befehl ein Kandidat für eine SXCHG-Kontextumschaltung sein kann. Dies hat die gleiche Wirkung wie das Vorhandensein von SXCHG.c vor jedem Befehl in diesem Befehlsblock. SXCHG.start und SXCHG.end markieren jeweils den Anfang und das Ende des Befehlsblocks. Durch Verwenden einer solchen Markierung kann die Mikroarchitektur zum Ausführen unterschiedlicher Hiber frei aus den Befehlen auswählen.
  • Bei einer Ausführungsform weisen der SXCHG-Befehl und seine Varianten eine ”Light”-Version auf, die als SXCHGL bezeichnet wird. In Reaktion auf einen SXCHGL-Befehl führt der Prozessor keine Sicherung und Zurückspeicherung des Hiber-Kontextes in dem Speicher durch. Stattdessen fuhrt der Prozessor eine Sicherung und Zurückspeicherung des Hiber-Kontextes in nicht genutzten Registern auf dem Die durch, wie z. B. Vektorregistern und/oder Gleitkommaregistern. Bei einer Ausführungsform sind diese nicht genutzten Register Vektorregister (z. B. zmm0–31, zmm16–31 oder jeder nicht genutzte Abschnitt der zmm-Register). Bei einer Ausführungsform kann ein Abschnitt des zmm-Registers immer noch für eine Vektorspeicherung (z. B. xmm0–15) genutzt werden, und die übrigen zmm-Register können zum Speichern von Hiber-Kontext genutzt werden. Diese nicht genutzten Register (oder ein Abschnitt derselben) können in mehrere Teilbereiche (z. B. vier Teilbereiche, die den vier Speicherregionen in SXCHG entsprechen) zum Speichern des Kontextes der mehreren Hiber aufgeteilt werden. Des Weiteren weist auf im Wesentlichen gleiche Weise wie SXCHG der SXCHGL-Befehl ebenfalls eine Anzahl von Varianten auf: SXCHGL.u, SXCHGL.c, SXCHGL.start und SXCHGL.end; ihre Verwendung erfolgt analog zu ihrem SXCHG-Gegenpart.
  • Bei einer Ausführungsform weist der in Reaktion auf die SXCHG-Befehle gesicherte Kontext einen zmm-Registerzustand auf; wohingegen der in Reaktion auf die SXCHGL-Befehle gesicherte Kontext einen xmm-Registerstand (jedoch nicht den zmm-Registerzustand) aufweist. Somit kann für SXCHGL-Befehle zmm0–15 verwendet werden, um den xmm-Zustand von vier Hibern zu speichern, und zmm16–31 kann verwendet werden, um den Zustand der anderen Register (z. B. GP-Register, Flagregister, Befehlszeiger etc.) derselben vier Hiber zu speichern. 3 zeigt eine Ausführungsform eines Abschnitts von Vektorregister 310 (zmm16–31), die in vier Teilbereiche zum Speichern von Kontext von vier Hibern aufgeteilt sind; wobei jeder Teilbereich einer Bank des erweiterten Registersatzes 175 entspricht. Das CB-Register 220 bildet einen Zeiger auf die aktuell aktive Bank des erweiterten Registersatzes 175 sowie den entsprechenden Teilbereich des Abschnitts der Vektorregister 310.
  • Das Ausführen eines SXCHGL-Befehls durch ein direktes Sichern/Zurückspeichern von Registern aus/in zmm-Register(n) kann langsam sein. Um eine effiziente Implementierung zu ermöglichen, kann statt des Sicherns und Zurückspeicherns von Registern aus/in zmm-Register(n) ein erweiterter Registersatz (z. B. der erweiterte Registersatz 175 von 1A und 1B), einschließlich der mehreren Banken als ein ”Zurückschreibungs-Cache” auf im Wesentlichen gleiche Weise wie bei SXCHG verwendet werden. Auf im Wesentlichen gleiche Weise wie bei SXCHG kann ein CB-Register von SXCHGL verwendet werden, um auf die aktuell aktive Bank zu zeigen, und ein Maskenregister, das Maskenbits aufweist, kann verwendet werden, um anzuzeigen, ob eine entsprechende Bank nicht mehr verwendet wird (d. h. deaktiviert ist). Falls sämtliche der Hiber maskiert sind (z. B. ein entsprechendes Maskenbit aus Nullen aufweisen), wird SXCHGL zu einer No-Op-Operation.
  • Folglich kann ein Prozessor einen Code aus mehreren Hibern auf effiziente Weise ausführen. Falls das Front-End SXCHGL korrekt vorhersagt, kann der Prozessor sehr schnell ohne ein Leeren der Pipeline zwischen Hibern umzuschalten.
  • Bei einer Ausführungsform kann ein Snoop-Mechanismus, der der Snoop-Schaltungsanordnung 180 von 1A im Wesentlichen gleich ist, verwendet werden, um einen Zugriff auf die zmm-Register nachzuverfolgen, in denen Hiber-Kontexte gespeichert sind. Immer wenn ein Hiber-Kontext, der in einem zmm-Register gespeichert ist, mit dem entsprechenden Inhalt des erweiterten Registersatzes 175 inkohärent wird (d. h. sich von diesem unterscheidet), wird das zmm-Register markiert. Bei einer Ausführungsform kann dieser Snoop-Mechanismus als ein Zustandsbit, das jedem Globalzustand des zmm-Registers zugeordnet ist, implementiert werden. Das Zustandsbit zeigt an, wo sich der jüngste aktualisierte Hiber-Kontext befindet. Falls sich die jüngste Aktualisierung in den zmm-Registern befindet (z. B. nach einer XRESTORE-Operation), löst die Ausführung des ersten SXCHGL-Befehls ein Zurückschreibungs-Ereignis aus, das bewirkt, dass eine Mikrocode-Sequenz ausgeführt wird. Die Mikrocode-Sequenz kopiert die jüngste Aktualisierung aus dem zmm-Ort in den erweiterten Registersatz 175. Falls sich die jüngste Aktualisierung in dem erweiterten Registersatz 175 befindet und der Prozessor beginnt, einen Vektorbefehl auszuführen (z. B. nach einer XSAVE-Operation), kopiert der Mikrocode die jüngste Aktualisierung aus dem erweiterten Registersatz 175 in den zmm-Ort.
  • In der folgenden Beschreibung versteht sich, dass immer dann, wenn SXCHG oder ”Zustandswechselbefehl” erwähnt wird, die Beschreibung sowohl SXCHG als auch SXCHGL betrifft.
  • 4A zeigt ein Beispiel eines Codesegments 410, das den oben beschriebenen SXCHG-Befehl oder eine seiner Varianten verwenden kann. Das Codesegment 410 implementiert eine binäre Suche (als ”Bsearch” bezeichnet). Bei der binären Suche wird erwartet, dass eine große Anzahl von Cache-Nichttreffern bei Befehl 420 auftritt (temp = A[mid]). 4B zeigt ein Beispiel des Durchführens der gleichen binären Suche mit zwei Codesegmenten foo0 und foo1, von denen jedes eine Hiber darstellt. Jedes der Codesegmente weist einen SXCHG.u-Befehl nach dem (temp = A[mid]) Befehl (430 oder 431) auf, wobei erwartet wird, dass viele Cache-Nichttreffer auftreten. Somit führt unmittelbar nachdem der Prozessor den Befehl 430 in foo0 ausgeführt hat, der Prozessor eine unbedingte Umschaltung auf foo1 während des erwarteten Cache-Nichttreffer-Ereignisses aus. Falls ein Cache-Nichttreffer tatsächlich bei dem Befehl 430 auftritt, ermöglicht es die Kontextumschaltung dem Prozessor, eine andere sinnvolle Arbeit in foo1 auszuführen. Falls ein Cache-Nichttreffer tatsächlich bei dem Befehl 431 auftritt ermöglicht es die Kontextumschaltung dem Prozessor, auf im Wesentlichen gleiche Weise, eine andere sinnvolle Arbeit in foo0 durchzuführen. Falls kein Cache-Nichttreffer auftritt, ist die Einbuße der Kontextumschaltung minimal. Der Grund dafür ist, dass die Kontexte von foo0 und foo1 beide in dem erweiterten Registersatz gespeichert sind und schnell gesichert und zurückgespeichert werden können.
  • Bei einer Ausführungsform kann der SXCHG-Befehl (z. B. der SXCHG.u-Befehl in 4B) von einer Programmiereinrichtung hinzugefügt werden. Bei einer alternativen Ausführungsform kann der SXCHG-Befehl von einem Kompilierer hinzugefügt werden. Der Kompilierer kann ein statischer Kompilierer oder ein Just-in-Time-Kompilierer sein. Der Kompilierer kann sich auf derselben Hardware-Plattform wie der Prozessor, der den SXCHG-Befehl ausführt, oder auf einer anderen Hardware-Plattform befinden. Es sei darauf hingewiesen, dass das Betriebssystem nicht in die Platzierung von SXCHG und die Ausführung von SXCHG involviert ist.
  • 5 ist ein Blockschaltbild eines Verfahrens 500 zum Wechseln von zwei Hiber-Kontexten gemäß einer Ausführungsform. Das Verfahren 500 beginnt damit, dass ein Prozessor (z. B. die Befehlsverarbeitungseinrichtung 115 von 1A) einen ersten Benutzerebenen-Thread (z. B. einen Hyber) unter Verwendung eines ersten Kontextes ausführt, der in einer ersten Bank eines erweiterten Registersatzes gespeichert ist (Block 510). Bei der Ausführung des ersten Threads empfängt der Prozessor einen Befehl zum Wechseln von Kontexten des ersten Threads und eines zweiten Threads (Block 520), wobei der zweite Thread ein weiterer Benutzerebenen-Thread (z. B. ein Hyber) ist, dessen zweiter Kontext in einer zweiten Bank des erweiterten Registersatzes gesichert ist. In Reaktion auf den Befehl wechselt der Prozessor einen Registerzeiger, der aktuell auf die erste Bank als die aktuell aktive Bank zeigt, auf die zweite Bank (Block 530). Der Prozessor führt dann den zweiten Thread unter Verwendung des zweiten Kontextes aus, der in der zweiten Bank gespeichert ist (Block 540).
  • Bei verschiedenen Ausführungsformen kann das Verfahren von 5 von einem Universalprozessor, einem Spezialprozessor (z. B. einem Grafikprozessor oder einem Digitalsignalprozessor) oder einem anderen Typ von digitaler Logikvorrichtung oder Befehlsverarbeitungseinrichtung durchgeführt werden. Bei einigen Ausführungsformen kann das Verfahren von 5 von der Befehlsverarbeitungseinrichtung 115 von 1A oder einem im Wesentlichen gleichen Prozessor, Einrichtung oder System durchgeführt werden, wie z. B. den in 713 gezeigten Ausführungsformen. Ferner können die Befehlsverarbeitungseinrichtung 115 von 1A sowie der Prozessor, die Einrichtung oder das System von 713 Ausführungsformen von Operationen und Verfahren durchführen, und zwar entweder die gleichen, im Wesentlichen die gleichen oder andere als diejenigen des Verfahrens von 5.
  • Bei einigen Ausführungsformen kann die Befehlsverarbeitungseinrichtung 115 von 1A in Zusammenhang mit einem Befehlsumwandler arbeiten, der einen Befehl von einem Quellbefehlssatz in einen Zielbefehlssatz umwandelt. Zum Beispiel kann der Befehlsumwandler, einen Befehl (z. B. unter Anwendung einer statischen binären Übersetzung, einer dynamischen binären Übersetzung, einschließlich einer dynamischer Kompilation) übersetzen, morphen, emulieren oder anderweitig in einen oder mehrere andere Befehle, die von dem Kern zu verarbeiten sind, umwandeln. Der Befehlsumwandler kann in der Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. Der Befehlsumwandler kann sich auf dem Prozessor, außerhalb des Prozessors oder teilweise auf dem Prozessor und teilweise außerhalb des Prozessors befinden.
  • 6 ist ein Blockschaltbild zur Gegenüberstellung der Verwendung eines Software-Befehlsumwandlers nach der Ausführungsform der Erfindung. Bei der dargestellten Ausführungsform ist der Befehlsumwandler ein Software-Befehlsumwandler, obwohl alternativ der Befehlsumwandler in der Software, Firmware, Hardware oder verschiedenen Kombinationen daraus implementiert sein kann. 6 zeigt, dass ein Programm in einer Hochsprache 602 unter Verwendung eines x86-Kompilierers 604 kompiliert werden kann, um einen x86-Binärcode 606 zu erzeugen, der von einem Prozessor mit mindestens einem x86-Befehlssatzkern 616 nativ ausgeführt werden kann. Der Prozessor mit mindestens einem x86-Befehlssatzkern 616 stellt jeden Prozessor dar, der im Wesentlichen die gleichen Funktionen durchführen kann wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern, und zwar durch kompatibles Ausführen oder anderweitiges Verarbeiten (1) eines wesentlichen Abschnitts des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) von Objektcodeversionen von Anwendungen oder einer anderen Software, die dazu vorgesehen sind, auf einem Intel-Prozessor mit mindestens einem x86-Befehlssatzkern zu laufen, um im Wesentlichen das gleiche Ergebnis zu erzielen wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern. Der x86-Kompilierer 604 stellt einen Kompilierer dar, der so ausgelegt ist, dass er einen x86-Binärcode 606 (z. B. Objektcode) erzeugt, der mit oder ohne weitere Verknüpfungsverarbeitung auf dem Prozessor mit dem mindestens einen x86-Befehlssatzkern 616 ausgeführt werden kann. Auf im Wesentlichen gleiche Weise zeigt 6, dass das Programm in der Hochsprache 602 unter Verwendung eines Alternativ-Befehlssatz-Kompilierers 608 kompiliert werden kann, um einen Alternativ-Befehlssatz-Binärcode 610 zu erzeugen, der von einem Prozessor ohne mindestens einen x86-Befehlssatzkern 614 (z. B. einem Prozessor mit Kernen, die einen MIPS-Befehlssatz von MIPS Technologies, Sunnyvale, CA, ausführt und/oder den ARM-Befehlssatz von ARM Holding, Sunnyvale, CA ausführt) nativ ausgeführt werden kann. Der Befehlsumwandler 612 wird verwendet, um den x86-Binärcode 606 in einen Code umzuwandeln, der von dem Prozessor ohne einen x86-Befehlssatzkern 614 nativ ausgeführt werden kann. Es ist nicht wahrscheinlich, dass dieser umgewandelte Code der gleiche ist wie der Alternativ-Befehlssatz-Binärcode 610, da es schwierig ist, einen Befehlsumwandler herzustellen, der dazu in der Lage ist; der umgewandelte Code erfüllt jedoch die allgemeine Operation und ist aus Befehlen aus dem alternativen Befehlssatz aufgebaut. Somit stellt der Befehlsumwandler 612 eine Software, Firmware, Hardware oder eine Kombination daraus dar, die es durch Emulation, Simulation oder einen anderen Prozess einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen x86-Befehlssatzprozessor oder -kern aufweist, ermöglicht, den x86-Binärcode 606 auszuführen.
  • Beispielhafte Kernarchitekturen
  • In-Order- und Out-of-Order-Kern-Blockschaltbild
  • 7A ist ein Blockschaltbild mit Darstellung sowohl einer beispielhaften In-Order-Pipeline als auch einer beispielhaften Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungs-Pipeline gemäß einer Ausführungsform der Erfindung. 7B ist ein Blockschaltbild mit Darstellung sowohl einer beispielhaften Ausführungsform eines In-Order-Architekturkerns als auch eines beispielhaften Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungsarchitekturkerns, der in einem Prozessor enthalten ist, nach Ausführungsformen der Erfindung. Die mit durchgehenden Linien dargestellten Kästen in 7A und 7B zeigen die In-Order-Pipeline und den In-Order-Kern, während die optional hinzugefügten mit gestrichelten Linien dargestellten Kästen die/den Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungs-Pipeline und -Kern zeigen. Der Out-of-Order-Aspekt wird nun unter der Voraussetzung beschrieben, dass der In-Order-Aspekt ein Teilsatz des Out-of-Order-Aspekts ist.
  • In 7A weist eine Prozessor-Pipeline 700 eine Abrufstufe 702, eine Längendekodierstufe 704, eine Dekodierstufe 706, eine Allokationsstufe 708, eine Umbenennungsstufe 710, eine Schedulerstufe 712 (auch als Beförderungs- oder Ausgabestufe bekannt), eine Registerlese-/Speicherlesestufe 714, eine Ausführungsstufe 716, eine Zurückschreibungs-/Speicherschreibungsstufe 718, eine Ausnahmebehandlungsstufe 722 und eine Commit-Stufe 724 auf.
  • 7B zeigt einen Prozessorkern 790 mit einer Front-End-Einheit 730, die mit einer Ausführungsmaschineneinheit 750 gekoppelt ist, und beide sind mit einer Speichereinheit 770 gekoppelt. Der Kern 790 kann ein Rechnerkern mit reduziertem Befehlssatz (reduced instruction set core – RISC), ein Rechnerkern mit komplexem Befehlssatz (complex instruction set core – CISC) und ein Kern mit einem sehr langen Befehlswort (very long instruction word – VLIW) oder ein Hydrid- oder alternativer Kerntyp sein. Als noch weitere Option kann der Kern 790 ein Spezialkern sein, wie zum Beispiel ein Netz- oder Kommunikationskern, eine Komprimierungsmaschine, ein Koprozessorkern, Universalrechner-Grafikverarbeitungseinheitskern (general purpose computing graphics processing unit – GPGPU), Grafikkern oder dergleichen sein.
  • Die Front-End-Einheit 730 weist eine Verzweigungsvorhersageeinheit 732 auf, die mit einer Befehls-Cacheeinheit 734 gekoppelt ist, welche mit einem Befehlsübersetzungs-Lookaside-Puffer (translation lookaside buffer – TLB) 736 gekoppelt ist, der mit einer Befehlsabrufeinheit 738 gekoppelt ist, die mit einer Dekodiereinheit 740 gekoppelt ist. Die Dekodiereinheit 740 (oder der Dekodierer) kann Befehle dekodieren und erzeugt als Ausgang eine oder mehrere Mikrooperationen, Mikrocode-Einsprungpunkte, Mikrobefehle, andere Befehle oder andere Steuersignale, die aus den ursprünglichen Befehlen dekodiert werden oder anderweitig von diesen reflektieren oder aus diesen abgeleitet sind. Die Dekodiereinheit 740 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Beispiele für geeignete Mechanismen umfassen, sind jedoch nicht beschränkt auf Lookup-Tabellen, Hardware-Implementierungen, programmierbare logische Arrays (PLAs), Mikrocode-Nurlesespeicher (read only memories – ROMs) etc. Bei einer Ausführungsform weist der Kern 790 einen Mikrocode-ROM oder ein anderes Medium auf, der/das einen Mikrocode für bestimmte Makrobefehle speichert (z. B. in der Dekodiereinheit 740 oder andernfalls in der Front-End-Einheit 730). Die Dekodiereinheit 740 ist mit einer Umbenennungs-/Allokationseinheit 752 in der Ausführungsmaschineneinheit 750 gekoppelt.
  • Die Ausführungsmaschineneinheit 750 weist die Umbenennungs-/Allokationseinheit 752 auf, die mit einer Retirement-Einheit 754 und einem Satz von einer oder mehreren Schedulereinheit(en) 756 gekoppelt ist. Die Schedulereinheit(en) 756 stellt (stellen) jede Anzahl von unterschiedlichen Schedulern dar, einschließlich Reservierungsstationen, zentralem Verarbeitungsfenster etc. Die Schedulereinheit(en) 756 ist (sind) mit der (den) physikalischen Registerdatei(en)einheit(en) 758 gekoppelt. Jede der physikalischen Registerdatei(en)einheiten 758 stellt eine oder mehrere physikalische Registerdateien dar, von denen verschiedene einen oder mehrere unterschiedliche Datentypen speichert, wie z. B. einen Skalar-Ganzzahl-, Skalar-Gleitkomma, Gepackt-Ganzzahl-, Gepackt-Gleitkomma-, Vektor-Ganzzahl-, Vektor-Gleitkomma-Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) etc. Bei einer Ausführungsform umfasst die physikalische Registerdatei(en)einheit 758 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine Skalar-Registereinheit. Die Registereinheiten können Architektur-Vektorregister, Vektormaskenregister und Universalregister bereitstellen. Die physikalische(n) Registerdatei(en)einheit(en) 758 wird (werden) von der Retirement-Einheit 754 überlappt, um verschiedene Weisen aufzuzeigen, in denen eine Registerumbenennung und Out-of-Order-Ausführung implementiert werden können (z. B. unter Verwendung eines Neuordnungspuffers/-puffern und einer Retirement-Registerdatei(en); unter Verwendung einer Zukunfts-Datei(en), eines Verlaufspuffers/-puffern und einer Retirement-Registerdatei(en); unter Verwendung von Registerabbildungen und eines Pools von Registern etc.). Die Retirement-Einheit 754 und die physikalische(n) Registerdatei(en)einheit(en) 758 sind mit den Ausführungscluster(n) 760 gekoppelt. Der (die) Ausführungscluster 760 weist (weisen) einen Satz von einer oder mehreren Ausführungseinheiten 762 und einen Satz von einer oder mehreren Speicherzugriffseinheiten 764 auf. Die Ausführungseinheiten 762 können verschiedene Operationen (z. B. Stellenversetzungen, Addition, Subtraktion, Multiplikation) an verschiedenen Typen von Daten (z. B. skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektor-Ganzzahl, Vektor-Gleitkomma) durchführen. Obwohl einige Ausführungsformen eine Anzahl von Ausführungseinheiten aufweisen können, die für spezielle Funktionen oder Sätze von Funktionen zweckbestimmt sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten aufweisen, die sämtliche Funktionen durchführen. Die Schedulereinheit(en) 756, physikalische(n) Registerdatei(en)einheit(en) 758 und Ausführungscluster 760 sind so gezeigt, dass sie möglicherweise in einer Vielzahl vorgesehen sind, da bestimmte Ausführungsformen separate Pipelines für bestimmte Typen von Daten/Operationen schaffen (z. B. eine Skalar-Ganzzahl-Pipeline, eine Skalar-Gleitkomma-/Gepackt-Ganzzahl-/Gepackt-Gleitkomma-/Vektor-Ganzzahl-/Vektor-Gleitkomma-Pipeline und/oder eine Speicherzugriff-Pipeline, die jeweils ihre eigene Schedulereinheit, physikalische Registerdatei(en)einheit und/oder Ausführungscluster aufweisen – und im Fall einer separaten Speicherzugriffseinheit-Pipeline werden bestimmte Ausführungsformen implementiert, bei denen nur ein Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 764 aufweist). Es versteht sich ferner, dass dort, wo separate Pipelines verwendet werden, nur eine dieser Pipelines eine Out-of-Order-Ausgabe-/Ausführung durchführt und der Rest In-Order ist.
  • Der Satz von Speicherzugriffseinheiten 764 ist mit der Speichereinheit 770 gekoppelt, die eine Daten-TLB-Einheit 772 aufweist, welche mit einer Daten-Cacheeinheit 774 gekoppelt ist, die mit einer Level-2-(L2-)Cacheeinheit 776 gekoppelt ist. Bei einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 764 eine Ladeeinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit aufweisen, von denen jede mit der Daten-TLB-Einheit 772 in der Speichereinheit 770 gekoppelt ist. Die Befehls-Cacheeinheit 734 ist ferner mit einer Level-2-(L2-)Cacheeinheit 776 in der Speichereinheit 770 gekoppelt. Die L2-Cacheeinheit 776 ist mit einer oder mehreren Ebenen des Cache und schließlich mit einem Hauptspeicher gekoppelt.
  • Als Beispiel kann die beispielhafte Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungskernarchitektur die Pipeline 700 wie folgt implementieren: 1) der Befehlsabruf 738 führt die Abruf- und Längendekodierstufen 702 und 704 durch; 2) die Dekodiereinheit 740 führt die Dekodierstufe 706 durch; 3) die Umbenennungs-/Allokationseinheit 752 führt die Allokationsstufe 708 und die Umbenennungsstufe 710 durch; 4) die Schedulereinheit(en) 756 führt (führen) die Schedulingstufe 712 durch; 5) die physikalische(n) Registerdatei(en)einheit(en) 758 und die Speichereinheit 770 führen die Registerlese-/Speicherlesestufe 714 durch; der Ausführungscluster 760 führt die Ausführungsstufe 716 durch; 6) die Speichereinheit 770 und die physikalische(n) Registerdatei(en)einheit(en) 758 führen die Zurückschreibungs-/Speicherschreibungsstufe 718 durch; 7) verschiedene Einheiten können in die Ausnahmebehandlungsstufe 722 involviert sein; und 8) die Retirement-Einheit 754 und die physikalische(n) Registerdatei(en)einheit(en) 758 führen die Commit-Stufe 724 durch.
  • Der Kern 790 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt sein können); den MIPS-Befehlssatz von MIPS Technologies, Sunnyvale, CA; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen, wie z. B. NEON) von ARM Holdings, Sunnyvale, CA), einschließlich der hier beschriebenen Befehl(e). Bei einer Ausführungsform weist der Kern 790 eine Logik zum Unterstützen einer Gepackt-Daten-Befehlssatzerweiterung (z. B. SSE, AVX1, AVX2 etc.) auf, wodurch ermöglicht wird, dass die Operationen, die von vielen Multimediaanwendungen angewendet werden, unter Verwendung von gepackten Daten durchgeführt werden.
  • Es versteht sich, dass der Kern ein Multithreading (Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies auf ein Vielzahl von Wegen durchführen kann, einschließlich Multithreading im Zeitscheibenverfahren, gleichzeitiges Multithreading (wobei ein einzelner physikalischer Kern einen logischen Kern für jeden der Threads bereitstellt, an denen der physikalische Kern gleichzeitig ein Multithreading durchführt) oder eine Kombination daraus (z. B. Abrufen und Dekodieren im Zeitscheibenverfahren und danach gleichzeitiges Multithreading, wie z. B. bei der Intel® Hyperthreading-Technologie).
  • Obwohl die Registerumbenennung im Kontext einer Out-of-Order-Ausführung beschrieben wird, versteht sich, dass die Registerumbenennung auch bei einer In-Order-Architektur angewendet werden kann. Obwohl die dargestellte Ausführungsform des Prozessors ferner separate Befehls- und Daten-Cacheeinheiten 734774 und eine gemeinsam genutzte L2-Cacheeinheit 776 aufweist, können alternative Ausführungsformen einen einzelnen internen Cache sowohl für Befehle als auch Daten aufweisen, wie zum Beispiel einen internen Level-1-(L1-)Cache oder mehrere Ebenen des internen Cache. Bei einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder Prozessors befindet, aufweisen. Alternativ kann sich der gesamte Cache außerhalb des Kerns und/oder Prozessors befinden.
  • Spezifische beispielhafte In-Order-Kernarchitektur
  • 8A–B zeigen ein Blockschaltbild einer spezifischeren beispielhaften In-Order-Kernarchitektur, wobei der Kern einer von vielen Logikblöcken (einschließlich anderen Kernen des gleichen Typs und/oder anderer Typen) in einem Chip ist. Die Logikblöcke kommunizieren je nach Anwendung über ein Zwischenverbindungsnetz mit hoher Bandbreite (z. B. ein Ringnetz) mit einer Festfunktionslogik, Speicher-I/O-Schnittstellen und einer weiteren erforderlichen I/O-Logik.
  • 8A ist ein Blockschaltbild eines einzelnen Prozessorkerns zusammen mit seiner Verbindung mit dem auf dem Die befindlichen Zwischenverbindungsnetz 802 und mit seinem lokalen Teilsatz des Level-2-(L2-)Cache 804, gemäß Ausführungsformen der Erfindung. Bei einer Ausführungsform unterstützt ein Befehlsdekodierer 800 den x86-Befehlssatz mit einer Gepackt-Daten-Befehlssatzerweiterung. Ein L1-Cache 806 ermöglicht Zugriffe mit niedriger Latenz auf den Cachespeicher in die Skalar- und Vektoreinheiten. Obwohl bei einer Ausführungsform (zum Vereinfachen der Auslegung) eine Skalareinheit 808 und eine Vektoreinheit 810 separate Registersätze (jeweils Skalarregister 812 und Vektorregister 814) verwenden und Daten, die zwischen diesen übertragen werden, in den Speicher geschrieben werden und dann aus einem Level-1-(L1-)Cache 806 zurückgelesen werden, kann bei alternativen Ausführungsformen eine andere Vorgehensweise (z. B. Verwendung eines einzelnen Registersatzes oder Vorsehen eines Kommunikationswegs, der ermöglicht, dass Daten zwischen den zwei Registerdateien übertragen werden, ohne geschrieben und zurückgelesen zu werden) angewendet werden.
  • Der lokale Teilsatz des L2-Cache 804 ist Teil eines globalen L2-Cache, welches in separate lokale Teilsätze unterteilt ist, und zwar einen pro Prozessorkern. Jeder Prozessorkern weist einen direkten Zugriffsweg auf seinen eigenen lokalen Teilsatz des L2-Cache 804 auf. Daten, die von einem Prozessorkern gelesen werden, werden in seinem L2-Cache-Teilsatz 804 gespeichert, und es kann schnell auf diese zugegriffen werden, und zwar parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen. Daten, die von einem Prozessorkern geschrieben werden, werden in seinem eigenen L2-Cache-Teilsatz 804 gespeichert und, falls erforderlich, aus anderen Teilsätzen entfernt. Das Ringnetz stellt eine Kohärenz für gemeinsam genutzte Daten sicher. Das Ringnetz ist bidirektional, um es Agenten, wie z. B. Prozessorkernen, L2-Caches und anderen logischen Blöcken, zu ermöglichen, innerhalb des Chips miteinander zu kommunizieren. Jeder Ring-Datenweg ist pro Richtung 1012 Bits breit.
  • 8B ist eine erweiterte Ansicht eines Teils des Prozessorkerns von 8A gemäß Ausführungsformen der Erfindung. 8B umfasst einen L2-Daten-Cache-Teil 806A des L1-Cache 804 sowie mehr Details bezüglich der Vektoreinheit 810 und der Vektorregister 814. Insbesondere ist die Vektoreinheit 810 eine 16-breite Vektorverarbeitungseinheit (vector processing unit – VPC) (siehe die 16-breite ALU 828), die einen oder mehrere von Ganzzahl-, Einfach-Genauigkeit- und Doppel-Genauigkeit-Gleitkomma-Befehlen ausführt. Die VPU unterstützt ein Swizzling der Registereingänge mit einer Swizzle-Einheit 820, eine numerische Umwandlung mit Numerisch-Umwandlungs-Einheiten 822A–B und eine Reproduktion mit einer Reproduktionseinheit 824 am Speichereingang. Schreibmaskenregister 826 ermöglichen eine Aussage bezüglich des daraus resultierenden Vektorschreibens.
  • Prozessor mit integriertem Speicher-Controller und Grafik
  • 9 ist ein Blockschaltbild eines Prozessors 900, der mehr als einen Kern aufweisen kann, einen integrierten Speicher-Controller aufweisen kann und eine integrierte Grafik aufweisen kann, gemäß Ausführungsformen der Erfindung. Die mit durchgezogenen Linien dargestellten Kästen in 9 zeigen einen Prozessor 900 mit einem einzelnen Kern 902A, einem Systemagenten 910, einem Satz von einer oder mehreren Bus-Controller-Einheiten 916, während die optional vorgesehenen in gestrichelten Linien dargestellten Kasten einen alternativen Prozessor 900 mit mehreren Kernen 902A–N, einem Satz von einer oder mehreren integrierten Speicher-Controller-Einheiten) 914 in der Systemagenteneinheit 910 und einer Speziallogik 908 darstellen.
  • Somit können unterschiedliche Implementierungen des Prozessors 900 aufweisen: 1) eine CPU, bei der die Speziallogik 908 eine Integriert-Grafik- und/oder Wissenschafts(Durchgangs-)Logik (die einen oder mehrere Kerne aufweisen kann) ist und die Kerne 902A–N ein oder mehrere Universalkerne sind (z. B. Universal-In-Order-Kerne, Universal-Out-of-Order-Kerne, eine Kombination aus den beiden); 2) einen Koprozessor, bei dem die Kerne 902A–N eine große Anzahl von Spezialkernen sind, die primär für die Grafik und/oder Wissenschaft (Durchsatz) vorgesehen sind; und 3) einen Koprozessor, bei dem die Kerne 902A–N eine große Anzahl von Universal-In-Order-Kernen sind. Somit kann der Prozessor 900 ein Universalprozessor, Koprozessor oder Spezialprozessor sein, wie zum Beispiel ein Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, eine GPGPU (general purpose graphics processing unit – Universal-Grafikverarbeitungseinheit), ein Hochdurchsatz-Koprozessor mit vielen integrierten Kernen (many integrated core – MIC) (mit 30 oder mehr Kernen), ein eingebetteter Prozessor und dergleichen. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 900 kann Teil von einem oder mehreren Substraten sein und/oder kann unter Anwendung einer aus einer Anzahl von Prozesstechnologien, wie zum Beispiel BiCMOS, CMOS oder NMOS, auf diesen implementiert werden.
  • Die Speicherhierarchie umfasst eine oder mehrere Ebenen des Cache innerhalb der Kerne, einen Satz von oder eine oder mehrere gemeinsam genutzte Cacheeinheiten 906 und einen (nicht gezeigten) externen Speicher, der mit dem Satz von integrierten Speicher-Controller-Einheiten 914 gekoppelt ist. Der Satz von gemeinsam genutzten Cacheeinheiten 906 kann einen oder mehrere Zwischenebenen-Caches aufweisen, wie z. B. Level-2-(L2-), Level-3-(L3-), Level-4(L4-) oder andere Ebenen eines Cache, einen Cache der letzten Ebene (last level Cache – LLC) und/oder Kombinationen daraus. Obwohl bei einer Ausführungsform eine ringbasierte Zwischenverbindungseinheit 912 die integrierte Grafiklogik 908, den Satz von gemeinsam genutzten Cacheeinheiten 906 und die Systemagenteneinheit 910/integrierte Speicher-Controller-Einheit 914 miteinander verbindet, kann bei alternativen Ausführungsformen jede Anzahl von bekannten Techniken zum Verbinden solcher Einheiten angewendet werden. Bei einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cacheeinheiten 906 und den Kernen 902A–N aufrechterhalten.
  • Bei einigen Ausführungsformen sind einer oder mehrere der Kerne 902A–N multithreading-fähig. Der Systemagent 910 weist diejenigen Komponenten auf, die die Kerne 902A–N koordinieren und betreiben. Die Systemagenteneinheit 910 kann zum Beispiel eine Energiesteuereinheit (power control unit – PCU) und eine Anzeigeeinheit aufweisen. Bei der PCU kann es sich um eine Logik und Komponenten handeln oder sie kann diese aufweisen, die zum Regeln des Energiezustands der Kerne 902A–N und der Integriert-Grafik-Logik 908 erforderlich sind. Die Anzeigeeinheit dient zum Treiben einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 902A–N können hinsichtlich des Architektur-Befehlssatzes homogen oder heterogen sein; das heißt, dass zwei der mehr der Kerne 902A–N in der Lage sein können, den gleichen Befehlssatz auszuführen, während andere in der Lage sein können, nur einen Teilsatz dieses Befehlssatzes oder einen anderen Befehlssatz auszuführen.
  • Beispielhafte Computerarchitekturen
  • 1013 sind Blockschaltbilder von beispielhaften Computerarchitekturen. Andere Systemauslegungen und -konfigurationen, die auf dem Gebiet für Laptops, Desktops, Handheld-PCs, persönliche digitale Assistenten, Konstruktions-Arbeitsstationen, Server, Netzvorrichtungen, Netz-Hubs, Schalter, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Medienplayer, Handheld-Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind ebenfalls geeignet. Im Allgemeinen ist eine große Vielzahl von Systemen und elektronischen Vorrichtungen, die in der Lage sind, einen Prozessor und/oder eine andere Ausführungslogik zu integrieren, wie hier offengelegt ist, generell geeignet.
  • 10 zeigt ein Blockschaltbild eines Systems 1000 gemäß einer Ausführungsform der vorliegenden Erfindung. Das System 1000 kann einen oder mehrere Prozessoren 1010, 1015 aufweisen, die mit einem Controller-Hub 1020 gekoppelt sind. Bei einer Ausführungsform weist der Controller-Hub 1020 einen Grafikspeicher-Controller-Hub (graphic memory Controller hub – GMCH) 1090 und einen Eingangs-/Ausgangs-Hub (input/output hub – IOH) 1050 (die sich auf separaten Chips befinden können) auf; der GMCH 1090 weist Speicher- und Grafik-Controller auf, mit denen ein Speicher 1040 und ein Koprozessor 1045 gekoppelt sind; der IOH 1050 koppelt Eingangs-/Ausgangs-(I/O-)Vorrichtungen 1060 mit dem GMCH 1090. Alternativ sind einer oder beide der Speicher- und Grafik-Controller innerhalb des Prozessors integriert (wie hier beschrieben ist), sind der Speicher 1040 und der Koprozessor 1045 direkt mit dem Prozessor 1010 und dem Controller-Hub 1020, der sich mit dem IOH 1050 auf einem einzelnen Chip befindet, gekoppelt.
  • Das optionale Vorsehen von zusätzlichen Prozessoren 1015 ist in 10 mit gestrichelten Linien dargestellt. Jeder Prozessor 1010, 1015 kann einen oder mehr der hier beschriebenen Prozessorkerne aufweisen und kann eine Version des Prozessors 900 sein.
  • Der Speicher 1040 kann zum Beispiel ein dynamischer Schreib-/Lesespeicher (dynamic random access memory – DRAM), Phasenwechsel-Speicher (phase change memory – PCM) oder eine Kombination aus den beiden sein. Bei mindestens einer Ausführungsform kommuniziert der Controller-Hub 1020 über einen Multi-Drop-Bus, wie z. B. einen Front-Side-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie z. B. eine QuickPath-Zwischenverbindung (QuickPath Interconnect – QPI) oder eine im Wesentlichen gleichen Verbindung 1095 mit dem (den) Prozessor(en) 1010, 1015.
  • Bei einer Ausführungsform ist der Koprozessor 1045 ein Spezialprozessor, wie zum Beispiel ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. Bei einer Ausführungsform kann der Controller-Hub 1020 einen Integriert-Grafik-Beschleuniger aufweisen.
  • Es kann eine Vielzahl von Unterschieden hinsichtlich eines Metrikspektrums, einschließlich Architektur-, Mikroarchitektur-, Wärme-, Energieverbrauchscharakteristiken und dergleichen, zwischen den physikalischen Ressourcen 1010, 1015 geben.
  • Bei einer Ausführungsform führt der Prozessor 1010 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. In diese Befehle können Koprozessorbefehle eingebettet sein. Der Prozessor 1010 erkennt diese Koprozessorbefehle als des Typs, der von dem angeschlossenen Koprozessor 1045 ausgeführt werden soll. Entsprechend gibt der Prozessor 1010 diese Koprozessorbefehle (oder Steuersignale, die die Koprozessorbefehle darstellen) auf einem Koprozessorbus oder einer anderen Zwischenverbindung an den Koprozessor 1045 aus. Der (die) Koprozessor(en) 1045 übernimmt (übernehmen) die empfangenen Koprozessorbefehle und führt (führen) diese aus.
  • 11 zeigt ein Blockschaltbild eines ersten spezifischeren beispielhaften Systems 1100 gemäß einer Ausführungsform der vorliegenden Erfindung. Wie in 11 gezeigt ist, ist ein Multiprozessorsystem 1100 ein Punkt-zu-Punkt-Zwischenverbindungssystem und weist einen ersten Prozessor 1170 und einen zweiten Prozessor 1180 auf, die über eine Punkt-zu-Punkt-Zwischenverbindung 1150 gekoppelt sind. Jeder der Prozessoren 1170 und 1180 kann eine Version des Prozessors 900 sein. Bei einer Ausführungsform der Erfindung sind die Prozessoren 1170 und 1180 jeweils Prozessoren 1010 und 1015, während ein Koprozessor 1138 der Koprozessor 1045 ist. Bei einer weiteren Ausführungsform sind die Prozessoren 1170 und 1180 jeweils der Prozessor 1010 und der Koprozessor 1045.
  • Die Prozessoren 1170 und 1180 sind so gezeigt, dass sie jeweils integrierte Speicher-Controller-(integrated memory controller – IMC-)Einheiten 1172 und 1182 aufweisen. Der Prozessor 1170 weist ferner als Teil seiner Bus-Controller-Einheiten Punkt-zu-Punkt-(P-P-)Schnittstellen 1176 und 1178 auf; auf im Wesentlichen gleiche Weise weist der zweite Prozessor 1180 P-P-Schnittstellen 1186 und 1188 auf. Die Prozessoren 1170, 1180 können Informationen über eine Punkt-zu-Punkt-(P-P-)Schnittstelle 1150 unter Verwendung von P-P-Schnittstellen-Schaltungen 1178, 1188 austauschen. Wie in 11 gezeigt ist, koppeln die IMCs 1172 und 1182 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 1132 und einem Speicher 1134, die Abschnitte eines Hauptspeichers sein können, welche lokal an die jeweiligen Prozessoren angeschlossen sind.
  • Die Prozessoren 1170, 1180 können jeweils Informationen über einzelne P-P-Schnittstellen 1152, 1154 unter Verwendung von Punkt-zu-Punk-Schnittstellen-Schaltungen 1176, 1194, 1186, 1198 mit einem Chipsatz 1190 austauschen. Der Chipsatz 1190 kann wahlweise Informationen über eine Hochleistungsschnittstelle 1139 mit dem Koprozessor 1138 austauschen. Bei einer Ausführungsform ist der Koprozessor 1138 ein Spezialprozessor, wie zum Beispiel ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein (nicht gezeigter) gemeinsam genutzter Cache kann in einem der beiden Prozessoren oder außerhalb der beiden Prozessoren vorgesehen sein, jedoch über eine P-P-Zwischenverbindung mit den Prozessoren verbunden sein, so dass Informationen aus dem lokalen Cache eines von beiden oder beider Prozessoren in dem gemeinsam genutzten Cache gespeichert werden können, falls ein Prozessor in einen Niedrigenergiemodus gesetzt ist.
  • Der Chipsatz 1190 kann über eine Schnittstelle 1196 mit einem ersten Bus 1116 gekoppelt sein. Bei einer Ausführungsform kann der erste Bus 1116 ein Peripheriekomponenten-Zwischenverbindungs-(peripheral component interconnect – PCI-)Bus oder ein Bus, wie z. B. ein PCI-Express-Bus oder ein anderer I/O-Zwischenverbindungsbus der dritten Generator sein, obwohl der Umfang der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in 11 gezeigt ist, können verschiedene I/O-Vorrichtungen 1114 zusammen mit einer Busbrücke 1118, die den ersten Bus 1116 mit einem zweiten Bus 1120 koppelt, mit dem ersten Bus 1116 gekoppelt sein. Bei einer Ausführungsform sind ein oder mehrere zusätzliche Prozessor(en) 1115, wie z. B. Koprozessoren, Hochdurchsatz-MIC-Prozessoren, GPGPUs, Beschleuniger (wie z. B. Grafikbeschleuniger oder Digitalsignalverarbeitungs-(DSP-)Einheiten), feldprogrammierbare Gatearrays oder jeder andere Prozessor, mit dem ersten Bus 1116 gekoppelt. Bei einer Ausführungsform kann der zweite Bus 1120 ein Low-Pin-Count-(LPC-)Bus sein. Verschiedene Vorrichtungen können mit einem zweiten Bus 1120 gekoppelt sein, einschließlich zum Beispiel eine Tastatur und/oder eine Maus 1122, Kommunikationsvorrichtungen 1127 und eine Speichereinheit 1128, wie z. B. bei einer Ausführungsform ein Plattenlaufwerk oder eine andere Massenspeichervorrichtung, die Befehle/Code und Daten 1130 aufweisen kann. Ferner kann ein Audio-I/O 1124 mit dem zweiten Bus 1120 gekoppelt sein. Es sei darauf hingewiesen, dass andere Architekturen möglich sind. Zum Beispiel kann anstelle der Punkt-zu-Punkt-Architektur von 11 ein System einen Multi-Drop-Bus oder eine andere solche Architektur implementieren.
  • 12 zeigt ein Blockschaltbild eines zweiten spezifischeren beispielhaften Systems 1200 gemäß einer Ausführungsform der vorliegenden Erfindung. Gleiche Elemente in 11 und 12 sind mit gleichen Bezugszeichen bezeichnet, und bestimmte Aspekte von 11 sind in 12 weggelassen worden, damit andere Aspekte von 12 nicht unklar werden.
  • 12 zeigt, dass die Prozessoren 1170, 1180 jeweils eine integrierte Speicher- und I/O-Steuerlogik (control logic – CL) 1172 und 1182 aufweisen können. Somit weisen die CL 1172, 1182 integrierte Speicher-Controller-Einheiten auf und weisen eine I/O-Steuerlogik auf. 12 zeigt, dass nicht nur die Speicher 1132, 1134, die mit den CL 1172, 1182 gekoppelt sind, sondern dass auch I/O-Vorrichtungen 1214 mit der Steuerlogik 1172, 1182 gekoppelt sind. Alt-I/O-Vorrichtungen 1215 sind mit dem Chipsatz 1190 gekoppelt.
  • 13 zeigt ein Blockschaltbild eines SoC 1300 gemäß einer Ausführungsform der vorliegenden Erfindung. Im Wesentlichen gleiche Elemente wie in 9 sind mit gleichen Bezugszeichen bezeichnet. Ferner sind in gestrichelten Linien dargestellte Kästen optionale Merkmale bei weiter entwickelten SoCs. In 13 ist (sind) eine Zwischenverbindungseinheit(en) 1302 gekoppelt mit: einem Anwendungsprozessor 1310, der einen Satz von einem oder mehreren Kernen 902A–N und eine gemeinsam genutzte Cacheeinheit(en) 906 aufweist; einer Systemagenteneinheit 910; einer Bus-Controller-Einheit(en) 916; einer integrierten Speicher-Controller-Einheit(en) 914; einem Satz von einem oder mehreren Koprozessoren 1320, die eine Integriert-Grafik-Logik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor aufweisen können; einer statischen Schreib-/Lesespeicher-(SRAM-)Einheit 1330; einer Direktspeicherzugriffs-(direct memory access – DMA-)Einheit 1332; und einer Anzeigeeinheit 1340 zum Koppeln mit einer oder mehreren externen Anzeigen. Bei einer Ausführungsform weist (weisen) der (die) Koprozessor(en) 1320 eine Spezialprozessor auf, wie zum Beispiel einen Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, GPGPU, einen Hochdurchsatz-MIC-Prozessor, eingebetteten Prozessor oder dergleichen.
  • Ausführungsformen der hier offengelegten Mechanismen können in der Hardware, Software, Firmware oder einer Kombination aus solchen Implementierungsansätzen implementiert sein. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert sein, die auf programmierbaren Systemen ausgeführt werden, welche mindestens einen Prozessor, ein Speicherungssystem (einschließlich eines flüchtigen und nichtflüchtigen Speichers und/oder Speicherungselementen), mindestens eine Eingangsvorrichtung und mindestens eine Ausgangsvorrichtung umfassen.
  • Ein Programmcode, wie z. B. der in 11 dargestellte Code 1130, ist auf die Eingangsbefehle zum Ausführen der hier beschriebenen Funktionen und Erzeugen von Ausgangsinformationen anwendbar. Die Ausgangsinformationen sind auf bekannte Weise auf eine oder mehrere Ausgabevorrichtungen anwendbar. Im Rahmen dieser Anmeldung weist eine Verarbeitungseinheit ein System auf, das einen Prozessor umfasst, wie zum Beispiel: einen Digitalsignalprozessor (DSP), einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (application specific integrated circuit – ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer verfahrens- oder objektorientierten höheren Programmiersprache zum Kommunizieren mit einem Verarbeitungssystem implementiert werden Der Programmcode kann ferner, falls gewünscht, in einer Assembler- oder Maschinensprache implementiert werden. Die hier beschriebenen Mechanismen sind in ihrem Umfang nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können mittels charakteristischer Anweisungen implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das eine unterschiedliche Logik in dem Prozessor darstellt und das, wenn es von einer Maschine gelesen wird, bewirkt, dass die Maschine eine Logik zum Durchführen der hier beschriebenen Techniken erstellt. Solche Verkörperungen, die als ”IP-Kerne” bekannt sind, können auf einem realen maschinenlesbaren Medium gespeichert werden und zu verschiedenen Kunden oder Herstellanlagen zwecks Ladens in die Fertigungsmaschinen, die die Logik oder den Prozessor tatsächlich herstellen, geliefert werden.
  • Solche maschinenlesbaren Speichermedien können umfassen, sind jedoch nicht beschränkt auf nichttransitorische reale Anordnungen von Artikeln, die von einer Maschine oder Vorrichtung hergestellt oder ausgebildet werden, einschließlich Speichermedien, wie z. B. Festplatten, jeder andere Typ von Platte, einschließlich Floppy Disks, optischen Platten, Kompaktdisketten-Nurlesespeichern (compact disc read-only memories – CD-ROMs), wiederbeschreibbare Kompaktdisketten (compact disk rewritables – CD-RWs) und magnetooptische Platten, Halbleitervorrichtungen, wie z. B. Nurlesespeicher (ROMs), Schreib-/Lesespeicher (RAMs), wie z. B. dynamische Schreib-/Lesespeicher (DRAMs), statische Schreib-/Lesespeicher (SRAMs), löschbare programmierbare Nurlesespeicher (erasable programmable read-only memories – EPROMs), Flashspeicher, elektrisch löschbare programmierbare Nurlesespeicher (electrically erasable programmable read-only memories – EEPROMSs), Phasenwechsel-Speicher (PCM), magnetische oder optische Karten und jeden anderen Typ von Medien, der zum Speichern von elektronischen Befehlen geeignet ist.
  • Entsprechend umfassen Ausführungsformen der Erfindung ferner nichttransitorische reale maschinenlesbare Medien, die Befehle enthalten oder Auslegungsdaten aufnehmen, wie z. B. Hardwarebeschreibungssprache (Hardware Description Language – HDL), die hier beschriebene Strukturen, Schaltungen, Einrichtungen, Prozessoren und/oder Systemmerkmale definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Obwohl bestimmte beispielhafte Ausführungsformen in den beiliegenden Zeichnungen beschrieben und gezeigt sind, versteht sich, dass solche Ausführungsformen die Erfindung im weitesten Sinn nur veranschaulichen und nicht einschränken und dass diese Erfindung nicht auf die spezifischen gezeigten und beschriebenen Auslegungen und Anordnungen beschränkt ist, da verschiedene andere Modifikationen für Durchschnittsfachleute auf dem Sachgebiet beim Lesen dieser Offenlegung offensichtlich werden können. In einem Technologiebereich wie diesem, in dem ein schnelles Wachstum erfolgt und Weiterentwicklungen nicht leicht vorhersehbar sind, können die offengelegten Ausführungsformen in ihrer Anordnung und ihren Details leicht modifizierbar sein, was durch die Ermöglichung technologischer Entwicklungen vereinfacht wird, ohne dass dadurch von den Prinzipien der vorliegenden Offenlegung oder dem Schutzumfang der beiliegenden Patentansprüche abgewichen wird.

Claims (22)

  1. Einrichtung, die umfasst: einen erweiterten Registersatz, der in eine Vielzahl von Banken unterteilt ist; ein aktuelles Bankregister zum Bereitstellen eines Zeigers auf eine der Banken, die aktuell aktiv ist; und eine Ausführungsschaltungsanordnung, die mit dem erweiterten Registersatz und dem aktuellen Bankregister gekoppelt ist, wobei die Ausführungsschaltungsanordnung: einen Befehl zum Wechseln von Kontexten von zwei Benutzerebenen-Threads, die einen ersten Thread und einen zweiten Thread umfassen, empfangt, wobei der erste Thread einen ersten Kontext aufweist, der in einer ersten der Banken gesichert ist, und der zweite Thread einen zweiten Kontext aufweist, der in einer zweiten der Banken gesichert ist, den Zeiger in Reaktion auf den Befehl von der ersten Bank zu der zweiten Bank wechselt, und den zweiten Thread unter Verwendung des in der zweiten Bank gespeicherten zweiten Kontextes ausführt.
  2. Einrichtung nach Anspruch 1, wobei eine Kopie der Kontexte in einer Vielzahl von Speicherregionen gespeichert ist, die der Vielzahl von Banken des erweiterten Registersatzes entsprechen.
  3. Einrichtung nach Anspruch 2, die ferner eine Snoop-Schaltungsanordnung umfasst zum Nachverfolgen des Zugriffs auf die Speicherregionen und zum Auslösen eines Ereignisses zum Synchronisieren der Kontexte zwischen einem Bereich der Speicherregionen und einer entsprechenden Bank des erweiterten Registersatzes, wenn der Zugriff detektiert wird.
  4. Einrichtung nach Anspruch 1, die ferner eine Vielzahl von Vektorregistern umfasst, welche in eine Vielzahl von Teilbereichen aufgeteilt sind, wobei eine Kopie der Kontexte in der Vielzahl von Teilbereichen, die der Vielzahl von Banken des erweiterten Registersatzes entsprechen, gespeichert ist.
  5. Einrichtung nach Anspruch 4, wobei jedes der Vektorregister ein oder mehrere Zustandsbits, die diesem zugeordnet sind, aufweist, um anzuzeigen, ob eine jüngste Kopie eines vorgegebenen Kontextes in den Vektorregistern oder in dem erweiterten Registersatz gespeichert ist.
  6. Einrichtung nach Anspruch 1, die ferner eine Dekodierschaltungsanordnung umfasst, welche mit der Ausführungsschaltungsanordnung gekoppelt ist, um ein Register, das von einem vorgegebenen Benutzerebenen-Thread referenziert wird, in einer entsprechenden Bank des erweiterten Registersatzes abzubilden.
  7. Einrichtung nach Anspruch 1, wobei die Ausführungsschaltungsanordnung in Reaktion auf den Befehl unbedingt auf den zweiten Kontext umschaltet.
  8. Einrichtung nach Anspruch 1, die ferner eine Front-End-Schaltungsanordnung umfasst, welche mit der Ausführungsschaltungsanordnung gekoppelt ist, um zu bestimmen, ob eine Bedingung zum Umschalten auf den zweiten Kontext erfüllt ist.
  9. Einrichtung nach Anspruch 1, wobei der Befehl einer eines Paars von Befehlen ist, die die Grenze eines Befehlsblocks markieren, der eine Vielzahl von Befehlen aufweist, und wobei jeder Befehl in dem Befehlsblock ein Kandidat für eine Kontextumschaltung ist.
  10. Einrichtung nach Anspruch 1, die ferner ein Maskenregister aufweist, das mit der Ausführungsschaltungsanordnung gekoppelt ist, wobei das Maskenregister eine Vielzahl von Maskenbits umfasst, wobei jedes Maskenbit einer der Banken zugeordnet ist und anzeigt, ob die eine der Banken wegen der Kontextumschaltung deaktiviert worden ist.
  11. Verfahren, das umfasst: Ausführen eines ersten Threads durch einen Prozessor unter Verwendung eines ersten in einer ersten von Banken eines erweiterten Registersatzes gespeicherten Kontextes, wobei der erste Thread ein Benutzerebenen-Thread ist; Empfangen durch den Prozessor eines Befehls zum Wechseln von Kontexten des ersten Threads und eines zweiten Threads, wobei der zweite Thread ein weiterer Benutzerebenen-Thread mit einem zweiten in einer zweiten der Banken eines erweiterten Registersatzes gesicherten Kontext ist; Wechseln eines Registerzeigers, der auf die erste Bank als eine aktuell aktive Bank zeigt, auf die zweite Bank in Reaktion auf den Befehl; und Ausführen des zweiten Threads durch den Prozessor unter Verwendung des zweiten in der zweiten Bank gespeicherten Kontextes.
  12. Verfahren nach Anspruch 11, wobei eine Kopie der Kontexte in einer Vielzahl von Speicherregionen, die der Vielzahl von Banken des erweiterten Registersatzes entsprechen, gespeichert wird.
  13. Verfahren nach Anspruch 12, das ferner umfasst: Nachverfolgen des Zugriffs auf die Speicherregionen; und Auslösen eines Ereignisses zum Synchronisieren der Kontexte zwischen einem Bereich der Speicherregionen und einer entsprechenden Bank des erweiterten Registersatzes, wenn der Zugriff detektiert wird.
  14. Verfahren nach Anspruch 11, wobei eine Kopie der Kontexte in einer Vielzahl von Teilbereichen von Vektorregistern, die der Vielzahl von Banken des erweiterten Registersatzes entsprechen, gespeichert wird.
  15. Verfahren nach Anspruch 14, wobei jedes der Vektorregister ein oder mehrere Zustandsbits, die diesem zugeordnet sind, aufweist, um anzuzeigen, ob eine jüngste Kopie eines vorgegebenen Kontextes in den Vektorregistern oder in dem erweiterten Registersatz gespeichert ist.
  16. Verfahren nach Anspruch 11, wobei das Ausführen des Befehls ein unbedingtes Umschalten auf den zweiten Kontext bewirkt.
  17. Verfahren nach Anspruch 11, wobei das Ausführen des Befehls ein Bestimmen, ob eine Bedingung für das Umschalten auf den zweiten Kontext erfüllt ist, bewirkt.
  18. Verfahren nach Anspruch 11, wobei der Befehl einer eines Paars von Befehlen ist, die die Grenze eines Befehlsblocks markieren, welcher eine Vielzahl von Befehlen aufweist, und wobei jeder Befehl in dem Befehlsblock ein Kandidat für eine Kontextumschaltung ist.
  19. Verfahren nach Anspruch 11, das ferner das Ausführen des Befehls ohne Einbeziehung eines Betriebssystems umfasst.
  20. System, das umfasst: einen Speicher; und einen Prozessor, der mit dem Speicher gekoppelt ist, wobei der Prozessor umfasst: einen erweiterten Registersatz, der in eine Vielzahl von Banken unterteilt ist, ein aktuelles Bankregister zum Bereitstellen eines Zeigers auf eine der Banken, die aktuell aktiv ist, und eine Ausführungsschaltungsanordnung, die mit dem erweiterten Registersatz und dem aktuellen Bankregister gekoppelt ist, wobei die Ausführungsschaltungsanordnung einen Befehl zum Wechseln von Kontexten von zwei Benutzerebenen-Threads, die einen ersten Thread und einen zweiten Thread umfassen, empfängt, wobei der erste Thread einen ersten in einer ersten der Banken gesicherten Kontext aufweist und der zweite Thread einen zweiten in einer zweiten der Banken gesicherten Kontext aufweist, um den Zeiger in Reaktion auf den Befehl von der ersten Bank zu der zweiten Bank zu wechseln und um den zweiten Thread unter Verwendung des zweiten in der zweiten Bank gespeicherten Kontextes auszuführen.
  21. System nach Anspruch 20, wobei eine Kopie der Kontexte in einer Vielzahl von Speicherregionen des Speichers, die der Vielzahl von Banken des erweiterten Registersatzes entsprechen, gespeichert ist.
  22. System nach Anspruch 20, das ferner eine Vielzahl von Vektorregistern umfasst, die in eine Vielzahl von Teilbereichen aufgeteilt sind, wobei eine Kopie der Kontexte in der Vielzahl von Teilbereichen, die der Vielzahl von Banken in dem erweiterten Registersatz entsprechen, gespeichert ist.
DE112013003731.9T 2012-09-28 2013-06-24 Neue befehls- und hocheffiziente Mikroarchitektur zum ermöglichen einer sofortigen Kontextumschaltung für Benutzerebenen-Threading Pending DE112013003731T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/630,124 2012-09-28
US13/630,124 US20140095847A1 (en) 2012-09-28 2012-09-28 Instruction and highly efficient micro-architecture to enable instant context switch for user-level threading
PCT/US2013/047401 WO2014051771A1 (en) 2012-09-28 2013-06-24 A new instruction and highly efficient micro-architecture to enable instant context switch for user-level threading

Publications (1)

Publication Number Publication Date
DE112013003731T5 true DE112013003731T5 (de) 2015-05-21

Family

ID=50386392

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112013003731.9T Pending DE112013003731T5 (de) 2012-09-28 2013-06-24 Neue befehls- und hocheffiziente Mikroarchitektur zum ermöglichen einer sofortigen Kontextumschaltung für Benutzerebenen-Threading

Country Status (7)

Country Link
US (1) US20140095847A1 (de)
JP (1) JP6143872B2 (de)
KR (1) KR101771825B1 (de)
CN (1) CN104603795B (de)
DE (1) DE112013003731T5 (de)
GB (1) GB2519254A (de)
WO (1) WO2014051771A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220383930A1 (en) * 2021-05-28 2022-12-01 Micron Technology, Inc. Power savings mode toggling to prevent bias temperature instability

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
US9336180B2 (en) * 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9292470B2 (en) * 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US9501276B2 (en) * 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
CN104461758B (zh) * 2014-11-10 2017-08-25 中国航天科技集团公司第九研究院第七七一研究所 一种容忍cache缺失快速清空流水线的异常处理方法及其处理结构
US9952867B2 (en) * 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
GB2540937B (en) * 2015-07-30 2019-04-03 Advanced Risc Mach Ltd Graphics processing systems
US9946566B2 (en) * 2015-09-28 2018-04-17 Intel Corporation Method and apparatus for light-weight virtualization contexts
US10761983B2 (en) * 2017-11-14 2020-09-01 International Business Machines Corporation Memory based configuration state registers
US10558366B2 (en) 2017-11-14 2020-02-11 International Business Machines Corporation Automatic pinning of units of memory
US10761751B2 (en) 2017-11-14 2020-09-01 International Business Machines Corporation Configuration state registers grouped based on functional affinity
US10901738B2 (en) 2017-11-14 2021-01-26 International Business Machines Corporation Bulk store and load operations of configuration state registers
US10664181B2 (en) 2017-11-14 2020-05-26 International Business Machines Corporation Protecting in-memory configuration state registers
US10552070B2 (en) * 2017-11-14 2020-02-04 International Business Machines Corporation Separation of memory-based configuration state registers based on groups
US10635602B2 (en) * 2017-11-14 2020-04-28 International Business Machines Corporation Address translation prior to receiving a storage reference using the address to be translated
US10496437B2 (en) 2017-11-14 2019-12-03 International Business Machines Corporation Context switch by changing memory pointers
US10698686B2 (en) * 2017-11-14 2020-06-30 International Business Machines Corporation Configurable architectural placement control
US10642757B2 (en) 2017-11-14 2020-05-05 International Business Machines Corporation Single call to perform pin and unpin operations
US10592164B2 (en) 2017-11-14 2020-03-17 International Business Machines Corporation Portions of configuration state registers in-memory
US11811401B2 (en) 2019-08-14 2023-11-07 Google Llc Dual-mode operation of application specific integrated circuits
CN111857831B (zh) * 2020-06-11 2021-07-20 成都海光微电子技术有限公司 一种存储体冲突优化方法、并行处理器及电子设备
CN112463327B (zh) * 2020-11-25 2023-01-31 海光信息技术股份有限公司 逻辑线程快速切换的方法、装置、cpu芯片及服务器

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3644042B2 (ja) * 1993-11-15 2005-04-27 ソニー株式会社 マルチタスク処理装置
JPH09212371A (ja) * 1996-02-07 1997-08-15 Nec Corp レジスタ退避及び復元システム
US5920710A (en) * 1996-11-18 1999-07-06 Advanced Micro Devices, Inc. Apparatus and method for modifying status bits in a reorder buffer with a large speculative state
US6401155B1 (en) * 1998-12-22 2002-06-04 Philips Electronics North America Corporation Interrupt/software-controlled thread processing
US20020103847A1 (en) * 2001-02-01 2002-08-01 Hanan Potash Efficient mechanism for inter-thread communication within a multi-threaded computer system
US7853778B2 (en) * 2001-12-20 2010-12-14 Intel Corporation Load/move and duplicate instructions for a processor
JP2004220070A (ja) * 2003-01-09 2004-08-05 Japan Science & Technology Agency コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
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
JP2006092042A (ja) * 2004-09-21 2006-04-06 Sanyo Electric Co Ltd 情報処理装置及びコンテキスト切り替え方法
US7827551B2 (en) * 2005-09-21 2010-11-02 Intel Corporation Real-time threading service for partitioned multiprocessor systems
US7461275B2 (en) * 2005-09-30 2008-12-02 Intel Corporation Dynamic core swapping
US8689215B2 (en) * 2006-12-19 2014-04-01 Intel Corporation Structured exception handling for application-managed thread units
US7933759B2 (en) * 2008-03-28 2011-04-26 Microsoft Corporation Predicate checking for distributed systems
US20100312991A1 (en) * 2008-05-08 2010-12-09 Mips Technologies, Inc. Microprocessor with Compact Instruction Set Architecture
US20110055495A1 (en) * 2009-08-28 2011-03-03 Qualcomm Incorporated Memory Controller Page Management Devices, Systems, and Methods
US8490113B2 (en) * 2011-06-24 2013-07-16 International Business Machines Corporation Messaging in a parallel computer using remote direct memory access (‘RDMA’)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220383930A1 (en) * 2021-05-28 2022-12-01 Micron Technology, Inc. Power savings mode toggling to prevent bias temperature instability
US11545209B2 (en) * 2021-05-28 2023-01-03 Micron Technology, Inc. Power savings mode toggling to prevent bias temperature instability

Also Published As

Publication number Publication date
US20140095847A1 (en) 2014-04-03
JP6143872B2 (ja) 2017-06-07
CN104603795B (zh) 2018-11-06
KR20150030274A (ko) 2015-03-19
GB2519254A (en) 2015-04-15
KR101771825B1 (ko) 2017-08-25
JP2015534188A (ja) 2015-11-26
WO2014051771A1 (en) 2014-04-03
GB201500863D0 (en) 2015-03-04
CN104603795A (zh) 2015-05-06

Similar Documents

Publication Publication Date Title
DE112013003731T5 (de) Neue befehls- und hocheffiziente Mikroarchitektur zum ermöglichen einer sofortigen Kontextumschaltung für Benutzerebenen-Threading
DE112012007088B4 (de) Vorrichtung, verfahren und system mit einem befehl zum reduzieren von elementen in einem vektorregister mit einem schrittweisem zugriffsmuster
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE112013003743T5 (de) Beschleunigte spurübergreifende Vektorreduzierungsbefehle
DE102014003790A1 (de) Parallelvorrichtung für hochkomprimierte Hochgeschwindigkeits-LZ77-Tokenisierung und Huffman-Codierung für Deflate-Komprimierung
DE102018125257A1 (de) Defragmentierter und effizienter mikrooperationscache
DE102014003689A1 (de) Verfolgung des kontrollflusses von befehlen
DE112013004751T5 (de) Prozessor mit mehreren Kernen, gemeinsam genutzter Kernerweiterungslogik und gemeinsam genutzten Kernerweiterungsnutzungsbefehlen
DE112012007119T5 (de) Threadmigration-Unterstützung für Kerne unterschiedlicher Architektur
DE112013004867T5 (de) Befehl und Logik zum Bereitstellen von Push-Puffer-Kopier- und Speicher-Funktionalität
DE112017001716T5 (de) Speicherkopierbefehle, prozessoren, verfahren und systeme
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE112010004322T5 (de) Vorhersagen und Vermeiden von Operand-Speichervorgang-Vergleich-Gefahren in Mikroprozessoren mit abweichender Reihenfolge
DE102008061062A1 (de) Befehle und Logik zum Durchführen von Maskenlade- und -speicheroperationen
DE102018002294A1 (de) Effizientes bereichsbasiertes speicher-rückschreiben zum verbessern der host-zu-geräte-kommunikation für optimale energie und leistung
DE112013004783T5 (de) Durch Lese- und Schreibmasken gesteuerter Vektor-Verschiebebefehl
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
DE102015002254A1 (de) Verfahren und Gerät zum wirksamen Ausführen von Hash-Operationen
DE112017001700T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen zum Abruf von Daten auf der angegebenen Cache-Ebene mit garantiertem Abschluss
DE112013005239T5 (de) Anweisung zur Beschleunigung des drahtlosen SNOW 3G- Sicherheitsalgorithmus
DE102018002525A1 (de) Hybridatomaritätsunterstützung für einen binärübersetzungsbasierten mikroprozessor
DE112013004800T5 (de) Anweisung zur Bitverschiebung nach links mit Ziehen von Einsen in niedrigwertigere Bit
DE112017003332T5 (de) Öffnungszugriffsprozessoren, verfahren, systeme und befehle
DE202019005686U1 (de) Skalierbare Gesamtspeicherverschlüsselungs-Engine mit mehrfachen Schlüsseln

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06K0009380000

Ipc: G06F0009312000

R016 Response to examination communication