DE102018126172A1 - Stromcache - Google Patents

Stromcache Download PDF

Info

Publication number
DE102018126172A1
DE102018126172A1 DE102018126172.1A DE102018126172A DE102018126172A1 DE 102018126172 A1 DE102018126172 A1 DE 102018126172A1 DE 102018126172 A DE102018126172 A DE 102018126172A DE 102018126172 A1 DE102018126172 A1 DE 102018126172A1
Authority
DE
Germany
Prior art keywords
memory
cache
address
memory block
block
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.)
Withdrawn
Application number
DE102018126172.1A
Other languages
English (en)
Inventor
Ariel Sabba
Shani Rehana
Michael Tal
Suzan Baransi
Lihu Rappoport
Jared Stark
Franck Sala
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 DE102018126172A1 publication Critical patent/DE102018126172A1/de
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6026Prefetching based on access pattern detection, e.g. stride based prefetch
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

Ein System und ein Verfahren zum Stromcache-Speicherabruf umfassen ein Anwenden eines Stromcache zum Vorhersagen einer Folge von Befehlen und Daten über mehrere Verzweigungen hinweg. Ähnlich wie bei einem herkömmlichen Computercache speichert und liefert der Stromcache Daten oder Befehle schneller als sie von langsameren Datenspeichermedien wie etwa einem Befehlscache geliefert werden. Der hierin beschriebene Stromcache bietet die Möglichkeit, Befehle und Datenanforderungen über mehrere Verzweigungen pro Zyklus hinweg und insbesondere über mehrere genommene Verzweigungen pro Zyklus hinweg vorherzusagen. Dieser Stromcache erhöht die Befehlslieferbandbreite und reduziert gleichzeitig den Gesamtenergieverbrauch durch Einsparen von Zyklen der Verzweigungsprädiktorstrukturen.

Description

  • Technisches Gebiet
  • Hier beschriebene Ausführungsformen beziehen sich im Allgemeinen auf eine Rechenvorrichtungs-Cacheoperation.
  • Hintergrund
  • Es besteht ein laufender Bedarf an einer verbesserten Computerverarbeitungseffizienz. Die Verarbeitungseffizienz basiert zum Teil auf einer Prozessorbefehls-Bandbreite, die die Fähigkeit eines Prozessors umfasst, Daten oder Befehle zu identifizieren, abzurufen, zu empfangen und zu verarbeiten. Einige Rechenvorrichtungen verwenden die Stromverarbeitung, um eine Reihe von Operationen auf eine Folge von Daten anzuwenden. Beim Abrufen einer definierten Folge von Befehlen und Daten kann das Speicherzugriffsmuster für diese Folge von Daten basierend auf den erwarteten Daten in der Folge vorhergesagt werden. Eine Folge von Daten kann jedoch basierend auf der Ausgabe vorhergehender Operationen in unterschiedliche Folgen verzweigen, was die Stromverarbeitungsleistung reduziert und den Energieverbrauch der Vorrichtung erhöht.
  • Figurenliste
    • 1 ist ein Blockdiagramm, das eine Stromcachezeile gemäß einer Ausführungsform darstellt.
    • 2 ist ein Blockdiagramm, das eine Stromcachearchitektur gemäß einer Ausführungsform darstellt.
    • 3 ist ein Blockdiagramm eines Stromcacheverfahrens gemäß mindestens einer Ausführungsform.
    • 4 ist ein Blockdiagramm, das ein Stromcachesystem in der beispielhaften Form einer elektronischen Vorrichtung gemäß einer beispielhaften Ausführungsform zeigt.
    • 5A-5B sind Blockdiagramme, die ein generisches vektorfreundliches Befehlsformat und Befehlsschablonen davon gemäß einer Ausführungsform zeigen.
    • 6A-6D sind Blockdiagramme, die ein beispielhaftes spezifisches vektorfreundliches Befehlsformat gemäß einer Ausführungsform zeigen.
    • 7 ist ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform der Erfindung.
    • 8A ist ein Blockdiagramm, das sowohl eine beispielhafte reihenfolgetreue Pipeline als auch eine beispielhafte eine nicht reihenfolgetreue Ausgabe-/Ausführungspipeline mit Registerumbenennung gemäß einer Ausführungsform zeigt.
    • 8B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines Kerns von reihenfolgetreuer Architektur als auch eines beispielhaften Kerns von einer Architektur mit nicht reihenfolgetreuer Ausgabe-/Ausführungspipeline und Registerumbenennung, der in einem Prozessor gemäß einer Ausführungsform enthalten sein soll, zeigt.
    • 9A-9B zeigen ein Blockdiagramm einer spezifischeren beispielhaften reihenfolgetreuen Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne des gleichen Typs und/oder verschiedener Typen) in einem Chip wäre.
    • 10 ist ein Blockdiagramm eines Prozessors, der mehr als einen Kern haben kann, einen integrierten Speichercontroller haben kann und integrierte Grafik haben kann, gemäß einer Ausführungsform.
    • 11 ist ein Blockdiagramm eines Systems gemäß einer Ausführungsform.
    • 12 ist ein Blockdiagramm eines ersten spezifischeren beispielhaften Systems gemäß einer Ausführungsform.
    • 13 ist ein Blockdiagramm eines zweiten, spezifischeren beispielhaften Systems gemäß einer Ausführungsform.
    • 14 ist ein Blockdiagramm eines SoC gemäß einer Ausführungsform.
    • 15 ist ein Blockdiagramm, das die Verwendung eines Softwarebefehlswandlers zum Umwandeln von binären Befehlen in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß einer Ausführungsform gegenüberstellt.
  • Genaue Beschreibung von Ausführungsformen
  • Eine Lösung für Probleme, vor denen die Stromverarbeitung steht, umfasst ein Anwenden eines Stromcache zum Vorhersagen einer Folge von Befehlen und Daten über mehrere Verzweigungen hinweg. Ähnlich wie bei einem herkömmlichen Computercache speichert und liefert der Stromcache Daten oder Befehle schneller als sie von einem Befehlscache geliefert werden. Der hierin beschriebene Stromcache bietet die Möglichkeit, Befehle und Datenanforderungen über mehrere Verzweigungen pro Zyklus hinweg und insbesondere über mehrere genommene Verzweigungen pro Zyklus hinweg vorherzusagen. Dieser Stromcache erhöht die Befehlslieferbandbreite und reduziert gleichzeitig den Gesamtenergieverbrauch, indem Zyklen der Verzweigungsprädiktorstrukturen eingespart werden.
  • Die folgende Beschreibung und die Zeichnungen zeigen beispielhafte Ausführungsformen, obwohl andere Ausführungsformen strukturelle, logische, elektrische, prozessbezogene und andere Änderungen aufweisen können. Teile und Merkmale verschiedener Ausführungsformen können in anderen Ausführungsformen aufgenommen werden oder diese ersetzen. Ausführungsformen, die in den Ansprüchen dargelegt sind, umfassen alle vorhandenen Äquivalente dieser Ansprüche.
  • 1 ist ein Blockdiagramm, das eine Stromcachezeile 100 gemäß einer Ausführungsform darstellt. Die Stromcachezeile 100 zeigt drei Abrufblöcke: Block A 110, Block B 120 und Block C 130. Jeder dieser Blöcke stellt ein Holen (z. B. einen Abruf) von Daten dar, wie etwa eine zur Ausführung abgerufene Codezeile. Auf jeden der drei Blöcke (z. B. drei Codezeilen) kann einzeln zugegriffen werden oder in einer beliebigen Reihenfolge. Viele Rechenoperationen verwenden eine konsistente Folge von Codezeilen. 1 zeigt ein Beispiel von drei aufeinanderfolgenden Blöcken. Der Stromcache kann Gruppen von aufeinanderfolgenden Blöcken als stabile Zeile (z. B. einen stabilen Strom) verfolgen und identifizieren, wobei der stabile Strom eine bestimmte Folge von Befehlen definiert.
  • Wie in 1 gezeigt, umfasst die Stromcachezeile 100 einen Abruf von Block A 110, gefolgt von einem Abruf von Block B 120, gefolgt von einem Abruf von Block C 130. In einem Beispiel identifiziert der Stromcache, dass Block B 120 Teil einer stabilen Zeile ist und wenn der Stromcache anschließend Block B 120 abruft, ruft er automatisch sowohl Block A 110 als auch Block B 120 ab. Der Stromcache kann auch das Abrufen von Block B 120 vorhersagen und kann als Antwort auf diese Vorhersage sowohl Block A 110 als auch Block B 120 abrufen. Dies erhöht die Abrufbandbreite, wodurch die Verarbeitungsleistung von elektronischen Vorrichtungen verbessert wird. In einem Beispiel erhöht die erhöhte Abrufbandbreite eine Vorrichtungsleistung, indem dem Prozessor abgerufene Befehlen so schnell bereitgestellt werden, wie sie verarbeitet werden können.
  • Diese Stromabrufarchitektur würde die Notwendigkeit einer separaten Identifizierung und eines separaten Abrufs von Block B 120 vermeiden. Diese Stromabrufarchitektur vermeidet auch die Verwendung der verschiedenen Hardware- und Software-Komponenten, die ansonsten bei der separaten Identifizierung und dem separaten Abruf zusätzlicher Blöcke innerhalb eines längeren Stroms von Blöcken verwendet würden, wodurch Rechenoperationen und die für diese Komponenten erforderliche Energie eingespart werden. In dem in 1 gezeigten Beispiel vermeidet diese Stromabrufarchitektur durch Vermeiden der Notwendigkeit eines separaten Abrufs von Block B 120 den Bedarf an einem Mikro-Ops-Cache, einer Verzweigungsvorhersageeinheit, eines Befehlsübersetzungspuffers (TLB) oder eines Befehlscache beim Abrufen des Blocks B 120, wie es in 2 gezeigt ist.
  • Wie in 1 gezeigt kann die Folge von Blöcken durch einen oder mehrere Sprünge (z. B. Verzweigungen) definiert sein, die ausgeführt werden oder nicht. Ein Sprung kann einen zugehörigen Zielblockpfad und einen alternativen Blockpfad enthalten, wobei dem alternativen Blockpfad gefolgt wird, wenn der Sprung nicht ausgeführt wird. Zum Beispiel kann ein erster Sprung, der dem Block A 110 folgt, zu einem Block J (nicht gezeigt) führen, und wenn dieser Sprung 112 nicht ausgeführt wird, folgt der Block A 110 dem alternativen Pfad des nicht ausgeführten Sprungs 112 zu Block B 120. In einem weiteren Beispiel kann auf Block A 110 ein zweiter Sprung 114 zu Block B 120 folgen. In ähnlicher Weise kann Block B 120 einem dritten nicht ausgeführten Sprung zu Block C 130 folgen oder einem vierten ausgeführten Sprung 124 Block C 130 folgen. Es ist zu beachten, dass andere Sprünge zu anderen Blöcken ausgeführt werden können oder nicht, jedoch wird für die Zwecke dieser Erörterung angenommen, dass die drei Blöcke, die in 1 gezeigt sind, eine bestimmte stabile Zeile durch eine Kombination von ausgeführten und nicht ausgeführten Sprüngen bilden. In einem Beispiel bietet diese Stromabrufarchitektur die Möglichkeit, Blöcke über zwei Sprünge hinweg innerhalb eines einzigen Abrufzyklus, beispielsweise von Block A 110 zu Block B 120 und von Block B 120 zu Block C 130, abzurufen.
  • Eine Stromzeile kann als stabil betrachtet werden, wenn es keinen Sprung gibt oder wenn der Sprung in eine konsistente Richtung ist. Die Sprünge in eine konsistente Richtung können einen unbedingten direkten Sprung, einen indirekten Sprung, der konsistent dasselbe Ziel hat, einen bedingten Sprung, der konsistent nicht ausgeführt wird, oder einen bedingten Sprung, der konsistent ausgeführt wird, umfassen. Rückkehrbefehle gelten auch dann als stabil, wenn sie zu einem anderen Ziel zurückkehren. In einer Ausführungsform bezieht sich „konsistent“ auf eine Richtung, die mit einer Wahrscheinlichkeit von 90 % oder mehr genommen oder nicht genommen wird. Diese Wahrscheinlichkeit kann weiter abgestimmt werden, um auf Kosten eines höheren Risikos einer Fehlvorhersage die Vorhersage weiterer Ströme zu ermöglichen. In einem Beispiel werden ungefähr 2/3 oder mehr der Abrufzeilen (z. B. Befehlsgruppen) als stabil betrachtet. Der Stromcache bietet einen verbesserten Abruf stabiler Zeilen für jeden Prozessor. Das Abrufen, das durch den Stromcache bereitgestellt wird, kann weiter verbessert werden, indem der Zielprozessor oder das Softwareprogramm analysiert werden, um die Identifikation und Vorhersage von Zeilen zu verbessern, z. B. unter Verwendung der in 2 gezeigten Vorhersagearchitektur.
  • 2 ist ein Blockdiagramm, das eine Stromcachearchitektur 200 gemäß einer Ausführungsform zeigt. Die Stromcachearchitektur 200 umfasst eine Frontendeinheit 280 und eine Speichereinheit 290. Die Frontendeinheit 280 umfasst einen Folgebefehlsprotokoll-Multiplexer (NIP-Multiplexer) 250, der die Adresse des nächsten Abrufblocks (z. B. die Adresse der nächsten Codezeile) identifiziert. Wenn es keine Verzweigung (z. B. keinen Sprung) gibt, erhöht ein Adressaddierer 255 die Adresse, um den nächsten Block einzubringen, beispielsweise durch Erhöhen der Adresse um 32 Byte, 64 Byte oder eine andere Adresserhöhung. Wenn es eine Verzweigung gibt, nimmt der Verzweigungsprädiktor 260 eine aktuelle Adresse her und bestimmt die nächste Adresse. Der Verzweigungsprädiktor 260 speichert zuvor verfolgte Verzweigungen, die verwendet werden können, um eine nachfolgende Adresse basierend auf einer aktuellen Adresse zu identifizieren. In einer Ausführungsform umfasst der Verzweigungsprädiktor 260 einen Ein-Zyklus-Verzweigungsprädiktor, der durch einen gestuften Befehlszeiger (ein gestuftes IP) indexiert werden kann.
  • Die Frontendeinheit 280 umfasst ein Mikrooperationen-Cacheetikettenarray 220 (Mikro-Ops-Cacheetikettenarray), das Speicheranforderungen (z. B. Speicheradressen) an ein Mikro-Ops-Cachedatenarray 230 innerhalb der Speichereinheit 290 sendet. Das Cacheetikettenarray 220 und das Cachedatenarray 230 können verwendet werden, um zuvor abgerufene Blöcke zu speichern und abzurufen. Wenn ein abzurufender Block identifiziert wird, können das Cacheetikettenarray 220 und das Cachedatenarray 230 verwendet werden, um zu bestimmen, ob der Block vorher abgerufen wurde. Wenn ein Block vorher abgerufen wurde, können das Cacheetikettenarray 220 und das Cachedatenarray 230 den Block abrufen und in dem Cachedatenarray 230 speichern. Wenn der Block zuvor nicht abgerufen worden ist, kann die Adresse des Blocks innerhalb des Befehlsübersetzungspuffer-und-Befehlscache-Etiketts (IC-und-ITLB-Etiketts) 210 abgerufen werden. Das IC-und-ITLB-Etikett 210 kann verwendet werden, um verschiedene Adressübersetzungen zu speichern und abzurufen, beispielsweise Adressübersetzungen, die virtuelle Speicheradressen physischen Speicheradressen zuordnen. Das Abrufen eines zuvor abgerufenen Blocks unter Verwendung des Mikro-Ops-Cacheetikettenarrays 220 und des Mikro-Ops-Cachedatenarrays 230 ist schneller und erfordert weniger Energie als die Verwendung des IC-und-ITLB-Etiketts 210, um eine Blockadresse für das nachfolgende Abrufen nachzuschlagen.
  • Die Frontendeinheit 280 umfasst einen Stromcache-Folgezeilen-Prädiktor (Stromcache-NLP) 240, um stabile Zeilen vorherzusagen und abzurufen. Im Betrieb identifiziert der Stromcache-NLP 240 zuerst eine stabile Zeile, beispielsweise eine Folge A-B-C (z. B. Block A 110, Block B 120 und Block C 130, die in 1 gezeigt sind). In einer Ausführungsform umfasst der Stromcache-NLP 240 einen Vertrauenszähler, der zum Identifizieren der stabilen Zeile der Folge A-B-C verwendet werden kann. Die Frontendeinheit 280 umfasst ein Stromcachezeiger-Array 270. Das Stromcachezeiger-Array 270 stellt eine Funktionalität bereit, die der des Mikro-Ops-Cacheetikettenarrays 220 ähnlich ist und ein Speichern und Abrufen von Adressen für Blöcke, die in dem Mikro-Ops-Cachedatenarray gespeichert sind, umfasst.
  • Sobald der Stromcache-NLP 240 die stabile Zeilenfolge ABC identifiziert, wenn er einen Abruf von A (z. B. Befehlsspeicheradresse A) feststellt, initiiert der Stromcache-NLP 240 ein separates Anrufen der Zeile B. Insbesondere sendet der NLP 240 eine Cachebefehlsspeicheradresse 275 (z. B. Befehlsspeicheradresse B) an das Zeigerarray 270 und das Datenarray 230, um B abzurufen, und sendet zudem eine Multiplexer-Befehlsspeicheradresse 245 (z. B. Befehlsspeicheradresse C), um den Folgebefehlszeiger-Multiplexer 250 umzulenken, so dass B übersprungen wird und C abgerufen wird. Als Ergebnis weist die Cachebefehlsspeicheradresse 275 dann, wenn das Cachebefehlsarray 220 Zeiger auf das Mikro-Ops-Cachedatenarray 230 liefert, um den Block A abzurufen, das Stromcachezeiger-Array 270 an, Zeiger auf das Mikro-Ops-Cachedatenarray 230 zu liefern, um den Block B abzurufen. Durch Überspringen des multiplexerbasierten Abrufs von B werden auf diese Weise Zeit und Energie, die normalerweise für einen Abruf von B erforderlich sind, wie etwa die Zeit und Energie, die das IC-und-ITLB-Etikett 210, das Mikro-Ops-Cachedatenarray und der Verzweigungsprädiktor sonst benötigen, eingespart. Immer wenn der Stromcache-NLP 240 einen Block überspringt und einen anderen Block abruft, sendet der NLP 240 einen Verlaufsaktualisierungsbefehl 265, um den Verzweigungsprädiktorverlauf 260 zu aktualisieren, um die Verlaufsregister so zu korrigieren, dass sie den Blockabrufsverlauf widerspiegeln. Wenn der Stromcache-NLP 240 beispielsweise den Folgebefehlszeiger-Multiplexer 250 umlenkt, um B zu überspringen und C abzurufen, aktualisiert der NLP 240 die Verlaufsregister innerhalb des Verzweigungsprädiktorverlaufs 260, um das Abrufen der vollständigen Folge A-B-C aufzuzeichnen.
  • 3 ist ein Blockdiagramm eines Stromcacheverfahrens 300 gemäß mindestens einer Ausführungsform. Das Verfahren 300 umfasst ein Abrufen 305 einer Folge von Speicherblöcken A-B-C. Das Verfahren 300 umfasst ein Bestimmen 310, dass eine stabile Zeile die Folge von Speicherblöcken A-B-C enthält. Die stabile Zeile kann in einem Folgezeilen-Prädiktor basierend auf zuvor empfangenen Speicherblockadressen identifiziert werden. Der Folgezeilen-Prädiktor kann einen Stabilitätszähler (z. B. Sättigungszähler, Vertrauenszähler) umfassen, um mehrere Speicherblockadressen zu empfangen und die stabile Zeile basierend auf den empfangenen Speicherblockadressen zu bestimmen. Der Stabilitätszähler verfolgt jede empfangene Speicheranforderung, gruppiert Folgen von Speicheranforderungen zu Folgen und erhöht einen Zähler für jede Folge. In einem Beispiel umfasst das Gruppieren von Folgen von Speicheranforderungen ein Verfolgen eines Eintrittspunkts (z. B. einer Eintrittsspeicheradresse) und eines Austrittspunkts (z. B. einer Austrittsspeicheradresse) für das Mikro-Ops-Cachedatenarray 230 in der Speichereinheit 290. Der Zähler für jede Folge wird zurückgesetzt, wenn sich eine Folge von Speicheranforderungen von der Folge unterscheidet. Wenn beispielsweise bestimmt wird, dass die Folge A-B-C stabil ist (z. B. der Zähler gesättigt ist) und eine Speicheranforderung für die Folge A-B-D empfangen wird, dann wird der Stabilitätszähler für die Folge A-B-C auf null zurückgesetzt und ein Stabilitätszähler für die Folge A-B-D inkrementiert.
  • Ein Stabilitätszähler kann für verschiedene Folgen oder für Erweiterungen bekannter Folgen (z. B. Mehrzeilenstrom) implementiert werden. Beispielsweise kann ein Stabilitätszähler für die Folge A-B-C implementiert werden und ein separater Stabilitätszähler für die Folge A-B-C-D implementiert werden. Ein Stromcacheabruf wird dann durchgeführt, wenn nur einer dieser Mehrzeilen-Stromstabilitätszähler gesättigt ist, wie z. B. ein gesättigter Folge-A-B-C-D-Zähler, der zu einem Stromcacheabruf von B-C und einem herkömmlichen Abruf von A und D führt. Wenn beide Mehrzeilenstrom-Stabilitätszähler gesättigt werden, dann wird der Stromcacheabruf nur auf den gemeinsamen Stromcacheabruf angewendet, beispielsweise einen Stromcacheabruf von B und einen herkömmlichen Abruf von A, C und D. Ein Stabilitätszähler kann auch für Folgen implementiert werden, die Speicherblock-Duplizierung aufweisen. Beispielsweise kann bestimmt werden, dass der Speicherblock C gleich dem Speicherblock A ist, so dass die Folge A-B-C-D als A-B-A-D abgerufen werden kann, beispielsweise unter Verwendung eines Stromcacheabrufs von B und eines herkömmlichen Abrufs von A und D.
  • Der Stabilitätszähler für jede Folge weist ein Sättigungsmaximum auf, das basierend auf der Erhöhung der Wahrscheinlichkeit eines Abrufs einer stabilen Zeile ausgewählt wird, während die Häufigkeit einer Fehlvorhersage-Speicherräumung, die durch eine Speicherfolgen-Fehlvorhersage verursacht wird, verringert wird. Beispielsweise führt ein höheres Sättigungsmaximum zur Identifizierung von weniger stabilen Strömen (z. B. Verringern der Stromabdeckung), reduziert jedoch die Anzahl von Speicherfolgen-Fehlvorhersagen. Umgekehrt führt ein niedrigeres Sättigungsmaximum zur Identifizierung stabilerer Ströme, führt jedoch zu mehr Speicherfolgen-Fehlvorhersagen. Das Sättigungsmaximum für jede Folge wird so ausgewählt, dass die Anzahl Speicherfolgen-Fehlvorhersagen reduziert oder minimiert wird und gleichzeitig Stabilität und Effizienz verbessert werden. Die Auswahl des Sättigungsmaximums kann auf verschiedenen Tests (z. B. Benchmarks) für verschiedene Rechenvorrichtungen, Computerprogrammen oder anderen Kombinationen von Vorrichtungshardware, Firmware und Software basieren. Die Auswahl des Sättigungsmaximums kann als ein einzelner Wert für alle stabilen Zeilen ausgewählt werden oder kann als unterschiedliche Werte für jede stabile Zeile ausgewählt werden. Die Auswahl des Sättigungsmaximums kann als statischer Wert oder als dynamischer Wert implementiert sein, beispielsweise als dynamischer Wert, der während der Verwendung einer Rechenvorrichtung modifiziert wird.
  • Der Sättigungszähler kann unter Verwendung eines einzelnen Zählers für jede stabile Zeile oder unter Verwendung einer Kombination aus einem globalen Zähler und einem Zähler für stabile Zeilen implementiert werden. Zum Beispiel kann ein Benchmark verwendet werden, um zu bestimmen, dass eine Speicherfolge als stabile Zeile bestimmt wird, nachdem sie mindestens 400 Mal abgerufen worden ist. Ein 9-Bit-Zähler kann verwendet werden, um bis 512 zu zählen, was die Möglichkeit bietet, die Fälle von stabilen Zeilen bis mindestens 400 zu zählen. Um den Speicherbedarf zu verringern, kann der 9-Bit-Zähler als ein deterministischer 2-Bit-Zähler für stabile Zeilen und ein probabilistischer 7-Bit-Globalzähler, der in jedem Zyklus inkrementiert wird, implementiert werden. Immer, wenn eine Speicherfolge auftritt, die einer stabilen Zeile entspricht, kann der globale Zähler überprüft werden, um zu sehen, ob er einem vorbestimmten Wert (z. B. null) entspricht, der alle 128 Zyklen (d. h. 2^7 Zyklen) auftritt. Wenn eine Speicherfolge einer stabilen Zeile auftritt und der globale Zähler dem vorbestimmten Wert entspricht, wird der 2-Bit-Zähler für stabile Zeilen inkrementiert. Die Kombination des deterministischen 2-Bit-Zählers für stabile Zeilen und des probabilistischen 7-Bit-Globalzählers ergibt zusammen einen probabilistischen 9-Bit-Zähler, der dazu verwendet wird, probabilistisch zu bestimmen, dass eine stabile Zeile mindestens 512 Mal aufgetaucht ist. Andere Kombinationen von deterministischen und probabilistischen Bitzählern können verwendet werden und können auf der Grundlage von Benchmark-Tests für stabile Zeilen, verfügbaren Prozessor-Bitzählern, der erwarteten Anzahl stabiler Zeilen oder anderen Überlegungen zum Sättigungszähler ausgewählt werden.
  • Nach dem Bestimmen 310 der stabilen Zeile umfasst das Verfahren 300 ein Empfangen 320 einer Anforderung zum Abrufen des Speicherblocks A, beispielsweise durch Empfangen einer Speicheradresse, die dem Speicherblock A entspricht. Die Anforderung zum Abrufen des Speicherblocks A wird sowohl in dem Folgezeilen-Prädiktor als auch in einem Cacheetikettenarray empfangen. Basierend auf der empfangenen Anforderung umfasst das Verfahren 300 ein Identifizieren 325 der Abrufanforderung als Teil einer stabilen Zeile, beispielsweise der Folge der Speicherblöcke A-B-C. Das Cacheetikettenarray bewirkt, dass ein Cachedatenarray den Speicherblock A abruft 330. Der Folgezeilen-Prädiktor initiiert ein Abrufen 340 des Speicherblocks B als Antwort auf die Anforderung, den Speicherblock A abzurufen. Das Abrufen 340 des Speicherblocks B kann umfassen, dass der Folgezeilen-Prädiktor den Cachezeiger anweist, den Speicherblock B von dem Cachedatenarray anzufordern.
  • Der Folgezeilen-Prädiktor kann das Abrufen 340 des Speicherblocks B auf der Basis der Stabilität der Folge von Speicherblöcken initiieren, die auf einem Sättigungszähler, einem Fehlen eines weiteren Verzweigungsbefehls oder einem unbedingten Verzweigungsbefehl basieren kann. Wie oben beschrieben kann eine Folge von Speicherblöcken A-B-C bestimmt werden, wenn der Sättigungszähler das zugehörige Sättigungsmaximum erreicht. Der Sättigungszähler kann verwendet werden, um eine Folge von Speicherblöcken zu identifizieren, die bedingte Verzweigungsbefehle enthalten, jedoch konsistent zu einem Abruf der Folge von Speicherblöcken A-B-C führen. Block B kann auch abgerufen 340 werden, wenn Block B keinen weiteren Verzweigungsbefehl aufweist. Zum Beispiel kann eine abgerufene Folge von Speicherblöcken A-B identifiziert werden, wenn die Speicheranforderungen, die in das Mikro-Ops-Cachedatenarray 230 gelangen und dieses verlassen, für die Speicherblöcke A-B konsistent sind, so dass der Strom der Speicherblöcke AB ohne Verwendung eines Sättigungszähler durch Abwesenheit eines weiteren Verzweigungsbefehls als stabil identifiziert wird. Der Speicherblock B kann auch abgerufen 340 werden, wenn auf den Speicherblock B ein unbedingter Verzweigungsbefehl folgt, beispielsweise ein Verzweigungsbefehl, der immer zu einem bestimmten Ziel springt, ohne von einem Merker oder einer anderen Bedingung abhängig zu sein. Beispielsweise kann eine abgerufene Speicherfolge von Speicherblöcken A-B-C einen unbedingten Verzweigungsbefehl von dem Speicherblock B zu dem Speicherblock C enthalten, so dass auf ein Abrufen des Speicherblocks B immer ein Abrufen des Speicherblocks C folgt. In jedem dieser drei Fälle liefert der Folgezeilen-Prädiktor den Abruf 340 des Speicherblocks B auf der Basis der Stabilität der Zeile und als Antwort auf das Empfangen einer Anforderung 320 zum Abrufen des Speicherblocks A.
  • Das Verfahren 300 umfasst ein Abrufen 350 des Speicherblocks C. Das Abrufen des Speicherblocks 350 C kann durch den Folgezeilen-Prädiktor als Antwort auf die Anforderung zum Abrufen des Speicherblocks A initiiert werden. Das Abrufen 350 des Speicherblocks C kann umfassen, dass der Folgezeilen-Prädiktor der einen Folgebefehlsprotokoll-Multiplexer anweist, den Speicherblock C anzufordern, wobei der Folgebefehlsprotokoll-Multiplexer das Cacheetikettenarray und das Cachedatenarray zum Abrufen des Speicherblocks C veranlasst.
  • Das Verfahren 300 umfasst ein Aktualisieren 360 eines Verzweigungsprädiktorverlaufsregisters, um das Abrufen des Blocks B widerzuspiegeln. Das Aktualisieren 360 des Verzweigungsprädiktorverlaufsregisters kann umfassen, dass der Folgezeilen-Prädiktor einen Verlaufsaktualisierungsbefehl an das Verzweigungsprädiktorverlaufsregister sendet, um den Abruf des Speicherblocks A gefolgt von dem Speicherblock B widerzuspiegeln. Das Verzweigungsprädiktorverlaufsregister empfängt anschließend eine Angabe des Abrufens des Speicherblocks C von dem Folgebefehlsprotokoll-Multiplexer, wobei dann die abgerufenen Speicherblöcke als Speicherblockfolge AB-C widergespiegelt werden.
  • 4 ist ein Blockdiagramm, das ein Stromcachesystem in der beispielhaften Form einer elektronischen Vorrichtung 400 gemäß einer beispielhaften Ausführungsform zeigt, innerhalb derer ein Satz oder eine Folge von Befehlen ausgeführt werden kann, um die Maschine dazu zu veranlassen, irgendeines der hierin diskutierten Verfahren auszuführen. Die elektronische Vorrichtung 400 kann auch die in 1-2 gezeigten Vorrichtungen darstellen. In alternativen Ausführungsformen arbeitet die elektronische Vorrichtung 400 als eigenständige Vorrichtung oder kann mit anderen Maschinen verbunden (z. B. vernetzt) sein. Bei einer vernetzten Bereitstellung kann die elektronische Vorrichtung 400 entweder als Server- oder als Client-Maschine in Server-Client-Netzumgebungen arbeiten oder als Peer-Maschine in Peer-zu-Peer-Netzumgebungen (oder verteilten Netzumgebungen) fungieren. Die elektronische Vorrichtung 400 kann eine integrierte Schaltung (IC), eine tragbare elektronische Vorrichtung, ein PC, ein Tablet-PC, ein Hybrid-Tablet, ein persönlicher digitaler Assistent (PDA), ein Mobiltelefon oder eine beliebige elektronische Vorrichtung 400, die in der Lage ist, Befehle (sequentiell oder anderweitig) auszuführen, die Aktionen spezifizieren, die von dieser Maschine ausgeführt werden sollen, um eine Anwendereingabe zu detektieren, sein. obwohl nur eine einzige elektronische Vorrichtung 400 dargestellt ist, soll der Begriff „Maschine“ oder „elektronische Vorrichtung“ ferner jede Ansammlung von Maschinen oder Vorrichtungen umfassen, die einzeln oder gemeinsam einen Befehlssatz (oder mehrere Befehlssätze) ausführen, um ein oder mehrere der hier diskutierten Verfahren durchzuführen. Ebenso soll der Begriff „prozessorbasiertes System“ eine beliebige Menge von einer oder mehreren Maschinen umfassen, die von einem Prozessor (z. B. einem Computer) gesteuert werden oder betrieben werden, um einzeln oder gemeinsam Befehle auszuführen, um eine oder mehrere der hier diskutierten Verfahren auszuführen.
  • Die beispielhafte elektronische Vorrichtung 400 umfasst mindestens einen Prozessor 402 (z. B. eine zentrale Verarbeitungseinheit (CPU), eine Grafikverarbeitungseinheit (GPU) oder beides, Prozessorkerne, Rechenknoten usw.), einen Hauptspeicher 404 und einen statischen Speicher 606, die über eine Verbindung 408 (z. B. einen Bus) miteinander kommunizieren.
  • Die elektronische Vorrichtung 400 umfasst Stromcachehardware 410, wobei die Stromcachehardware 410 die oben in 1-2 beschriebenen Komponenten enthalten kann. Die elektronische Vorrichtung 400 kann ferner eine Anzeigeeinheit 412 enthalten, wobei die Anzeigeeinheit 412 eine einzelne Komponente, die eine vom Anwender lesbare Anzeige und eine Schutzschicht bietet, oder einen anderen Anzeigetyp enthalten kann. Die elektronische Vorrichtung 400 kann ferner eine Eingabevorrichtung 414 wie beispielsweise eine Drucktaste, eine Tastatur, einen NFC-Kartenleser oder eine Anwenderschnittstellen-Navigationsvorrichtung (UI-Navigationsvorrichtung) (z. B. für eine berührungsempfindliche Eingabe) umfassen. Die elektronische Vorrichtung 400 kann zusätzlich eine Speichervorrichtung 416 wie beispielsweise eine Festkörperlaufwerks-Einheit (SSD-Einheit) umfassen. Die elektronische Vorrichtung 400 kann zudem eine Signalerzeugungsvorrichtung 418 zum Liefern einer hörbaren oder visuellen Rückmeldung wie beispielsweise einen Lautsprecher zum Liefern einer hörbaren Rückmeldung oder eine oder mehrere LEDs zum Liefern einer visuellen Rückmeldung umfassen. Die elektronische Vorrichtung 400 kann zudem eine Netzschnittstellenvorrichtung 420 und einen oder mehrere zusätzliche Sensoren (nicht gezeigt) wie etwa einen Sensor für das globale Positionsbestimmungssystem (GPS-Sensor), einen Kompass, einen Beschleunigungsmesser oder einen anderen Sensor umfassen.
  • Die Speichervorrichtung 416 umfasst ein maschinenlesbares Medium 422, auf dem ein oder mehrere Sätze von Datenstrukturen und Befehlen 424 (z. B. Software) gespeichert sind, die eine oder mehrere der hierin beschriebenen Verfahren oder Funktionen verkörpern oder von diesen verwendet werden. Die Befehle 424 können sich zudem während ihrer Ausführung durch die elektronische Vorrichtung 400 vollständig oder zumindest teilweise innerhalb des Hauptspeichers 404, des statischen Speichers 406 und/oder des Prozessors 402 befinden. Der Hauptspeicher 404, der statische Speicher 406 und der Prozessor 402 können auch maschinenlesbare Medien darstellen.
  • Obwohl das maschinenlesbare Medium 422 in einer beispielhaften Ausführungsform als ein einzelnes Medium dargestellt ist, kann der Begriff „maschinenlesbares Medium“ ein einzelnes Medium oder mehrere Medien (z. B. eine zentralisierte oder verteilte Datenbank und/oder zugeordnete Caches und Server), auf denen eine oder mehrere Befehle 424 gespeichert sind, umfassen. Unter dem Begriff „maschinenlesbares Medium“ werden auch alle materiellen Medien verstanden, die in der Lage sind, Befehle zur Ausführung durch die Maschine zu speichern, zu codieren oder zu tragen, die die Maschine dazu veranlassen, ein oder mehrere der Verfahren der vorliegenden Offenbarung durchzuführen, oder die in der Lage sind, Datenstrukturen zu speichern, zu codieren oder zu tragen, die von solchen Befehlen verwendet werden oder diesen zugeordnet sind. Der Begriff „maschinenlesbares Medium“ soll dementsprechend Festkörperspeicher sowie optische und magnetische Medien umfassen, aber nicht darauf beschränkt sein. Spezifische Beispiele für maschinenlesbare Medien umfassen einen nichtflüchtigen Speicher, der beispielsweise ohne Einschränkung darauf Halbleiterspeichervorrichtungen (z. B. elektrisch programmierbaren Nur-Lese-Speicher (EPROM), elektrisch löschbaren programmierbaren Nur-Lese-Speicher (EEPROM)) und Flash-Speichervorrichtungen; Magnetplatten wie interne Festplatten und Wechselplatten; magnetooptische Platten; und CD-ROM- und DVD-ROM-Disketten umfasst, aber nicht darauf beschränkt ist.
  • Die Befehle 424 können ferner unter Verwendung eines Übertragungsmediums über die Netzschnittstellenvorrichtung 420 unter Verwendung eines beliebigen aus einer Anzahl von wohlbekannten Übertragungsprotokollen (z. B. http) über ein Kommunikationsnetz 426 übertragen oder empfangen werden. Beispiele für Kommunikationsnetze umfassen ein lokales Netz (LAN), ein Weitbereichsnetz (WAN), das Internet, Mobilfunknetze und drahtlose Datennetze (z. B. Wi-Fi, NFC, Bluetooth, Bluetooth LE, 3G, 5G LTE/LTE-A, WiMAX-Netze usw.). Der Begriff „Übertragungsmedium“ soll jedes immaterielle Medium umfassen, das in der Lage ist, Befehle zur Ausführung durch die Maschine zu speichern, zu codieren oder zu tragen, und umfasst digitale oder analoge Kommunikationssignale oder andere immaterielle Medien, um eine Übermittlung dieser Software zu erleichtern.
  • Die nachstehenden Figuren zeigen beispielhafte Architekturen und Systeme zum Implementieren von Ausführungsformen des Vorstehenden. In einigen Ausführungsformen werden eine oder mehrere Hardwarekomponenten und/oder Befehle, die vorstehend beschrieben sind, wie nachstehend erläutert emuliert oder als Softwaremodule implementiert.
  • Ausführungsformen des einen oder der mehreren Befehle, die oben detailliert beschrieben sind, können in einem „generischen vektorfreundlichen Befehlsformat“ verkörpert sein, das im Folgenden detailliert beschrieben ist. In anderen Ausführungsformen wird ein derartiges Format nicht verwendet und ein anderes Befehlsformat wird verwendet. Jedoch ist die nachfolgende Beschreibung der Schreibmaskenregister, verschiedener Datentransformationen (Swizzle, Broadcast usw.), Adressierung usw. allgemein auf die Beschreibung der obigen Ausführungsformen der Befehle anwendbar. Im Folgenden sind Beispielsysteme, Architekturen und Pipelines näher beschrieben. Ausführungsformen der obigen Befehle können auf diesen Systemen, Architekturen und Pipelines ausgeführt werden, sind jedoch nicht auf die beschriebenen beschränkt.
  • Ein Befehlssatz kann ein oder mehrere Befehlsformate enthalten. Ein gegebenes Befehlsformat kann verschiedene Felder (z. B. Anzahl von Bits, Position von Bits) definieren, um unter anderem die auszuführende Operation (z. B. Opcode) und den/die Operanden, an dem/denen diese Operation ausgeführt werden soll, und/oder ein oder mehrere andere Datenfelder (z. B. Maske) zu spezifizieren. Einige Befehlsformate sind weiter durch die Definition von Befehlsschablonen (oder Unterformaten) unterteilt. Zum Beispiel können die Befehlsschablonen eines gegebenen Befehlsformats so definiert sein, dass sie unterschiedliche Teilmengen der Felder des Befehlsformats aufweisen (die enthaltenen Felder sind typischerweise in der gleichen Reihenfolge, aber haben mindestens einige unterschiedliche Bitpositionen, da weniger Felder enthalten sind), und/oder so definiert sein, dass ein gegebenes Feld anders zu interpretieren ist. Somit ist jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats (und, falls definiert, in einer gegebenen Befehlsschablone dieses Befehlsformats) ausgedrückt und enthält Felder zum Spezifizieren der Operation und der Operanden. In einer Ausführungsform weist ein beispielhafter ADD-Befehl einen spezifischen Opcode und ein Befehlsformat auf, das ein Opcode-Feld zum Spezifizieren dieses Opcodes und Operanden-Felder zum Auswählen von Operanden (Quelle1/Ziel und Quelle2) enthält; und ein Auftreten dieses ADD-Befehls in einem Befehlsstrom wird spezifischen Inhalte in den Operandenfeldern haben, die bestimmte Operanden auswählen. Ein Satz von SIMD-Erweiterungen, die als erweiterte Vektorerweiterungen (AVXs) (AVX1 und AVX2) bezeichnet werden und das Vektorerweiterungs-Codierungsschema (VEX-Codierungsschema) verwenden, wurde herausgegeben und/oder veröffentlicht (siehe z. B. Intel® 64 and IA-32 Architectures Software Developer's Manual, September 2014; und siehe Intel® Advanced Vector Extensions Programming Reference, Oktober 2014).
  • Beispielhafte Befehlsformate
  • Ausführungsformen der hierin beschriebenen Befehle können in verschiedenen Formaten verkörpert sein. Nachstehend sind beispielhafte Systeme, Architekturen und Pipelines näher beschrieben. Ausführungsformen des einen oder der mehreren Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind jedoch nicht auf die beschriebenen beschränkt.
  • Generisches vektorfreundliches Befehlsformat
  • Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (z. B. gibt es bestimmte Felder, die für Vektoroperationen spezifisch sind). Obwohl Ausführungsformen beschrieben sind, in denen sowohl Vektor- als auch Skalaroperationen durch das vektorfreundliche Befehlsformat unterstützt werden, verwenden alternative Ausführungsformen nur für Vektoroperationen das vektorfreundliche Befehlsformat.
  • 5A-5B sind Blockdiagramme, die ein generisches vektorfreundliches Befehlsformat und Befehlsschablonen davon gemäß Ausführungsformen der Offenbarung darstellen. 5A ist ein Blockdiagramm, das ein generisches vektorfreundliches Befehlsformat und Klasse-A-Befehlsschablonen davon gemäß Ausführungsformen der Erfindung darstellt; während 5B ein Blockdiagramm ist, das das generische vektorfreundliche Befehlsformat und Klasse-B-Befehlsschablonen davon gemäß einer Ausführungsform darstellt. Speziell ein generisches vektorfreundliches Befehlsformat 100, für das Klasse-A- und Klasse-B-Befehlsschablonen definiert sind, die keine Befehlsschablonen für den Speicherzugriff 105 und Befehlsschablonen für den Speicherzugriff 120 enthalten. Der Begriff generisch bezieht sich im Z7usammenhang mit dem vektorfreundlichen Befehlsformat darauf, dass das Befehlsformat nicht an irgendeinen spezifischen Befehlssatz gebunden ist.
  • Obwohl Ausführungsformen der Offenbarung beschrieben sind, in denen das vektorfreundliche Befehlsformat Folgendes unterstützt: eine Vektoroperandenlänge (oder -größe) von 64 Byte mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte) oder 64 Bit (8 Byte) (und somit besteht ein 64-Byte-Vektor entweder aus 16 doppelwortgroßen Elementen oder alternativ 8 vierfachwortgroßen Elementen); eine Vektoroperandenlänge (oder -größe) von 64 Byte mit Datenelementbreiten (oder -größen) von 16 Bit (2 Byte) oder 8 Bit (1 Byte); eine Vektoroperandenlänge (oder -größe) von 32 Byte mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); und eine Vektoroperandenlänge (oder -größe) von 16 Byte mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); können alternative Ausführungsformen mehr, weniger und/oder andere Vektoroperandengrößen (z. B. 256 Byte-Vektoroperanden) mit mehr, weniger oder anderen Datenelementbreiten (z. B. Datenelementbreiten von 128 Bit (16 Byte)) unterstützen.
  • Die Klasse-A-Befehlsschablonen in 5A umfassen: 1) in den Nichtspeicherzugriffs-Befehlsschablonen 505 ist eine Nichtspeicherzugriffs-Vollrundungssteuerungs-Typ-Operations-Befehlsschablone 510 und eine Nichtspeicherzugriffs-Datentransformations-Typ-Operations-Befehlsschablone 515 gezeigt; und 2) in den Speicherzugriffs-Befehlsschablonen 520 ist eine Speicherzugriffs-Temporal-Befehlsschablone 525 und eine Speicherzugriffs-Nichttemporal-Befehlsschablone 530 gezeigt. Die Klasse-B-Befehlsschablonen in 5b umfassen: 1) in den Nichtspeicherzugriffs-Befehlsschablonen 505 ist eine Nichtspeicherzugriffs-Schreibmaskensteuerungs-Teilrundensteuerungs-Typ-Operations-Befehlsschablone 512 (Schreibmaskensteuerung in Figuren als WMC abgekürzt) und eine Nichtspeicherzugriffs-Schreibmaskensteuerungs-VSIZE-Typ-Operations-Befehlsschablone 517 gezeigt; und 2) in den Speicherzugriffs-Befehlsschablonen 520 ist eine Speicherzugriffs-Schreibmaskensteuerungs-Befehlsschablone 527 gezeigt.
  • Das generische vektorfreundliche Befehlsformat 500 enthält die folgenden Felder, die unten in der in 5A-5B dargestellten Reihenfolge aufgelistet sind.
  • Formatfeld 540 - ein spezifischer Wert (ein Befehlsformat-Kennungswert) in diesem Feld identifiziert das vektorfreundliche Befehlsformat und somit das Auftreten von Befehlen in dem vektorfreundlichen Befehlsformat in Befehlsflüssen eindeutig. Daher ist dieses Feld optional in dem Sinne, dass es für einen Befehlssatz, der nur das generische vektorfreundliche Befehlsformat aufweist, nicht benötigt wird.
  • Basisoperationsfeld 542 - sein Inhalt unterscheidet verschiedene Basisoperationen.
  • Registerindexfeld 544 - sein Inhalt gibt, direkt oder durch Adresserzeugung, die Orte der Quell- und Zieloperanden an, ob sie nun in Registern oder im Speicher vorliegen. Diese umfassen eine ausreichende Anzahl von Bits zum Auswählen von N Registern aus einem PxQ-Registersatz (z. B. 32×512, 16×128, 32×1024, 64×1024). Obwohl in einer Ausführungsform N bis zu drei Quellen und ein Zielregister darstellen kann, können alternative Ausführungsformen mehr oder weniger Quellen und Zielregister unterstützen (z. B. können bis zu zwei Quellen unterstützt werden, wobei eine dieser Quellen auch als das Ziel dient, können bis zu drei Quellen unterstützt werden, wobei eine dieser Quellen auch als das Ziel dient, oder können bis zu zwei Quellen und ein Ziel unterstützt werden).
  • Modifikatorfeld 546 - sein Inhalt unterscheidet Vorkommen von Befehlen in dem generischen Vektorbefehlsformat, die Speicherzugriff spezifizieren, von denen, die dies nicht tun; das heißt, zwischen Nichtspeicherzugriffs-Befehlsschablonen 505 und Speicherzugriffs-Befehlsschablonen 520. Speicherzugriffsoperationen lesen und/oder schreiben in der Speicherhierarchie (in einigen Fällen spezifizieren sie dabei die Quell- und/oder Zieladressen unter Verwendung von Werten in Registern), während Nichtspeicherzugriffsoperationen dies nicht tun (beispielsweise sind die Quelle und die Ziele Register). Obwohl in einer Ausführungsform dieses Feld auch zwischen drei verschiedenen Arten, Speicheradressberechnungen durchzuführen, unterscheidet, können alternative Ausführungsformen mehr, weniger oder andere Arten, Speicheradressberechnungen durchzuführen, unterstützen.
  • Erweiterungsoperationsfeld 550 - sein Inhalt unterscheidet, welche einer Vielzahl unterschiedlicher Operationen zusätzlich zu der Basisoperation durchgeführt werden sollen. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Erfindung ist dieses Feld in ein Klassenfeld 568, ein Alphafeld 552 und ein Betafeld 554 unterteilt. Das Erweiterungsoperationsfeld 550 ermöglicht es, gemeinsame Gruppen von Operationen in einem einzelnen Befehl anstatt in 2, 3 oder 4 Befehlen durchzuführen.
  • Skalierungsfeld 560 - sein Inhalt ermöglicht das Skalieren des Inhalts des Indexfelds zur Speicheradresserzeugung (beispielsweise zu einer Adresserzeugung, die 2Skala * Index + Basis verwendet).
  • Verlagerungsfeld 562A - sein Inhalt wird als Teil der Speicheradresserzeugung verwendet (beispielsweise zu einer Adresserzeugung, die 2Skala * Index + Verlagerung verwendet).
  • Verlagerungsfaktorfeld 562B (es ist zu beachten, dass die Anordnung von Verlagerungsfeld 562A direkt über dem Verlagerungsfaktorfeld 562B anzeigt, dass eines von beiden verwendet wird) - sein Inhalt wird als Teil der Adresserzeugung verwendet; es spezifiziert einen Verlagerungsfaktor, der mit der Größe eines Speicherzugriffs (N) skaliert werden soll - wobei N die Anzahl von Bytes in dem Speicherzugriff ist (beispielsweise für eine Adresserzeugung, die 2Skala * Index + Basis + skalierte Verlagerung verwendet). Redundante niederwertige Bits werden ignoriert und somit wird der Inhalt des Verlagerungsfaktorfelds mit der Gesamtgröße (N) der Speicheroperanden multipliziert, um die endgültige Verlagerung zu erzeugen, die beim Berechnen einer effektiven Adresse verwendet werden soll. Der Wert von N wird durch die Prozessorhardware zur Laufzeit anhand des vollständigen Opcode-Felds 574 (hier später beschrieben) und des Datenmanipulationsfelds 554C bestimmt. Das Verlagerungsfeld 562A und das Verlagerungsfaktorfeld 562B sind optional in dem Sinne, dass sie nicht für Nichtspeicherzugriffs-Befehlsschablonen 505 verwendet werden, und/oder andere Ausführungsformen können lediglich eines oder keines von beiden implementieren.
  • Datenelementbreitenfeld 564 - sein Inhalt unterscheidet, welche einer Anzahl von Datenelementbreiten verwendet werden soll (in einigen Ausführungsformen für alle Befehle; in anderen Ausführungsformen für lediglich einige der Befehle). Dieses Feld ist optional in dem Sinne, dass es nicht benötigt wird, falls lediglich eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unter Verwendung irgendeines Aspekts der Opcodes unterstützt werden.
  • Schreibmaskenfeld 570 - sein Inhalt steuert auf Basis jeweiliger Datenelementposition, ob diese Datenelementposition in dem Zielvektoroperanden das Ergebnis der Basisoperation und Erweiterungsoperation widerspiegelt. Klasse-A-Befehlsschablonen unterstützen Zusammenlegen-Schreibmaskieren, während Klasse-B-Befehlsschablonen sowohl Zusammenlegen- als auch Nullsetzen-Schreibmaskieren unterstützen. Beim Zusammenlegen ermöglichen Vektormasken, dass irgendeine Menge von Elementen in dem Ziel vor Aktualisierungen während der Ausführung irgendeiner Operation (die durch die Basisoperation und die Erweiterungsoperation spezifiziert wird) geschützt wird; in einer anderen Ausführungsform wird der alte Wert jedes Elements des Ziels, an dem das entsprechende Maskenbit eine 0 aufweist, erhalten. Im Gegensatz dazu wird dann, wenn es Nullsetzungs-Vektormasken irgendeiner Menge von Elementen in dem Ziel ermöglichen, während der Ausführung irgendeiner Operation (die durch die Basisoperation und die Erweiterungsoperation spezifiziert wird) nullgesetzt zu werden, in einer Ausführungsform ein Wert des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen 0-Wert aufweist. Eine Teilmenge dieser Funktionalität ist die Fähigkeit, die Vektorlänge der Operation, die ausgeführt wird, zu steuern (das heißt die Spanne von Elementen, die modifiziert werden, vom ersten bis zum letzten); jedoch ist es nicht erforderlich, dass die Elemente, die modifiziert werden, aufeinanderfolgen. Daher ermöglicht das Schreibmaskenfeld 170 partielle Vektoroperationen, einschließlich Ladeoperationen, Speicheroperationen arithmetische Operationen, logische Operationen etc. Obwohl Ausführungsformen der Offenbarung beschrieben sind, bei denen der Inhalt des Schreibmaskenfelds 570 aus einer Anzahl von Schreibmaskenregistern eines auswählt, das die zu verwendende Schreibmaske enthält (und somit der Inhalt des Schreibmaskenfelds 570 indirekt angibt, dass Maskieren durchgeführt werden soll), ermöglichen alternative Ausführungsformen stattdessen oder zusätzlich, dass der Inhalt des Schreibmaskenfelds 570 direkt das durchzuführende Maskieren spezifiziert.
  • Direktwert-Feld 572 - sein Inhalt ermöglicht die Spezifizierung eines Direktwerts. Dieses Feld ist optional in dem Sinne, dass es nicht in einer Implementation des generischen vektorfreundlichen Formats, das Direktwerte nicht unterstützt, und nicht in Befehlen, die keinen Direktwert verwenden, vorliegt.
  • Klassenfeld 568 - sein Inhalt unterscheidet zwischen unterschiedlichen Klassen von Befehlen. Unter Bezugnahme auf 5A-5B wählt der Inhalt dieses Felds zwischen Befehlen der Klasse A und Klasse B. In 5A-B werden Quadrate mit abgerundeten Ecken verwendet, um anzuzeigen, dass ein spezifischer Wert in einem Feld vorliegt (beispielsweise jeweils Klasse A 568A und Klasse B 568B für das Klassenfeld 568 in 5A-B).
  • Befehlsschablonen der Klasse A
  • Im Falle der Nichtspeicherzugriffs-Befehlsschablonen 505 der Klasse A wird das Alphafeld 552 als ein RS-Feld 552A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Erweiterungsoperationstypen durchgeführt werden soll (beispielsweise werden Rundung 552A.1 und Datentransformation 552A.2 jeweils für die Nichtspeicherzugriffs-Rundungs-Typ-Operations-Befehlsschablone 510 und die Nichtspeicherzugriffs-Datentransformations-Typ-Operations-Befehlsschablone 515 spezifiziert), während das Betafeld 554 unterscheidet, welche der Operationen des spezifizierten Typs durchgeführt werden soll. Bei den Nichtspeicherzugriffs-Befehlsschablonen 505 kommen das Skalierungsfeld 560, das Verlagerungsfeld 562A und das Verlagerungsfaktorskalierungsfeld 562B nicht vor.
  • Nichtspeicherzugriffs-Befehlsschablonen Vollrundungssteuerungs-Typ-Operation
  • Bei der Nichtspeicherzugriffs-Vollrundungssteuerungs-Typ-Operations-Befehlsschablone 510 wird das Betafeld 554 als ein Rundungssteuerfeld 554A interpretiert, dessen Inhalt statisches Runden liefert. Während in den beschriebenen Ausführungsformen der Erfindung das Rundungssteuerfeld 554A ein Feld 556 zum Unterdrücken aller Fließkommaausnahmen (SAE-Feld) und ein Rundungsoperationssteuerfeld 558 enthält, können alternative Ausführungsformen diese beiden Konzepte im gleichen Feld oder lediglich eines der beiden dieser Konzepte/Felder unterstützen/codieren (beispielsweise lediglich das Rundungsoperationssteuerfeld 558 aufweisen).
  • SAE-Feld 556 - sein Inhalt unterscheidet, ob das Melden von Ausnahmeereignissen ausgeschaltet werden soll oder nicht; wenn der Inhalt des SAE-Felds 556 angibt, dass eine Unterdrückung eingeschaltet ist, meldet ein gegebener Befehl keinerlei Fließkommaausnahme-Merker und ruft keinen Fließkommaausnahmebehandler auf.
  • Rundungsoperationssteuerfeld 558 - sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen durchgeführt werden soll (beispielsweise Aufrunden, Abrunden, Runden auf null und Runden auf die nächste Zahl). Somit ermöglicht das Rundungsoperationssteuerfeld 558 ein Ändern des Rundungsmodus je nach Befehl und ist somit besonders nützlich, wenn dies benötigt wird. In einer Ausführungsform der Offenbarung, bei der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi enthält, erhält der Inhalt des Rundungsoperationssteuerfelds 550 Vorrang vor diesem Registerwert.
  • Nichtspeicherzugriffs-Befehlsschablonen Datentransformations-Typ-Operation
  • Bei der Nichtspeicherzugriffs-Datentransformations-Typ-Operations-Befehlsschablone 515 wird das Betafeld als ein Datentransformationsfeld 554B interpretiert, dessen Inhalt unterscheidet, welche einer Anzahl von Datentransformationen durchgeführt werden soll (beispielsweise keine Datentransformation, Swizzle, Broadcast).
  • Im Falle einer Speicherzugriffs-Befehlsschablone 520 der Klasse A wird das Alphafeld 552 als ein Räumungshinweisfeld 552B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise verwendet werden soll (in 5A werden jeweils Temporal 552B.1 und Nichttemporal 552B.2 für die Speicherzugriffs-Temporal-Befehlsschablone 525 und die Speicherzugriffs-Nichttemporal-Befehlsschablone 530 spezifiziert), während das Betafeld 554 als ein Datenmanipulationsfeld 554C interpretiert wird, dessen Inhalt unterscheidet, welche aus einer Anzahl von Datenmanipulationsoperationen (auch als Primitive bekannt) durchgeführt werden soll (beispielsweise keine Manipulation; Broadcast; Aufwärtsumwandlung einer Quelle; und Abwärtsumwandlung eines Ziels). Die Speicherzugriffs-Befehlsschablonen 520 enthalten das Skalierungsfeld 560 und optional das Verlagerungsfeld 562A oder das Verlagerungsskalierungsfeld 562B.
  • Vektorspeicherbefehle führen Vektorladevorgänge und Vektorspeichervorgänge aus einem und in einen Speicher mit Umwandlungsunterstützung durch. Wie bei regulären Vektorbefehlen übertragen Vektorspeicherbefehle Daten datenelementweise aus/in Speicher, wobei die Elemente, die tatsächlich übertragen werden, durch den Inhalt der Vektormaske vorgegeben sind, die als die Schreibmaske ausgewählt ist.
  • Speicherzugriffs-Befehlsschablonen - Temporal
  • Temporale Daten sind Daten, die wahrscheinlich früh genug wiederverwendet werden, um von Caching zu profitieren. Dies stellt jedoch einen Hinweis dar und unterschiedliche Prozessoren können diesen auf unterschiedliche Arten implementieren, was vollständiges Ignorieren des Hinweises einschließt.
  • Speicherzugriffs-Befehlsschablonen - Nichttemporal
  • Nicht-temporale Daten sind Daten, die wahrscheinlich nicht früh genug wiederverwendet werden, um von Caching in dem Cache der 1. Ebene zu profitieren, und sollten bevorzugt geräumt werden. Dies stellt jedoch einen Hinweis dar, und unterschiedliche Prozessoren können diesen auf unterschiedliche Arten implementieren, was vollständiges Ignorieren des Hinweises einschließt.
  • Befehlsschablonen der Klasse B
  • Im Falle der Befehlsschablonen der Klasse B wird das Alphafeld 552 als ein Schreibmaskensteuer-(Z)-Feld 552C interpretiert, dessen Inhalt unterscheidet, ob das Schreibmaskieren, das durch das Schreibmaskenfeld 570 gesteuert wird, ein Zusammenlegen oder ein Nullsetzen sein sollte.
  • Im Falle der Nichtspeicherzugriffs-Befehlsschablonen 505 der Klasse B wird ein Teil des Betafelds 554 als ein RL-Feld 557A interpretiert, dessen Inhalt unterscheidet, welcher der unterschiedlichen Erweiterungsoperationstypen durchgeführt werden soll (beispielsweise sind Rundung 557A.1 und Vektorlänge (VSIZE) 557A.2 jeweils für die Nichtspeicherzugriffs-Schreibmaskensteuerungs-Teilrundensteuerungs-Typ-Operations-Befehlsschablone 512 und die Nichtspeicherzugriffs-Schreibmaskensteuerungs-VSIZE-Typ-Operations-Befehlsschablone 517 spezifiziert), während der Rest des Betafelds 554 unterscheidet, welche der Operationen des spezifizierten Typs durchgeführt werden soll. Bei den Nichtspeicherzugriffs-Befehlsschablonen 505 liegen das Skalierungsfeld 560, das Verlagerungsfeld 562A und das Verlagerungsskalierungsfeld 562B nicht vor.
  • Bei der Nichtspeicherzugriffs-Schreibmaskensteuerungs-Teilrundensteuerungs-Typ-Operations-Befehlsschablone 512 wird der Rest des Betafelds 554 als ein Rundungsoperationsfeld 559A interpretiert, und das Melden von Ausnahmeereignissen ist ausgeschaltet (ein gegebener Befehl meldet keinerlei Fließkommaausnahme-Merker und ruft keinen Fließkommaausnahme-Behandler auf).
  • Rundungsoperationssteuerfeld 559A - genau wie das Rundungsoperationssteuerfeld 558 unterscheidet sein Inhalt, welche aus einer Gruppe von Rundungsoperationen durchgeführt werden soll (beispielsweise Aufrunden, Abrunden, Runden auf null und Runden auf nächste Zahl). Somit ermöglicht das Rundungsoperationssteuerfeld 559A ein Ändern des Rundungsmodus je nach Befehl. In einer Ausführungsform der Offenbarung, in der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi enthält, erhält der Inhalt des Rundungsoperationssteuerfelds 550 Vorrang vor diesem Registerwert.
  • Bei der Nichtspeicherzugriffs-Schreibmaskensteuerungs-VSIZE-Typ-Operations-Befehlsschablone 517 wird der Rest des Betafelds 554 als ein Vektorlängenfeld 559B interpretiert, dessen Inhalt unterscheidet, welche einer Anzahl von Vektorlängen bearbeitet werden soll (beispielsweise 128, 256 oder 512 Byte).
  • Im Falle einer Speicherzugriffs-Befehlsschablone 520 der Klasse A wird ein Teil des Betafelds 554 als ein Broadcast-Feld 557B interpretiert, dessen Inhalt entscheidet, ob die Broadcast-Typ-Datenmanipulations-Operation durchgeführt werden soll oder nicht, während der Rest des Betafelds 554 als ein Vektorlängenfeld 559B interpretiert wird. Die Speicherzugriffs-Befehlsschablonen 520 enthalten das Skalierungsfeld 560 und optional das Verlagerungsfeld 562A oder das Verlagerungsskalierungsfeld 562B.
  • Unter Bezugnahme auf das generische vektorfreundliche Befehlsformat 500 ist ein vollständiges Opcode-Feld 574 gezeigt, das das Formatfeld 540, das Basisoperationsfeld 542 und das Datenelementbreitenfeld 564 enthält. Obwohl eine Ausführungsform gezeigt ist, bei der das vollständige Opcode-Feld 574 alle diese Felder enthält, enthält das vollständige Opcode-Feld 574 weniger als alle dieser Felder in Ausführungsformen, die nicht alle davon unterstützen. Das vollständige Opcode-Feld 574 liefert den Operationscode (Opcode).
  • Das Erweiterungsoperationsfeld 550, das Datenelementbreitenfeld 564 und das Schreibmaskenfeld 570 ermöglichen, dass diese Strukturen je Befehl in dem generischen vektorfreundlichen Befehlsformat spezifiziert werden.
  • Die Kombination des Schreibmaskenfelds und Datenelementbreitenfelds erzeugt typisierte Befehle, da diese es ermöglichen, dass die Maske basierend auf unterschiedlichen Datenelementbreiten angewendet wird.
  • Die verschiedenen Befehlsschablonen, die innerhalb der Klasse A und der Klasse B vorgefunden werden, sind in verschiedenen Situationen vorteilhaft. In einigen Ausführungsformen der Offenbarung können unterschiedliche Prozessoren oder unterschiedliche Kerne innerhalb eines Prozessors nur Klasse A, nur Klasse B oder beide Klassen unterstützen. Zum Beispiel kann ein hochleistungsfähiger, nicht reihenfolgetreuer Allzweck-Kern, der für allgemeine Berechnungen gedacht ist, nur Klasse B unterstützen, ein Kern, der primär für Graphik und/oder wissenschaftliche (Durchsatz-)Berechnungen gedacht ist, nur Klasse A unterstützen, und ein Kern, der für beides gedacht ist, beide unterstützen (natürlich liegt ein Kern, der eine Mischung von Schablonen und Befehlen aus beiden Klassen, aber nicht alle Schablonen und Befehle aus beiden Klassen aufweist, innerhalb des Umfangs der Offenbarung). Außerdem kann ein einzelner Prozessor mehrere Kerne enthalten, die alle die gleiche Klasse unterstützen oder unter denen verschiedene Kerne unterschiedliche Klassen unterstützen. Zum Beispiel kann in einem Prozessor mit separaten Grafik- und Allzweckkernen einer der Grafikkerne, die primär für Grafik und/oder wissenschaftliche Berechnungen vorgesehen sind, nur Klasse A unterstützen, während einer oder mehrere der Allzweckkerne Hochleistungskerne für allgemeine Zwecke mit nicht reihenfolgetreuer Ausführung und Registerumbenennung für allgemeine Berechnungen sein können, die nur Klasse B unterstützen. Ein weiterer Prozessor, der keinen separaten Grafikkern hat, kann einen oder mehrere reihenfolgetreue oder nicht reihenfolgetreue Allzweck-Kerne umfassen, die sowohl Klasse A als auch Klasse B unterstützen. Natürlich können Merkmale einer Klasse in verschiedenen Ausführungsformen der Offenbarung auch in der anderen Klasse implementiert sein. Programme, die in einer Hochsprache geschrieben sind, werden in eine Vielzahl von unterschiedlichen ausführbaren Formen gebracht (z. B. bei Bedarf kompiliert oder statisch kompiliert), die umfassen: 1) eine Form, die nur Befehle der Klasse oder Klassen enthält, die von dem Zielprozessor zur Ausführung unterstützt werden; oder 2) eine Form mit alternativen Routinen, die unter Verwendung verschiedener Kombinationen der Befehle aller Klassen geschrieben sind, und mit einem Steuerflusscode, der die auszuführenden Routinen basierend auf den Befehlen, die von dem Prozessor unterstützt werden, der gerade den Code ausführt, auswählt.
  • Beispielhaftes spezifisches vektorfreundliches Befehlsformat
  • 6 ist ein Blockdiagramm, das ein beispielhaftes spezifisches vektorfreundliches Befehlsformat gemäß einer Ausführungsform zeigt. 6 zeigt ein spezifisches vektorfreundliches Befehlsformat 500, das in dem Sinne spezifisch ist, dass es den Ort, die Größe, Interpretation und Reihenfolge der Felder spezifiziert, ebenso wie Werte für einige dieser Felder. Das spezifische vektorfreundliche Befehlsformat 600 kann verwendet werden, um den x86-Befehlssatz zu erweitern, und somit sind einige der Felder ähnlich oder identisch mit denjenigen, die in dem existierenden x86-Befehlssatz und der Erweiterung davon (beispielsweise AVX) verwendet werden. Dieses Format bleibt mit dem Präfixcodierfeld, reellen Opcode-Bytefeld, MOD-R/M-Feld, SIB-Feld, Verlagerungsfeld und Direktwertfeldern des bestehenden x86-Befehlssatzes mit Erweiterungen konsistent. Die Felder aus 5, auf denen die Felder aus 6 zugeordnet sind, sind beispielhaft gezeigt.
  • Es versteht sich, dass, obwohl Ausführungsformen der Erfindung unter Bezugnahme auf das spezifische vektorfreundliche Befehlsformat 600 im Kontext des generischen vektorfreundlichen Befehlsformats 500 zu beispielhaften Zwecken beschrieben sind, die Erfindung nicht auf das spezifische vektorfreundliche Befehlsformat 600 beschränkt ist, außer wenn dies beansprucht wird. Beispielsweise sieht das generische vektorfreundliche Befehlsformat 500 eine Vielzahl möglicher Größen für die verschiedenen Felder vor, während das spezifische vektorfreundliche Befehlsformat 600 mit Feldern spezifischer Größen gezeigt ist. Durch das spezielle Beispiel ist die Erfindung, obwohl das Datenelementbreitenfeld 564 als ein Ein-Bit-Feld in dem spezifischen vektorfreundlichen Befehlsformat 600 gezeigt ist, nicht derart beschränkt (d. h., das generische vektorfreundliche Befehlsformat 500 zieht andere Größen des Datenelementbreitenfelds 564 in Betracht).
  • Das generische vektorfreundliche Befehlsformat 500 enthält die folgenden Felder, die nachstehend in der in 6A beispielhaft gezeigten Reihenfolge aufgeführt sind.
  • EVEX-Präfix (Bytes 0-3) 602 - ist in einer Vier-Byte-Form codiert.
  • Formatfeld 540 (EVEX-Byte 0, Bits [7:0]) - das erste Byte (EVEX-Byte 0) ist das Formatfeld 540 und enthält 0x62 (der eindeutige Wert, der in einer Ausführungsform der Erfindung zum Unterscheiden des vektorfreundlichen Befehlsformats verwendet wird).
  • Das zweite bis vierte Byte (EVEX-Bytes 1-3) enthalten eine Anzahl von Bitfeldern, die spezifische Fähigkeiten bereitstellen.
  • REX-Feld 605 (EVEX-Byte 1, Bits [7-5]) - besteht aus einem EVEX.R-Bitfeld (EVEX-Byte 1, Bit [7]-R), EVEX.X-Bitfeld (EVEX-Byte 1, Bit [6]-X) und 557 BEX-Byte 1, Bit [5]-B). Die EVEX.R-, EVEX.X- und EVEX.B-Bitfelder liefern die gleiche Funktionalität wie die entsprechenden VEX-Bitfelder und werden unter Verwendung einer 1s-Komplementform codiert, d. h. ZMM0 ist als 1111B codiert, ZMM15 ist als 0000B codiert. Andere Felder der Befehle codieren die unteren drei Bits der Registerindizes wie aus dem Stand der Technik bekannt (rrr, xxx und bbb), so dass Rrrr, Xxxx und Bbbb gebildet werden können, indem EVEX.R, EVEX.X und EVEX.B addiert werden.
  • REX'-Feld 510 - dies ist der erste Teil des REX'-Felds 510 und ist das EVEX.R'-Bitfeld (EVEX-Byte 1, Bit [4]-R'), das verwendet wird, um entweder die oberen 16 oder unteren 16 des erweiterten 32-Registersatzes zu codieren. In einer Ausführungsform der Erfindung wird dieses Bit gemeinsam mit anderen wie unten angegeben in einem bitinvertierten Format gespeichert, um (in dem wohlbekannten x86-32-Bitmodus) von dem BOUND-Befehl zu unterscheiden, dessen reales Opcode-Byte 62 ist, jedoch in dem MOD-R/M-Feld (unten beschrieben) nicht den Wert von 11 in dem MOD-Feld akzeptiert; andere Ausführungsformen der Erfindung speichern dieses und die anderen unten angegebenen Bits nicht in dem invertierten Format. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten wird R'Rrrr durch Kombinieren von EVEX.R', EVEX.R und dem anderen RRR aus anderen Feldern gebildet.
  • Opcode-Abbildungsfeld 615 (EVEX-Byte 1, Bits [3:0]-mmmm) - sein Inhalt codiert ein implizites führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelementbreitenfeld 564 (EVEX-Byte 2, Bit [7]-W) - wird durch die Notation EVEX.W dargestellt. EVEX.W wird verwendet, um die Granularität (Größe) des Datentyps zu definieren (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente).
  • EVEX.vvvv 620 (EVEX-Byte 2, Bits [6:3]-vvvv) - die Rolle von EVEX.vvv kann Folgendes umfassen: 1) EVEX.vvvv codiert den ersten Quellregisteroperanden, der in invertierter (1s-Komplement-)Form spezifiziert ist und für Befehle mit 2 oder mehr Quelloperanden gültig ist; 2) EVEX.vvvv codiert den Zielregisteroperanden, der in 1s-Komplement-Form für bestimmte Vektorverschiebungen spezifiziert ist; oder 3) EVEX.vvvv codiert gar keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Somit codiert das EVEX.vvv-Feld 620 die 4 niederwertigen Bits des ersten Quellregisterbezeichners, die in invertierter (1s-Komplement-)Form gespeichert sind. Abhängig von dem Befehl wird ein weiteres unterschiedliches EVEX-Bitfeld verwendet, um die Bezeichnergröße auf 32 Register zu erweitern.
  • EVEX.U-Klassenfeld 568 (EVEX-Byte 2, Bit [2]-U) - wenn EVEX.U = 0 ist, zeigt es Klasse A oder EVEX.U0 an; wenn EVEX.U = 1, zeigt es Klasse B oder EVEX.U1 an.
  • Präfixcodierfeld 625 (EVEX-Byte 2, Bits [1:0]-pp) - liefert zusätzliche Bits für das Basisoperationsfeld. Zusätzlich zum Bereitstellen von Unterstützung für veraltete SSE-Befehle in dem EVEX-Präfixformat hat dies außerdem den Vorteil, das SIMD-Präfix kompakt darzustellen (anstatt ein Byte zu benötigen, um das SIMD-Präfix auszudrücken, benötigt das EVEX-Präfix lediglich 2 Bits). In einer Ausführungsform sind diese veralteten SIMD-Präfixe, um veraltete SSE-Befehle zu unterstützen, die ein SIMD-Präfix (66H, F2H, F3H) sowohl im veralteten Format als auch in dem EVEX-Präfixformat verwenden, in das SIMD-Präfixcodierfeld codiert; und werden zur Laufzeit auf das SIMD-Präfix erweitert, bevor sie an die PLA des Decodierers geliefert werden (so dass die PLA sowohl das veraltete als auch das EVEX-Format dieser veralteten Befehle ohne Modifizierung ausführen kann). Obwohl neuere Befehle den Inhalt des EVEX-Präfixcodierfelds direkt als eine OpcodeErweiterung verwenden könnten, erweitern sich bestimmte Ausführungsformen zur Konsistenz auf ähnliche Weise, ermöglichen jedoch, dass andere Bedeutungen durch diese veralteten Präfixcodierungen spezifiziert werden können. Eine alternative Ausführungsform kann die PLA umgestalten, um die 2-Bit-SIMD-Präfixcodierungen zu unterstützen und somit die Erweiterung nicht zu benötigen.
  • Alphafeld 552 (EVEX-Byte 3, Bit [7]-EH; auch als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.Schreibmaskensteuerung und EVEX.N bekannt; auch als α gezeigt) - wie bereits beschrieben, ist dieses Feld kontextspezifisch.
  • Betafeld 554 (EVEX-Byte 3, Bit [6:4]-SSS, auch als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB bekannt; auch als βββ gezeigt) - wie bereits beschrieben, ist dieses Feld kontextspezifisch.
  • REX'-Feld 510 - dies ist der Rest des REX'-Felds und ist das EVEX.V'-Bitfeld (EVEX-Byte 3, Bit [3]-V'), das verwendet werden kann, um entweder die oberen 16 oder unteren 16 des erweiterten 32-Registersatzes zu codieren. Dieses Bit ist in bitinvertiertem Format gespeichert. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten wird V'VVVV durch Kombinieren von EVEX.V', EVEX.vvvv gebildet.
  • Schreibmaskenfeld 570 (EVEX-Byte 3, Bits [2:0]-kkk) - sein Inhalt spezifiziert den Index eines Registers in den Schreibmaskenregistern, wie es zuvor beschrieben ist. In einer Ausführungsform der Erfindung weist ein spezifischer Wert von EVEX.kkk = 000 ein spezielles Verhalten auf, das impliziert, dass keine Schreibmaske für den betreffenden Befehl verwendet wird (dies kann auf eine Vielzahl von Arten implementiert werden, einschließlich der Verwendung einer Schreibmaske, die fest auf nur Einsen verdrahtet ist, oder Hardware, die die Maskierungshardware umgeht).
  • Reelles Opcode-Feld 630 (Byte 4) ist auch bekannt als das Opcode-Byte. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • MOD-R/M-Feld 640 (Byte 5) umfasst ein MOD-Feld 242, ein Reg-Feld 644 und ein R/M-Feld 646. Wie zuvor beschrieben unterscheidet der Inhalt des MOD-Feldes 642 zwischen Speicherzugriffs- und NichtspeicherzugriffsOperationen. Die Rolle des Reg-Feldes 644 kann zu zwei Situationen zusammengefasst werden: entweder codiert es den Zielregisteroperanden oder einen Quellregisteroperanden, oder es wird als eine Opcodeerweiterung behandelt und nicht zum Codieren irgendeines Befehlsoperanden verwendet werden. Die Rolle des R/M-Feldes 646 kann Folgendes umfassen: es codiert den Befehlsoperanden, der auf eine Speicheradresse verweist, oder es codiert entweder den Zielregisteroperanden oder einen Quellregisteroperanden.
  • Skala-Index-Basis-Byte (SIB-Byte) (Byte 6) - wie zuvor beschrieben wird der Inhalt des Skalierungsfeldes 550 für die Speicheradressenerzeugung verwendet. SIB.xxx 654 und SIB.bbb 656 - auf den Inhalt dieser Felder wurde zuvor unter Bezugnahme auf die Registerindizes Xxxx und Bbbb verwiesen.
  • Verlagerungsfeld 562A (Bytes 7-10) - wenn das MOD-Feld 642 10 enthält, sind Bytes 7-10 das Verlagerungsfeld 562A und es arbeitet genau wie die veraltete 32-Bit-Verlagerung (disp32) und arbeitet bei Bytegranularität.
  • Verlagerungsfaktorfeld 562B (Byte 7) - wenn das MOD-Feld 642 01 enthält, ist Byte 7 das Verlagerungsfaktorfeld 562B. Der Ort dieses Felds ist der gleiche wie der der 8-Bit-Verlagerung (disp8) des veralteten x86-Befehlssatzes, der bei Bytegranularität arbeitet. Weil disp8 vorzeichenerweitert ist, kann es lediglich zwischen -128 und 127 Byteversätzen adressieren; hinsichtlich 64-Byte-Cachezeilen verwendet disp8 8 Bits, die lediglich auf vier wirklich nützliche Werte -128, -64, 0 und 64 gesetzt werden können; weil oft ein größerer Bereich benötigt wird, wird disp32 verwendet; jedoch benötigt disp32 4 Bytes. Im Gegensatz zu disp8 und disp32 ist das Verlagerungsfaktorfeld 562B eine Neuinterpretation von disp8; wenn das Verlagerungsfaktorfeld 562B verwendet wird, wird die tatsächliche Verlagerung durch den Inhalt des Verlagerungsfaktorfelds multipliziert mit der Größe des Speicheroperandenzugriffs (N) bestimmt. Dieser Typ von Verlagerung wird als disp8*N bezeichnet. Dies reduziert die durchschnittliche Befehlslänge (ein einzelnes Byte wird für die Verlagerung verwendet, jedoch mit einem viel größeren Bereich). Eine solche komprimierte Verlagerung basiert auf der Annahme, dass die effektive Verlagerung ein Vielfaches der Granularität des Speicherzugriffs ist, und somit brauchen die niedrigwertigen Bits des Adressversatzes nicht codiert zu werden. Mit anderen Worten ersetzt das Verlagerungsfaktorfeld 562B die 8-Bit-Verlagerung des veralteten x86-Befehlssatzes. Somit wird das Verlagerungsfaktorfeld 562B auf die gleiche Weise codiert wie eine 8-Bit-Verlagerung des x86-Befehlssatzes (somit keine Änderungen an den ModRM/SIB-Codierregeln) mit der einzigen Ausnahme, dass disp8 zu disp8*N überladen wird. Mit anderen Worten gibt es keine Änderungen an den Codierregeln oder Codierlängen, sondern lediglich an der Interpretation des Verlagerungswerts durch Hardware (die die Verlagerung um die Größe des Speicheroperanden skalieren muss, um einen byteweisen Adressversatz zu erzielen). Das Direktwertfeld 572 arbeitet wie zuvor beschrieben.
  • Vollständiges Opcode-Feld
  • 6B ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats 600, die das vollständige Opcode-Feld 574 bilden, gemäß einer Ausführungsform darstellt. Insbesondere umfasst das vollständige Opcode-Feld 574 das Formatfeld 540, das Basisoperationsfeld 542 und das Datenelementbreiten-(W)-Feld 564. Das Basisoperationsfeld 542 umfasst das Präfixcodierfeld 625, das Opcode-Abbildungsfeld 615 und das reelle Opcode-Feld 630.
  • Registerindexfeld
  • 6C ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats 600, die das Registerindexfeld 544 bilden, gemäß einer Ausführungsform darstellt. Insbesondere enthält das Registerindexfeld 544 das REX-Feld 605, das REX'-Feld 610, das MODR/M.reg-Feld 644, das MODR/M.r/m-Feld 646, das VVVV-Feld 620, das xxx-Feld 654 und das bbb-Feld 656.
  • Erweiterungsoperationsfeld
  • 6D ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats 600 veranschaulicht, die das Erweiterungsoperationsfeld 550 gemäß einer Ausführungsform bilden. Wenn das Klassen-(U)-Feld 568 0 enthält, gibt dies EVEX.U0 (Klasse A 568A) an; wenn es 1 enthält, gibt dies EVEX.U1 (Klasse B 568B) an. Wenn U=0 ist und das MOD-Feld 642 11 enthält (was eine Nichtspeicherzugriffs-Operation bedeutet), wird das Alphafeld 552 (EVEX-Byte 3, Bit [7]-EH) als das RS-Feld 552A interpretiert. Wenn das RS-Feld 552A eine 1 enthält (Rundung 152A.1), wird das Betafeld 554 (EVEX-Byte 3, Bits [6:4]-SSS) als das Rundungssteuerfeld 554A interpretiert. Das Rundungssteuerfeld 554A enthält ein Ein-Bit-SAE-Feld 556 und ein Zwei-Bit-Rundungsoperationsfeld 558. Wenn das RS-Feld 552A eine 0 enthält (Datentransformation 552A.2), wird das Betafeld 554 (EVEX-Byte 3, Bits [6:4]-SSS) als ein Drei-Bit-Datentransformationsfeld 554B interpretiert. Wenn U=0 und das MOD-Feld 642 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation anzeigt), wird das Alphafeld 552 (EVEX-Byte 3, Bit [7]-EH) als das RäumungshinweisFeld (EH-Feld) 552B interpretiert und das Betafeld 554 (EVEX-Byte 3, Bit [6:4]-SSS) als ein Drei-Bit-Datenmanipulationsfeld 554C interpretiert.
  • Wenn U=1 ist, wird das Alphafeld 452 (EVEX-Byte 3, Bit [7]-EH) als das Schreibmaskensteuer-(Z)-Feld 452C interpretiert. Wenn U=1 ist und das MOD-Feld 542 11 enthält (was eine Nichtspeicherzugriffs-Operation anzeigt), wird ein Teil des Betafeldes 554 (EVEX-Byte 3, Bit [4]- S0) als das RL-Feld 557A interpretiert; wenn es 1 (Rundung 557A.1) enthält, wird der Rest des Betafeldes 554 (EVEX-Byte 3, Bit [6-5]-S2-1) als das Rundungsoperationsfeld 559A interpretiert, während dann, wenn das RL-Feld 557A 0 enthält (VSIZE 557.A2), der Rest des Betafeldes 554 (EVEX-Byte 3, Bit [6-5]-S2-1) als das Vektorlängenfeld 559B (EVEX-Byte 3, Bit [6-5]-L1-0) interpretiert wird. Wenn U=1 ist und das MOD-Feld 642 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation anzeigt), wird das Betafeld 554 (EVEX-Byte 3, Bits [6:4]-SSS) als das Vektorlängenfeld 559B (EVEX-Byte 3, Bit [6-5]-L1-0) und das Broadcast-Feld 557B (EVEX-Byte 3, Bit [4]-B) interpretiert.
  • Beispielhafte Registerarchitektur
  • 7 ist ein Blockdiagramm einer Registerarchitektur 700 gemäß einer Ausführungsform. In einer gezeigten Ausführungsform gibt es 32 Vektorregister 710, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die niederwertigen 256 Bits der unteren 16 zmm-Register werden an Register ymm0-16 überlagert. Die niederwertigen 128 Bits der unteren 16 zmm-Register (die niederwertigen 128 Bits der ymm-Register) werden auf Register xmm0-15 überlagert. Das spezifische vektorfreundliche Befehlsformat 600 bearbeitet diesen überlagerten Registersatz wie in den nachstehenden Tabellen beispielhaft gezeigt.
    Anpassbare Vektorlänge Klasse Operationen Register
    Befehlsschablonen, die das Vektorlängenfeld 559B nicht enthalten A (5A; U=0) 510, 5115, 525, 530 zmm-Register (die Vektorlänge ist 64 Byte)
    B (5B; U=1) 512 zmm-Register (die Vektorlänge ist 64 Byte)
    Befehlsschablonen, die das Vektorlängenfeld 559B enthalten B (5B; U=1) 517, 527 zmm-, ymm- oder xmm-Register (die Vektorlänge ist 64 Byte, 32 Byte oder 16 Byte) abhängig von Vektorlängenfeld 559B
  • Mit anderen Worten wählt das Vektorlängenfeld 559B zwischen einer maximalen Länge und einer oder mehreren anderen kürzeren Längen, wobei jede solcher kürzeren Längen halb so groß wie die Länge der vorhergehenden Länge ist; und Befehlsschablonen ohne das Vektorlängenfeld 559B arbeiten mit der maximalen Vektorlänge. Ferner bearbeiten in einer Ausführungsform die Befehlsschablonen der Klasse B des spezifischen vektorfreundlichen Befehlsformats 600 gepackte oder skalare Fließkommadaten mit einfacher/doppelter Präzision und gepackte oder skalare Ganzzahldaten. Skalare Operationen sind Operationen, die an der niedrigstwertigen Datenelementposition in einem zmm-/ymm-/xmm-Register durchgeführt werden; die höherwertigen Datenelementpositionen werden abhängig von der Ausführungsform entweder belassen, wie sie vor dem Befehl waren, oder nullgesetzt.
  • Schreibmaskenregister 715 - in der beispielhaft gezeigten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7), die jeweils 64 Bits groß sind. In einer alternativen Ausführungsform haben die Schreibmaskenregister 715 eine Größe von 16 Bits. Wie bereits beschrieben kann das Vektormaskenregister k0 in einer Ausführungsform der Erfindung nicht als Schreibmaske verwendet werden; wenn die Codierung, die normalerweise k0 angeben würde, für eine Schreibmaske verwendet wird, wählt es eine fest verdrahtete Schreibmaske von 0xFFFF, wobei Schreibmaskieren für diesen Befehl effektiv ausgeschaltet wird.
  • Allzweckregister 725 - in der gezeigten Ausführungsform gibt es sechzehn 64-Bit-Allzweckregister, die gemeinsam mit den existierenden x86-Adressiermodi verwendet werden, um Speicheroperanden zu adressieren. Diese Register sind durch die Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Skalar-Fließkomma-Stapelregistersatz (x87-Stapel) 745, mit dem der MMX-gepackte Ganzzahlflachregistersatz 750 per Alias verbunden ist - in der beispielhaft gezeigten Ausführungsform ist der x87-Stapel ein Stapel aus acht Elementen, der verwendet wird, um skalare Fließkommaoperationen an 32/64/80-Bit-Fließkommadaten unter Verwendung der x86-Befehlssatzerweiterung durchzuführen; während die MMX-Register verwendet werden, um Operationen an 64-Bitgepackten Ganzzahldaten durchzuführen und Operanden für einige Operationen zu halten, die zwischen den MMX- und XMM-Registern durchgeführt werden.
  • Alternative Ausführungsformen können breitere oder schmalere Register verwenden. Zusätzlich können alternative Ausführungsformen der Erfindung mehr, weniger oder andere Registersätze und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf verschiedene Arten für verschiedene Zwecke und in verschiedenen Prozessoren implementiert sein. Zum Beispiel können Implementierungen solcher Kerne umfassen: 1) einen reihenfolgetreuen Allzweck-Kern, der für die allgemeine Verwendung bestimmt ist; 2) einen nicht reihenfolgetreuen Hochleistungs-Allzweck-Kern, der für die allgemeine Datenverarbeitung bestimmt ist; 3) einen Spezialkern, der hauptsächlich für Grafik und/oder wissenschaftliche (Durchsatz-)Berechnungen bestimmt ist. Implementierungen verschiedener Prozessoren können umfassen: 1) eine CPU, die einen oder mehrere reihenfolgetreue Allzweck-Kerne enthält, die für allgemeine Berechnungen vorgesehen sind, und/oder einen oder mehrere nicht reihenfolgetreue Allzweck-Kerne, die für allgemeine Berechnungen bestimmt sind; und 2) einen Coprozessor, der einen oder mehrere Spezialkerne enthält, die primär für Grafik und/oder wissenschaftlichen Durchsatz gedacht sind. Solche unterschiedlichen Prozessoren führen zu verschiedenen Computersystemarchitekturen, die umfassen können: 1) der Coprozessor auf einem separaten Chip von der CPU; 2) der Coprozessor auf einem separaten Chip in derselben Baugruppe wie eine CPU; 3) der Coprozessor auf demselben Chip wie eine CPU (in diesem Fall wird ein solcher Coprozessor manchmal als Speziallogik bezeichnet, wie z. B. integrierte Grafik und/oder wissenschaftliche (Durchsatz-) Logik oder als Spezialkerne); und 4) ein Ein-Chip-System, das auf demselben Chip die beschriebene CPU (manchmal als Anwendungskerne oder Anwendungsprozessor(en) bezeichnet) den oben beschriebenen Coprozessor und zusätzliche Funktionalität enthalten kann. Beispielhafte Kernarchitekturen sind als Nächstes beschrieben, gefolgt von Beschreibungen von beispielhaften Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen: Blockdiagramm für reihenfolgetreuen und nicht reihenfolgetreuen Kern
  • 8A ist ein Blockdiagramm, das sowohl eine beispielhafte reihenfolgetreue Pipeline als auch eine beispielhafte nicht reihenfolgetreue Ausgabe-/Ausführungspipeline mit Registerumbenennung darstellt. 8B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines Kerns einer reihenfolgetreuen Architektur als auch eines beispielhaften Kerns einer Architektur mit Registerumbenennung und nicht reihenfolgetreuer Ausgabe/Ausführung zeigt, die in einem Prozessor gemäß einer Ausführungsform enthalten sein sollen. Die durchgezogenen Kästchen in 8A-8B zeigen die reihenfolgetreue Pipeline und den reihenfolgetreuen Kern, während der optionale Zusatz der gestrichelten gezeichneten Kästchen die nicht reihenfolgetreue Ausgabe-/Ausführungspipeline mit Registerumbenennung und den zugehörigen Kern darstellt. Unter der Voraussetzung, dass der reihenfolgetreue Aspekt eine Teilmenge des nicht reihenfolgetreuen Aspekts ist, ist der nicht reihenfolgetreue Aspekt beschrieben.
  • In 8A enthält eine Prozessor-Pipeline 800 eine Abrufstufe 802, eine Längendecodierstufe 804, eine Decodierstufe 806, eine Zuweisungsstufe 808, eine Umbenennungsstufe 810, eine Scheduler-Stufe (auch als Absende- oder Ausgabe-Stufe bekannt) 812 eine Registerlese-/Speicherlesestufe 814, eine Ausführungsstufe 816, eine Rückschreib-/Speicherschreibstufe 818, eine Ausnahmebehandlungsstufe 822 und eine Festschreibungsstufe 824.
  • 8B zeigt einen Prozessorkern 890, der eine Frontend-Einheit 830 enthält, die mit einer Ausführungsmaschineneinheit 850 gekoppelt ist, wobei beide mit einer Speichereinheit 870 gekoppelt sind. Der Kern 890 kann ein Kern zur Berechnung mit reduziertem Befehlssatz (RISC-Kern), ein Kern zur Berechnung mit komplexem Befehlssatz (CISC-Kern), ein Kern mit sehr langem Befehlswort (VLIW-Kern) oder ein hybrider oder alternativer Kerntyp sein. Als noch eine weitere Option kann der Kern 890 ein Spezialkern wie etwa ein Netz- oder Kommunikationskern, eine Kompressionsmaschine, ein Coprozessorkern, ein Allzweck-Grafikverarbeitungseinheits-Kern (GPGPU-Kern), ein Grafikkern oder dergleichen sein.
  • Die Frontend-Einheit 830 enthält eine Verzweigungsvorhersageeinheit 832, die mit einer Befehlscacheeinheit 838 gekoppelt ist, die mit einem Befehlsübersetzungspuffer (TLB) 836 gekoppelt ist, der mit einer Befehlsabrufeinheit 838 gekoppelt ist, die mit einer Decodiereinheit 840 gekoppelt ist. Die Decodiereinheit 840 (oder der Decodierer) kann Befehle decodieren und als eine Ausgabe eine oder mehrere Mikrooperationen, Mikrocode-Eintrittspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale, die aus den ursprünglichen Befehlen decodiert werden oder diese reflektieren oder von diesen abgeleitet sind, erzeugen. Die Decodiereinheit 840 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Beispiele für geeignete Mechanismen umfassen, sind aber nicht beschränkt auf Nachschlagetabellen, Hardware-Implementierungen, programmierbare Logikanordnungen (PLAs), Mikrocode-Nur-Lese-Speicher (ROMs) usw. In einer Ausführungsform enthält der Kern 890 einen Mikrocode-ROM oder ein anderes Medium, das Mikrocode für bestimmte Makrobefehle speichert (z. B. in der Decodiereinheit 840 oder anderweitig innerhalb der Frontend-Einheit 830). Die Decodiereinheit 840 ist mit einer Umbenennungs-/Zuweisungseinheit 852 in der Ausführungsmaschineneinheit 850 gekoppelt.
  • Die Ausführungsmaschineneinheit 850 enthält die Umbenennungs-/Zuweisungseinheit 852, die mit einer Stilllegungseinheit 858 und einem Satz von einer oder mehreren Scheduler-Einheiten 856 gekoppelt ist. Die eine oder die mehreren Scheduler-Einheiten 856 repräsentieren eine beliebige Anzahl verschiedener Scheduler, einschließlich Reservierungsstationen (RS), eines zentralen Befehlsfensters usw. Die eine oder die mehreren Scheduler-Einheiten 856 sind mit der einen oder den mehreren physischen Registersatzeinheiten 858 gekoppelt. Jede der einen oder der mehreren physischen Registersatzeinheiten 858 stellt einen oder mehrere physische Registersätze dar, von denen verschiedene einen oder mehrere unterschiedliche Datentypen speichern, wie z. B. skalare Ganzzahl, skalare Gleitkommazahl, gepackte Ganzzahl, gepackte Gleitkommazahl, Vektor-Ganzzahl, Vektor-Gleitkomma, usw., Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. In einer Ausführungsform umfassen die eine oder die mehreren physische Registersatzeinheiten 858 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine Skalarregistereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Allzweckregister bereitstellen. Die eine oder die mehreren physischen Registersatzeinheiten 858 werden von der Stilllegungseinheit 854 überlappt, um verschiedene Arten zu veranschaulichen, in denen Registerumbenennung und nicht reihenfolgetreue Ausführung implementiert sein können (z. B. unter Verwendung eines oder mehrerer Umordnungspuffer und eines oder mehrerer Stilllegungsregistersätze, unter Verwendung einer oder mehrerer Zukunftsdateien, unter Verwendung eines oder mehrerer Verlaufspuffer und eines oder mehrerer Stilllegungsregisterblöcke; unter Verwendung einer Registerkarte und eines Pools von Registern; etc.). Die Stilllegungseinheit 854 und die eine oder die mehreren physischen Registerblockeinheiten 858 sind mit dem einen oder den mehreren Ausführungsclustern 860 gekoppelt. Der eine oder die mehreren Ausführungscluster 860 enthalten einen Satz von einer oder mehreren Ausführungseinheiten 862 und einen Satz von einer oder mehreren Speicherzugriffseinheiten 868. Die Ausführungseinheiten 862 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) durchführen und arbeiten mit verschiedenen Arten von Daten (z. B. skalare Gleitkommazahl, gepackte Ganzzahl, gepackte Gleitkommazahl, Vektor-Ganzzahl, Vektor-Gleitkommazahl). Obwohl einige Ausführungsformen eine Anzahl von Ausführungseinheiten enthalten können, die bestimmten Funktionen oder Mengen von Funktionen zugeordnet sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten enthalten, die alle alle Funktionen ausführen. Die eine oder die mehreren Scheduler-Einheiten 856, die eine oder die mehreren physischen Registersatzeinheiten 858 und die Ausführungscluster 860 sind optional mehrfach dargestellt, da bestimmte Ausführungsformen separate Pipelines für bestimmte Arten von Daten/Operationen erzeugen (z. B. eine Pipeline für skalare Ganzzahlen, ein Pipeline für skalare Gleitkommazahl/gepackte Ganzzahl/gepackte Gleitkommazahl/Vektor-Ganzzahl/Vektor Gleitkommazahl und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre eigene Scheduler-Einheit, physische Registerblockeinheit und/oder ihren eigenen Ausführungscluster haben - und im Falle einer separaten Speicherzugriffspipeline sind bestimmte Ausführungsformen implementiert, bei denen nur der Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 864 aufweist). Es sollte auch verstanden werden, dass dann, wenn separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines nicht reihenfolgetreuer Ausgabe/Ausführung dienen können und der Rest reihenfolgetreu sein kann.
  • Die Speichereinheit 870 kann eine oder mehrere der Schaltungen oder anderen Strukturen, die in Bezug auf die Speichereinheit 290 in 2 beschrieben sind, umfassen. Der Satz von Speicherzugriffseinheiten 864 ist mit der Speichereinheit 870 gekoppelt, die eine Daten-TLB-Einheit 872 umfasst, die mit einer Datencacheeinheit 874 gekoppelt ist, die mit einer Ebene-2-Cache-Einheit (L2-Cache-Einheit) 876 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 864 eine Ladeeinheit, eine Speicheradresseinheit und eine Speicherdateneinheit umfassen, die jeweils mit der Daten-TLB-Einheit 872 in der Speichereinheit 870 gekoppelt sind. Die L2-Cacheeinheit 876 ist mit einer oder mehreren anderen Cacheebenen und schließlich mit einem Hauptspeicher gekoppelt.
  • Beispielsweise kann die Kernarchitektur mit Registerumbenennung und nicht reihenfolgetreuer Ausgabe/Ausführung die Pipeline 800 wie folgt implementieren: 1) die Befehlsabrufeinheit 838 führt die Abruf- und Längendecodierstufen 802 und 804 durch; 2) die Decodiereinheit 840 führt die Decodierstufe 806 durch; 3) die Umbenennungs-/Zuweisungseinheit 852 führt die Zuweisungsstufe 808 und die Umbenennungsstufe 810 durch; 8) die Scheduler-Einheit(en) 856 führt die Planungsstufe 812 durch; 5) die die eine oder die mehreren physische Registersatzeinheiten 858 und die Speichereinheit 870 führen die Registerlese-/Speicherlesestufe 814 aus; der Ausführungscluster 860 führt die Ausführungsstufe 816 aus; 6) die Speichereinheit 870 und die eine oder die mehreren physische Registersatzeinheiten 858 führen die Rückschreib-/Speicherschreibstufe 818 aus; 7) verschiedene Einheiten können an der Ausnahmebehandlungsstufe 822 beteiligt sein; und 8) die Stilllegungseinheit 854 und die eine oder die mehreren physische Registersatzeinheiten 858 führen die Festschreibungsstufe 824 aus.
  • Der Kern 890 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden), den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, Kalifornien, den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) von ARM Holdings aus Sunnyvale, Kalifornien), die die hierin beschriebenen Befehle umfassen. In einer Ausführungsform umfasst der Kern 890 eine Logik zum Unterstützen einer gepackten Datenbefehlssatzerweiterung (z. B. AVX1, AVX2), wodurch ermöglicht wird, dass die von vielen Multimediaanwendungen verwendeten Operationen unter Verwendung von gepackten Daten ausgeführt werden.
  • Es sollte verstanden werden, dass der Kern Mehrsträngigkeit (ein Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Strängen) unterstützen kann und dies auf eine Vielzahl von Arten tun kann, einschließlich zeitlich aufgeteilter Mehrsträngigkeit, simultaner Mehrsträngigkeit (bei der ein einzelner physischer Kern einen logischen Kern für jeden der Stränge bereitstellt, für die der physische Kern simultane Mehrsträngigkeit bietet) oder einer Kombination davon (z. B. zeitlich aufgeteiltes Abrufen und Decodieren und simultane Mehrsträngigkeit danach, wie bei der Intel®-Hyperthreading-Technologie).
  • Obwohl die Registerumbenennung im Zusammenhang mit der nicht reihenfolgetreuen Ausführung beschrieben ist, sollte verstanden werden, dass die Registerumbenennung in einer reihenfolgetreuen Architektur verwendet werden kann. Obwohl die veranschaulichte Ausführungsform des Prozessors auch eine separate Befehls- und Datencacheeinheit 834/874 und eine gemeinsame L2-Cache-Einheit 876 enthält, können alternative Ausführungsformen einen einzelnen internen Cache sowohl für Befehle als auch Daten aufweisen, wie etwa einen internen Cache erster Ebene (L1-Cache) oder mehrere Ebenen internen Cache. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, umfassen. Alternativ kann sich der gesamte Cache außerhalb des Kerns und/oder des Prozessors befinden.
  • Beispielhafte spezifische reihenfolgetreue Kernarchitektur
  • 9A-9B zeigen ein Blockdiagramm einer spezifischeren beispielhaften reihenfolgetreuen Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne des gleichen Typs und/oder anderer Typen) in einem Chip wäre. Die Logikblöcke kommunizieren über ein Verbindungsnetz mit hoher Bandbreite (z. B. ein Ringnetz) mit einigen Logiken fester Funktion, Speicher-I/O-Schnittstellen und anderer erforderlicher I/O-Logik, je nach Anwendung.
  • 9A ist ein Blockdiagramm eines einzelnen Prozessorkerns zusammen mit seiner Verbindung mit dem Verbindungsnetz 902 auf dem Chip und mit seiner lokalen Teilmenge des Ebene-2-Cache (L2-Cache) 904 gemäß einer oder mehreren Ausführungsformen. In einer Ausführungsform unterstützt ein Befehlsdecodierer 900 den x86-Befehlssatz mit einer gepackten Datenbefehlssatzerweiterung. Ein L1-Cache 906 ermöglicht Zugriffe mit niedriger Latenzzeit, um Speicher in den Skalar- und Vektoreinheiten zwischenzuspeichern. Obwohl in einer Ausführungsform (um das Design zu vereinfachen) eine Skalareinheit 908 und eine Vektoreinheit 910 separate Registersätze (bzw. Skalarregister 912 und Vektorregister 914) verwenden und Daten, die zwischen ihnen übertragen werden, in den Speicher geschrieben und dann wieder von einem Ebene-1-Cache (L1-Cache) 906 zurückgelesen werden, können andere Ausführungsformen einen anderen Ansatz verwenden (z. B. einen einzelnen Registersatz verwenden oder einen Kommunikationspfad umfassen, der es ermöglicht, Daten zwischen den beiden Registersätzen zu übertragen, ohne dass sie geschrieben und zurückgelesen zu werden).
  • Die lokale Teilmenge des L2-Cache 904 ist Teil eines globalen L2-Cache, der in separate lokale Teilmengen aufgeteilt ist, und zwar eine je Prozessorkern. Jeder Prozessorkern hat einen direkten Zugriffsweg zu seiner eigenen lokalen Teilmenge des L2-Cache 904. Von einem Prozessorkern gelesene Daten werden in seiner L2-Cache-Teilmenge 904 gespeichert und es kann parallel zu anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilmengen zugreifen, schnell darauf zugegriffen werden. Daten, die von einem Prozessorkern geschrieben werden, werden in seiner eigenen L2-Cache-Teilmenge 904 gespeichert und bei Bedarf aus anderen Teilmengen ausgeräumt. Das Ringnetz stellt die Kohärenz für gemeinsam genutzte Daten sicher. Das Ringnetz ist bidirektional, damit Agenten wie Prozessorkerne, L2-Caches und andere Logikblöcke innerhalb des Chips miteinander kommunizieren können. Jeder Ringdatenweg ist pro Richtung 1012 Bits breit.
  • 9B ist eine vergrößerte Ansicht eines Teils des Prozessorkerns in 9A gemäß einer Ausführungsform. 9B enthält einen L1-Datencache 506A, einen Teil des L1-Cache 904 sowie weitere Details bezüglich der Vektoreinheit 910 und der Vektorregister 914. Insbesondere ist die Vektoreinheit 910 eine 16-breite Vektorverarbeitungseinheit (VPU) (siehe die 16-breite ALU 928), die eine oder mehrere Ganzzahl-, Einfachpräzisions-Gleitkomma- und Doppelpräzisions-Gleitkommabefehle ausführt. Die VPU unterstützt das Swizzeln von Registereingaben mit der Swizzle-Einheit 920, eine numerische Konvertierung mit Einheiten für numerische Konvertierung 922A-B und eine Replikation mit der Replikationseinheit 924 an der Speichereingabe. Schreibmaskenregister 926 ermöglichen das Prädizieren von resultierenden Vektorschreibvorgängen.
  • 10 ist ein Blockdiagramm eines Prozessors 1000, der mehr als einen Kern aufweisen kann, einen integrierten Speichercontroller aufweisen kann und gemäß Ausführungsformen der Offenbarung integrierte Grafik aufweisen kann. Die durchgezogenen Kästchen in 10 zeigen einen Prozessor 1000 mit einem einzelnen Kern 1002A, einem Systemagenten 1010, einem Satz von einer oder mehreren Buscontrollereinheiten 1016, während die optionale Zugabe der gestrichelten Kästchen einen alternativen Prozessor 1000 mit mehreren Kernen 1002A-N, einem Satz von einer oder mehreren integrierten Speichersteuereinheiten 1014 in der Systemagenteneinheit 1010 und einer Speziallogik 1008 darstellt.
  • Somit können verschiedene Implementierungen des Prozessors 1000 umfassen: 1) eine CPU mit der SpezialLogik 1008, die eine integrierte Grafik und/oder wissenschaftliche (Durchsatz-)Logik ist (die einen oder mehrere Kerne enthalten kann), wobei die Kerne 1002A-N ein oder mehrere Allzweckkerne (z. B. reihenfolgetreue Allzweck-Kerne, nicht reihenfolgetreue Allzweck-Kerne, eine Kombination aus beiden) sind; 2) einen Coprozessor, wobei die Kerne 1002A-N eine große Anzahl von Spezial-Kernen sind, die hauptsächlich für Grafik und/oder wissenschaftlichen Durchsatz bestimmt sind; und 3) einen Coprozessor, wobei die Kerne 1002A-N eine große Anzahl von reihenfolgetreuen Allzweck-Kernen sind. Somit kann der Prozessor 1000 ein Allzweck-Prozessor, Coprozessor oder Spezial-Prozessor wie beispielsweise ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, eine GPGPU (Allzweck-Grafikverarbeitungseinheit), ein Coprozessor mit vielen Kernen mit hohem Durchsatz (MIC-Coprozessor) (der 30 oder mehr Kerne enthält), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 1000 kann ein Teil von einem oder mehreren Substraten und/oder auf diesen unter Verwendung einer beliebigen Anzahl von Prozesstechnologien implementiert sein, wie z. B. BiCMOS, CMOS oder NMOS.
  • Die Speicherhierarchie umfasst eine oder mehrere Ebenen von Cache innerhalb der Kerne, einen Satz von einer oder mehreren gemeinsam genutzten Cacheeinheiten 1006 und einen externen Speicher (nicht gezeigt), der mit dem Satz von integrierten Speichercontrollereinheiten 1014 gekoppelt ist. Der Satz von einer oder mehreren gemeinsam genutzten Cacheeinheiten 1006 kann einen oder mehrere Caches mittlerer Ebene, wie etwa Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder anderer Cache-Ebenen, einen Cache letzter Ebene (LLC) und/oder Kombinationen davon umfassen. Obwohl in einer Ausführungsform eine ringbasierte Zwischenverbindungseinheit 1012 die integrierte Grafiklogik 1008, den Satz von gemeinsamen Cache-Einheiten 1006 und die Systemagenteneinheit 1010 / die integrierte(n) Speichersteuereinheit(en) 1014 miteinander verbindet, können alternative Ausführungsformen eine beliebige Anzahl von bekannten Techniken zum Verbinden solcher Einheiten verwenden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cache-Einheiten 1006 und Kernen 1002A-N aufrechterhalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 1002A-N zur Mehrsträngigkeit fähig. Der Systemagent 1010 enthält die Komponenten, die die Kerne 1002A-N koordinieren und betreiben. Die Systemagenteneinheit 1010 kann beispielsweise eine Leistungssteuereinheit (PCU) und eine Anzeigeeinheit umfassen. Die PCU kann Logik oder Komponenten darstellen oder enthalten, die zum Regeln des Leistungszustands der Kerne 1002A-N und der integrierten Grafiklogik 1008 benötigt werden. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern angeschlossener Anzeigen.
  • Die Kerne 1002A-N können hinsichtlich des Architekturbefehlssatzes homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 1002A-N können in der Lage sein, den gleichen Befehlssatz auszuführen, während andere nur einen Teilsatz dieses Befehlssatzes oder einen anderen Befehlssatz ausführen können.
  • Beispielhafte Computerarchitekturen
  • 11-14 sind Blockdiagramme von beispielhaften Computerarchitekturen. Andere Systementwürfe und Konfigurationen, die in der Technik für Laptops, Desktops, tragbare PCs, persönliche digitale Assistenten, technische Arbeitsplatzrechner, Server, Netzvorrichtungen, Netzhubs, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen Beistellgeräte, Mikrocontroller, Mobiltelefone, tragbare Medienabspieler, tragbare Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind ebenfalls geeignet. Im Allgemeinen ist eine riesige Vielfalt von Systemen oder elektronischen Vorrichtungen, die einen Prozessor und/oder eine andere Ausführungslogik, wie sie hierin offenbart sind, enthalten können, im Allgemeinen geeignet.
  • Unter Bezugnahme auf 11 ist ein Blockdiagramm eines Systems 1100 gemäß einer Ausführungsform gezeigt. Das System 1100 kann einen oder mehrere Prozessoren 1110, 1115 umfassen, die mit einem Controller-Hub 1120 gekoppelt sind. In einer Ausführungsform umfasst der Controller-Hub 1120 einen Grafikspeicher-Controller-Hub (GMCH) 1190 und einen Eingabe/Ausgabe-Hub (IOH) 1150 (die sich auf getrennten Chips befinden können); der GMCH 1190 enthält einen Speicher- und einen Grafik-Controller, mit denen ein Speicher 1140 und ein Coprozessor 1145 gekoppelt sind; der IOH 1150 koppelt Eingabe/Ausgabe-Vorrichtungen (IO-Vorrichtungen) 1160 mit dem GMCH 1190. Alternativ sind der Speicher- und/oder der Grafikcontroller in dem Prozessor integriert (wie hierin beschrieben), der Speicher 1140 und der Coprozessor 1145 direkt mit dem Prozessor 1110 gekoppelt und der Controller-Hub 1120 in einem einzigen Chip mit dem IOH 1150.
  • Die optionale Natur der zusätzlichen Prozessoren 1115 ist in 11 mit gestrichelten Linien gekennzeichnet. Jeder Prozessor 1110, 1115 kann einen oder mehrere der hierin beschriebenen Verarbeitungskerne enthalten und kann irgendeine Version des Prozessors 1000 sein.
  • Der Speicher 1140 kann beispielsweise ein dynamischer Direktzugriffsspeicher (DRAM), ein Phasenwechselspeicher (PCM) oder eine Kombination aus beiden sein. Bei mindestens einer Ausführungsform kommuniziert der Controller-Hub 1120 mit dem/den Prozessor(en) 1110, 1115 über einen Multidrop-Bus wie etwa einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle wie Quick Path Interconnect (QPI) oder eine ähnliche Verbindung 1195.
  • In einer Ausführungsform ist der Coprozessor 1145 ein Spezial-Prozessor wie beispielsweise ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Controller-Hub 1120 einen integrierten Grafikbeschleuniger umfassen.
  • Es kann eine Vielzahl von Unterschieden zwischen den physischen Betriebsmitteln 1110, 1115 im Hinblick auf ein Spektrum von Leistungsmetriken geben, einschließlich Architektur-, Mikroarchitektur-, Wärme-, Energieverbrauchseigenschaften und dergleichen.
  • In einer Ausführungsform führt der Prozessor 1110 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. Eingebettet in die Befehle können Coprozessorbefehle sein. Der Prozessor 1110 erkennt diese Coprozessorbefehle als einen Typ, der von dem angeschlossenen Coprozessor 1145 ausgeführt werden sollte. Dementsprechend gibt der Prozessor 1110 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle darstellen) auf einem Coprozessorbus oder einer anderen Zwischenverbindung an den Coprozessor 1145 aus. Der eine oder die mehreren Coprozessoren 1145 akzeptieren die empfangenen Coprozessorbefehle und führen sie aus.
  • Unter Bezugnahme auf 12 ist nun ein Blockdiagramm eines ersten spezifischeren beispielhaften Systems 1200 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 12 gezeigt ist das Mehrprozessorsystem 1200 ein Punkt-zu-Punkt-Zwischenverbindungssystem und umfasst einen ersten Prozessor 1270 und einen zweiten Prozessor 1280, die über eine Punkt-zu-Punkt-Zwischenverbindung 1250 gekoppelt sind. Jeder der Prozessoren 1270 und 1280 kann jeweils eine Version des Prozessors 1000 sein. In einer Ausführungsform sind die Prozessoren 1270 und 1280 Prozessoren 1110 bzw. 1115, während der Coprozessor 1238 ein Coprozessor 1145 ist. In einer weiteren Ausführungsform sind die Prozessoren 1270 und 1280 Prozessor 1110 bzw. Coprozessor 1145.
  • Die Prozessoren 1270 und 1280 sind mit integrierten Speichercontrollereinheiten (IMC-Einheiten) 1272 bzw. 1282 gezeigt. Der Prozessor 1270 umfasst zudem als Teil seiner Bussteuereinheiten Punkt-zu-Punkt-Schnittstellen (P-P-Schnittstellen) 1276 und 1278; ebenso umfasst der zweite Prozessor 1280 PP-Schnittstellen 1286 und 1288. Die Prozessoren 1270, 1280 können Informationen über eine Punkt-zu-Punkt-Schnittstelle (PP-Schnittstelle) 1250 unter Verwendung von PP-Schnittstellenschaltungen 1278, 1288 austauschen. Wie in 12 gezeigt koppeln die IMCs 1272 und 1282 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 1232 und einem Speicher 1234, die Teile des Hauptspeichers sein können, die lokal an die jeweiligen Prozessoren angebunden sind.
  • Die Prozessoren 1270, 1280 können jeweils Informationen mit einem Chipsatz 1290 über einzelne PP-Schnittstellen 1252, 1254 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 1276, 1294, 1286, 1298 austauschen. Der Chipsatz 1290 kann optional über eine Hochleistungsschnittstelle 1239 Informationen mit dem Coprozessor 1238 austauschen. In einer Ausführungsform ist der Coprozessor 1238 ein Spezial-Prozessor wie etwa ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein gemeinsam genutzter Cache (nicht gezeigt) kann in jedem Prozessor enthalten sein oder außerhalb von beiden Prozessoren sein, jedoch über PP-Verbindung mit den Prozessoren verbunden sein, so dass lokale Cache-Informationen eines oder beider der Prozessoren in dem gemeinsamen Cache gespeichert werden können, wenn ein Prozessor in einen Energiesparmodus versetzt wird.
  • Der Chipsatz 1290 kann mit einem ersten Bus 1216 über eine Schnittstelle 1296 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1216 ein Peripheriekomponenten-Zwischenverbindungs-Bus (PCI-Bus) oder ein Bus wie etwa ein PCI-Express-Bus oder ein anderer I/O-Zwischenverbindungsbus dritter Generation sein, obwohl der Umfang der vorliegenden Erfindung dahingehend nicht beschränkt ist.
  • Wie in 12 gezeigt können verschiedene I/O-Vorrichtungen 1214 mit dem ersten Bus 1216 zusammen mit einer Busbrücke 1218 gekoppelt sein, die den ersten Bus 1216 mit einem zweiten Bus 1220 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren wie etwa Coprozessoren, Hochdurchsatz-MIC-Prozessoren, GPGPUs, Beschleuniger (wie z. B. Grafikbeschleuniger oder Digitalsignalverarbeitungs-Einheiten (DSP-Einheiten), feldprogrammierbare Gatteranordnungen oder irgendein anderer Prozessor mit dem ersten Bus 1216 gekoppelt sein. In einer Ausführungsform kann der zweite Bus 1220 ein Bus mit geringer Stiftanzahl (LPC-Bus) sein. Verschiedene Vorrichtungen können mit dem zweiten Bus gekoppelt sein, einschließlich beispielsweise einer Tastatur/Maus 1222, Kommunikationsvorrichtungen 1226 und einer Speichereinheit 1228 wie etwa eines Plattenlaufwerks oder einer anderen Massenspeichereinheit, die in einer Ausführungsform Befehle oder Code und Daten 1230 enthalten kann. Ferner kann eine Audio-I/O-Vorrichtung 1224 mit dem zweiten Bus 1220 gekoppelt sein. Es versteht sich, dass andere Architekturen möglich sind. Beispielsweise kann ein System anstelle der Punkt-zu-Punkt-Architektur von 12 einen Multi-Drop-Bus oder eine andere solche Architektur implementieren.
  • Unter Bezugnahme auf 13 ist ein Blockdiagramm eines zweiten spezifischeren Beispielsystems 1300 gezeigt. Gleiche Elemente in 12 und 13 tragen gleiche Bezugszeichen und bestimmte Aspekte von 12 wurden in 13 weggelassen, um zu vermeiden, andere Aspekte von 13 zu verunklaren.
  • 13 zeigt, dass die Prozessoren 1270, 1280 einen integrierten Speicher und eine IO-Steuerlogik („CL“) 1272 bzw. 1282 enthalten können. Somit umfassen die CL 1272, 1282 integrierte Speichersteuereinheiten und enthalten eine IO-Steuerlogik. 13 zeigt, dass nicht nur die Speicher 1232, 1234 mit den CL 1272, 1282 gekoppelt sind, sondern auch die IO-Vorrichtungen 1314 ebenfalls mit der Steuerlogik 1272, 1282 gekoppelt sind. Alt-IO-Vorrichtungen 1315 sind mit dem Chipsatz 1290 gekoppelt.
  • Unter Bezugnahme auf 14 ist ein Blockdiagramm eines SoC 1400 gemäß einer Ausführungsform gezeigt. Gleiche Elemente in 10 tragen gleiche Bezugszeichen. Gestrichelte Kästchen sind zudem optionale Merkmale von fortgeschritteneren SoCs. In 14 sind eine oder mehrere Zwischenverbindungseinheiten 1402 gekoppelt mit: einem Anwendungsprozessor 1410, der einen Satz von einem oder mehreren Kernen 202A-N und eine oder mehrere gemeinsam genutzte Cache-Einheiten 1006 enthält; einer Systemagenteneinheit 1010; einer oder mehreren Bussteuereinheiten 1016; einer oder mehreren integrierten Speichercontrollereinheiten 1014; einem Satz von einem oder mehreren Coprozessoren 1420, die eine integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor umfassen können; einer statische Speichereinheit mit wahlfreiem Zugriff (SRAM) 1430; einer Direktspeicherzugriffs-Einheit (DMA-Einheit) 1432; und einer Anzeigeeinheit 1440 zum Koppeln mit einer oder mehreren externen Anzeigen. In einer Ausführungsform umfassen der eine oder die mehreren Coprozessoren 1420 einen Spezial-Prozessor wie beispielsweise einen Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, eine GPGPU, einen Hochdurchsatz-MIC-Prozessor, einen eingebetteten Prozessor oder dergleichen.
  • Ausführungsformen der hier offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Ansätze implementiert sein. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert sein, der/die auf programmierbaren Systemen ausgeführt werden kann/können, die wenigstens einen Prozessor, ein Speichersystem (einschließlich flüchtigen und nichtflüchtigen Speichers und/oder derartiger Speicherelemente), mindestens eine Eingabevorrichtung und mindestens eine Ausgabevorrichtung enthalten.
  • Programmcode wie beispielsweise der in 12 dargestellte Code 1230 kann auf Eingangsbefehle angewendet werden, um die hier beschriebenen Funktionen durchzuführen und Ausgangsinformationen zu erzeugen. Die Ausgangsinformationen können in bekannter Weise auf eine oder mehrere Ausgabevorrichtungen angewendet werden. Zu Zwecken dieser Anwendung umfasst ein Verarbeitungssystem irgendein System, dass einen Prozessor enthält, wie etwa beispielsweise: einen Digitalsignalprozessor (DSP), einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann als eine prozedurale Hochsprache oder objektorientierte Programmiersprache implementiert sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann auch in Assembler- oder Maschinensprache implementiert sein, falls gewünscht. Tatsächlich sind die hier beschriebenen Mechanismen im Umfang nicht auf irgendeine 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 durch repräsentative Befehle implementiert sein, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedenartige Logik innerhalb des Prozessors repräsentiert, und die, wenn sie durch eine Maschine gelesen werden, die Maschine dazu veranlassen, Logik herzustellen, um die hierin beschriebenen Techniken durchzuführen. Solche Repräsentationen, bekannt als „IP-Kerne“, können auf einem greifbaren, maschinenlesbaren Medium gespeichert und an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, um in die Herstellungsmaschinen geladen zu werden, die die Logik oder den Prozessor tatsächlich herstellen.
  • Solche maschinenlesbaren Speichermedien können ohne Einschränkung darauf nichtflüchtige greifbare Anordnungen von Erzeugnissen einschließen, die durch eine Maschine oder Vorrichtung hergestellt werden, einschließlich Speichermedien wie etwa Festplatten, irgendwelche anderen Plattentypen einschließlich Floppydisks, optische Platten, CD-ROMs, CD-RWs und magneto-optische Platten, Halbleitereinrichtungen wie etwa Nur-Lese-Speicher (ROM), Speicher mit wahlfreiem Zugriff (RAM) wie etwa dynamische Speicher mit wahlfreiem Zugriff (DRAM), statische Speicher mit wahlfreiem Zugriff (SRAM), löschbare programmierbare Nur-Lese-Speicher (EPROM), Flash-Speicher, elektrisch löschbare programmierbare Nur-Lese-Speicher (EEPROMs), Phasenwechselspeicher (PCM), magnetische oder optische Karten oder irgendwelche anderen Medientypen, die zum Speichern elektronischer Befehle geeignet sind.
  • Somit umfassen Ausführungsformen der Erfindung auch nichtflüchtige, greifbare maschinenlesbare Medien, die Befehle enthalten oder Designdaten wie etwa Hardwarebeschreibungssprache (HDL), die Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemstrukturen definiert, die hier beschrieben sind, enthalten. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich Binärübersetzung, Code-Morphen etc.)
  • In einigen Fällen kann ein Befehlsumwandler verwendet werden, um einen Befehl aus einem Quellbefehlssatz in einen Zielbefehlssatz umzuwandeln. Beispielsweise kann der Befehlsumwandler einen Befehl übersetzen (beispielsweise unter Verwendung statischer Binärübersetzung, dynamischer Binärübersetzung einschließlich dynamischen Kompilierens), morphen, emulieren oder auf andere Weise in einen oder mehrere andere Befehle umwandeln, die durch den Kern verarbeitet werden sollen. Der Befehlsumwandler kann in Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. Der Befehlsumwandler kann auf einem Prozessor, außerhalb eines Prozessors oder teilweise auf und teilweise außerhalb eines Prozessors sein.
  • 15 ist ein Blockdiagramm, das die Verwendung eines Softwarebefehlsumwandlers zum Umwandeln von Binärbefehlen in einem Quellbefehlssatz in Binärbefehle in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung vergleicht. In der beispielhaft gezeigten Ausführungsform ist der Befehlsumwandler ein Softwarebefehlsumwandler, obwohl der Befehlsumwandler alternativ in Software, Firmware, Hardware oder verschiedenen Kombinationen daraus implementiert sein kann. 15 zeigt ein Programm in einer Hochsprache 1502, das unter Verwendung eines x86-Compilers 1504 kompiliert werden kann, um x86-Binärcode 1506 zu erzeugen, der durch einen Prozessor mit mindestens einem x86-Befehlssatz-Kern 1516 nativ ausgeführt werden kann. Der Prozessor mit mindestens einem x86-Befehlssatz-Kern 1516 repräsentiert irgendeinen Prozessor, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatz-Kern durchführen kann, indem er (1) einen wesentlichen Teil des Befehlssatzes des Intel-x86-Befehlssatz-Kerns oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die zum Ablaufen auf einem Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern gedacht ist, kompatibel ausführt oder auf andere Weise verarbeitet, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatz-Kern zu erzielen. Der x86-Compiler 1504 repräsentiert einen Compiler, der betreibbar ist, um x86-Binärcode 1506 (beispielsweise Objektcode) zu erzeugen, der mit oder ohne zusätzliche Verknüpfungsverarbeitung auf dem Prozessor mit mindestens einem x86-Befehlssatz-Kern 1516 ausgeführt werden kann. Auf ähnliche Weise zeigt 15, dass das Programm in der Hochsprache 1502 unter Verwendung eines alternativen Befehlssatzcompilers 1508 kompiliert werden kann, um einen alternativen Befehlssatzbinärcode 1510 zu erzeugen, der durch einen Prozessor ohne mindestens einen x86-Befehlssatz-Kern 1514 (beispielsweise einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS-Technologies aus Sunnyvale, Kalifornien, ausführen und/oder die den ARM-Befehlssatz von ARM-Holdings aus Sunnyvale, Kalifornien, ausführen) nativ ausgeführt werden kann. Der Befehlsumwandler 1512 wird verwendet, um den x86-Binärcode 1506 in Code umzuwandeln, der durch den Prozessor ohne einen x86-Befehlssatz-Kern 1514 nativ ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht der gleiche wie der alternative Befehlssatzbinärcode 1510, weil ein Befehlsumwandler, der dazu in der Lage ist, schwierig herzustellen ist; jedoch wird der umgewandelte Code den allgemeinen Betrieb ermöglichen und aus Befehlen aus dem alternativen Befehlssatz bestehen. Somit repräsentiert der Befehlsumwandler 1512 Software, Firmware, Hardware oder eine Kombination daraus, die es durch Emulation, Simulation oder irgendeinen anderen Prozess einem Prozessor oder einer anderen elektronischer Vorrichtung, die keinen x86-Befehlssatzprozessor oder - kern aufweist, ermöglicht, den x86-Binärcode 1506 auszuführen.
  • Um das hierin offenbarte Verfahren und die Vorrichtungen besser zu veranschaulichen, ist hier eine nicht einschränkende Liste von Ausführungsformen bereitgestellt.
  • Beispiel 1 ist eine durch Hardware implementierte Stromcacheschaltung, die Folgendes umfasst: einen Stromcache-Folgezeilen-Prädiktor für Folgendes: Empfangen einer Speicherblockadresse A; Bestimmen einer stabilen Zeile von Speicherblöcken, die die Speicherblockadresse A, gefolgt von einer Speicherblockadresse B umfasst; und Senden eines Stromcache-Prädiktorbefehls basierend auf der Speicherblockadresse B; ein Stromcache-Zeigerarray zum Empfangen des Stromcache-Prädiktorbefehls von dem Stromcache-Prädiktor für die nächsten Zeile und zum Senden eines Abrufbefehls für Block B; und ein Mikro-Ops-Cachedatenarray für Folgendes: Speichern mehrerer vorher abgerufener Speicherblöcke; Empfangen des Abrufbefehls für Block B; und Abrufen eines Speicherblocks B aus den mehreren gespeicherten vorher abgerufenen Speicherblöcken.
  • In Beispiel 2 umfasst der Gegenstand von Beispiel 1 optional, dass der Stromcache-Folgezeilen-Prädiktor ferner Folgendes durchführt: Empfangen mehrerer Speicherblockadressen; und Bestimmen der stabilen Zeile von Speicherblöcken, wobei die stabile Zeile eine aufeinanderfolgende Teilmenge von Speicherblöcken innerhalb der mehreren Speicherblockadressen enthält.
  • In Beispiel 3 umfasst der Gegenstand von Beispiel 2 optional, dass die Stromcache-Folgezeile einen Vertrauenszähler zum Empfangen der mehreren Speicherblockadressen und zum Bestimmen der stabilen Zeile basierend auf den mehreren Speicherblockadressen enthält.
  • In Beispiel 4 umfasst der Gegenstand eines oder mehrerer der Beispiele 1-3 optional ein Cacheetikettenarray zum Empfangen der Speicherblockadresse A und zum Senden eines Abrufbefehls für Block A an das Mikro-Ops- Cachedatenarray, wobei das Mikro-Ops-Cachedatenarray den Cachedatenarraybefehl empfangen soll und einen Speicherblock A aus den mehreren gespeicherten vorher abgerufenen Speicherblöcken abrufen soll.
  • In Beispiel 5 umfasst der Gegenstand von Beispiel 4 optional dass der Stromcache-Folgezeilen-Prädiktor ferner Folgendes durchführt: das Bestimmen, dass die stabilen Zeile von Speicherblöcken die Speicherblockadresse C, die der Speicherblockadresse 47B folgt, umfasst; und Senden eines Folgebefehlsprotokoll-Befehls basierend auf der Speicherblockadresse C, wobei der Folgebefehlsprotokoll-Befehl veranlasst, dass das Cacheetikettenarray und das Mikro-Ops-Cachedatenarray, einen Speicherblock C aus den mehreren gespeicherten vorher abgerufenen Speicherblöcken abrufen.
  • In Beispiel 6 umfasst der Gegenstand von Beispiel 5 optional einen Folgebefehlsprotokoll-Multiplexer für Folgendes: Empfangen des Folgebefehlsprotokoll-Befehls von dem Stromcache-Folgezeilen-Prädiktor; und Senden der Speicherblockadresse C an das Cacheetikettenarray.
  • In Beispiel 7 umfasst der Gegenstand von Beispiel 6 optional einen Adressaddierer für Folgendes: Empfangen einer vorherigen Speicheradresse von dem Folgebefehlsprotokoll-Multiplexer; Erzeugen einer inkrementierten Speicheradresse basierend auf der vorherigen Speicheradresse; und Senden der inkrementierten Speicheradresse an den Folgebefehlsprotokoll-Multiplexer.
  • In Beispiel 8 umfasst der Gegenstand eines oder mehrerer der Beispiele 4-7 optional ein Verzweigungsprädiktorverlaufsregister zum Speichern eines Verzweigungsprädiktorverlaufs.
  • In Beispiel 9 umfasst der Gegenstand von Beispiel 8 optional, dass der Stromcache-Folgezeilen-Prädiktor ferner einen Verlaufsaktualisierungsbefehl an das Verzweigungsprädiktorverlaufsregister sendet, um einen Abruf des Speicherblocks A gefolgt von dem Speicherblock B widerzuspiegeln.
  • Beispiel 10 ist ein hardwareimplementiertes Stromcacheverfahren, das umfasst: Empfangen einer Speicherblockadresse A an einem Stromcache-Folgezeilen-Prädiktor; Bestimmen in dem Stromcache-Folgezeilen-Prädiktor, dass eine stabile Zeile von Speicherblöcken die Speicherblockadresse A gefolgt von einer Speicherblockadresse B enthält; Senden eines Stromcache-Prädiktorbefehls basierend auf der Speicherblockadresse B aus dem Stromcache-Folgezeilen-Prädiktor an ein Stromcache-Zeigerarray; Senden eines Abrufbefehls für Block B von dem Stromcache-Zeigerarray an ein Mikro-Ops-Cachedatenarray; Speichern mehrerer vorher abgerufener Speicherblöcke in einem Mikro-Ops-Cachedatenarray; Empfangen des Abrufbefehls für Block B in dem Mikro-Ops-Cachedatenarray; und Abrufen eines Speicherblocks B aus den mehreren vorher abgerufenen Speicherblöcken, die in dem Mikro-Ops-Cachedatenarray gespeichert sind.
  • In Beispiel 11 umfasst der Gegenstand von Beispiel 10 optional: Empfangen mehrerer Speicherblockadressen in dem Stromcache-Folgezeilen-Prädiktor; und Bestimmen der stabilen Zeile von Speicherblöcken in dem Stromcache-Folgezeilen-Prädiktor, wobei die stabile Zeile eine aufeinanderfolgende Teilmenge von Speicherblöcken innerhalb der mehreren Speicherblockadressen enthält.
  • In Beispiel 12 umfasst der Gegenstand von Beispiel 11 optional, dass die Stromcache-Folgezeile einen Vertrauenszähler zum Empfangen der mehreren Speicherblockadressen und zum Bestimmen der stabilen Zeile basierend auf den mehreren Speicherblockadressen enthält.
  • In Beispiel 13 umfasst der Gegenstand eines oder mehrerer der Beispiele 10-12 optional: Empfangen der Speicherblockadresse A in einem Cacheetikettenarray; Senden eines Abrufbefehls für Block A von dem Cacheetikettenarray an das Mikro-Ops-Cachedatenarray; Empfangen des Cacheetikettenarraybefehls in dem Mikro-Ops-Cachedatenarray; und Abrufen eines Speicherblocks A aus den mehreren vorher abgerufenen Speicherblöcken, die in dem Mikro-Ops-Cachedatenarray gespeichert sind.
  • In Beispiel 14 umfasst der Gegenstand von Beispiel 13 optional: Bestimmen in dem Stromcache-Folgezeilen-Prädiktor, dass die stabile Zeile von Speicherblöcken die Speicherblockadresse C, die der Speicherblockadresse B folgt, enthält; Senden eines Folgebefehlsprotokoll-Befehls basierend auf der Speicherblockadresse C; und Abrufen eines Speicherblocks C aus den mehreren vorher abgerufenen Speicherblöcken, die in dem Mikro-Ops-Cachedatenarray gespeichert sind, basierend auf dem Folgebefehlsprotokoll-Befehl.
  • In Beispiel 15 umfasst der Gegenstand von Beispiel 14 optional: Empfangen des Folgebefehlsprotokoll-Befehls an einem Folgebefehlsprotokoll-Multiplexer von dem Stromcache-Folgezeilen-Prädiktor; und Senden der Speicherblockadresse C von dem Folgebefehlsprotokoll-Multiplexer an das Cacheetikettenarray.
  • In Beispiel 16 umfasst der Gegenstand von Beispiel 15 optional: Empfangen einer vorherigen Speicheradresse an einem Adressaddierer von dem Folgebefehlsprotokoll-Multiplexer; Erzeugen einer inkrementierten Speicheradresse auf der Basis der vorherigen Speicheradresse in dem Adressaddierer; und Senden der inkrementierten Speicheradresse von dem Adressaddierer an den Folgebefehlsprotokoll-Multiplexer.
  • In Beispiel 17 umfasst der Gegenstand eines oder mehrerer der Beispiele 13-16 optional: Speichern eines Verzweigungsprädiktorverlaufs in einem Verzweigungsprädiktorverlaufsregister.
  • In Beispiel 18 umfasst der Gegenstand von Beispiel 17 optional: Senden eines Verlaufsaktualisierungsbefehls von dem Stromcache-Folgezeilen-Prädiktor an das Verzweigungsprädiktorverlaufsregister, um einen Abruf des Speicherblocks A, gefolgt von dem Speicherblock B widerzuspiegeln.
  • Beispiel 19 ist mindestens ein maschinenlesbares Medium, das Befehlen enthält, die bei Ausführung durch ein Rechensystem veranlassen, dass das Rechensystem eines der Verfahren der Beispiele 10-18 ausführt.
  • Beispiel 20 ist eine Einrichtung, die Mittel zum Durchführen eines der Verfahren der Beispiele 10-18 umfasst.
  • Beispiel 21 ist mindestens ein nichtflüchtiges, maschinenlesbares Speichermedium, das mehrere Befehlen enthält, die als Antwort auf eine Ausführung mit einer Prozessorschaltungsanordnung einer computergesteuerten Vorrichtung die computergesteuerte Vorrichtung zu Folgendem veranlassen: Empfangen einer Speicherblockadresse A an einem Stromcache-Folgezeilen-Prädiktor; Bestimmen in dem Stromcache-Folgezeilen-Prädiktor, dass eine stabile Zeile von Speicherblöcken die Speicherblockadresse A gefolgt von einer Speicherblockadresse B enthält; Senden eines Stromcache-Prädiktorbefehls basierend auf der Speicherblockadresse B aus dem Stromcache-Folgezeilen-Prädiktor an ein Stromcache-Zeigerarray; Senden eines Abrufbefehls für Block B von dem Stromcache-Zeigerarray an ein Mikro-Ops-Cachedatenarray; Speichern mehrerer vorher abgerufener Speicherblöcke in einem Mikro-Ops-Cachedatenarray; Empfangen des Abrufbefehls für Block B in dem Mikro-Ops-Cachedatenarray; und Abrufen eines Speicherblocks B aus den mehreren vorher abgerufenen Speicherblöcken, die in dem Mikro-Ops-Cachedatenarray gespeichert sind.
  • In Beispiel 22 umfasst der Gegenstand von Beispiel 21 optional die Befehle, die die computergesteuerte Vorrichtung ferner zu Folgendem veranlassen: Empfangen mehrerer Speicherblockadressen in dem Stromcache-Folgezeilen-Prädiktor; und Bestimmen der stabilen Zeile von Speicherblöcken in dem Stromcache-Folgezeilen-Prädiktor, wobei die stabile Zeile eine aufeinanderfolgende Teilmenge von Speicherblöcken innerhalb der mehreren Speicherblockadressen enthält.
  • In Beispiel 23 umfasst der Gegenstand von Beispiel 22 optional, dass die Stromcache-Folgezeile einen Vertrauenszähler zum Bestimmen der stabilen Zeile basierend auf den mehreren Speicherblockadressen enthält.
  • In Beispiel 24 umfasst der Gegenstand eines oder mehrerer der Beispiele 21-23 optional die Befehle, die die computergesteuerte Vorrichtung ferner zu Folgendem veranlassen: Empfangen der Speicherblockadresse A in einem Cacheetikettenarray; Senden eines Abrufbefehls für Block A von dem Cacheetikettenarray an das Mikro-Ops-Cachedatenarray; Empfangen des Cacheetikettenarraybefehls in dem Mikro-Ops-Cachedatenarray; und Abrufen eines Speicherblocks A aus den mehreren vorher abgerufenen Speicherblöcken, die in dem Mikro-Ops-Cachedatenarray gespeichert sind.
  • In Beispiel 25 umfasst der Gegenstand von Beispiel 24 optional die Befehle, die die computergesteuerte Vorrichtung ferner zu Folgendem veranlassen: Bestimmen in dem Stromcache-Folgezeilen-Prädiktor, dass die stabile Zeile von Speicherblöcken die Speicherblockadresse C, die der Speicherblockadresse B folgt, enthält; Senden eines Folgebefehlsprotokoll-Befehls basierend auf der Speicherblockadresse C; und Abrufen eines Speicherblocks C aus den mehreren vorher abgerufenen Speicherblöcken, die in dem Mikro-Ops-Cachedatenarray gespeichert sind, basierend auf dem Folgebefehlsprotokoll-Befehl.
  • In Beispiel 26 umfasst der Gegenstand von Beispiel 25 optional die Befehle, die die computergesteuerte Vorrichtung ferner zu Folgendem veranlassen: Empfangen des Folgebefehlsprotokoll-Befehls an einem Folgebefehlsprotokoll-Multiplexer von dem Stromcache-Folgezeilen-Prädiktor; und Senden der Speicherblockadresse C von dem Folgebefehlsprotokoll-Multiplexer an das Cacheetikettenarray.
  • In Beispiel 27 umfasst der Gegenstand von Beispiel 26 optional die Befehle, die die computergesteuerte Vorrichtung ferner zu Folgendem veranlassen: Empfangen einer vorherigen Speicheradresse an einem Adressaddierer von dem Folgebefehlsprotokoll-Multiplexer; Erzeugen einer inkrementierten Speicheradresse auf der Basis der vorherigen Speicheradresse in dem Adressaddierer; und Senden der inkrementierten Speicheradresse von dem Adressaddierer an den Folgebefehlsprotokoll-Multiplexer.
  • In Beispiel 28 umfasst der Gegenstand eines oder mehrerer der Beispiele 24-27 optional die Befehle, die die computergesteuerte Vorrichtung ferner zu Folgendem veranlassen: Speichern eines Verzweigungsprädiktorverlaufs in einem Verzweigungsprädiktorverlaufsregister.
  • In Beispiel 29 umfasst der Gegenstand von Beispiel 28 optional die Befehle, die die computergesteuerte Vorrichtung ferner zu Folgendem veranlassen: Senden eines Verlaufsaktualisierungsbefehls von dem Stromcache-Folgezeilen-Prädiktor an das Verzweigungsprädiktorverlaufsregister, um einen Abruf des Speicherblocks A gefolgt von dem Speicherblock B widerzuspiegeln.
  • Beispiel 30 ist eine hardwareimplementierte Stromcacheeinrichtung, die umfasst: Mittel zum Empfangen einer Speicherblockadresse A an einem Stromcache-Folgezeilen-Prädiktor; Mittel zum Bestimmen in dem Stromcache-Folgezeilen-Prädiktor, dass eine stabile Zeile von Speicherblöcken die Speicherblockadresse A gefolgt von einer Speicherblockadresse B enthält; Mittel zum Senden eines Stromcache-Prädiktorbefehls basierend auf der Speicherblockadresse B aus dem Stromcache-Folgezeilen-Prädiktor an ein Stromcache-Zeigerarray; Mittel zum Senden eines Abrufbefehls für Block B von dem Stromcache-Zeigerarray an ein Mikro-Ops-Cachedatenarray; Mittel zum Speichern mehrerer vorher abgerufener Speicherblöcke in einem Mikro-Ops-Cachedatenarray; Mittel zum Empfangen des Abrufbefehls für Block B in dem Mikro-Ops-Cachedatenarray; und Mittel zum Abrufen eines Speicherblocks B aus den mehreren vorher abgerufenen Speicherblöcken, die in dem Mikro-Ops-Cachedatenarray gespeichert sind.
  • In Beispiel 31 umfasst der Gegenstand von Beispiel 30 optional: Mittel zum Empfangen mehrerer Speicherblockadressen in dem Stromcache-Folgezeilen-Prädiktor; und Mittel zum Bestimmen der stabilen Zeile von Speicherblöcken in dem Stromcache-Folgezeilen-Prädiktor, wobei die stabile Zeile eine aufeinanderfolgende Teilmenge von Speicherblöcken innerhalb der mehreren Speicherblockadressen enthält.
  • In Beispiel 32 umfasst der Gegenstand von Beispiel 31 optional, dass die Mittel zum Bestimmen der stabilen Zeile basierend auf den mehreren Speicherblockadressen einen Vertrauenszähler innerhalb der Stromcache-Folgezeile umfassen.
  • In Beispiel 33 umfasst der Gegenstand eines oder mehrerer der Beispiele 30-32 optional: Mittel zum Empfangen der Speicherblockadresse A in einem Cacheetikettenarray; Mittel zum Senden eines Abrufbefehls für Block A von dem Cacheetikettenarray an das Mikro-Ops-Cachedatenarray; Mittel zum Empfangen des Cacheetikettenarraybefehls in dem Mikro-Ops-Cachedatenarray; und Mittel zum Abrufen eines Speicherblocks A aus den mehreren vorher abgerufenen Speicherblöcken, die in dem Mikro-Ops-Cachedatenarray gespeichert sind.
  • In Beispiel 34 umfasst der Gegenstand von Beispiel 33 optional: Mittel zum Bestimmen in dem Stromcache-Folgezeilen-Prädiktor, dass die stabile Zeile von Speicherblöcken die Speicherblockadresse C, die der Speicherblockadresse B folgt, enthält; Mittel zum Senden eines Folgebefehlsprotokoll-Befehls basierend auf der Speicherblockadresse C; und Mittel zum Abrufen eines Speicherblocks C aus den mehreren vorher abgerufenen Speicherblöcken, die in dem Mikro-Ops-Cachedatenarray gespeichert sind, basierend auf dem Folgebefehlsprotokoll-Befehl.
  • In Beispiel 35 umfasst der Gegenstand von Beispiel 34 optional: Mittel zum Empfangen des Folgebefehlsprotokoll-Befehls an einem Folgebefehlsprotokoll-Multiplexer von dem Stromcache-Folgezeilen-Prädiktor; und Mittel zum Senden der Speicherblockadresse C von dem Folgebefehlsprotokoll-Multiplexer an das Cacheetikettenarray.
  • In Beispiel 36 umfasst der Gegenstand von Beispiel 35 optional: Mittel zum Empfangen einer vorherigen Speicheradresse an einem Adressaddierer von dem Folgebefehlsprotokoll-Multiplexer; Mittel zum Erzeugen einer inkrementierten Speicheradresse auf der Basis der vorherigen Speicheradresse in dem Adressaddierer; und Mittel zum Senden der inkrementierten Speicheradresse von dem Adressaddierer an den Folgebefehlsprotokoll-Multiplexer.
  • In Beispiel 37 umfasst der Gegenstand eines oder mehrerer der Beispiele 33-36 optional: Mittel zum Speichern eines Verzweigungsprädiktorverlaufs in einem Verzweigungsprädiktorverlaufsregister.
  • In Beispiel 38 umfasst der Gegenstand von Beispiel 37 optional: Mittel zum Senden eines Verlaufsaktualisierungsbefehls von dem Stromcache-Folgezeilen-Prädiktor an das Verzweigungsprädiktorverlaufsregister, um einen Abruf des Speicherblocks A gefolgt von dem Speicherblock B widerzuspiegeln.
  • Beispiel 39 ist mindestens ein maschinenlesbares Medium mit Befehle, die, wenn sie von einer Maschine ausgeführt werden, die Maschine dazu veranlassen, Operationen einer der Operationen der Beispiele 1 bis 38 auszuführen.
  • Beispiel 40 ist eine Einrichtung, die Mittel zum Durchführen irgendeiner der Operationen der Beispiele 1 bis 38 umfasst.
  • Beispiel 41 ist ein System zum Durchführen der Operationen irgendeines der Beispiele 1 bis 38.
  • Beispiel 42 ist ein Verfahren zum Durchführen der Operationen irgendeines der Beispiele 1 bis 38.
  • Die vorstehende genaue Beschreibung umfasst Verweise auf die beigefügten Zeichnungen, die einen Teil der genauen Beschreibung bilden. Die Zeichnungen zeigen zur Veranschaulichung spezielle Ausführungsformen, in denen der Gegenstand praktiziert werden kann. Diese Ausführungsformen sind hierin auch als „Beispiele“ bezeichnet. Solche Beispiele können zusätzlich zu den gezeigten oder beschriebenen Elementen weitere Elemente enthalten. Die Erfinder der vorliegenden Erfindung erwägen jedoch auch Beispiele, in denen nur die gezeigten oder beschriebenen Elemente bereitgestellt sind. Darüber hinaus betrachten die Erfinder der vorliegenden Erfindung auch Beispiele unter Verwendung einer beliebigen Kombination oder Permutation dieser gezeigten oder beschriebenen Elemente (oder eines oder mehrerer Aspekte davon), entweder in Bezug auf ein bestimmtes Beispiel (oder einen oder mehrere Aspekte davon) oder in Bezug auf andere Beispiele (oder einen oder mehrere Aspekte davon), die hierin gezeigt oder beschrieben sind.
  • In diesem Dokument werden die Ausdrücke „eine/r/s“ wie in Patentdokumenten üblich so verwendet, dass sie ein Element oder mehr als eines umfassen, unabhängig von anderen Fällen oder Verwendungen von „mindestens einem“ oder „eine/r/s oder mehr“. In diesem Dokument wird der Begriff „oder“ in einem nicht ausschließlichen Sinne verwendet, so dass „A oder B“ „A aber nicht B“, „B aber nicht A“ und „A und B“ umfasst, wenn es nicht anders angegeben ist. In diesem Dokument werden die Ausdrücke „enthalten“ und „in der/dem/denen“ als die standardsprachlichen Äquivalente der jeweiligen Ausdrücke „umfassen“ und „wobei“ verwendet. Auch in den folgenden Ansprüchen sind die Begriffe „enthalten“ und „umfassen“ erweiterbar sind, d. h. ein System, eine Vorrichtung, ein Artikel, eine Zusammensetzung, eine Formel oder ein Prozess, der zusätzlich zu den nach einem solchen Begriff in einem Anspruch angeführten Elementen weitere Elemente enthält, gilt weiterhin als unter den Geltungsbereich dieses Anspruchs fallend. Darüber hinaus werden in den folgenden Ansprüchen die Begriffe „erste/r/s“, „zweite/r/s“ und „dritte/r/s“ usw. lediglich als Bezeichnungen verwendet und sollen ihren Bezugswörtern keine numerischen Anforderungen auferlegen.
  • Die obige Beschreibung soll veranschaulichend und nicht einschränkend sein. Zum Beispiel können die oben beschriebenen Beispiele (oder ein oder mehrere Aspekte davon) in Kombination miteinander verwendet werden. Andere Ausführungsformen können verwendet werden, beispielsweise von Fachleuten nach Durchsicht der vorstehenden Beschreibung. Die Zusammenfassung soll es dem Leser ermöglichen, die Art der technischen Offenbarung schnell zu begreifen. Sie wird mit dem Verständnis abgegeben, dass sie nicht dazu verwendet wird, den Umfang oder die Bedeutung der Ansprüche auszulegen oder einzuschränken. In der obigen genauen Beschreibung können verschiedene Merkmale zusammengefasst sein, um die Offenbarung zu verschlanken. Dies sollte nicht dahingehend ausgelegt werden, dass ein nicht beanspruchtes offenbartes Merkmal für irgendeinen Anspruch wesentlich ist. Vielmehr kann der Gegenstand in weniger als allen Merkmalen einer bestimmten offenbarten Ausführungsform vorliegen. Somit sind die folgenden Ansprüche hiermit in die ausführliche Beschreibung aufgenommen, wobei jeder Anspruch für sich als separate Ausführungsform steht, und es wird in Betracht gezogen, dass solche Ausführungsformen in verschiedenen Kombinationen oder Permutationen miteinander kombiniert werden können. Der Umfang sollte unter Bezugnahme auf die beigefügten Ansprüche zusammen mit dem vollen Umfang der Äquivalente, zu dem solche Ansprüche berechtigt sind, bestimmt werden.

Claims (20)

  1. Hardwareimplementierte Stromcache-Schaltungsanordnung, die Folgendes umfasst: eine Prozessor-Frontend-Schaltung, die umfasst: eine Stromcache-Folgezeilen-Prädiktorschaltung für Folgendes: Erhalten einer ersten Speicherblockadresse; Bestimmen, dass eine stabile Zeile von Speicherblöcken die erste Speicherblockadresse gefolgt von einer zweiten Speicherblockadresse umfasst; und Liefern einer Stromcache-Prädiktor-Speicheradresse basierend auf der zweiten Speicherblockadresse; und ein Stromcache-Zeigerarray zum Erhalten der Stromcache-Prädiktor-Speicheradresse von der Stromcache-Folgezeilen-Prädiktorschaltung und Liefern einer zweiten Blockabrufspeicheradresse; und einen Prozessor-Mikro-Ops-Cache in einer Prozessordatenarrayschaltung, wobei der Mikro-Ops-Cache Folgendes durchführt: Speichern mehrerer vorher abgerufener Speicherblöcke; Erhalten der zweiten Blockabrufspeicheradresse; und Abrufen eines zweiten Speicherblocks aus den mehreren gespeicherten vorher abgerufenen Speicherblöcken.
  2. Schaltungsanordnung nach Anspruch 1, wobei die Stromcache-Folgezeilen-Prädiktorschaltung ferner zu Folgendem ausgelegt ist: Erhalten mehrerer Speicherblockadressen; und Bestimmen der stabilen Zeile von Speicherblöcken, wobei die stabile Zeile eine aufeinanderfolgende Teilmenge von Speicherblöcken innerhalb der mehreren Speicherblockadressen enthält.
  3. Schaltungsanordnung nach Anspruch 2, wobei die Stromcache-Folgezeile einen Vertrauenszähler zum Erhalten der mehreren Speicherblockadressen und Bestimmen der stabilen Zeile basierend auf den mehreren Speicherblockadressen umfasst.
  4. Schaltungsanordnung nach Anspruch 1, die ferner ein Cacheetikettenarray zum Erhalten der ersten Speicherblockadresse und Liefern einer ersten Blockabrufspeicheradresse an den Prozessor-Mikro-Ops-Cache umfasst, wobei der Prozessor-Mikro-Ops-Cache die erste Blockabrufspeicheradresse erhalten soll und einen ersten Speicherblock aus den mehreren gespeicherten vorher abgerufenen Speicherblöcken abrufen soll.
  5. Schaltungsanordnung nach Anspruch 4, wobei die Stromcache-Folgezeilen-Prädiktorschaltung ferner zu Folgendem ausgelegt ist: Bestimmen, dass die stabile Zeile der Speicherblöcke die dritte Speicherblockadresse, die der zweiten Speicherblockadresse folgt, enthält; und Liefern einer Folgebefehlsprotokoll-Speicheradresse basierend auf der dritten Speicherblockadresse, wobei die Folgebefehlsprotokoll-Speicheradresse veranlasst, dass das Cacheetikettenarray und der Prozessor-Mikro-Ops-Cache einen dritten Speicherblock aus den mehreren gespeicherten vorher abgerufenen Speicherblöcken abrufen.
  6. Schaltungsanordnung nach Anspruch 5, die ferner einen Folgebefehlsprotokoll-Multiplexer für Folgendes umfasst: Erhalten der Folgebefehlsprotokoll-Speicheradresse von der Stromcache-Folgezeilen-Prädiktorschaltung; und Liefern der dritten Speicherblockadresse an das Cacheetikettenarray.
  7. Schaltungsanordnung nach Anspruch 6, die ferner einen Adressaddierer für Folgendes umfasst: Erhalten einer vorherigen Speicheradresse von dem Folgebefehlsprotokoll-Multiplexer; Erzeugen einer inkrementierten Speicheradresse basierend auf der vorherigen Speicheradresse; und Liefern der inkrementierten Speicheradresse an den Folgebefehlsprotokoll-Multiplexer.
  8. Schaltungsanordnung nach Anspruch 4, die ferner ein Verzweigungsprädiktorverlaufsregister zum Speichern eines Verzweigungsprädiktorverlaufs umfasst.
  9. Schaltungsanordnung nach Anspruch 8, wobei die Stromcache-Folgezeilen-Prädiktorschaltung ferner einen Verlaufsaktualisierungsbefehl an das Verzweigungsprädiktorverlaufsregister liefert, um einen Abruf des ersten Speicherblocks gefolgt von dem zweiten Speicherblock widerzuspiegeln.
  10. Hardwareimplementiertes Stromcache-Verfahren, das umfasst: Erhalten einer ersten Speicherblockadresse an einer Stromcache-Folgezeilen-Prädiktorschaltung innerhalb einer Prozessor-Frontend-Schaltung; Bestimmen in der Stromcache-Folgezeilen-Prädiktorschaltung, dass eine stabile Zeile von Speicherblöcken die erste Speicherblockadresse gefolgt von einer zweiten Speicherblockadresse enthält; Liefern einer Stromcache-Prädiktor-Speicheradresse basierend auf der zweiten Speicherblockadresse von der Stromcache-Folgezeilen-Prädiktorschaltung an eine Stromcache-Zeigerarrayschaltung innerhalb der Prozessor-Frontend-Schaltung; Liefern einer zweiten Blockabrufsspeicheradresse von dem Stromcache-Zeigerarray an einen Prozessor-Mikro-Ops-Cache innerhalb einer Prozessordatenarray-Schaltung; Speichern mehrerer vorher abgerufener Speicherblöcke in dem Prozessor-Mikro-Ops-Cache; Erhalten der zweiten Blockabrufsspeicheradresse in dem Prozessor-Mikro-Ops-Cache; und Abrufen eines zweiten Speicherblocks aus den mehreren vorher abgerufenen Speicherblöcken, die in dem Prozessor-Mikro-Ops-Cache gespeichert sind.
  11. Verfahren nach Anspruch 10, das ferner umfasst: Erhalten mehrerer Speicherblockadressen an der Stromcache-Folgezeilen-Prädiktorschaltung; und Bestimmen der stabilen Zeile von Speicherblöcken in der Stromcache-Folgezeilen-Prädiktorschaltung, wobei die stabile Zeile eine aufeinanderfolgende Teilmenge von Speicherblöcken innerhalb der mehreren Speicherblockadressen enthält.
  12. Verfahren nach Anspruch 11, wobei die Stromcache-Folgezeile einen Vertrauenszähler zum Erhalten der mehreren Speicherblockadressen und Bestimmen der stabilen Zeile basierend auf den mehreren Speicherblockadressen umfasst.
  13. Verfahren nach Anspruch 10, das ferner umfasst: Erhalten der ersten Speicherblockadresse an einem Cacheetikettenarray; Liefern einer ersten Blockabrufspeicheradresse von dem Cacheetikettenarray an den Prozessor-Mikro-Ops-Cache; Erhalten der ersten Blockabrufspeicheradresse an dem Prozessor-Mikro-Ops-Cache; und Abrufen eines ersten Speicherblocks aus den mehreren gespeicherten vorher abgerufenen Speicherblöcken, die in dem Prozessor-Mikro-Ops-Cache gespeichert sind.
  14. Verfahren nach Anspruch 13, das ferner umfasst: Bestimmen in der Stromcache-Folgezeilen-Prädiktorschaltung, dass die stabile Zeile der Speicherblöcke die dritte Speicherblockadresse, die der zweiten Speicherblockadresse folgt, enthält; und Liefern einer Folgebefehlsprotokoll-Speicheradresse basierend auf der dritten Speicherblockadresse; und Abrufen eines dritten Speicherblocks aus den mehreren vorher abgerufenen Speicherblöcken, die in dem Prozessor-Mikro-Ops-Cache gespeichert sind, basierend auf der Folgebefehlsprotokoll-Speicheradresse.
  15. Verfahren nach Anspruch 14, das ferner umfasst: Erhalten der Folgebefehlsprotokoll-Speicheradresse an einem Folgebefehlsprotokoll-Multiplexer von der Stromcache-Folgezeilen-Prädiktorschaltung; und Liefern der dritten Speicherblockadresse von dem Folgebefehlsprotokoll-Multiplexer an das Cacheetikettenarray.
  16. Verfahren nach Anspruch 15, das ferner umfasst: Erhalten einer vorherigen Speicheradresse an einem Adressaddierer von dem Folgebefehlsprotokoll-Multiplexer; Erzeugen einer inkrementierten Speicheradresse basierend auf der vorherigen Speicheradresse an dem Adressaddierer; und Liefern der inkrementierten Speicheradresse von dem Adressaddierer an den Folgebefehlsprotokoll-Multiplexer.
  17. Verfahren nach Anspruch 13, das ferner ein Speichern eines Verzweigungsprädiktorverlaufs in einem Verzweigungsprädiktorverlaufsregister umfasst.
  18. Verfahren nach Anspruch 17, das ferner ein Liefern eines Verlaufsaktualisierungsbefehls von der Stromcache-Folgezeilen-Prädiktorschaltung an das Verzweigungsprädiktorverlaufsregister, um einen Abruf des ersten Speicherblocks gefolgt von dem zweiten Speicherblock widerzuspiegeln, umfasst.
  19. Mindestens ein maschinenlesbares Medium, das Befehle enthält, die, wenn sie von einem Rechensystem ausgeführt werden, veranlassen, dass das Rechensystem eines der Verfahren nach den Ansprüchen 10-18 ausführt.
  20. Vorrichtung, die Mittel zum Durchführen eines der Verfahren nach den Ansprüchen 10-18 umfasst.
DE102018126172.1A 2018-01-11 2018-10-22 Stromcache Withdrawn DE102018126172A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/868,342 2018-01-11
US15/868,342 US20190213131A1 (en) 2018-01-11 2018-01-11 Stream cache

Publications (1)

Publication Number Publication Date
DE102018126172A1 true DE102018126172A1 (de) 2019-07-11

Family

ID=66995311

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018126172.1A Withdrawn DE102018126172A1 (de) 2018-01-11 2018-10-22 Stromcache

Country Status (2)

Country Link
US (1) US20190213131A1 (de)
DE (1) DE102018126172A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2609011B (en) * 2021-07-16 2023-10-11 Advanced Risc Mach Ltd Page access frequency tracking

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170046159A1 (en) * 2015-08-14 2017-02-16 Qualcomm Incorporated Power efficient fetch adaptation
US20170083341A1 (en) * 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Segmented instruction block
US20170083331A1 (en) * 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Memory synchronization in block-based processors
US10915446B2 (en) * 2015-11-23 2021-02-09 International Business Machines Corporation Prefetch confidence and phase prediction for improving prefetch performance in bandwidth constrained scenarios
US20170286110A1 (en) * 2016-03-31 2017-10-05 Intel Corporation Auxiliary Cache for Reducing Instruction Fetch and Decode Bandwidth Requirements
US10067875B2 (en) * 2016-11-14 2018-09-04 Via Alliance Semiconductor Co., Ltd. Processor with instruction cache that performs zero clock retires

Also Published As

Publication number Publication date
US20190213131A1 (en) 2019-07-11

Similar Documents

Publication Publication Date Title
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE112011105122T5 (de) Systeme, Vorrichtungen und Verfahren zum Vermischen zweier Quelloperanden in einem einzigen Ziel unter Verwendung einer Schreibmaske
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE102018003612A1 (de) Befehle für Dualzieltyp-Umwandlung-, Akkumulation- mit gemischter Präzision und atomare Speicheroperationen mit gemischter Präzision
DE102018125971B4 (de) Prozessor, verfahren, system und nichtflüchtiges maschinenlesbares medium zum berechnen von skalarprodukten von halbbytes in operanden aus zwei kacheln
DE112013005372T5 (de) Befehl zum Bestimmen von Histogrammen
DE102018124919A1 (de) Skalierbare speicheroptimierte Hardware für Matrix-Solve
DE112012007119T5 (de) Threadmigration-Unterstützung für Kerne unterschiedlicher Architektur
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE102018128626A1 (de) Systeme, Verfahren und Vorrichtungen für Matrixoperationen
DE102018124944A1 (de) Vorrichtung und Verfahren zum Umsetzen eines Gleitkommawertes von halber Genauigkeit in einfache Genauigkeit
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE102018126036A1 (de) Systeme und verfahren zum setzen eines kachelregisterpaars auf null
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102018132196A1 (de) Vorrichtung und verfahren zum verarbeiten von reziproken quadratwurzeloperationen
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018131816A1 (de) Bedarfsgesteuerte speicherdeduplizierung

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee