DE102015007571A1 - Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren. -verfahren, -systeme und -befehle - Google Patents

Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren. -verfahren, -systeme und -befehle Download PDF

Info

Publication number
DE102015007571A1
DE102015007571A1 DE102015007571.3A DE102015007571A DE102015007571A1 DE 102015007571 A1 DE102015007571 A1 DE 102015007571A1 DE 102015007571 A DE102015007571 A DE 102015007571A DE 102015007571 A1 DE102015007571 A1 DE 102015007571A1
Authority
DE
Germany
Prior art keywords
data
memory
hint
locale
command
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.)
Granted
Application number
DE102015007571.3A
Other languages
English (en)
Other versions
DE102015007571B4 (de
Inventor
Christopher J. Hughes
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 DE102015007571A1 publication Critical patent/DE102015007571A1/de
Application granted granted Critical
Publication of DE102015007571B4 publication Critical patent/DE102015007571B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/0877Cache access modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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; CALCULATING OR 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/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8061Details on data memory access
    • G06F15/8069Details on data memory access using a cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/27Using a specific cache architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/28Using a specific disk cache architecture
    • G06F2212/283Plural cache memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/6028Prefetching based on hints or prefetch instructions

Abstract

Ein Prozessor gemäß einem Aspekt weist eine Vielzahl von Gepacktdaten-Registern und eine Dekodierungseinheit zum Dekodieren eines Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls auf. Der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl zeigt ein Gepacktdaten-Register der Vielzahl von Gepacktdaten-Registern an, das Quell-Gepackt-Speicherindizes aufweist. Die Quell-Gepackt-Speicherindizes weisen eine Vielzahl von Speicherindizes auf. Der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl liefert dem Prozessor einen Keine-Lokalität-Hinweis für Datenelemente, auf die mit den Speicherindizes zugegriffen wird. Der Prozessor weist ferner eine Ausführungseinheit auf, die mit der Dekodierungseinheit und der Vielzahl von Gepacktdaten-Registern gekoppelt ist. Die Ausführungseinheit greift in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl auf die Datenelemente an Speicherstellen zu, die auf den Speicherindizes basieren.

Description

  • HINTERGRUND
  • Technisches Gebiet
  • Ausführungsformen betreffen Prozessoren. Insbesondere betreffen Ausführungsformen Prozessoren zum Durchführen von Vektor-Speicherzugriffsbefehlen, wie z. B. Erfassungs- und/oder Streubefehlen.
  • Hintergrundinformation
  • Prozessoren sind normalerweise so ausgelegt, dass sie Befehle zum Zugreifen auf einen Speicher durchführen. Zum Beispiel können Prozessoren Ladebefehle ausführen, um Daten aus einem Speicher zu laden oder zu lesen und/oder Befehle in einem Speicher zu speichern oder in diesen zu schreiben.
  • Bestimmte Prozessoren sind so ausgelegt, dass sie Vektorerfassungsbefehle ausführen. Diese Vektorerfassungsbefehle werden auch einfach als Erfassungsbefehle bezeichnet. Intel® Advanced Vector Extensions Programming Reference, Dokument-Referenznummer 319433-011, veröffentlicht im Juni 2011, beschreibt mehrere Erfassungsbefehle. Beispiele umfassen VGATHERDPD, VGATHERQPD, VGATHERDPS, VGATHERQPS, VPGATHERDD, VPGATHERQD, VPGATHERDQ, und VPGATHERQQ. Diese Erfassungsbefehle können bewirken, dass ein Prozessor mehrere potenziell nicht zusammenhängende Datenelemente aus Stellen im Speicher erfasst, liest oder lädt, die von mehreren entsprechenden Speicherindizes angezeigt werden. Die erfassten Datenelemente können in einem Zielvektorregister des Prozessors gespeichert werden.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Die Erfindung wird am besten durch Bezugnahme auf die folgende Beschreibung und die beiliegenden Zeichnungen, die verwendet werden, um Ausführungsformen zu veranschaulichen, verständlich. In den Zeichnungen zeigen:
  • 1 ein Blockschaltbild einer Ausführungsform eines Systems, das zum Implementieren von Ausführungsformen geeignet ist und einen Prozessor mit einer Cache-Hierarchie und einem Speicher aufweist.
  • 2 ein Block-Ablaufdiagramm einer Ausführungsform eines Verfahrens zum Verarbeiten einer Ausführungsform eines Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls.
  • 3 ein Blockschaltbild einer Ausführungsform eines Prozessors, der so ausgelegt ist, dass er eine Ausführungsform eines Keine-Lokalität-Hinweis-Erfassungsbefehls durchführt.
  • 4 ein Blockschaltbild einer Ausführungsform einer Erfassungsoperation, die in Reaktion auf eine Ausführungsform eines Keine-Lokalität-Hinweis-Erfassungsbefehls durchgeführt werden kann.
  • 5 ein Blockschaltbild einer Ausführungsform einer maskierten Erfassungsoperation, die in Reaktion auf eine Ausführungsform einer maskierten Keine-Lokalität-Hinweis-Erfassungsoperation durchgeführt werden kann.
  • 6 ein Blockschaltbild einer Ausführungsform eines Prozessors, der so ausgelegt ist, dass er eine Ausführungsform eines Keine-Lokalität-Hinweis-Streubefehls durchführt.
  • 7 ein Blockschaltbild einer Ausführungsform einer Streuoperation, die in Reaktion auf eine Ausführungsform eines Keine-Lokalität-Hinweis-Streubefehls durchgeführt werden kann.
  • 8 ein Blockschaltbild einer Ausführungsform einer maskierten Streuoperation, die in Reaktion auf eine Ausführungsform eines maskierten Keine-Lokalität-Hinweis-Streubefehls durchgeführt werden kann.
  • 9A9C Blockschaltbilder mit Darstellung eines generischen vektorfreundlichen Befehlsformats und von Befehlsvorlagen für dieses gemäß Ausführungsformen der Erfindung.
  • 10A–B ein Blockschaltbild mit Darstellung eines beispielhaften spezifischen vektorfreundlichen Befehlsformats und eines Opcode-Felds gemäß Ausführungsformen der Erfindung.
  • 11A–D ein Blockschaltbild mit Darstellung eines beispielhaften spezifischen vektorfreundlichen Befehlsformats und von Feldern desselben gemäß Ausführungsformen der Erfindung.
  • 12 ein Blockschaltbild einer Ausführungsform einer Registerarchitektur.
  • 13A ein Blockschaltbild mit Darstellung einer Ausführungsform einer In-Order-Pipeline und einer Ausführungsform einer Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungs-Pipeline.
  • 13B ein Blockschaltbild einer Ausführungsform eines Prozessorkerns mit einer Front-End-Einheit, die mit einer Ausführungsmaschineneinheit gekoppelt ist, die beide mit einer Speichereinheit gekoppelt sind.
  • 14A ein Blockschaltbild einer Ausführungsform eines Einzelprozessorkerns zusammen mit seiner Verbindung mit dem auf einem Die befindlichen Netz und mit seinem lokalen Teilsatz des Level-2-(L2-)Caches.
  • 14B ein Blockschaltbild einer Ausführungsform einer erweiterten Ansicht eines Teils des Prozessorkerns von 14A.
  • 15 ein Blockschaltbild einer Ausführungsform eines Prozessors, der mehr als einen Kern aufweisen kann, einen integrierten Speicher-Controller aufweisen kann und eine integrierte Grafik aufweisen kann.
  • 16 ein Blockschaltbild einer ersten Ausführungsform einer Computerarchitektur.
  • 17 ein Blockschaltbild einer zweiten Ausführungsform einer Computerarchitektur.
  • 18 ein Blockschaltbild einer dritten Ausführungsform einer Computerarchitektur.
  • 19 ein Blockschaltbild einer vierten Ausführungsform einer Computerarchitektur.
  • 20 ein Blockschaltbild der Verwendung eines Software-Befehlsumwandlers zum Umwandeln von binären Befehlen in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung.
  • DETAILLIERTE BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
  • Hier werden Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehle (z. B. Keine-Lokalität-Hinweis-Erfassungsbefehle, Keine-Lokalität-Hinweis-Streubefehle), Prozessoren zum Durchführen der Befehle, Verfahren, die von den Prozessoren durchgeführt werden, wenn die Befehle durchgeführt werden, und Systeme, die einen oder mehrere Prozessoren zum Durchführen der Befehle aufweisen, offengelegt. In der folgenden Beschreibung sind zahlreiche spezifische Details (z. B. spezifische Befehlsoperationen, Datenformate, Prozessorkonfigurationen, mikroarchitektonische Details, Sequenzen von Operationen etc.) dargelegt. Ausführungsformen können jedoch auch ohne diese spezifischen Details in die Praxis umgesetzt werden. In anderen Fällen sind bekannte Schaltungen, Strukturen und Techniken nicht im Detail gezeigt, um das Verständnis der Beschreibung nicht zu erschweren.
  • 1 ist ein Blockschaltbild einer Ausführungsform eines Systems 100, das einen Prozessor 102 mit einer Cache-Hierarchie 103 und einem Speicher 118 aufweist. Der Prozessor und der Speicher sind mittels eines Koppelmechanismus 116, wie z. B einer oder mehrerer Zwischenverbindungen, eines Chipsatzes oder dergleichen, miteinander verbunden. Der Prozessor weist einen oder mehrere Kerne 104 auf. Bei dem dargestellten Beispiel weist der Prozessor einen ersten Kern (Kern 1) 104-1 wahlweise bis zu einem Nten Kern (Kern N) 104-N auf. Der Prozessor kann jede gewünschte Anzahl von Kernen (z. B. häufig im Bereich von einem bis zu einer Größenordnung von Hunderten) aufweisen. Der Kern 1 weist eine oder mehrere Ausführungseinheiten 106-1 auf, und der Kern N weist eine oder mehrere Ausführungseinheiten 106-N auf.
  • Typischerweise kann der Prozessor ferner einen oder mehrere Caches 108, 110 aufweisen. Die Caches können relativ kleinere und schnellere Typen von Speicherungseinrichtungen als der Speicher 118 darstellen. Die Caches können sich ferner näher an den Kernen und/oder Ausführungseinheiten befinden als der Speicher. Die Caches können zum Cachen oder Speichern von Daten verwendet werden, die (z. B. mittels des Erfassungsbefehls 112) aus dem Speicher in den Prozessor eingebracht werden, um schnellere nachfolgende Zugriffe auf die Daten zu bieten. Wenn der Prozessor Daten aus dem Speicher zu lesen beabsichtigt, kann er zuerst prüfen, ob eine Kopie der Daten in den Caches gespeichert ist. Falls die Daten in einem Cache gefunden werden, kann der Prozessor schneller auf die Daten aus dem Cache zugreifen als er auf die Daten aus dem Speicher zugreifen kann. Folglich kann das Vorsehen von Caches zum Verringern der durchschnittlichen Zeit beitragen, die benötigt wird, um auf Daten zuzugreifen, die von dem Prozessor zu verarbeiten sind. Dies kann wiederum zum Verbessern der Leistung und/oder des Durchsatzes des Prozessors beitragen.
  • Gemäß 1 weist der dargestellte Prozessor eine Cache-Hierarchie 103 mit mehreren Cache-Levels auf. Die Cache-Levels unterscheiden sich hinsichtlich ihrer relativen Nähe zu den Kernen und/oder zu den Ausführungseinheiten des Prozessors. Der Kern 1 weist einen Cache eines ersten Levels oder Level-1 (L1-)Cache 108-1 auf. Auf im Wesentlichen gleiche Weise weist der Kern N einen L1-Cache 108-N auf. Jeder der L1-Caches kann für den entsprechenden Kern, in dem er enthalten ist, zweckbestimmt sein. Die L1-Caches stellen den Cache-Level dar, der den Kernen am nächsten liegt. Der Prozessor weist ferner einen Cache eines zweiten Levels oder Leve1-2-(L2-)Cache 110 auf. Der L2-Cache stellt den Cache-Level dar, der den Kernen am zweitnächsten liegt. Bei einigen Implementierungen kann der L2-Cache von den Kernen gemeinsam genutzt werden. Obwohl nicht dargestellt, kann es wahlweise einen oder mehrere weitere Cache-Levels geben, die noch weiter von den Kernen entfernt sind (z. B. ein Level-3-(L3-)Cache). Caches, die sich näher an den Kernen befinden (z. B. die L1-Caches), tendieren generell dazu, kleiner zu sein als Caches, die weiter von den Kernen entfernt sind (z. B. der L2-Cache). Normalerweise sind ein oder mehrere Cache-Levels, die sich relativ nahe an den Kernen befinden, mit den Kernen monolithisch auf dem Die integriert, während ein oder mehrere Cache-Levels, die weiter von den Kernen entfernt sind, entweder mit den Kernen monolithisch auf dem Die integriert sein können oder sich außerhalb des Dies befinden können (z. B. in einem separaten Chip, der auf dem Motherboard montiert ist). Zugriffe aus den Kernen auf die L1-Caches erfolgen tendenziell schneller als Zugriffe auf den L2-Cache, Zugriffe aus den Kernen auf den L2-Cache erfolgen tendenziell schneller als Zugriffe auf den L3-Cache und Zugriffe aus den Kernen auf den L3-Cache erfolgen tendenziell schneller als Zugriffe aus den Kernen auf den externen Speicher.
  • Ein Grund für das Vorsehen von Caches in Prozessoren besteht darin, dass Speicher-Referenzen häufig ein ”Lokalitäts”-Attribut aufweisen. Zum Beispiel weisen Referenzen auf Daten in einem Speicher häufig eine zeitliche und/oder räumliche Lokalität auf. Eine zeitliche Lokalität impliziert, dass dann, wenn von einer Adresse im Speicher aus auf Daten zugegriffen wird, wahrscheinlich innerhalb kurzer Zeit wieder auf dieselben Daten zugegriffen wird. Dies kann zum Beispiel der Fall sein, wenn ein gleicher Wert in einer Schleife wiederverwendet wird, mehrfach in einem Satz von Berechnungen verwendet wird oder aus verschiedenen anderen Gründen. In solchen Fällen kann es vorteilhaft sein, nach dem Zugreifen auf die Daten aus dem Speicher die Daten in einem Cache zu speichern, so dass nachfolgende Zugriffe auf die Daten schneller aus dem Cache statt langsamer aus dem Speicher erfolgen können.
  • Eine räumliche Lokalität impliziert, dass dann, wenn von einer Adresse im Speicher aus auf vorgegebene Daten zugegriffen wird, wahrscheinlich innerhalb kurzer Zeit auch auf benachbarte Daten an benachbarten Adressen zugegriffen wird. Zum Beispiel können beide Sätze von Daten Teil desselben Inhalts sein (z. B. eines Bilds, einer Tabelle, einer Datenstruktur, eines Videos etc.) und können ungefähr zur gleichen Zeit verarbeitet werden. Eine räumliche Lokalität kann ferner aus verschiedenen anderen Gründen auftreten. Caches können die räumliche Lokalität durch Speichern nicht nur der anfangs benötigten Daten, sondern auch von benachbarten Daten aus benachbarten Adressen ausnutzen. Typischerweise beträgt die Mindestmenge an Daten, auf die aus dem Speicher zugegriffen wird und die in dem Cache gespeichert werden, die Datenmenge einer ganzen Cache-Line, selbst wenn anfangs nur eine viel kleinere Datenmenge benötigt werden kann. Zum Beispiel kann typischerweise auf eine gesamte 512-Bit-Cache-Line aus dem Speicher zugegriffen werden und in dem Cache gespeichert werden, selbst wenn anfangs nur ein einzelnes 8-Bit-, 16-Bit-, 32-Bit-, 64-Bit- oder 128-Bit-Datenelement benötigt wird. Falls eine räumliche Lokalität besteht, ist dies vorteilhaft, da es wahrscheinlich ist, dass die zusätzlichen Daten, die in den Cache eingebracht werden, in der nahen Zukunft ebenfalls benötigt werden.
  • Damit Caches effektiv sind, ist es wichtig, diese mit relevanten Daten gefüllt zu halten, die wahrscheinlich in der nahen Zukunft benötigt werden. Bei Betrieb werden Daten in den Caches kontinuierlich verändert durch Räumen von Daten, die wahrscheinlich in der nahen Zukunft nicht benötigt werden, um Raum für Daten zu schaffen, die wahrscheinlich in der nahen Zukunft benötigt werden. Verschiedene Ersetzungsalgorithmen und -methoden zu diesem Zweck sind auf dem Sachgebiet bekannt. Solche Ersetzungsalgorithmen und -methoden basieren aufgrund der zeitlichen Lokalität häufig in hohem Maß auf dem Alter der Daten (z. B. einer ältesten verwendeten Anzeige).
  • Der Erfassungsbefehl 112 nutzt die zeitliche und/oder räumliche Lokalität durch Speichern von Datenelementen, die aus dem Speicher 118 erfasst worden sind, in der Cache-Hierarchie 103. Viele Anwendungen und Typen von Daten zeigen eine signifikante räumliche und/oder zeitliche Lokalität in ihrem Zugriffstrom und ziehen daher Nutzen aus dem Zugreifen auf eine und Speichern einer Datenmenge einer ganzen Cache-Line für jedes erfasste Datenelement in dem Cache. Es weisen jedoch nicht alle Anwendungen und/oder Typen von Daten eine ausreichende zeitliche und/oder räumliche Lokalität zum Rechtfertigen des Zugreifens auf und Speicherns ganzer Cache-Lines für Erfassungs- und/oder Streubefehle in den Caches auf. Einige Anwendungen und/oder Typen von Daten zeigen eine kleine räumliche und/oder zeitliche Lokalität für die Datenelemente, die erfasst und/oder gestreut werden. Bestimmte Datenelemente können einmal benötigt werden, es kann jedoch unwahrscheinlich sein, dass sie in der nahen Zukunft noch einmal benötigt werden. Zum Beispiel kann dies bei bestimmten Streaming-Daten-Anwendungen, Hochleistungs-Rechneranwendungen, Anwendungen mit einem Strom von sehr spärlichen Speicherzugriffen und bei verschiedenen anderen Anwendungen der Fall sein. Ferner können in vielen Fällen ein Programmierer und/oder die Software (z. B. ein Betriebssystem) in der Lage sein, dies zu wissen. Eine mögliche Vorgehensweise ist das Ermöglichen, dass solche Daten genau wie andere Daten, die aus dem Speicher in den Prozessor eingebracht werden, im Cache gespeichert werden. Ein Nachteil dieser Vorgehensweise liegt jedoch darin, dass durch das Speichern solcher Daten in den Caches häufig verwendete Daten, die wahrscheinlich von dem Prozessor wiederverwendet werden, geräumt werden. Ferner können diese Daten über einen Zeitraum in den Caches verbleiben, bis sie schließlich aus den Caches geräumt werden, und zwar häufig, ohne wiederverwendet worden zu sein. Solche Daten belasten effektiv die Caches und nehmen wertvollen Speicherplatz ein, der stattdessen zum Speichern von häufig genutzten Daten verwendet werden könnte, um die Leistung zu erhöhen.
  • Des Weiteren ist der Erfassungsbefehl 112 ein gepackter oder Vektorbefehl, der Datenelemente für einen Vektor erfasst. Jedes erfasste Datenelement kann potenziell Daten einer ganzen Cache-Line zum Speichern im Cache einbringen, die den Betrag an Cache-Belastung erhöhen, wenn keine ausreichende räumliche und/oder zeitliche Lokalität vorhanden ist. Dies kann zum Beispiel für bestimmte Erfassungsbefehle besonders signifikant werden, die vier, acht, sechzehn oder zweiunddreißig Datenelemente erfassen. Des Weiteren kann durch das Zugreifen auf Datenmengen einer ganzen Cache-Line für jedes erfasste Datenelement wertvolle Bus- oder Zwischenverbindungs-Bandbreite nicht genutzt werden (z. B. auf den Zwischenverbindungen zu den Caches und/oder der Zwischenverbindung zu dem Speicher), wenn es eine unzureichende räumliche Lokalität gibt. Zum Beispiel können 512 Bits aus dem Speicher aufgerufen werden, wenn nur ein einzelnes 8-Bit-, 16-Bit-, 32-Bit- oder 64-Bit-Datenelement benötigt wird und es eine geringe räumliche Lokalität gibt. Durch das Zugreifen nur auf das benötigte Datenelement oder zumindest auf weniger als die Datenmenge einer ganzen Cache-Line kann die Zwischenverbindungs-Bandbreite besser genutzt werden.
  • Gemäß 1 können der Prozessor und/oder einer oder mehrere der Kerne einen Keine-Lokalität-Hinweis-Speicherzugriffsbefehl 114 empfangen und durchführen (z. B. einen Keine-Lokalität-Hinweis-Lade- oder -Erfassungsbefehl und/oder einen Keine-Lokalität-Hinweis-Vektorspeicher- oder -streubefehl). Der Hinweis kann anzeigen, dass die Daten, auf die zugegriffen wird (die z. B. erfasst oder gestreut werden), eine unzureichende räumliche und/oder zeitliche Lokalität aufweisen. Bei einigen Ausführungsformen kann der Keine-Lokalität-Hinweis ein Keine-zeitliche-Lokalität-Hinweis sein. Bei weiteren Ausführungsformen kann der Keine-Lokalität-Hinweis ein Keine-räumliche-Lokalität-Hinweis sein. Bei noch weiteren Ausführungsformen kann der Keine-Lokalität-Hinweis ein Keine-zeitliche- und Keine-räumliche-Lokalität-Hinweis sein. Im Fall eines Keine-zeitliche-Lokalität-Hinweises können bei einigen Ausführungsformen erfasste Datenelemente die Cache-Hierarchie 103 umgehen und/oder nicht in der Cache-Hierarchie 103 gespeichert werden, wodurch zum Verringern der Cache-Belastung beigetragen wird. Im Fall eines Keine-räumliche-Lokalität-Hinweises können bei einigen Ausführungsformen Zugriffe auf Datenelemente nur mit Datenmengen einer Teil-Cache-Line (z. B. Datenmengen einer halben oder einer viertel Cache-Line) oder in einigen Fällen mit Datenmengen eines einzelnen Datenelements durchgeführt werden, wodurch zum Verringern des Nichtnutzens von Zwischenverbindungs-Bandbreite und/oder zum Verringern des Energieverbrauchs beigetragen werden kann. Vorteilhafterweise kann der Keine-Lokalität-Hinweis-Speicherzugriffsbefehl 114 zum Verbessern der Leistung und/oder Verringern des Energieverbrauchs zu Zeiten beitragen, zu denen es eine unzureichende räumliche und/oder zeitliche Lokalität gibt.
  • 2 ist ein Blockschaltbild einer Ausführungsform eines Verfahrens 220 zum Verarbeiten einer Ausführungsform eines Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls. Bei verschiedenen Ausführungsformen kann das Verfahren von einem Prozessor, einer Befehlsverarbeitungseinrichtung oder einer anderen digitalen Logikvorrichtung durchgeführt werden.
  • Das Verfahren umfasst das Empfangen des Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls bei Block 221. Bei verschiedenen Aspekten kann der Befehl an einem Prozessor oder einem Abschnitt desselben (z. B. einer Befehlsabrufeinheit, einer Dekodierungseinheit etc.) empfangen werden. Bei verschiedenen Aspekten kann der Befehl aus einer außerhalb des Dies befindlichen Quelle (z. B. aus einem Speicher, einer Zwischenverbindung etc.) oder aus einer auf dem Die befindlichen Quelle (z. B. aus einem Befehls-Cache, einer Befehlswarteschlange etc.) empfangen werden. Der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl kann Quell-Gepackt-Speicherindizes mit einer Vielzahl von Speicherindizes spezifizieren oder anderweitig anzeigen. Bei einigen Ausführungsformen kann der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis für Datenelemente, auf die mit den Speicherindizes zugegriffen wird, zu dem Prozessor liefern.
  • In Block 222 kann in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl auf die Datenelemente an Speicherstellen zugegriffen werden, die auf den Speicherindizes basieren. Bei einigen Ausführungsformen kann das Verfahren jede der Operationen umfassen, die nachstehend anhand von 38 gezeigt oder beschrieben werden.
  • 3 ist ein Blockschaltbild einer Ausführungsform eines Prozessors 302, der so ausgelegt ist, dass er eine Ausführungsform eines Keine-Lokalität-Hinweis-Erfassungsbefehls 314 durchführt. Der Keine-Lokalität-Hinweis-Erfassungsbefehl kann hier auch als Keine-Lokalität-Hinweis-Vektorladebefehl bezeichnet werden. Bei einigen Ausführungsformen kann der Prozessor ein Universalprozessor (z. B. ein Universalmikroprozessor oder eine zentrale Verarbeitungseinheit (central processing unit – CPU) des Typs, der in Desktop-, Laptop- oder anderen Computer verwendet wird) sein. Alternativ kann der Prozessor ein Spezialprozessor sein. Beispiele für geeignete Spezialprozessoren umfassen, sind jedoch nicht beschränkt auf, Grafikprozessoren, Netzprozessoren, Kommunikationsprozessoren, kryptografische Prozessoren, Koprozessoren, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs) und Controller (z. B. Mikrocontroller). Der Prozessor kann jeder von verschiedenen Rechnerprozessoren mit komplexem Befehlssatz (complex instruction set computing – CISC), Rechnerprozessoren mit verringertem Befehlssatz (reduced instruction set computing – RISC), Prozessoren mit sehr langen Befehlswörtern (very long instruction word – VLIW), Hybride daraus, andere Typen von Prozessoren sein oder kann eine Kombination aus unterschiedlichen Prozessoren (z. B. in unterschiedlichen Kernen) umfassen.
  • Bei Betrieb kann der Prozessor 302 die Ausführungsform des Keine-Lokalität-Hinweis-Erfassungsbefehls 314 empfangen. Zum Beispiel kann der Keine-Lokalität-Hinweis-Erfassungsbefehl aus einer Befehlsabrufeinheit, einer Befehlswarteschlange oder dergleichen empfangen werden. Der Keine-Lokalität-Hinweis-Erfassungsbefehl kann einen Makrobefehl, Befehl in einer Assemblersprache, Maschinencodebefehl oder einen anderen Befehl oder ein Steuersignal eines Befehlssatzes des Prozessors darstellen.
  • Bei einigen Ausführungsformen kann der Keine-Lokalität-Hinweis-Erfassungsbefehl Quell-Gepackt-Speicherindizes 334 explizit spezifizieren (z. B. durch ein oder mehrere Felder oder einen Satz von Bits) oder anderweitig anzeigen (z. B. implizit anzeigen). Der Befehl kann ferner einen Zieloperanden oder eine Zielspeicherstelle (z. B. ein Ziel-Gepacktdaten-Register) spezifizieren oder anderweitig anzeigen, in der ein Gepacktdaten-Ergebnis 336 gespeichert wird.
  • Bei einigen Ausführungsformen kann, falls der Keine-Lokalität-Hinweis-Erfassungsbefehl wahlweise ein maskierter oder prädizierter Befehl ist, dieser dann eine Quell-Gepacktdaten-Operationsmaske 338 spezifizieren oder anderweitig anzeigen, obwohl dies nicht erforderlich ist. Wie gezeigt ist, kann bei einigen Ausführungsformen die Quell-Gepacktdaten-Operationsmaske in einem Satz von Gepacktdaten-Operationsmaskenregistern 340 vorhanden sein, obwohl dies nicht erforderlich ist. Bei weiteren Ausführungsformen kann die Quell-Gepacktdaten-Operationsmaske an einer anderen Speicherstelle gespeichert sein oder von dem Befehl (z. B. einem Feld oder Direktwert) spezifiziert sein. Wie nachstehend diskutiert wird, kann die Quell-Gepacktdaten-Operationsmaske verwendet werden, um die Erfassungsoperation zu maskieren, prädizieren oder bedingt zu steuern.
  • Gemäß 3 weist der Prozessor eine Dekodierungseinheit oder einen Dekodierer 330 auf. Die Dekodierungseinheit kann den Keine-Lokalität-Hinweis-Erfassungsbefehl 314 empfangen und dekodieren. Die Dekodierungseinheit kann einen oder mehrere Mikrobefehle, Mikrooperationen, Mikrocode-Eingabepunkte, dekodierte Befehle oder Steuersignale oder andere Befehle oder Steuersignale auf einem relativ niedrigeren Level, die den Keine-Lokalität-Hinweis-Erfassungsbefehl reflektieren, darstellen und/oder von diesem abgeleitet sind, ausgeben. Der eine oder die mehreren Befehle oder Steuersignale auf niedrigerem Level können den Keine-Lokalität-Hinweis-Erfassungsbefehl auf höherem Level durch eine oder mehrere Operationen auf niedrigerem Level (z. B. Schaltungs-Level oder Hardware-Level) implementieren. Die Dekodierungseinheit kann unter Verwendung verschiedener unterschiedlicher Mechanismen, einschließlich, jedoch nicht beschränkt auf, Mikrocode-Nurlesespeicher (read only memories – ROMs), Lookup-Tabellen, Hardware-Implementierungen, programmierbaren logischen Arrays (PLAs) und anderen Mechanismen zum Implementieren von auf dem Sachgebiet bekannten Dekodierungseinheiten implementiert werden.
  • Bei einigen Ausführungsformen kann wahlweise anstelle des direkten Lieferns des Keine-Lokalität-Hinweis-Erfassungsbefehls zu der Dekodierungseinheit 330 ein Befehlsemulator, -übersetzer, -morpher, -interpretierer oder ein anderes Befehlsumwandlungsmodul verwendet werden. Verschiedene Typen von Befehlsumwandlungsmodulen sind auf dem Sachgebiet bekannt und können in Software, Hardware, Firmware oder einer Kombination daraus implementiert werden. Bei einigen Ausführungsformen kann sich das Befehlsumwandlungsmodul außerhalb des Prozessors befinden, wie zum Beispiel auf einem separaten Die und/oder in einem Speicher (z. B. einem statischen, dynamischen oder Laufzeit-Emulationsmodul). Zum Beispiel kann das Befehlsumwandlungsmodul den Keine-Lokalität-Hinweis-Erfassungsbefehl empfangen, der zu einem ersten Befehlssatz gehören kann, und kann den Keine-Lokalität-Hinweis-Erfassungsbefehl in einen oder mehrere entsprechende oder abgeleitete Zwischenbefehle oder -steuersignale emulieren, übersetzen, morphen, interpretieren oder anderweitig umwandeln, die zu einem zweiten unterschiedlichen Befehlssatz gehören können. Der eine oder die mehreren Zwischenbefehle oder -steuersignale des zweiten Befehlssatzes können zu einer Dekodierungseinheit geliefert werden, die sie in einen oder mehrere Befehle oder Steuersignale eines niedrigeren Levels, welche von einer nativen Hardware des Prozessors (z. B. einer oder mehreren Ausführungseinheiten) ausführbar sind, dekodieren kann.
  • Gemäß 3 weist der Prozessor ferner einen Satz von Gepacktdaten-Registern 332 auf. Jedes der Gepacktdaten-Register kann eine auf einem Die befindliche Speicherstelle darstellen, die so ausgelegt ist, dass sie gepackte Daten, Vektordaten oder SIMD-Daten speichert. Die Gepacktdaten-Register können architektonisch sichtbare Register (z. B. eine architektonische Registerdatei) darstellen, die für die Software und/oder einen Programmierer sichtbar sind und/oder die Register sind, die von Befehlen eines Befehlssatzes zum Identifizieren von Operanden angezeigt werden. Diese architektonischen Register stehen im Gegensatz zu anderen nichtarchitektonischen oder nicht architektonisch sichtbaren Registern in einer vorgegebenen Mikroarchitektur (z. B. temporare Register, Neuordnungspuffer, Rückzugsregister etc.). Die Gepacktdaten-Register können unter Anwendung bekannter Techniken auf unterschiedliche Arten in unterschiedliche Mikroarchitekturen implementiert werden und sind nicht auf einen besonderen Typ von Schaltung beschränkt. Beispiele für geeignete Typen von Registern umfassen, sind jedoch nicht beschränkt auf, zweckbestimmte physikalische Register, dynamisch zugewiesene Register unter Anwendung einer Registerumbenennung und Kombinationen daraus.
  • Bei einigen Ausführungsformen können die Quell-Gepackt-Speicherindizes 334 wahlweise in einem ersten Gepacktdaten-Register gespeichert sein, und das Gepacktdaten-Ergebnis 336 kann wahlweise in einem zweiten Gepacktdaten-Register gespeichert sein. Alternativ können andere Speicherstellen für einen oder mehrere dieser Operanden verwendet werden. Ferner kann bei einigen Ausführungsformen ein Gepacktdaten-Register, das für einen Quelloperanden verwendet wird, wahlweise als Zieloperand wiederverwendet werden (z. B. kann das Gepacktdaten-Ergebnis 336 wahlweise über die Quell-Gepackt-Speicherindizes 334 geschrieben oder gespeichert werden).
  • Gemäß 3 ist die Ausführungseinheit 306 mit der Dekodierungseinheit 330, den Gepacktdaten-Registern 332 und wahlweise der Gepacktdaten-Operationsmaske 338 gekoppelt. Die Ausführungseinheit kann den einen oder die mehreren dekodierten oder anderweitig umgewandelten Befehle oder Steuersignale, die den Keine-Lokalität-Hinweis-Erfassungsbefehl darstellen und/oder von diesem abgeleitet sind, empfangen. Die Ausführungseinheit kann ferner die Quell-Gepacktdaten-Speicherindizes 334, die von dem Keine-Lokalität-Hinweis-Erfassungsbefehl angezeigt werden, empfangen. In einigen Fällen kann die Ausführungseinheit ferner wahlweise zum Beispiel mit einem Satz von Universalregistern 342 gekoppelt sein, falls die Universalregister Informationen liefern, die zum Umwandeln der Speicherindizes in Speicheradressen (z. B. Basis, Skala, Verschiebung etc.) verwendet werden.
  • Die Ausführungseinheit arbeitet in Reaktion auf den und/oder infolge des Keine-Lokalität-Hinweis-Erfassungsbefehl(s) (z. B. in Reaktion auf einen oder mehrere Befehle oder Steuersignale, die direkt oder indirekt (z. B. durch Emulation) aus dem Befehl kodiert werden), um auf Stellen im Speicher zuzugreifen, die von den Quell-Gepackt-Speicherindizes 334 angezeigt werden. Zum Beispiel kann ein solcher Zugriff ein Erfassen oder anderweitiges Laden von Datenelementen aus Stellen im Speicher, die von den entsprechenden gepackten Speicherindizes angezeigt werden, und das Speichern derselben in einem Gepacktdaten-Ergebnis 336 umfassen. Bei einigen Ausführungsformen kann wahlweise eine maskierte Erfassungsoperation durchgeführt werden. Bei einigen Ausführungsformen kann die Ausführungseinheit jede der Operationen, die anhand von 45 gezeigt und beschrieben werden, durchführen, obwohl der Umfang der Erfindung nicht darauf beschränkt ist.
  • Bei einigen Ausführungsformen kann die Erfassungsoperation mit einem Keine-Lokalität-Hinweis implementiert sein. Bei einigen Ausführungsformen kann die Erfassungsoperation mit einem Keine-zeitliche-Lokalität-Hinweis implementiert sein. Bei weiteren Ausführungsformen kann die Erfassungsoperation mit einem Keine-räumliche-Lokalität-Hinweis implementiert sein. Bei noch weiteren Ausführungsformen kann die Erfassungsoperation mit einem Keine-zeitliche-Lokalität- und Keine-räumliche-Lokalität-Hinweis implementiert sein. Die Ausführungseinheit kann Keine-Lokalität-Hinweis-Ladeoperationen 348 für einen oder mehrere Cache-Controller 344 verfügbar machen. Bei einigen Ausführungsformen kann es einen einzelnen Cache-Level und einen einzelnen Cache-Controller (z. B. einen L1-Cache-Controller) geben. Bei weiteren Ausführungsformen kann es zwei oder mehr Cache-Controller (z. B. einen L1-Cache-Controller, einen L2-Cache-Controller und wahlweise einen L3-Cache-Controller) geben.
  • Bei einigen Ausführungsformen kann, falls eine Keine-Lokalität-Hinweis-Ladeoperations- 348 Anforderung bezüglich Daten einen Keine-räumliche-Lokalität-Hinweis aufweist und falls die Anforderung in einem Cache 308 einen Treffer erzielt, der zugeordnete Cache-Controller 344 eine Teil-Cache-Line-Datenmenge 352 aus dem Cache 308 zurückführen. Bei verschiedenen Ausführungsformen kann die Teil-Cache-Line-Datenmenge 352 nur eine halbe Cache-Line (z. B. nur 256 Bits einer 512-Bit-Cache-Line), nur eine viertel Cache-Line (z. B. nur 128 Bits), nur eine achtel Cache-Line (z. B. nur 64 Bits) oder nur ein einzelnes Datenelement (z. B. 1 128-Bit-, 64-Bit-, 32-Bit-, 16-Bit- oder 8-Bit-Datenelement) betragen.
  • Im Gegensatz dazu kann, falls eine Keine-Lokalität-Hinweis-Ladeoperations- 348 Anforderung bezüglich Daten einen Keine-räumliche-Lokalität-Hinweis aufweist und falls die Anforderung in sämtlichen Caches 308 Nichttreffer erzielt, eine Keine-Lokalität-Hinweis-Ladeoperations- 348 Anforderung bezüglich Daten zu einem Speicher-Controller 346 gesendet werden. Bei einigen Ausführungsformen kann der Speicher-Controller eine Teil-Cache-Line-Datenzugriff- und -rückführung 350 aus dem Speicher (z. B. externen Speicher) durchführen. Wie zuvor kann bei verschiedenen Ausführungsformen die Teil-Cache-Line-Datenzugriff- und -rückführung 350 nur eine halbe Cache-Line (z. B. nur 256 Bits), nur eine viertel Cache-Line (z. B. nur 128 Bits), nur eine achtel Cache-Line (z. B. nur 64 Bits) oder nur ein einzelnes Datenelement (z. B. ein 64-Bit-, 32-Bit-, 16-Bit- oder 8-Bit-Datenelement) betragen. Das heißt, dass der Speicher-Controller Daten aus dem Speicher mit kleiner bemessenem Zugriff und Datenrückführung laden kann als normalerweise für eine Ladeoperation ohne einen Keine-Lokalität-Hinweis (z. B. eine Ladeoperation für einen bekannten Erfassungsbefehl) verwendet wird. Bei einem spezifischen Beispiel kann nur ein eines Paars von 256-Bit-Bussignalen, das normalerweise zum Zugreifen auf eine Datenmenge einer ganzen 512-Bit-Cache-Line verwendet wird, aus dem Speicher-Controller zu einem dynamischen Schreib-/Lesespeicher (dynamic random access memory – DRAM) gesendet werden, wobei das eine gesendete dasjenige ist, das das gewünschte Datenelement aufweist. Bei einigen Ausführungsformen können der minimal bemessene Zugriff und Datenrückführung, die ausreichen, um das gewünschte Datenelement zu enthalten, wahlweise angewendet werden. Der Speicher-Controller kann eine Teil-Cache-Line-Datenrückführung 351 zu dem (den) Cache-Controller(n) 344 ermöglichen. Die Cache-Controller können eine entsprechende Teil-Cache-Line-Datenmenge 352 zu der Ausführungseinheit liefern. Bei weiteren Ausführungsformen können die Teil-Cache-Line-Datenmengen auf einigen, jedoch nicht sämtlichen dieser Zwischenverbindungen übertragen werden.
  • Bekannterweise können, falls auf eine ganze Cache-Line zugegriffen wird, die niedrigstwertigen Bits der Adresse (z. B. die niedrigstwertigen 6 Bits der Adresse) alle Nullen sein. Im Gegensatz dazu können, falls nur auf einen Abschnitt einer Cache-Line zugegriffen wird, einige oder sämtliche dieser niedrigstwertigen Bits nicht alle Nullen sein, sondern können vielmehr erforderlich sein, um die Stelle der gewünschten Daten innerhalb der Cache-Line zu spezifizieren (z. B. bei einer Ausführungsform eine Stelle eines einzelnen 64-Bit-, 32-Bit-, 16-Bit- oder 8-Bit-Datenelements innerhalb einer 512-Bit-Cache-Line). Bei einigen Ausführungsformen kann es auch erforderlich sein, eine Größe des Datenelements beim Speicherzugriff anzuzeigen.
  • Vorteilhafterweise können eine oder mehrere von Teil-Cache-Line-Datenzugriff und -rückführung 350 und/oder Teil-Cache-Line-Datenrückführung 351 und/oder Teil-Cache-Line-Datenmenge 352 helfen, die nicht genutzte Bandbreite der zugeordneten Zwischenverbindungen zu verringern. Dies wiederum kann zum Verbessern der Prozessorgeschwindigkeit und/oder -leistung beitragen, insbesondere bei Anwendungen, die (zumindest hin und wieder) dazu tendieren, an die Speicherzugriffsbandbreite gebunden zu sein. In solchen Situationen kann der Prozessor in der Lage sein, Daten schneller zu verarbeiten als die Daten aus dem Speicher erhalten werden können. Falls die benötigten Daten schneller aus dem Speicher erhalten werden können, können die Gesamtgeschwindigkeit und/oder -leistung des Prozessors verbessert werden. Die Verwendung der zur Verfügung stehenden Speicherzugriffsbandbreite zum Zugreifen auf einen größeren Anteil der Daten, die tatsächlich von Interesse sind, und einen kleineren Anteil von ”mitgenommenen” Räumliche-Lokalität-Annahmedaten, kann einen Vorteil bieten, wenn es eine geringe tatsächliche räumliche Lokalität gibt. Solche kleineren Zugriffe können angemessen sein, wenn der Datenzugriff eine ausreichend geringe räumliche Lokalität aufweist. Des Weiteren können diese kleinen Zugriffe auch zum Verringern des Energieverbrauchs beim Zurückführen des gewünschten Datenelements beitragen.
  • Bei einigen Ausführungsformen kann, falls eine Keine-Lokalität-Hinweis-Ladeoperations- 348 Anforderung bezüglich Daten einen Keine-zeitliche-Lokalität- (z. B. nichtzeitlichen) Hinweis aufweist und falls die Anforderung keinen Treffer in einem Cache 308 erzielt, der zugeordnete Cache-Controller 344 keinen Speicherplatz in dem Cache für die angeforderten Daten zuweisen, wie er es normalerweise für einen regulären Erfassungsbefehl (d. h. ohne einen Keine-Lokalität-Hinweis) täte. Falls es mehrere Cache-Levels gibt, können die Cache-Controller für Caches höherer Levels (z. B. näher an den Kernen) die Anforderung an Cache-Controller für Caches niedriger Levels (z. B. weiter von den Kernen entfernt) liefern. Bei Cache-Nichttreffern kann bei einigen Ausführungsformen jeder Cache-Controller auf im Wesentlichen gleiche Weise keinen Speicherplatz in ihren zugeordneten Caches für die angeforderten Daten zuweisen, wenn diese aus dem Speicher zurückgeführt werden. Bei einigen Ausführungsformen können, falls die Daten in einem Cache eines niedrigeren Levels vorhanden sind, diese zu der Ausführungseinheit 306 zurückgeführt werden, ohne in einem der Caches eines höheren Levels gespeichert zu werden. Falls die Daten nicht in einem der Caches 308 vorhanden sind, kann die Anforderung bezüglich der Daten zu dem Speicher-Controller 346 geliefert werden. Der Speicher-Controller kann die gewünschten Daten aus dem Speicher aufrufen, wobei er wahlweise eine Teil-Cache-Line-Datenmenge 350 aufruft, falls der Hinweis auch ein Keine-räumliche-Lokalität-Hinweis ist, oder andernfalls die Datenmenge einer ganzen Cache-Line aufruft, falls der Hinweis nur ein Keine-zeitliche-Lokalität-Hinweis ist. Der Speicher-Controller kann die aufgerufenen Daten zu dem (den) Cache-Controller(n) liefern. Bei einigen Ausführungsformen kann (können) der (die) Cache-Controller die Daten zu der Ausführungseinheit 306 liefern, ohne die aufgerufenen Daten in dem (den) Cache(s) zu speichern. Vorteilhafterweise kann das Wegfallenlassen des Speicherns der Daten in dem (den) Cache(s) zum Verringern der Cache-Belastung beitragen und/oder kann zum Erhöhen der Prozessorleistung beitragen und kann angemessen sein, wenn der Datenzugriff eine ausreichend geringe zeitliche Lokalität aufweist. Sobald die Ausführungseinheit sämtliche der angeforderten Datenelemente empfangen und diese in dem Gepacktdaten-Ergebnis 336 (z. B. einem Gepacktdaten-Register) platziert hat, kann sie eine Beendigung des Befehls signalisieren.
  • Die Ausführungseinheit und/oder der Prozessor können eine spezifische oder besondere Logik (z. B. Transistoren, integrierte Schaltungsanordnung oder andere Hardware, die potenziell mit einer Firmware (z. B. Befehlen, die in einem nichtflüchtigen Speicher gespeichert sind) und/oder Software kombiniert ist) aufweisen, die so ausgelegt ist, dass sie die Keine-Lokalität-Hinweis-Erfassungsoperation in Reaktion auf den und/oder infolge des Keine-Lokalität-Hinweis-Erfassungsbefehl(s) durchführt. Zum Beispiel kann die Ausführungseinheit eine Erfassungs-Ausführungseinheit, eine Erfassungs- und/oder Streu-Ausführungseinheit, eine Speicherausführungseinheit, eine Speicherzugriffseinheit, eine Ladeeinheit, eine Lade- und/oder Speicherungseinheit oder dergleichen umfassen.
  • 4 ist ein Blockschaltbild mit Darstellung einer Ausführungsform einer Erfassungsoperation 420, die in Reaktion auf eine Ausführungsform eines Keine-Lokalität-Hinweis-Erfassungsbefehls durchgeführt werden kann. Der Erfassungsbefehl kann Quell-Gepackt-Speicherindizes 434 mit einer Vielzahl von gepackten Speicherindizes spezifizieren oder anderweitig anzeigen. Es gibt bei der dargestellten Ausführungsform acht Speicherindizes, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Bei dem dargestellten Beispiel betragen die Werte der Speicherindizes von der niedrigstwertigen Position (auf der linken Seite) bis zu der höchstwertigen Position (auf der rechten Seite) 134, 231, 20, 135, 5, 21, 30 ... 186. Diese Werte sind nur ein Beispiel. Andere Ausführungsformen können entweder weniger oder mehr Speicherindizes aufweisen. Normalerweise kann die Anzahl von Speicherindizes in den Quell-Gepackt-Speicherindizes gleich der Größe in Bits des Quell-Gepackt-Speicherindizes-Operanden dividiert durch die Größe in Bits jedes der Speicherindizes sein. Bei verschiedenen Ausführungsformen kann die Breite des Quell-Gepackt-Speicherindizes-Operanden 64 Bits, 128 Bits, 256 Bits, 512 Bits oder 1024 Bits betragen, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Bei verschiedenen Ausführungsformen kann die Größe jedes Speicherindexes 16 Bits, 32 Bits oder 64 Bits betragen, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Andere Quell-Gepackt-Speicherindizes-Breiten und Speicherindex-Größen sind ebenfalls geeignet.
  • Die Erfassungsoperation 420 kann durchgeführt werden, und ein Gepacktdaten-Ergebnis 436 kann in Reaktion auf den und/oder infolge des Erfassungsbefehl(s) an einer Ziel-Speicherstelle gespeichert werden. Bei einem Aspekt kann der Erfassungsbefehl die Ziel-Speicherstelle spezifizieren oder anderweitig anzeigen. Bei einigen Ausführungsformen kann das Gepacktdaten-Ergebnis Datenelemente aufweisen, die aus potenziell nicht zusammenhängenden Speicherstellen in einem Speicher 418 geladen oder erfasst worden sind, welche von den entsprechenden Speicherindizes der Quell-Gepackt-Speicherindizes 434 angezeigt werden. Zum Beispiel kann ein Speicherindex unter Verwendung einer gemeinsamen Skala und einer gemeinsamen Basis (wie z. B. Speicheradresse = Speicherindex·Skala + Basis) in eine Speicheradresse umgewandelt werden. Zum Beispiel kann bei der dargestellten Ausführungsform der Speicherindex 134 die Speicherstelle anzeigen, an der ein Datenelement B1 gespeichert wird, kann der Speicherindex 231 die Speicherstelle anzeigen, an der ein Datenelement B2 gespeichert wird, und so weiter.
  • Bei einigen Ausführungsformen kann die Erfassungsoperation einen Teil-Cache-Line-Datenzugriff 450 auf den Speicher 418 umfassen. Bei einigen Ausführungsformen kann die Erfassungsoperation eine Teil-Cache-Line-Datenrückführung 452 aus dem Speicher umfassen, bei der die Caches des Prozessors umgangen werden. Statt des Zugriffs auf eine ganze Cache-Line (z. B. eine 512-Bit-Cache-Line) kann bei verschiedenen Ausführungsformen bei Teil-Cache-Line-Datenzugriff- und -rückführung nur auf eine halbe Cache-Line (z. B. 256 Bits), eine viertel Cache-Line (z. B. 128 Bits), eine achtel Cache-Line (z. B. 64 Bits) oder ein einzelnes Datenelement (z. B. 64 Bit-, 32 Bit-, 16 Bit- oder 8-Bit-Datenelement) zugegriffen und können die Daten zurückgeführt werden. Bei einigen Ausführungsformen können die zurückgeführten Daten nicht in einem der Caches des Prozessors gespeichert werden.
  • Bei der dargestellten Ausführungsform weist das Gepacktdaten-Ergebnis acht Datenelemente auf, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Andere Ausführungsformen können entweder weniger oder mehr Ergebnisdatenelemente aufweisen. Normalerweise kann die Anzahl von Ergebnisdatenelementen gleich der Breite in Bits des Gepacktdaten-Ergebnisses dividiert durch die Größe in Bits jedes Ergebnisdatenelements und/oder gleich der Anzahl von Speicherindizes in den Quell-Gepackt-Speicherindizes sein. Bei verschiedenen Ausführungsformen kann die Breite des Gepacktdaten-Ergebnisses 64 Bits, 128 Bits, 256 Bits, 512 Bits oder 1024 Bits betragen, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Bei verschiedenen Ausführungsformen kann die Größe jedes Ergebnisdatenelements 16 Bits, 32 Bits oder 64 Bits betragen, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Bei dem dargestellten Beispiel speichert das Gepacktdaten-Ergebnis, von der niedrigstwertigen Position (auf der linken Seite) bis zu der höchstwertigen Position (auf der rechten Seite) die Datenelemente B1 bis B8.
  • 5 ist ein Blockschaltbild mit Darstellung einer Ausführungsform einer maskierten Erfassungsoperation 520, die in Reaktion auf eine Ausführungsform eines maskierten Keine-Lokalität-Hinweis-Erfassungsbefehls durchgeführt werden kann. Die maskierte Operation von 5 weist Ähnlichkeiten mit der unmaskierten Operation von 4 auf. Um zu vermeiden, dass die Beschreibung unklar wird, werden primär die unterschiedlichen und/oder zusätzlichen Charakteristiken für die maskierte Operation von 5 beschrieben, ohne sämtliche im Wesentlichen gleichen oder gemeinsamen Charakteristiken relativ zu der unmaskierten Operation von 4 zu wiederholen. Die zuvor beschriebenen Charakteristiken der unmaskierten Operation von 4 gelten jedoch wahlweise auch für die maskierte Operation von 5, sofern nicht etwas anderes angegeben oder klar ersichtlich ist.
  • Der maskierte Erfassungsbefehl kann Quell-Gepackt-Speicherindizes 534 mit einer Vielzahl von gepackten Speicherindizes spezifizieren oder anderweitig anzeigen. Die Quell-Gepackt-Speicherindizes sowie die Speicherindizes können den mit Bezug auf 34 beschriebenen im Wesentlichen gleich oder die gleichen sein und können die gleichen Variationen und Alternativen umfassen.
  • Der maskierte Erfassungsbefehl kann zusätzlich eine Quell-Gepacktdaten-Operationsmaske 538 spezifizieren (z. B. explizit spezifizieren) oder anderweitig anzeigen (z. B. implizit anzeigen). Die Gepacktdaten-Operationsmaske kann hier auch einfach als Operationsmaske, Prädiziermaske oder Maske bezeichnet werden. Die Maske kann einen Prädizieroperanden oder Bedingt-Steuerungs-Operanden darstellen, der verwendet werden kann, um zu prädizieren, bedingt zu steuern oder zu maskieren, ob entsprechende Operationen durchgeführt werden oder nicht und/oder entsprechende Ergebnisse gespeichert werden oder nicht. Bei einigen Ausführungsformen kann das Maskieren oder Prädizieren bei einer pro-Datenelement-Granularität erfolgen, so dass Operationen an unterschiedlichen Paaren von entsprechenden Datenelementen separat und/oder unabhängig von anderen prädiziert oder bedingt gesteuert werden können. Die Maske kann mehrere Maskenelemente, Prädizierelemente oder Bedingt-Steuerungs-Elemente aufweisen. Bei einem Aspekt können die Maskenelemente in einer Eins-zu-Eins-Entsprechung mit entsprechenden Speicherindizes von Quell-Gepackt-Speicherindizes und/oder entsprechenden Ergebnisdatenelementen von gepackten Ergebnisdaten vorgesehen sein. Zum Beispiel können die entsprechenden Maskenelemente, Speicherindizes und Ergebnisdatenelemente die gleichen relativen Positionen innerhalb der Operanden einnehmen.
  • Wie gezeigt ist, kann bei einigen Ausführungsformen jedes Maskenelement ein einzelnes Maskenbit sein. In solchen Fällen kann die Maske ein Bit für jeden Speicherindex und/oder jedes Ergebnisdatenelement aufweisen. Bei dem Beispiel der Quell-Gepackt-Speicherindizes mit acht Speicherindizes und in dem Fall, in dem jedes Maskenelement ein einzelnes Bit ist, kann die Gepacktdaten-Operationsmaske 8 Bit breit sein, wobei jedes Bit ein Prädizier- oder Maskenbit darstellt, das einem Speicherindex in einer gleichen relativen Operandenposition entspricht. Zum Beispiel befinden sich bei der Darstellung die entsprechenden Positionen in einer vertikalen Ausrichtung übereinander. Ein Wert jedes Maskenbits kann steuern, ob eine entsprechende Erfassungs- oder Ladeoperation durchgeführt wird oder nicht und/oder ein entsprechendes Ergebnisdatenelement gespeichert wird oder nicht. Jedes Maskenbit kann einen ersten Wert aufweisen, um das Durchführen der Erfassungs- oder Ladeoperation unter Verwendung des entsprechenden Speicherindexes zu ermöglichen und um das Speichern des entsprechenden Datenelements in den gepackten Ergebnisdaten zu ermöglichen, oder kann einen zweiten unterschiedlichen Wert aufweisen, um kein Durchführen der Erfassungs- oder Ladeoperation unter Verwendung des entsprechenden Speicherindexes zu ermöglichen und um kein Speichern des entsprechenden Datenelements in den gepackten Ergebnisdaten zu ermöglichen. Gemäß einem möglichen Grundsatz kann, wie in der Darstellung gezeigt ist, ein Maskenbit, das auf eine binäre Null (d. h. 0) gelöscht ist, eine ausmaskierte Operation darstellen, für die kein Ergebnisdatenelement gespeichert wird, wohingegen ein Maskenbit, das auf eine binäre Eins (d. h. 1) gesetzt ist, eine unmaskierte Operation darstellen kann, für die ein erfasstes Ergebnisdatenelement gespeichert wird. Bei dem dargestellten Beispiel sind die Maskenbits, von der niedrigstwertigen Bitposition (auf der linken Seite) zu der höchstwertigen Bitposition (auf der rechten Seite) 1, 1, 0, 1, 1, 1, 0 ... 1. Dies ist nur ein veranschaulichendes Beispiel. Bei anderen Ausführungsformen können wahlweise zwei oder mehr Bits für jedes Maskenelement verwendet werden (z. B. kann jedes Maskenelement eine gleiche Anzahl von Bits wie jedes entsprechende Quell-Datenelement aufweisen und können entweder sämtliche oder nur ein einzelnes Bit verwendet werden, um die Maskierung zu bestimmen).
  • Die maskierte Erfassungsoperation 520 kann durchgeführt werden, und ein Gepacktdaten-Ergebnis 536 kann in Reaktion auf den und/oder infolge des maskierten Erfassungsbefehl(s) gespeichert werden. Das Gepacktdaten-Ergebnis kann im Wesentlichen gleich oder das gleiche sein wie das mit Bezug auf 4 beschriebene und kann die gleichen Variationen und Alternativen umfassen. Bei einem Aspekt kann das Gepacktdaten-Ergebnis an einer Ziel-Speicherstelle gespeichert werden, die von dem maskierten Erfassungsbefehl angezeigt wird. Bei der maskierten Erfassungsoperation können Datenelemente aus potenziell nicht zusammenhängenden Stellen in einem Speicher 518, die von den entsprechenden Speicherindizes angezeigt werden, geladen oder erfasst werden, und zwar in Abhängigkeit von der Maskierung, Prädizierung oder bedingten Steuerung der Quell-Gepacktdaten-Operationsmaske 538. Bei einigen Ausführungsformen können Daten nur erfasst und in das entsprechende Ergebnisdatenelement gespeichert werden, wenn das entsprechende Maskenbit in der Gepacktdaten-Operationsmaske unmaskiert ist (z. B. bei der Darstellung auf eine binäre 1 gesetzt ist). Im Gegensatz dazu können die Ergebnisdatenelemente, die ausmaskierten Elementen entsprechen, vorbestimmte Werte aufweisen, die nicht auf der Erfassungsoperation basieren. Zum Beispiel braucht entweder die entsprechende Erfassungsoperation nicht durchgeführt zu werden oder, falls die entsprechende Erfassungsoperation durchgeführt wird, braucht das entsprechende erfasste Datenelement nicht in dem entsprechenden Ergebnisdatenelement gespeichert zu werden. Vielmehr kann ein fester oder vorbestimmter Wert in dem entsprechenden Ergebnisdatenelement gespeichert werden. Bei dem dargestellten Beispiel weisen die Ergebnisdatenelemente, die ausmaskierten Maskenelementen (mit einem Wert von null bei dem dargestellten Beispiel) entsprechen, ein Sternchen (*) auf, um solche festen oder vorbestimmten Werte darzustellen. Die besonderen festen oder vorbestimmten Werte können von dem Typ der Maskierung, die für die besondere Implementierung angewendet wird, abhängig sein. Bei einigen Ausführungsformen kann eine Nullungs-Maskierung angewendet werden. Bei der Nullungs-Maskierung können die ausmaskierten Ergebnisdatenelemente ausgenullt werden (z. B. gezwungen werden, einen Wert von null aufzuweisen). Alternativ können wahlweise andere vorbestimmte Werte in diesen ausmaskierten Ergebnisdatenelementen gespeichert werden. Bei dem dargestellten Beispiel speichert das Gepacktdaten-Ergebnis in dem Ziel, von der niedrigstwertigen Position (auf der linken Seite) zu der höchstwertigen Position (auf der rechten Seite) die Datenelemente B1, B2, *, B4, B5, B6, *, B8.
  • Bei einigen Ausführungsformen kann die maskierte Erfassungsoperation einen Teil-Cache-Line-Datenzugriff 550 auf den Speicher 518 umfassen. Bei einigen Ausführungsformen kann die Erfassungsoperation eine Teil-Cache-Line-Datenrückführung 552 aus dem Speicher umfassen, bei der die Caches des Prozessors umgangen werden. Statt des Zugriffs auf eine ganze Cache-Line (z. B. eine 512-Bit-Cache-Line) kann bei verschiedenen Ausführungsformen bei Teil-Cache-Line-Datenzugriff- und -rückführung nur auf eine halbe Cache-Line (z. B. 256 Bits), eine viertel Cache-Line (z. B. 128 Bits), eine achtel Cache-Line (z. B. 64 Bits) oder ein einzelnes Datenelement (z. B. ein 64-Bit-, 32-Bit-, 16-Bit- oder 8-Bit-Datenelement) zugegriffen und können die Daten zurückgeführt werden. Bei einigen Ausführungsformen können die zurückgeführten Daten nicht in einem der Caches des Prozessors gespeichert werden.
  • 6 ist ein Blockschaltbild einer Ausführungsform eines Prozessors 602, der so ausgelegt ist, dass er eine Ausführungsform eines Keine-Lokalität-Hinweis-Streubefehls 614 durchführt. Der Keine-Lokalität-Hinweis-Streubefehl kann hier auch als Keine-Lokalität-Hinweis-Vektor-Speicher- oder -Schreibbefehl bezeichnet werden. Der Prozessor 602 weist eine Dekodierungseinheit 630, eine Ausführungseinheit 606, Gepacktdaten-Register 632, Quell-Gepackt-Speicherindizes 634, Gepacktdaten-Operationsmaskenregister 640, eine Quell-Gepacktdaten-Operationsmaske 638, Universalregister 642, einen oder mehrere Cache-Controller 644, einen oder mehrere Caches 608 und einen Speicher-Controller 646 auf. Sofern nichts anderes spezifiziert ist, können mit Ausnahme des Durchführens eines Streubefehls statt eines Erfassungsbefehls der Prozessor 602 und die oben genannten Komponenten wahlweise einige oder sämtliche der Charakteristiken, Variationen und Alternativen des Prozessors 302 und der entsprechend bezeichneten Komponenten von 3 umfassen. Um zu vermeiden, dass die Beschreibung unklar wird, werden primär die unterschiedlichen und/oder zusätzlichen Charakteristiken beschrieben, ohne sämtliche der gemeinsamen Charakteristiken und möglichen Variationen zu wiederholen.
  • Bei Betrieb kann der Prozessor 602 die Ausführungsform des Keine-Lokalität-Hinweis-Streubefehls 614 empfangen. Der Keine-Lokalität-Hinweis-Streubefehl kann einen Makrobefehl, Befehl in einer Assemblersprache, Maschinencodebefehl oder einen anderen Befehl oder ein Steuersignal eines Befehlssatzes des Prozessors darstellen. Bei einigen Ausführungsformen kann der Keine-Lokalität-Hinweis-Streubefehl sowohl die Quell-Gepackt-Speicherindizes 634 als auch die Quell-Gepacktdaten 660 explizit spezifizieren oder anderweitig anzeigen. Bei einigen Ausführungsformen können die Quell-Gepackt-Speicherindizes wahlweise in einem ersten Gepacktdaten-Register gespeichert sein und können die Quell-Gepacktdaten wahlweise in einem zweiten Gepacktdaten-Register gespeichert sein. Bei einigen Ausführungsformen kann er, falls der Keine-Lokalität-Hinweis-Streubefehl wahlweise ein maskierter oder prädizierter Befehl ist, ferner eine Quell-Gepacktdaten-Operationsmaske 638 spezifizieren oder anderweitig anzeigen, obwohl dies nicht erforderlich ist.
  • Die Dekodierungseinheit 630 kann den Keine-Lokalität-Hinweis-Streubefehl 614 dekodieren. Die Ausführungseinheit 606 ist mit der Dekodierungseinheit 630, den Gepacktdaten-Registern 632 und wahlweise der Quell-Gepacktdaten-Operationsmaske 638 (z. B. den Maskenregistern 640) gekoppelt. Die Ausführungseinheit kann die Quell-Gepackt-Speicherindizes 634 und die Quell-Gepacktdaten 660 empfangen. Die Ausführungseinheit ist so ausgelegt, dass sie in Reaktion auf den und/oder infolge des Keine-Lokalität-Hinweis-Streubefehl(s) (z. B. in Reaktion auf einen oder mehrere Befehle oder Steuersignale, die aus dem Befehl dekodiert werden) Datenelemente aus den Quell-Gepacktdaten 660 in Stellen im Speicher, die von den entsprechenden gepackten Speicherindizes der Quell-Gepackt-Speicherindizes 634 angezeigt werden, streut, speichert oder schreibt. Bei einigen Ausführungsformen kann wahlweise eine maskierte Streuoperation durchgeführt werden. Bei einigen Ausführungsformen kann die Ausführungseinheit jede der Operationen, die mit Bezug auf 78 gezeigt und beschrieben wird, durchführen, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Die Ausführungseinheit und/oder der Prozessor können eine spezifische oder besondere Logik (z. B. Transistoren, integrierte Schaltungsanordnung oder andere Hardware, die potenziell mit einer Firmware (z. B. Befehlen, die in einem nichtflüchtigen Speicher gespeichert sind) und/oder Software kombiniert ist) aufweisen, die so ausgelegt ist, dass sie die Keine-Lokalität-Hinweis-Streuoperation in Reaktion auf den und/oder infolge des Keine-Lokalität-Hinweis-Streubefehl(s) durchführt. Zum Beispiel kann die Ausführungseinheit eine Streu-Ausführungseinheit, eine Erfassungs- und/oder Streu-Ausführungseinheit, eine Speicherausführungseinheit, eine Speicherzugriffseinheit, eine Speicherungseinheit und eine Lade- und Speicherungseinheit oder dergleichen umfassen.
  • Bei einigen Ausführungsformen kann die Streuoperation mit einem Keine-Lokalität-Hinweis implementiert sein. Bei einigen Ausführungsformen kann die Streuoperation mit einem Keine-zeitliche-Lokalität-Hinweis implementiert sein. Bei anderen Ausführungsformen kann die Streuoperation mit einem Keine-räumliche-Lokalität-Hinweis implementiert sein. Bei noch anderen Ausführungsformen kann die Streuoperation mit einem Keine-zeitliche-Lokalität- und Keine-räumliche-Lokalität-Hinweis implementiert sein. Die Ausführungseinheit kann Keine-Lokalität-Hinweis-Speicher- und -Schreiboperationen 662 für einen oder mehrere Cache-Controller 644 verfügbar machen. Bei einigen Ausführungsformen kann es einen einzelnen Cache-Level und einen einzelnen Cache-Controller (z. B. einen L1-Cache-Controller) geben. Bei anderen Ausführungsformen kann es zwei oder mehr Cache-Controller (z. B. einen L1-Cache-Controller, einen L2-Cache-Controller und wahlweise einen L3-Cache-Controller) geben.
  • Es gibt verschiedene Arten, in denen ein Keine-zeitliche-Lokalität-Hinweis auf einen Streubefehl angewendet werden kann. Es sei zuerst ein Szenario betrachtet, bei dem eine Streuoperation einen Treffer in einem Cache eines niedrigeren Levels (z. B. einem L2- oder L3-Cache) erzielt. Eine mögliche Art zum Implementieren eines bekannten Streubefehls ohne einen Keine-zeitliche-Lokalität-Hinweis wäre das Lesen der Cache-Line mit dem einen Treffer erzielenden Datenelement aus dem Cache des niedrigeren Levels in einen Cache eines höheren Levels (z. B. ein L1-Cache). Dann kann ein Schreiben durchgeführt werden, um das Datenelement in dem Cache des höheren Levels (z. B. dem L1-Cache) zu ersetzen. Ein möglicher Nachteil bei dieser Vorgehensweise besteht jedoch darin, dass sie bewirken kann, dass nichtzeitliche Daten in der Cache-Hierarchie höher aufsteigen und/oder näher an den Prozessor herangebracht werden. Bei einigen Ausführungsformen kann eine alternative Vorgehensweise in Reaktion auf die Ausführungsform des Keine-zeitliche-Lokalität-Hinweis-Streubefehls durchgeführt werden. Zum Beispiel können bei einigen Ausführungsformen dann, wenn die Streuoperation einen Treffer auf den Cache des niedrigeren Levels (z. B. den L2- oder L3-Cache) erzielt, statt der Übermittlung der Cache-Line mit dem einen Treffer erzielenden Datenelement in den Cache des höheren Levels (z. B. den L1-Cache) das Datenelement in dem Cache des niedrigeren Levels (z. B. dem L2- oder L3-Cache) gehalten werden und das Schreiben durchgeführt werden, um das Datenelement in dem Cache des niedrigeren Levels zu ersetzen. Durch diese Vorgehensweise kann vermieden werden, dass das nichtzeitliche Datenelement in der Cache-Hierarchie höher aufsteigt und/oder näher an die Kerne herangebracht wird. Bei einigen Ausführungsformen kann dann, wenn die Streuoperation einen Treffer in einem Cache (z. B. einem L1-Cache, einem L2-Cache oder einem L3-Cache) erzielt, die entsprechende Cache-Line mit dem Datenelement aus dem Cache in einen Cache eines niedrigeren Levels geräumt werden oder aus sämtlichen der Caches in den Speicher geräumt werden. Dann kann das Schreiben in den Speicher erfolgen, um das Datenelement zu ersetzen. Bei einer weiteren Ausführungsform kann dies nur eine Information in einem Cache-Line-Räumungsalgorithmus oder bei einem Ersetzungsvorgang sein.
  • Falls eine Keine-Lokalität-Hinweis-Streu- oder -Speicheroperation 662 einen Keine-räumliche-Lokalität-Hinweis aufweist und falls die Anforderung keinen Treffer in dem (den) Cache(s) 608 erzielt, kann die zugehörige Operation für den Speicher-Controller 646 verfügbar gemacht werden. Bei einigen Ausführungsformen kann der Speicher-Controller eine Streu-, Schreib- oder Speicheroperation 664 mit einer Teil-Cache-Line-Größe in einen Speicher durchführen. Bei verschiedenen Ausführungsformen kann die Streu-, Schreib- oder Speicheroperation 664 mit einer Teil-Cache-Line-Größe nur eine halbe Cache-Line (z. B. nur 256 Bits), nur eine viertel Cache-Line (z. B. nur 128 Bits), nur eine achtel Cache-Line (z. B. nur 64 Bits) oder nur eine einzelnes Datenelement (z. B. ein 64-Bit-, 32-Bit-, 16-Bit- oder 8-Bit-Datenelement) betragen. Das heißt, dass der Speicher-Controller Daten mit einem kleiner bemessenen Schreibvorgang in den Speicher schreiben kann als normalerweise für eine Schreiboperation ohne einen Keine-Lokalität-Hinweis verwendet würde (z. B. eine Schreiboperation für einen bekannten Streubefehl). Als ein spezifisches Beispiel kann nur ein eines Paars von 256-Bit-Busschreibsignalen, das normalerweise verwendet wird, um eine Datenmenge einer ganzen 512-Bit-Cache-Line zu schreiben, aus dem Speicher-Controller in einen DRAM übertragen werden, wobei das eine übertragene dasjenige ist, das das gewünschte Datenelement aufweist. Bei einigen Ausführungsformen kann wahlweise der minimal bemessene Schreibvorgang, der ausreicht, um das gewünschte Datenelement zu ersetzen, verwendet werden. Vorteilhafterweise können solche kleineren Schreibvorgänge dazu beitragen, nicht genutzte Bandbreite auf den zugehörigen Zwischenverbindungen zu verringern. Des Weiteren können diese kleineren Schreibvorgänge dazu beitragen, den Energieverbrauch zu verringern.
  • 7 ist ein Blockschaltbild mit Darstellung einer Ausführungsform einer Streuoperation 720, die in Reaktion auf eine Ausführungsform eines Keine-Lokalität-Hinweis-Streubefehls durchgeführt werden kann. Der Streubefehl kann Quell-Gepackt-Speicherindizes 734 mit einer Vielzahl von gepackten Speicherindizes spezifizieren oder anderweitig anzeigen. Die Quell-Gepackt-Speicherindizes sowie die Speicherindizes können im Wesentlichen die gleichen oder die gleichen sein wie diejenigen, die mit Bezug auf 4 beschrieben worden sind, und können die gleichen Variationen und Alternativen umfassen.
  • Der Streubefehl kann ferner Quell-Gepacktdaten 660 mit einer Vielzahl von Gepacktdaten-Elementen spezifizieren oder anderweitig anzeigen, die in den Speicher gestreut oder geschrieben werden. Es gibt bei der dargestellten Ausführungsform acht Gepacktdaten-Elemente, die mit B1 bis B8 bezeichnet sind, in den Quell-Gepackt-Daten, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Andere Ausführungsformen können entweder mehr oder weniger zu streuende Datenelemente aufweisen. Normalerweise kann die Anzahl von zu streuenden Datenelementen gleich der Anzahl von Speicherindizes in den Quell-Gepackt-Speicherindizes sein. Jedes zu streuende Datenelement kann einem unterschiedlichen einen der Speicherindizes (z. B. in einer gleichen relativen Position innerhalb der Operanden) entsprechen. Bei verschiedenen Ausführungsformen kann die Breite der Quell-Gepacktdaten 64 Bits, 128 Bits, 256 Bits, 512 Bits oder 1024 Bits betragen, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Bei verschiedenen Ausführungsformen kann die Größe jedes Datenelements in den Quell-Gepacktdaten 760 16 Bits, 32 Bits oder 64 Bits betragen, obwohl der Umfang der Erfindung nicht darauf beschränkt ist. Andere Quell-Gepacktdaten-Breiten und Datenelementgrößen sind ebenfalls geeignet.
  • Die Streuoperation 720 kann in Reaktion auf den und/oder infolge des Streubefehl(s) durchgeführt werden. Bei der Streuoperation können Datenelemente aus den Quell-Gepacktdaten 760 in Stellen eines Speichers 718, die von den entsprechenden Speicherindizes in Quell-Gepackt-Speicherindizes 734 angezeigt werden, gespeichert, geschrieben oder gestreut werden. Die Datenelemente können in Stellen in dem Speicher gestreut oder geschrieben werden, die von den Speicherindizes angezeigt und/oder von diesen abgeleitet werden. Bei einigen Ausführungsformen können die Datenelemente in wahlweise/potenziell nicht zusammenhängende Speicherstellen gestreut werden. Zum Beispiel zeigt bei der dargestellten Ausführungsform der Speicherindex 134 auf die Speicherstelle, in die das Datenelement B1 geschrieben wird, und so weiter. Bei einigen Ausführungsformen kann das Streuen über die Quell-Gepacktdaten geordnet sein, wie zum Beispiel von einer niedrigstwertigen Bitposition (auf der linken Betrachtungsseite) zu einer höchstwertigen Position (auf der rechten Betrachtungsseite). Bei einigen Ausführungsformen kann die Keine-Lokalität-Hinweis-Streuoperation ein Teil-Cache-Line-Schreiben 764 in den Speicher 718 umfassen.
  • 8 ist ein Blockschaltbild mit Darstellung einer Ausführungsform einer maskierten Streuoperation 820, die in Reaktion auf eine Ausführungsform eines maskierten Keine-Lokalität-Hinweis-Streubefehls durchgeführt werden kann. Die maskierte Operation von 8 weist Ähnlichkeiten mit der unmaskierten Operation von 7 auf. Um zu vermeiden, dass die Beschreibung unklar wird, werden primär die unterschiedlichen und/oder zusätzlichen Charakteristiken für die maskierte Operation von 8 beschrieben, ohne sämtliche im Wesentlichen gleichen oder gemeinsamen Charakteristiken relativ zu der unmaskierten Operation von 7 zu wiederholen. Die zuvor beschriebenen Charakteristiken der unmaskierten Operation von 7 gelten jedoch wahlweise auch für die maskierte Operation von 8, sofern nicht etwas anderes angegeben oder klar ersichtlich ist.
  • Der maskierte Streubefehl kann Quell-Gepackt-Speicherindizes 834 mit einer Vielzahl von gepackten Speicherindizes spezifizieren oder anderweitig anzeigen. Die Quell-Gepackt-Speicherindizes sowie die Speicherindizes können den mit Bezug auf 34 und/oder 7 beschriebenen im Wesentlichen gleich oder die gleichen sein und können die gleichen Variationen und Alternativen umfassen.
  • Der maskierte Erfassungsbefehl kann ferner Quell-Gepacktdaten 860 mit einer Vielzahl von Gepacktdaten-Elementen spezifizieren oder anderweitig anzeigen. Die Quell-Gepacktdaten sowie die darin enthaltenen Datenelemente können den mit Bezug auf 67 beschriebenen im Wesentlichen gleich oder die gleichen sein und können die gleichen Variationen und Alternativen umfassen.
  • Der maskierte Streubefehl kann des Weiteren eine Quell-Gepacktdaten-Operationsmaske 838 mit einer Vielzahl von Maskenbits oder anderen Maskenelementen spezifizieren (z. B. explizit spezifizieren) oder anderweitig anzeigen (z. B. implizit anzeigen). Die Quell-Gepacktdaten-Operationsmaske sowie die darin enthaltenen Maskenbits oder Maskenelemente, sofern sie nicht verwendet werden können, um Streuoperationen statt Erfassungsoperationen zu maskieren, können im Wesentlichen die gleichen oder die gleichen sein wie diejenigen, die mit Bezug auf 5 beschrieben worden sind, und können die gleichen Variationen und Alternativen umfassen. Die Maskenelemente können in einer Eins-zu-Eins-Entsprechung mit entsprechenden Speicherindizes von Quell-Gepackt-Speicherindizes und/oder entsprechenden Datenelementen von Quell-Gepacktdaten vorgesehen sein (können z. B. die gleichen relativen Positionen innerhalb der Operanden einnehmen). Ein Wert jedes Maskenbits oder Maskenelements kann steuern, ob eine entsprechende Streu- oder Schreiboperation für ein entsprechendes Datenelement der Quell-Gepacktdaten durchgeführt wird oder nicht. Jedes Maskenbit kann einen ersten Wert, der das Durchführen der Streuoperation unter Verwendung des entsprechenden Speicherindexes und Quell-Datenelements ermöglicht, oder einen zweiten unterschiedlichen Wert aufweisen, der kein Durchführen der Streuoperation unter Verwendung des entsprechenden Speicherindexes und Quell-Datenelements ermöglicht.
  • Die maskierte Streuoperation 820 kann in Reaktion auf den und/oder infolge des maskierten Streubefehl(s) durchgeführt werden in Abhängigkeit von dem Prädizieren oder dem bedingten Steuern der Quell-Gepacktdaten-Operationsmaske 838. Bei der Streuoperation können Datenelemente aus den Quell-Gepacktdaten 860 in potenziell/wahlweise nicht zusammenhängende Stellen in einem Speicher 818, die von den entsprechenden Speicherindizes in Abhängigkeit von der Maskierung, Prädizierung oder bedingten Steuerung der Quell-Gepacktdaten-Operationsmaske 838 angezeigt und/oder von diesen abgeleitet werden, gespeichert, geschrieben oder gestreut werden. Bei einigen Ausführungsformen können Daten nur dann in die Speicherstelle gestreut oder gespeichert werden, wenn das entsprechende Maskenbit in der Gepacktdaten-Operationsmaske unmaskiert ist (z. B. bei der Darstellung auf eine binäre 1 gesetzt ist). Im Gegensatz dazu können Speicherstellen, die ausmaskierten Datenelementen entsprechen, vorher vorhandene Werte aufweisen, die von der Streuoperation nicht verändert werden (z. B. den gleichen Wert wie an der Speicherstelle vor der Ausführung des maskierten Streubefehls). Bei dem dargestellten Beispiel weisen die Speicherstellen, die ausmaskierten Maskenelementen (mit Werten von null bei dem dargestellten Beispiel) entsprechen, eine Sternchen (*) auf, um solche vorher vorhandenen Werte darzustellen. Bei einigen Ausführungsformen kann die Keine-Lokalität-Hinweis-Streuoperation ein Teil-Cache-Line-Datenschreiben 864 in den Speicher 818 umfassen.
  • Bei einigen Ausführungsformen kann ein Befehlsformat einen Operationscode oder Opcode aufweisen. Der Opcode kann eine Vielzahl von Bits oder ein oder mehrere Felder darstellen, die so ausgelegt sind, dass sie den Befehl und/oder die Operation, die durchzuführen sind (z. B. eine Sortier-Index-Operation), identifizieren. In Abhängigkeit von dem besonderen Befehl kann das Befehlsformat ferner auch einen oder mehrere Quell- und/oder Zielspezifizierer aufweisen. Zum Beispiel kann jeder dieser Spezifizierer Bits oder ein oder mehrere Felder zum Spezifizieren einer Adresse eines Registers, einer Speicherstelle oder einer anderen Speicherungsstelle aufweisen, wie hier an anderer Stelle beschrieben wird. Alternativ können anstelle eines solchen expliziten Spezifizierers eine oder mehrere Quellen und/oder Ziele wahlweise in dem Befehl impliziert sein statt explizit spezifiziert zu sein. Des Weiteren kann eine Quelle in einigen Fällen implizit als Ziel wiederverwendet werden (z. B. bei einigen Ausführungsformen für einen Erfassungsbefehl). Des Weiteren kann das Befehlsformat wahlweise weitere Felder hinzufügen, bestimmte Felder überlappen etc. Felder brauchen keine zusammenhängenden Sequenzen von Bits aufzuweisen, sondern können vielmehr aus nicht zusammenhängenden oder getrennten Bit gebildet sein.
  • Bei einigen Ausführungsformen kann ein Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl wahlweise einen anderen Opcode aufweisen als ein Vektor-Speicherzugriffsbefehl ohne den Keine-Lokalität-Hinweis. Zum Beispiel kann ein Keine-Lokalität-Hinweis-Erfassungsbefehl einen anderen Opcode aufweisen als ein Erfassungsbefehl ohne den Keine-Lokalität-Hinweis. Bei einigen Ausführungsformen können wahlweise unterschiedliche Opcodes für Keine-räumliche-Lokalität-Hinweis- und Keine-zeitliche-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehle vorgesehen sein. Zum Beispiel können ein Keine-räumliche-Lokalität-Hinweis-Erfassungsbefehl, ein Keine-zeitliche-Lokalität-Hinweis-Erfassungsbefehl, ein Keine-räumliche-Lokalität-Hinweis-Streubefehl und ein Keine-zeitliche-Lokalität-Hinweis-Streubefehl unterschiedliche Opcodes aufweisen. Bei anderen Ausführungsformen kann ein Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Opcode gemeinsam mit einem Vektor-Speicherzugriffsbefehl ohne einen Keine-Lokalität-Hinweis nutzen. Zum Beispiel kann ein Keine-Lokalität-Hinweis-Erfassungsbefehl einen Opcode gemeinsam mit einem Erfassungsbefehl ohne einen Keine-Lokalität-Hinweis nutzen, und diese Befehle können ein oder mehrere Bits aufweisen, um anzuzeigen, ob der Befehl zu dekodieren ist oder nicht, um einen Keine-Lokalität-Hinweis aufzuweisen. Bei einem weiteren Beispiel kann ein Keine-Lokalität-Hinweis-Streubefehl einen Opcode gemeinsam mit einem Streubefehl ohne einen Keine-Lokalität-Hinweis nutzen, und diese Befehle können ein oder mehrere Bits aufweisen, um anzuzeigen, ob der Befehl zu dekodieren ist oder nicht, um einen Keine-Lokalität-Hinweis aufzuweisen. Bei einigen Ausführungsformen kann ein einzelnes Bit einen ersten Wert (z. B. 1) aufweisen, um einen Keine-Lokalität-Hinweis anzuzeigen, oder einen zweiten Wert (z. B. 0) aufweisen, um das Nichtvorhandensein eines Keine-Lokalität-Hinweises anzuzeigen. Bei anderen Ausführungsformen können zwei Bits unterschiedliche Werte aufweisen, um anzuzeigen, ob es einen Keine-Lokalität-Hinweis gibt oder nicht und von welchem Typ der Keine-Lokalität-Hinweis ist. Zum Beispiel können diese zwei Bits einen ersten Wert (z. B. 00) aufweisen, um anzuzeigen, dass es keinen Keine-Lokalität-Hinweis gibt, einen zweiten Wert (z. B. 01) aufweisen, um anzuzeigen, dass es einen Keine-räumliche-Lokalität-Hinweis gibt, einen dritten Wert (z. B. 10) aufweisen, um anzuzeigen, dass es einen Keine-zeitliche-Lokalität-Hinweis gibt, und einen vierten Wert (z. B. 11) aufweisen, um anzuzeigen, dass es einen Keine-räumliche- und Keine-zeitliche-Lokalität-Hinweis gibt. Bei einigen Ausführungsformen kann ein Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl (z. B. ein Keine-Lokalität-Hinweis-Erfassungs- oder -Streubefehl) ein schwächeres Speicherordnungsmodell aufweisen als ein als Gegenpart fungierender Vektor-Speicherzugriffsbefehl in demselben Befehlssatz, bei dem der Keine-Lokalität-Hinweis nicht vorhanden ist (z. B. ein bekannter Erfassungs- oder Streubefehl ohne den Keine-Lokalität-Hinweis).
  • Ein Befehlssatz weist ein oder mehrere Befehlsformate auf. Ein vorgegebenes Befehlsformat definiert verschiedene Felder (Anzahl von Bits, Stellen von Bits), um unter anderem die durchzuführende Operation (Opcode) und den (die) Operanden zu spezifizieren, an dem (denen) diese Operation durchzuführen ist. Einige Befehlsformate sind durch die Definition von Befehlsvorlagen (oder Teilformaten) weiter unterteilt. Zum Beispiel können die Befehlsvorlagen eines vorgegebenen Befehlsformats so definiert sein, dass sie unterschiedliche Teilsätze der Felder des Befehlsformats (die enthaltenen Felder weisen typischerweise die gleiche Reihenfolge auf, aber zumindest einige weisen andere Bitpositionen auf, da weniger Felder vorgesehen sind) definieren, und/oder so definiert sein, dass ein vorgegebenes Feld unterschiedlich interpretiert wird. Somit wird jeder Befehl eines ISA unter Verwendung eines vorgegebenen Befehlsformats (und, falls definiert, in einem vorgegebenen einen der Befehlsvorlagen dieses Befehlsformats) ausgedrückt und weist Felder zum Spezifizieren der Operation und der Operanden auf. Zum Beispiel weist ein beispielhafter ADD-Befehl einen spezifischen Opcode und ein Befehlsformat auf, das ein Opcode-Feld zum Spezifizieren dieses Opcodes und Operandenfelder zum Auswählen von Operanden (Quelle1/Ziel und Quelle2) aufweist; und ein Auftreten dieses ADD-Befehls in einem Befehlsstrom umfasst spezifische Inhalte in den Operandenfeldern, die spezifische Operanden auswählen. Ein Satz von SIMD-Erweiterungen, die als Advanced Vector Extensions (AVX) (AVX1 und AVX2) bezeichnet werden und das Vektorerweiterungs-(VEX-)Kodierungskonzept verwenden, ist freigegeben und/oder veröffentlicht worden (siehe z. B. Intel® 64 and IA-32 Architectures Software Developers Manual, Oktober 2011; und siehe Intel® Advanced Vector Extensions Programming Reference, Juni 2011).
  • Beispielhafte Befehlsformate
  • Ausführungsformen des (der) hier beschriebenen Befehls (Befehle) können in unterschiedlichen Formaten ausgenhrt sein. Des Weiteren werden beispielhafte Systeme, Architekturen und Pipelines nachstehend detailliert dargelegt. Ausführungsformen des (der) Befehls (Befehle) können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind jedoch nicht auf die detailliert dargelegten beschränkt.
  • VEX-Befehlsformat
  • Eine VEX-Kodierung ermöglicht, dass Befehle mehr als zwei Operanden aufweisen, und ermöglicht, das SIMD-Vektorregister länger sind als 128 Bits. Die Verwendung eines VEX-Präfixes bietet eine Drei-Operanden-(oder mehr)Syntax. Zum Beispiel haben frühere Zwei-Operanden-Befehle Operationen durchgeführt, wie z. B. A = A + B, wodurch ein Quelloperand überschrieben wird. Die Verwendung eines VEX-Präfixes ermöglicht, dass Operanden zerstörungsfreie Operationen, wie z. B. A = B + C, durchführen.
  • 9A zeigt ein beispielhaftes AVX-Befehlsformat mit einem VEX-Präfix 902, Real-Opcode-Feld 930, Mod R/M-Byte 940, SIB-Byte 950, Verschiebungsfeld 962 und IMM8 972. 9B zeigt, welche Felder aus 9A ein vollständiges Opcode-Feld 974 und ein Basisoperationsfeld 942 bilden. 9C zeigt, welche Felder aus 9A ein Registerindexfeld 944 bilden.
  • Das VEX-Präfix (Bytes 0-2) 902 ist in einer Drei-Byte-Form kodiert. Das erste Byte ist das Formatfeld 940 (VEX-Byte 0, Bits [7:0]), das einen expliziten C4-Byte-Wert (den einzigartigen Wert, der zum Unterscheiden des C4-Befehlsformats verwendet wird) enthält. Das zweite bis dritte Byte (VEX-Bytes 1-2) weisen eine Anzahl von Bitfeldern auf, die eine spezifische Fähigkeit bieten. Insbesondere besteht ein REX-Feld 905 (VEX-Byte 1, Bits [7-5]) aus einem VEX.R-Bit-Feld (VEX-Byte 1, Bit [7] – R), VEX.X-Bit-Feld (VEX-Byte 1, Bit [6] – X), und VEX.B-Bit-Feld (VEX-Byte 1, Bit[5] – B). Andere Felder der Befehle kodieren die unteren drei Bits der Registerindizes, wie auf dem Sachgebiet bekannt ist (rrr, xxx, und bbb), so dass Rrrr, Xxxx, und Bbbb durch Addieren von VEX.R, VEX.X, und VEX.B gebildet werden können. Ein Opcode-Abbildungs-Feld 915 (VEX.Byte 1, Bits [4:0] – mmmmm) weist einen Inhalt zum Kodieren eines implizierten führenden Bytes auf.
  • Ein W-Feld 964 (VEX-Byte 2, Bit [7] – W) – wird durch die Bezeichnung VEX.W dargestellt und bietet unterschiedliche Funktionen in Abhängigkeit von dem Befehl. Die Rolle von VEX.vvvv 920 (VEX-Byte 2, Bits [6:3]-vvvv) kann Folgendes umfassen: 1) VEX.vvvv kodiert den ersten Quellregisteroperanden, der in invertierter (1s-Komplement-)Form spezifiziert ist und für Befehle mit 2 oder mehr Quelloperanden gültig ist; 2) VEX.vvvv kodiert den Zielregisteroperanden, der in 1s-Komplement-Form für bestimmte Vektorverlagerungen spezifiziert ist; oder 3) VEX.vvvv kodiert keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Falls ein VEX.L- 968 Größenfeld (VEX-Byte 2, Bit [2]-L) = 0 ist, wird ein 128-Bit-Vektor angezeigt, falls VEX.L = 1 ist, wird ein 256-Bit-Vektor angezeigt. Ein Präfix-Kodierungsfeld 925 (VEX-Byte 2, Bits [1:0]-pp) liefert weitere Bit für das Basisoperationsfeld.
  • Das Real-Opcode-Feld 930 (Byte 3) ist auch als Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • Das MOD R/M-Feld 940 (Byte 4) weist das MOD-Feld 942 (Bits [7-6]), Reg-Feld 944 (Bits [5-3]) und R/M-Feld 946 (Bits [2-0]) auf. Die Rolle des Reg-Felds 944 kann Folgendes umfassen: Kodieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden (rrr oder Rrrr), oder es wird als Opcode-Erweiterung behandelt und nicht verwendet, um einen Befehlsoperanden zu kodieren. Die Rolle des R/M-Felds 946 kann Folgendes umfassen: Kodieren des Befehlsoperanden, der eine Speicheradresse referenziert, oder Kodieren des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Skala, Index, Basis (SIB) – Der Inhalt des Skalenfelds 950 (Byte 5) umfasst SS952 (Bits [7-6]), das für eine Speicheradressenerzeugung verwendet wird. Auf den Inhalt von SIB.xxx 954 (Bits [5-3]) und SIB.bbb 956 (Bits [2-0]) ist vorstehend mit Bezug auf die Registerindizes Xxxx und Bbbb Bezug genommen worden.
  • Das Verschiebungsfeld 962 und das Direktwertfeld (IMME) 972 enthalten Adressendaten. Generisches vektorfreundliches Befehlsformat Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (es gibt z. B. bestimmte Felder, die für Vektoroperationen spezifisch sind). Obwohl Ausführungsformen beschrieben werden, bei denen sowohl Vektor- als auch Skalaroperationen durch das vektorfreundliche Befehlsformat unterstützt werden, werden bei alternativen Ausführungsformen nur Vektoroperationen mit dem vektorfreundlichen Befehlsformat verwendet.
  • 10A–B sind Blockschaltbilder mit Darstellung eines generischen vektorfreundlichen Befehlsformats und von Befehlsvorlagen dafür gemäß Ausführungsformen der Erfindung. 10A ist ein Blockschaltbild mit Darstellung eines generischen vektorfreundlichen Befehlsformats und von Klasse-A-Befehlsvorlagen dafür gemäß Ausführungsformen der Erfindung; während 10B ein Blockschaltbild mit Darstellung des generischen vektorfreundlichen Befehlsformats und von Klasse-B-Befehlsvorlagen dafür gemäß Ausführungsformen der Erfindung ist. Insbesondere ein generisches vektorfreundliches Befehlsformat 1000, für das Klasse-A- und Klasse-B-Befehlsvorlagen definiert sind, die beide Kein-Speicherzugriff- 1005 Befehlsvorlagen und Speicherzugriff- 1020 Befehlsvorlagen aufweisen. Der Ausdruck generisch im Kontext des vektorfreundlichen Befehlsformats bezieht sich darauf, dass das Befehlsformat an keinen spezifischen Befehlssatz gebunden ist.
  • Obwohl Ausführungsformen der Erfindung beschrieben werden, bei denen das vektorfreundliche Befehlsformat Folgendes unterstützt: eine 64-Byte-Vektoroperandenlänge (oder -größe) mit 32-Bit-(4-Byte-) oder 64-Bit-(8-Byte-)Datenelementbreiten (oder -größen) (und somit besteht ein 64-Byte-Vektor entweder aus 16 Doppelwortgrößen-Elementen oder alternativ 8 Quadwordgrößen-Elementen); eine 64-Byte-Vektoroperandenlänge (oder -größe) mit 16-Bit-(2-Byte-) oder 8-Bit-(1-Byte-)Datenelementbreiten (oder -größen); eine 32-Byte-Vektoroperandenlänge (oder -größe) mit 32-Bit-(4-Byte-), 64-Bit-(8-Byte-), 16-Bit-(2-Byte-) oder 8-Bit (1-Byte-)Datenelementbreiten (oder -größen); und eine 16-Byte-Vektoroperandenlänge (oder -größe) mit 32-Bit-(4-Byte-), 64-Bit-(8-Byte-), 16-Bit-(2-Byte-) oder 8-Bit (1-Byte-)Datenelementbreiten (oder -größen); 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. 128-Bit-(16-Byte-)Datenelementbreiten) unterstützen.
  • Die Klasse-A-Befehlsvorlagen in 10A weisen auf: 1) innerhalb der Kein-Speicherzugriff-1005 Befehlsvorlagen sind eine Kein-Speicherzugriff-Vollrundungs-Steuerungsoperations- 1010 Befehlsvorlage und eine Kein-Speicherzugriff-Datentransformationsoperations- 1015 Befehlsvorlage gezeigt; und 2) innerhalb der Speicherzugriff- 1020 Befehlsvorlagen sind eine Speicherzugriff-Zeitlich- 1025 Befehlsvorlage und eine Speicherzugriff-Nichtzeitlich- 1030 Befehlsvorlage gezeigt. Die Klasse-B-Befehlsvorlagen in 10B weisen auf: 1) innerhalb der Kein-Speicherzugriff- 1005 Befehlsvorlagen sind eine Kein-Speicherzugriff-Schreibmaskensteuerungs-Teilrundungs-Steuerungsoperations- 1012 Befehlsvorlage und eine Kein-Speicherzugriff-Schreibmaskensteuerungs-Vsize-Operations- 1017 Befehlsvorlage gezeigt; und 2) innerhalb der Speicherzugriff- 1020 Befehlsvorlagen ist eine Speicherzugriff-Schreibmaskensteuerungs- 1027 Befehlsvorlage gezeigt.
  • Das generische vektorfreundliche Befehlsformat 1000 weist die folgenden nachstehend in der in 10A10B dargestellten Reihenfolge aufgeführten Felder auf.
  • Formatfeld 1040 – ein spezifischer Wert (ein Befehlsformat-Identifiziererwert) in diesem Feld identifiziert auf einzigartige Weise das vektorfreundliche Befehlsformat und somit das Auftreten von Befehlen im vektorfreundlichen Befehlsformat in Befehlsströmen. Somit ist dieses Feld optional in dem Sinn, dass es nicht für einen Befehlssatz benötigt wird, der nur das generische vektorfreundliche Befehlsformat aufweist.
  • Basisoperationsfeld 1042 – sein Inhalt unterscheidet zwischen unterschiedlichen Basisoperationen.
  • Registerindexfeld 1044 – sein Inhalt spezifiziert direkt oder durch Adressenerzeugung die Stellen der Quell- und Zieloperanden unabhängig davon, ob sie sich in Registern oder im Speicher befinden. Diese weisen eine ausreichende Anzahl von Bits zum Auswählen von N Registern aus einer PxQ- (z. B. 32x512, 16x128, 32x1024, 64x1024) Registerdatei auf. Obwohl bei einer Ausführungsform N bis zu drei Quellen und ein Zielregister umfassen kann, können alternative Ausführungsformen mehr oder weniger Quellen und Zielregister unterstützen (können z. B. bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als Ziel dient, können bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als Ziel dient, können bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifiziererfeld 1046 – sein Inhalt unterscheidet zwischen dem Auftreten von Befehlen im generischen vektorfreundlichen Befehlsformat, die einen Speicherzugriff spezifizieren, und denjenigen, bei denen dies nicht der Fall ist; das heißt zwischen Kein-Speicherzugriff- 1005 Befehlsvorlagen und Speicherzugriff- 1020 Befehlsvorlagen. Bei Speicherzugriffsoperationen wird aus der Speicherhierarchie gelesen und/oder in diese geschrieben (wobei in einigen Fällen die Quell- und/oder Zieladressen unter Verwendung von Werten in Registern spezifiziert werden), während dies bei Kein-Speicherzugriff-Operationen nicht der Fall ist (z. B. die Quelle und Ziele Register sind). Obwohl bei einer Ausführungsform dieses Feld ferner zwischen drei unterschiedlichen Arten zum Durchführen von Speicheradressenberechnungen auswählt, können alternative Ausführungsformen mehr, weniger oder andere Arten zum Durchführen von Speicheradressenberechnungen unterstützen.
  • Augmentationsoperationsfeld 1050 – sein Inhalt unterscheidet, welche einer Vielzahl von unterschiedlichen Operationen zusätzlich zu der Basisoperation durchgeführt wird. Dieses Feld ist kontextspezifisch. Bei einer Ausführungsform der Erfindung ist dieses Feld in ein Klassefeld 1068, ein Alpha-Feld 1052 und ein Beta-Feld 1054 unterteilt. Das Augmentationsoperationsfeld 1050 ermöglicht, dass gemeinsame Gruppen von Operationen in einem einzelnen Befehl statt in 2, 3 oder 4 Befehlen durchgeführt werden.
  • Skalenfeld 1060 – sein Inhalt ermöglicht die Skalierung des Inhalts des Indexfelds für die Speicheradressenerzeugung (z. B. für eine Adressenerzeugung, bei der 2Skala·Index + Basis verwendet wird).
  • Verschiebungsfeld 1062A – sein Inhalt wird als Teil der Speicheradressenerzeugung verwendet (z. B. für eine Adressenerzeugung, bei der 2Skala·Index + Basis + Verschiebung verwendet wird).
  • Verschiebungsfaktorfeld 1062B (es sei darauf hingewiesen, dass die Juxtaposition des Verschiebungsfelds 1062A direkt über dem Verschiebungsfaktorfeld 1062B anzeigt, dass das eine oder das andere verwendet wird) – sein Inhalt wird als Teil der Adressenerzeugung verwendet; es spezifiziert einen Verschiebungsfaktor, der von der Größe eines Speicherzugriffs (N) skaliert wird – wobei N die Anzahl von Bytes beim Speicherzugriff ist (z. B. für eine Adressenerzeugung, bei der 2Skala·Index + Basis + skalierte Verschiebung verwendet wird). Redundante niederwertige Bits werden ignoriert; und somit wird der Inhalt des Verschiebungsfaktorfelds mit der Gesamtgröße der Speicheroperanden (N) multipliziert, um die finale Verschiebung zu erzeugen, die beim Berechnen einer effektiven Adresse verwendet wird. Der Wert von N wird von der Prozessor-Hardware bei einer Laufzeit bestimmt, die auf dem Voll-Opcode-Feld 1074 (das später beschrieben wird) und dem Datenmanipulationsfeld 1054C basiert. Das Verschiebungsfeld 1062A und das Verschiebungsfaktorfeld 1062B sind optional in dem Sinn, dass sie nicht für die Kein-Speicherzugriff- 1005 Befehlsvorlagen verwendet werden und/oder bei anderen Ausführungsformen nur eines oder keines der beiden implementiert werden kann.
  • Datenelementbreitenfeld 1064 – sein Inhalt unterscheidet, welche einer Anzahl von Datenelementbreiten verwendet wird (bei einigen Ausführungsformen für sämtliche Befehle; bei anderen Ausführungsformen nur für einige der Befehle). Dieses Feld ist optional in dem Sinn, dass es nicht benötigt wird, wenn nur eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unter Verwendung einiger Aspekte der Opcodes unterstützt werden.
  • Schreibmaskenfeld 1070 – sein Inhalt steuert auf einer pro-Datenelementposition-Basis, ob diese Datenelementposition in dem Zielvektoroperanden das Ergebnis der Basisoperation und Augmentationsoperation wiedergibt. Klasse-A-Befehlsvorlagen unterstützen die Zusammenfügungs-Schreibmaskierung, während Klasse-B-Befehlsvorlagen sowohl die Zusammenfügungs- als auch die Nullungs-Schreibmaskierung unterstützen. Bei der Zusammenfügung ermöglichen es Vektormasken, dass jeder Satz von Elementen im Ziel vor Aktualisierungen während der Ausführung jeder Operation (von der Basisoperation und der Augmentationsoperation spezifiziert) geschützt werden; bei einer anderen Ausführungsform die Beibehaltung des alten Werts jedes Elements des Ziels, wobei das entsprechende Maskenbit eine 0 aufweist. Im Gegensatz dazu ermöglichen es Nullungs-Vektormasken jedem Satz von Elementen im Ziel, während der Ausführung jeder Operation (von der Basisoperation und der Augmentationsoperation spezifiziert) genullt zu werden; bei einer Ausführungsform ist ein Element des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen 0-Wert aufweist. Ein Teilsatz dieser Funktionalität ist die Fähigkeit zum Steuern der Vektorläng der Operation, die gerade durchgeführt wird (das heißt, dass diese Spanne von Elementen vom ersten bis zum letzten modifiziert wird); es ist jedoch nicht erforderlich, dass die Elemente, die modifiziert werden, konsekutiv sind. Somit ermöglicht das Schreibmaskenfeld 1070 Teil-Vektoroperationen, einschließlich Ladungen, Speicherungen, arithmetisch, logisch etc. Obwohl Ausführungsformen der Erfindung beschrieben werden, bei denen der Inhalt des Schreibmaskenfelds 1070 eines einer Anzahl von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält (und somit der Inhalt des Schreibmaskenfelds 1070 indirekt diese durchzuführende Maskierung identifiziert), ermöglichen es alternative Ausführungsformen stattdessen oder zusätzlich, dass der Inhalt des Schreibmaskenfelds 1070 direkt die durchzuführende Maskierung spezifiziert.
  • Direktwertfeld 1072 – sein Inhalt ermöglicht die Spezifizierung eines Direktwerts. Dieses Feld ist optional in dem Sinn, dass es bei einer Implementierung des generischen vektorfreundlichen Formats nicht vorhanden ist, das einen Direktwert nicht unterstützt und bei Befehlen nicht vorhanden ist, die keinen Direktwert verwenden.
  • Klassefeld 1068 – sein Inhalt unterscheidet zwischen unterschiedlichen Befehlsklassen. Gemäß 10A–B wählt der Inhalt dieses Felds zwischen Klasse-A- und Klasse-B-Befehlen. In 10A–B werden Quadrate mit abgerundeten Ecken verwendet, um anzuzeigen, dass ein spezifischer Wert in einem Feld vorhanden ist (z. B. Klasse A 1068A und Klasse B 1068B jeweils für das Klassefeld 1068 in 10A–B).
  • Befehlsvorlagen der Klasse A
  • Im Fall der Kein-Speicherzugriff- 1005 Befehlsvorlagen der Klasse A wird das Alpha-Feld 1052 als RS-Feld 1052A interpretiert, dessen Inhalt unterscheidet, welcher der unterschiedlichen Augmentationsoperationstypen durchzuführen ist (z. B. werden Rundungen 1052A.1 und Datentransformation 1052A.2 jeweils für die Kein-Speicherzugriff-Rundungsoperations- 1010 und die Kein-Speicherzugriff-Datentransformationsoperations- 1015 Befehlsvorlage spezifiziert), während das Beta-Feld 1054 unterscheidet, welche der Operationen des spezifizierten Typs durchzuführen ist. Bei den Kein-Speicherzugriff- 1005 Befehlsvorlagen sind das Skalenfeld 1060, das Verschiebungsfeld 1062A und das Verschiebungsskalenfeld 1062B nicht vorhanden.
  • Kein-Speicherzugriff-Befehlsvorlagen – Vollrundungs-Steuerungsoperation
  • Bei der Kein-Speicherzugriff-Vollrundungs-Steuerungsoperations- 1010 Befehlsvorlage wird das Beta-Feld 1054 als Rundungssteuerungsfeld 1054A interpretiert, dessen Inhalte) ein statisches Runden vorsieht (vorsehen). Obwohl bei der beschriebenen Ausführungsform der Erfindung das Rundungssteuerungsfeld 1054A ein Unterdrücke-sämtliche-Gleitkommaausnahmen-(SAE-)Feld 1056 und ein Rundungsoperations-Steuerungsfeld 1058 aufweist, können bei alternativen Ausführungsformen diese beiden Konzepte unterstützt werden und in dasselbe Feld kodiert werden oder nur das eine oder das andere dieser Konzepte/Felder vorgesehen sein (z. B. nur das Rundungsoperations-Steuerungsfeld 1058 vorgesehen sein).
  • SAE-Feld 1056 – sein Inhalt unterscheidet, ob das Melden des Ausnahmeereignisses deaktiviert wird oder nicht; wenn der Inhalt des SAE-Felds 1056 anzeigt, dass eine Unterdrückung aktiviert ist, meldet ein vorgegebener Befehl keine Art von Gleitkomma-Ausnahme-Flag und stellt keinen Gleitkomma-Ausnahme-Handler bereit.
  • Rundungsoperations-Steuerungsfeld 1058 – sein Inhalt unterscheidet, welche einer Gruppe von Rundungsoperationen durchzuführen ist (z. B. Aufrunden, Abrunden, Runden in Richtung null und Runden auf den nächstliegenden Wert). Somit ermöglicht das Rundungsoperations-Steuerungsfeld 1058 das Verändern des Rundungsmodus auf einer pro-Befehl-Basis. Bei einer Ausführungsform der Erfindung, bei der ein Prozessor ein Steuerregister zum Spezifizieren der Rundungsmodi aufweist, setzt der Inhalt des Rundungsoperations-Steuerungsfelds 1050 diesen Registerwert außer Kraft.
  • Kein-Speicherzugriff-Befehlsvorlagen – Datentransformationsoperation
  • Bei der Kein-Speicherzugriff-Datentransformationsoperations- 1015 Befehlsvorlage wird das Beta-Feld 1054 als Datentransformationsfeld 1054B interpretiert, dessen Inhalt unterscheidet, welche einer Anzahl von Datentransformationen durchzuführen ist (z. B. keine Datentransformation, Swizzle, Senden).
  • Im Fall einer Speicherzugriff- 1020 Befehlsvorlage der Klasse A wird das Alpha-Feld 1052 als Räumungshinweisfeld 1052B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise zu verwenden ist (in 10A werden jeweils zeitlich 1052B.1 und nichtzeitlich 1052B.2 für die Speicherzugriff-Zeitlich- 1025 Befehlsvorlage und die Speicherzugriff-Nichtzeitlich- 1030 Befehlsvorlage spezifiziert), während das Beta-Feld 1054 als Datenmanipulationsfeld 1054C interpretiert wird, dessen Inhalt unterscheidet, welche einer Anzahl von Datenmanipulationsoperationen (auch als Primitive bekannt) durchzuführen ist (z. B. keine Manipulation, Senden; Aufwärtskonvertierung einer Quelle; und Abwärtskonvertierung eines Ziels). Die Speicherzugriff- 1020 Befehlsvorlagen weisen das Skalenfeld 1060 und wahlweise das Verschiebungsfeld 1062A oder das Verschiebungsskalenfeld 1062B auf.
  • Vektorspeicherbefehle führen mit einer Konvertierungsunterstützung Vektorladungen aus einem und Vektorspeicherungen in einen Speicher durch. Wie bei regulären Vektorbefehlen übertragen Vektorspeicherbefehle Daten datenelementweise aus einem/in einen Speicher, wobei die Elemente, die tatsächlich übertragen werden, vom Inhalt der Vektormaske diktiert werden, die als Schreibmaske ausgewählt ist.
  • Speicherzugriff-Befehlsvorlagen – Zeitlich
  • Zeitliche Daten sind Daten, die wahrscheinlich früh genug wiederverwendet werden, um Nutzen aus dem Caching zu ziehen. Dies ist jedoch ein Hinweis, und andere Prozessoren können diesen auf andere Arten implementieren, einschließlich des Ignorierens des Hinweises insgesamt.
  • Speicherzugriff-Befehlsvorlagen – Nichtzeitlich
  • Nichtzeitliche Daten sind Daten, bei denen es unwahrscheinlich ist, dass sie früh genug wiederverwendet werden, um Nutzen aus dem Caching des 1. Levels zu ziehen und denen Priorität beim Räumen eingeräumt werden sollte. Dies ist jedoch ein Hinweis, und andere Prozessoren können diesen auf andere Arten implementieren, einschließlich des Ignorierens des Hinweises insgesamt.
  • Befehlsvorlagen der Klasse B
  • Im Fall der Befehlsvorlagen der Klasse B wird das Alpha-Feld 1052 als Schreibmaskensteuerungs-(Z-)Feld 1052C interpretiert, dessen Inhalt unterscheidet, ob die von dem Schreibmaskenfeld 1070 gesteuerte Schreibmaskierung eine Zusammenfügung oder eine Nullung sein soll.
  • Im Fall der Kein-Speicherzugriff- 1005 Befehlsvorlagen der Klasse B wird ein Teil des Beta-Felds 1054 als RL-Feld 1057A interpretiert, dessen Inhalt unterscheidet, welcher der unterschiedlichen Augmentationsoperationstypen durchzuführen ist (z. B. sind Rundung 1057A.1 und Vektorlänge (VSIZE) 1057A.2 jeweils für die Kein-Speicherzugriff-Schreibmaskensteuerungs-Teilrundungs-Steuerungsoperations- 1012 Befehlsvorlage und die Kein-Speicherzugriff-Schreibmaskensteuerungs-VSIZE-Operations- 1017 Befehlsvorlage spezifiziert), während der Rest des Beta-Felds 1054 unterscheidet, welche der Operationen des spezifizierten Typs durchzuführen ist. Bei den Kein-Speicherzugriff- 1005 Befehlsvorlagen sind das Skalenfeld 1060, das Verschiebungsfeld 1062A und das Verschiebungsskalenfeld 1062B nicht vorhanden.
  • Bei der Kein-Speicherzugriff-Schreibmaskensteuerungs-Teilrundungs-Steuerungsoperations-1010 Befehlsvorlage wird der Rest des Beta-Felds 1054 als Rundungsoperationsfeld 1059A interpretiert und wird die Ausnahmeereignismeldung deaktiviert (meldet ein vorgegebener Befehl keine Art von Gleitkomma-Ausnahme-Flag und stellt keinen Gleitkomma-Ausnahme-Handler bereit).
  • Rundungsoperations-Steuerungsfeld 1059A – genau wie beim Rundungsoperations-Steuerungsfeld 1058 unterscheidet sein Inhalt, welche einer Gruppe von Rundungsoperationen durchzuführen ist (z. B. Aufrunden, Abrunden, Runden in Richtung null und Runden auf den nächstliegenden Wert). Somit ermöglicht das Rundungsoperations-Steuerungsfeld 1059A das Verändern des Rundungsmodus auf einer pro-Befehl-Basis. Bei einer Ausführungsform der Erfindung, bei der ein Prozessor ein Steuerregister zum Spezifizieren der Rundungsmodi aufweist, setzt der Inhalt des Rundungsoperations-Steuerungsfelds 1050 diesen Registerwert außer Kraft.
  • Bei der Kein-Speicherzugriff-Schreibmaskensteuerungs-VSIZE-Operations- 1017 Befehlsvorlage wird der Rest des Betafelds 1054 als Vektorlängenfeld 1059B interpretiert, dessen Inhalt unterscheidet, an welcher einer Anzahl von Datenvektorlängen eine Durchführung erfolgt (z. B. 128, 256 oder 512 Bytes).
  • Im Fall einer Speicherzugriff- 1020 Befehlsvorlage der Klasse B wird ein Teil des Beta-Felds 1054 als Sendefeld 1057B interpretiert, dessen Inhalt unterscheidet, ob die Sende-Datenmanipulationsoperation durchzuführen ist oder nicht, während der Rest des Beta-Felds 1054 als Vektorlängenfeld 1059B interpretiert wird. Die Speicherzugriff- 1020 Befehlsvorlagen weisen das Skalenfeld 1060 und wahlweise das Verschiebungsfeld 1062A oder das Verschiebungsskalenfeld 1062B auf.
  • Bezüglich des generischen vektorfreundlichen Befehlsformats 1000 ist ein Voll-Opcode-Feld 1074 gezeigt, das das Formatfeld 1040, das Basisoperationsfeld 1042 und das Datenelementbreitenfeld 1064 aufweist. Obwohl eine Ausführungsform gezeigt ist, bei der das Voll-Opcode-Feld 1074 alle diese Felder aufweist, weist das Voll-Opcode-Feld 1074 weniger als alle diese Felder auf bei Ausführungsformen, bei der nicht alle unterstützt werden. Das Voll-Opcode-Feld 1074 stellt den Operationscode (Opcode) bereit.
  • Das Augmentationsoperationsfeld 1050, das Datenelementbreitenfeld 1064 und das Schreibmaskenfeld 1070 ermöglichen es, dass diese Merkmale auf einer pro-Befehl-Basis im generischen vektorfreundlichen Befehlsformat spezifiziert werden.
  • Die Kombination aus Schreibmaskenfeld und Datenelementbreitenfeld schafft dahingehend typisierte Befehle, dass ermöglicht wird, dass die Maske auf der Basis von unterschiedlichen Datenelementbreiten aufgebracht wird.
  • Die verschiedenen Befehlsvorlagen, die innerhalb der Klasse A und Klasse B zu finden sind, sind in verschiedenen Situationen nützlich. Bei einigen Ausführungsformen der Erfindung 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 Hochleistungs-Universal-Out-of-Order-Kern, der für eine Universalberechnung vorgesehen ist, nur Klasse B unterstützen, kann ein Kern, der primär für eine Grafik- und/oder wissenschaftliche (Durchsatz-)Berechnung vorgesehen ist, nur Klasse A unterstützen und kann ein Kern, der für beides vorgesehen ist, beides unterstützen (selbstverständlich fällt ein Kern, der eine Mischung aus Vorlagen und Befehlen aus beiden Klassen, jedoch nicht sämtliche Vorlagen und Befehle aus beiden Klassen aufweist, in den Schutzbereich der Erfindung). Ferner kann ein einzelner Prozessor mehrere Kerne aufweisen, die alle die gleiche Klasse unterstützen, oder bei dem unterschiedliche Kerne unterschiedliche Klassen unterstützen. Zum Beispiel kann bei einem Prozessor mit separaten Grafik- und Universalkernen einer der Grafikkerne, der primär für eine Grafik- und/oder wissenschaftliche Berechnung vorgesehen ist, nur Klasse A unterstützen, während einer oder mehrere der Universalkerne Hochleistungs-Universalkerne mit einer Out-of-Order-Ausführung und -Registerumbenennung sein können, die für eine Universalberechnung vorgesehen sind und nur Klasse B unterstützen. Ein anderer Prozessor, der keinen separaten Grafikkern aufweist, kann einen oder mehrere Universal-In-Order- oder -Out-of-Order-Kerne aufweisen, die sowohl Klasse A als auch Klasse B unterstützen. Selbstverständlich können bei unterschiedlichen Ausführungsformen der Erfindung Merkmale aus einer Klasse auch in der anderen Klasse implementiert sein. Programme, die in einer Hochsprache geschrieben sind, würden in eine Vielzahl von unterschiedlichen ausführbaren Formen gebracht (z. B. Just-in-Time-kompiliert oder statisch kompiliert), die umfassen: 1) eine Form nur mit Befehlen der Klasse(n), die von dem Zielprozessor bei der Ausführung unterstützt wird (werden); oder 2) eine Form mit alternativen Routinen, die unter Verwendung unterschiedlicher Kombinationen aus den Befehlen für sämtliche Klassen geschrieben werden, und mit einem Steuerflusscode, der die auszuführenden Routinen auf der Basis der Befehle auswählt, die von dem Prozessor unterstützt werden, der den Code aktuell ausführt.
  • Beispielhaftes spezifisches vektorfreundliches Befehlsformat
  • 11 ist ein Blockschaltbild mit Darstellung eines beispielhaften spezifischen vektorfreundlichen Befehlsformats gemäß Ausführungsformen der Erfindung. 11 zeigt ein spezifisches vektorfreundliches Befehlsformat 1100, das spezifisch in dem Sinn ist, dass es die Stelle, Größe, Interpretation und Reihenfolge der Felder sowie Werte für einige dieser Felder spezifiziert. Das spezifische vektorfreundliche Befehlsformat 1100 kann zum Erweitern des x86-Befehlssatzes verwendet werden, und somit sind einige der Felder im Wesentlichen die gleichen oder die gleichen wie diejenigen, die in dem bestehenden x86-Befehlssatz und dessen Erweiterung (z. B. AVX) verwendet werden. Dieses Format bleibt mit dem Präfixkodierungsfeld, Real-Opcode-Byte-Feld, MOD R/M-Feld, SIB-Feld, Verschiebungsfeld und Direktwertfeldern des bestehenden x86-Befehlssatzes mit Erweiterungen konsistent. Die Felder von 10, in die die Felder aus 11 abgebildet werden, sind dargestellt.
  • Es versteht sich, dass zu Veranschaulichungszwecken Ausführungsformen der Erfindung zwar mit Bezug auf das spezifische vektorfreundliche Befehlsformat 1100 im Kontext des generischen vektorfreundlichen Befehlsformats 1000 beschrieben werden, die Erfindung jedoch nicht auf das spezifische vektorfreundliche Befehlsformat 1100 beschränkt ist, es sei denn, dies wird beansprucht. Zum Beispiel zieht das generische vektorfreundliche Befehlsformat 1000 eine Vielzahl von möglichen Größen für die verschiedenen Felder in Betracht, während das spezifische vektorfreundliche Befehlsformat 1100 mit Feldern mit spezifischen Größen gezeigt ist. Bei einem spezifischen Beispiel ist das Datenelementbreitenfeld 1064 zwar als Ein-Bit-Feld in dem spezifischen vektorfreundlichen Befehlsformat 1100 dargestellt, die Erfindung ist jedoch nicht darauf beschränkt (das heißt, dass das generische vektorfreundliche Befehlsformat 1000 andere Größen des Datenelementbreitenfelds 1064 in Betracht zieht).
  • Das generische vektorfreundliche Befehlsformat 1000 weist die folgenden Felder auf, die nachstehend in der in 11A dargestellten Reihenfolge aufgeführt sind.
  • EVEX-Präfix (Bytes 0-3) 1102 – ist in einer Vier-Bit-Form kodiert. Formatfeld 1040 (EVEX-Byte 0, Bits [7:0]) – das erste Byte (EVEX-Byte 0) ist das Formatfeld 1040, und es enthält 0x62 (der einzigartige Wert, der bei einer Ausführungsform der Erfindung zum Unterscheiden des vektorfreundlichen Befehlsformats verwendet wird).
  • Das zweite bis vierte Byte (EVEX-Bytes 1-3) weisen eine Anzahl von Bitfeldern auf, die eine spezifische Fähigkeit bieten.
  • REX-Feld 1105 (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 1057 BEX-Byte 1, Bit[5] – B). Das EVEX.R-, das EVEX.X- und das EVEX.B-Bitfeld bieten die gleiche Funktionalität wie die entsprechenden VEX-Bitfelder und werden unter Verwendung einer 1s-Komplement-Form kodiert, d. h. ZMM0 wird als 1111B kodiert, ZMM15 wird als 0000B kodiert. Weitere Felder der Befehle kodieren die unteren drei Bits der Registerindizes, wie auf dem Sachgebiet bekannt ist (rrr, xxx, und bbb), so dass Rrrr, Xxxx, und Bbbb durch Addieren von EVEX.R, EVEX.X und EVEX.B gebildet werden können.
  • REX'-Feld 1010 – dies ist der erste Teil des REX'-Felds 1010 und ist das EVEX.R'-Bitfeld (EVEX-Byte 1, Bit [4] – R'), das zum Kodieren von entweder den oberen 16 oder den unteren 16 des erweiterten 32-Registersatzes verwendet wird. Bei einer Ausführungsform der Erfindung wird dieses Bit zusammen mit anderen, wie nachstehend angezeigt ist, in einem bitinvertierten Format gespeichert zwecks Unterscheidung (in dem bekannten x86-32-Bit-Modus) von dem BOUND-Befehl, dessen Real-Opcode-Byte 62 ist, jedoch nicht in dem (nachstehend beschriebenen) MOD R/M-Feld den Wert 11 in dem MOD-Feld übernimmt; bei alternativen Ausführungsformen der Erfindung werden dieses und die anderen nachstehend angezeigten Bits nicht im invertierten Format gespeichert. Ein Wert 1 wird zum Kodieren der unteren 16 Register verwendet. Mit anderen Worten wird R'Rrrr durch Kombinieren von EVEX.R', EVEX.R und der anderen RRR aus anderen Feldern gebildet.
  • Opcode-Abbildungsfeld 1115 (EVEX-Byte 1, Bits [3:0] – mmmm) – sein Inhalt kodiert ein impliziertes führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelementbreitenfeld 1064 (EVEX-Byte 2, Bit [7] – W) – wird durch die Bezeichnung EVEX.W dargestellt. EVEX.W wird zum Definieren der Granularität des Datentyps (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente) verwendet.
  • EVEX.vvvv 1120 (EVEX-Byte 2, Bits [6:3]-vvvv) – die Rolle von EVEX.vvvv kann Folgendes umfassen: 1) EVEX.vvvv kodiert 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 kodiert den Zielregisteroperanden, der in 1s-Komplement-Form für bestimmte Vektorverlagerungen spezifiziert ist; oder 3) EVEX.vvvv kodiert keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Somit kodiert das EVEX.vvvv-Feld 1120 die 4 niederwertigen Bits des ersten Quellregisterspezifizierers, der in invertierter (1s-Komplement-)Form gespeichert ist. In Abhängigkeit von dem Befehl wird ein zusätzliches anderes EVEX-Bitfeld zum Erweitern der Spezifizierergröße auf 32 Register verwendet.
  • EVEX.U- 1068 Klassefeld (EVEX-Byte 2, Bit [2]-U) - Falls EVEX.0 = 0 ist, zeigt dies Klasse A oder EVEX.U0 an; falls EVEX.U = 1 ist, zeigt dies Klasse B oder EVEX.U1 an.
  • Präfixkodierungsfeld 1125 (EVEX-Byte 2, Bits [1:0]-pp) – liefert weitere Bits für das Basisoperationsfeld. Zusätzlich zum Bieten von Unterstützung für die älteren SSE-Befehle im EVEX-Präfixformat bietet dies ferner den Vorteil des Kompaktierens des SIMD-Präfixes (statt ein Byte zum Ausdrücken des SIMD-Präfixes erforderlich zu machen, benötigt das EVEX-Präfix nur 2 Bits). Bei einer Ausführungsform werden zum Unterstützen von älteren SSE-Befehlen, die ein SIMD-Präfix (66H, F2H, F3H) sowohl im älteren Format als auch im EVEX-Präfix-Format verwenden, diese älteren SIMD-Präfixe in das SIMD-Präfix-Kodierungsfeld kodiert; und expandieren während der Laufzeit in das ältere SIMD-Präfix vor dem Liefern zu dem PLA des Dekodierers (so dass das PLA sowohl das ältere als auch das EVEX-Format dieser älteren Befehle ohne Modifikation ausführen kann). Obwohl neuere Befehle den Inhalt des EVEX-Präfix-Kodierungsfelds direkt als Opcode-Erweiterung verwenden können, expandieren bestimmte Ausführungsformen auf im Wesentlichen gleiche Weise aus Gründen der Beständigkeit, ermöglichen jedoch, dass diese älteren SIMD-Präfixe unterschiedliche Bedeutungen spezifizieren. Bei einer alternativen Ausführungsform kann das PLA neu ausgelegt werden, um die 2-Bit-SIMD-Präfixkodierungen zu unterstützen und somit keine Expandierung zu benötigen.
  • Alpha-Feld 1052 (EVEX-Byte 3, Bit [7] – EH; auch bekannt als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.Schreibmaskensteuerung und EVEX.N; auch dargestellt durch a) – wie vorstehend beschrieben ist dieses Feld kontextspezifisch.
  • Beta-Feld 1054 (EVEX-Byte 3, Bits [6:4]-SSS, auch bekannt als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB; auch dargestellt durch βββ) – wie vorstehend beschrieben worden ist, ist dieses Feld kontextspezifisch.
  • REX'-Feld 1010 – dies ist der Rest des REX'-Felds und ist das EVEX.V'-Bitfeld (EVEX-Byte 3, Bit [3] – V'), das zum Kodieren entweder der oberen 16 oder der unteren 16 des erweiterten 32-Registersatzes verwendet werden kann. Dieses Bit wird im bitinvertierten Format gespeichert. Ein Wert 1 wird zum Kodieren der unteren 16 Register verwendet. Mit anderen Worten wird V'VVVV durch Kombinieren von EVEX.V', EVEX.vvvv gebildet.
  • Schreibmaskenfeld 1070 (EVEX-Byte 3, Bits [2:0]-kkk) – sein Inhalt spezifiziert den Index eines Registers in den Schreibmaskenregistern, wie vorstehend beschrieben worden ist. Bei einer Ausführungsform der Erfindung weist der spezifische Wert EVEX.kkk=000 ein besonderes Verhalten auf, das impliziert, dass keine Schreibmaske für den besonderen Befehl verwendet wird (diese kann in einer Vielzahl von Arten implementiert sein, einschließlich der Verwendung einer Schreibmaske, die mit sämtlichen Einsen fest verschaltet ist, oder einer Hardware, die die Maskierungs-Hardware umgeht).
  • Real-OpcodeFeld 1130 (Byte 4) ist auch als Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • MOD R/M Field 1140 (Byte 5) weist das MOD-Feld 1142, Reg-Feld 1144 und R/M-Feld 1146 auf. Wie vorstehend beschrieben worden ist, unterscheidet der Inhalt des MOD-Felds 1142 zwischen Speicherzugriff- und Kein-Speicherzugriff-Operationen. Die Rolle des Reg-Felds 1144 kann zu zwei Situationen zusammengefasst werden: Kodieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden, oder es wird als Opcode-Erweiterung behandelt und nicht zum Kodieren eines Befehlsoperanden verwendet. Die Rolle des RM-Felds 1146 kann Folgendes umfassen: Kodieren des Befehlsoperanden, der eine Speicheradresse referenziert, oder Kodieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Skala, Index, Basis (SIB-)Byte (Byte 6) – wie vorstehend beschrieben worden ist, wird der Inhalt des Skalenfelds 1050 für die Speicheradressenerzeugung verwendet. SIB.xxx 1154 und SIB.bbb 1156 – der Inhalt dieser Felder ist vorstehend hinsichtlich der Registerindizes Xxxx und Bbbb referenziert worden.
  • Verschiebungsfeld 1062A (Bytes 7-10) – wenn das MOD-Feld 1142 10 enthält, sind Bytes 7-10 das Verschiebungsfeld 1062A, und es funktioniert auf die gleiche Weise wie die ältere 32-Bit-Verschiebung (disp32) und funktioniert bei einer Bytegranularität.
  • Verschiebungsfaktorfeld 1062B (Byte 7) – wenn das MOD-Feld 1142 01 enthält, ist Byte 7 das Verschiebungsfaktorfeld 1062B. Die Stelle dieses Felds ist die gleiche wie diejenige der älteren x86-Befehlssatz-8-Bit-Verschiebung (disp8), die bei einer Bytegranularität arbeitet. Da disp8 vorzeichenerweitert ist, kann es nur zwischen –128 und 127 Byte-Offsets adressieren; in Bezug auf 64-Byte-Cache-Lines verwendet disp8 8 Bits, die nur auf vier wirklich sinnvolle Werte –128, –64, 0 und 64 gesetzt werden können; da häufig ein größerer Bereich erforderlich ist, wird disp32 verwendet; disp32 benötigt jedoch 4 Bytes. Im Gegensatz zu disp8 und disp32 ist das Verschiebungsfaktorfeld 1062B eine Neuinterpretation von disp8; bei Verwendung des Verschiebungsfaktorfelds 1062B wird die tatsächliche Verschiebung durch den Inhalt des Verschiebungsfaktorfelds multipliziert mit der Größe des Speicheroperandenzugriffs (N) bestimmt. Dieser Typ von Verschiebung wird als disp8·N bezeichnet. Dadurch wird die mittlere Befehlslänge verringert (ein einzelnes Byte wird für die Verschiebung verwendet, jedoch mit einem viel größeren Bereich). Eine solche komprimierte Verschiebung basiert auf der Annahme, dass die effektive Verschiebung ein Mehrfaches der Granularität des Speicherzugriffs ist und somit die redundanten niederwertigen Bits des Adressen-Offsets nicht kodiert zu werden brauchen. Mit anderen Worten ersetzt das Verschiebungsfaktorfeld 1062B die ältere x86-Befehlssatz-8-Bit-Verschiebung. Somit wird das Verschiebungsfaktorfeld 1062B auf die gleiche Weise kodiert wie eine x86-Befehlssatz-8-Bit-Verschiebung (somit keine Veränderungen bei den ModRM/SIB-Kodierungsregeln), mit der einzigen Ausnahme, dass disp8 auf disp8·N überbelastet ist. Mit anderen Worten gibt es keine Veränderungen bei den Kodierungsregeln oder Kodierungslängen, sondern nur bei der Interpretation des Verschiebungswerts durch die Hardware (die zum Erhalten eines byteweisen Adressen-Offsets die Verschiebung mittels der Größe des Speicheroperanden skalieren muss).
  • Das Direktwertfeld 1072 arbeitet wie vorstehend beschrieben.
  • Voll-Opcode-Feld
  • 11B ist ein Blockschaltbild mit Darstellung des spezifischen vektorfreundlichen Befehlsformats 1100, das das Voll-Opcode-Feld 1074 gemäß einer Ausführungsform der Erfindung bildet. Insbesondere weist das Voll-Opcode-Feld 1074 das Formatfeld 1040, das Basisoperationsfeld 1042 und das Datenelementbreiten-(W-)Feld 1064 auf. Das Basisoperationsfeld 1042 weist das Präfixkodierungsfeld 1125, das Opcode-Abbildungsfeld 1115 und das Real-Opcode-Feld 1130 auf.
  • Registerindexfeld
  • 11C ist ein Blockschaltbild mit Darstellung der Felder des spezifischen vektorfreundlichen Befehlsformats 1100, die das Registerindexfeld 1044 gemäß einer Ausführungsform der Erfindung bilden. Insbesondere weist das Registerindexfeld 1044 das REX-Feld 1105, das REX'-Feld 1110, das MODR/M.Reg-Feld 1144, das MODR/M.r/m-Feld 1146, das VVVV-Feld 1120, das xxx-Feld 1154 und das bbb-Feld 1156 auf.
  • Augmentationsoperationsfeld
  • 11D ist ein Blockschaltbild mit Darstellung der Felder des spezifischen vektorfreundlichen Befehlsformats 1100, die das Augmentationsoperationsfeld 1050 gemäß einer Ausführungsform der Erfindung bilden. Wenn das Klasse-(U-)Feld 1068 eine 0 enthält, bedeutet dies EVEX.U0 (Klasse A 1068A); wenn es eine 1 enthält, bedeutet dies EVEX.U1 (Klasse B 1068B). Wenn U = 0 ist und das MOD-Feld 1142 11 enthält (was eine Kein-Speicherzugriff-Operation bedeutet), wird das Alpha-Feld 1052 (EVEX-Byte 3, Bit [7] – EH) als das rs-Feld 1052A interpretiert. Wenn das rs-Feld 1052A eine 1 (Rundung 1052A.1) enthält, wird das Beta-Feld 1054 (EVEX-Byte 3, Bits [6:4] – SSS) als das Rundungssteuerungsfeld 1054A interpretiert. Das Rundungssteuerungsfeld 1054A weist ein Ein-Bit-SAE-Feld 1056 und ein Zwei-Bit-Rundungsoperationsfeld 1058 auf. Wenn das rs-Feld 1052A eine 0 enthält (Datentransformation 1052A.2), wird das Beta-Feld 1054 (EVEX-Byte 3[6:4] – SSS) als ein Drei-Bit-Datentransformationsfeld 1054B interpretiert. Wenn U = 0 ist und das MOD-Feld 1142 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bedeutet), wird das Alpha-Feld 1052 (EVEX-Byte 3, Bit [7] – EH) als das Räumungshinweis-(EH-)Feld 1052 interpretiert und wird das Beta-Feld 1054 (EVEX-Byte 3, Bit [6:4] – SSS) als ein Drei-Bit-Datenmanipulationsfeld 1054C interpretiert.
  • Wenn U = 1 ist, wird das Alpha-Feld 1052 (EVEX-Byte 3, Bit [7] – EH) als das Schreibmaskensteuerungs-(Z-)Feld 1052C interpretiert. Wenn U = 1 ist und das MOD-Feld 1142 11 enthält (was eine Kein-Speicherzugriff-Operation bedeutet), wird ein Teil des Beta-Felds 1054 (EVEX-Byte 3, Bit [4] – S0) als das RL-Feld 1057A interpretiert; wenn es eine 1 enthält (Rundung 1057A.1), wird der Rest des Beta-Felds 1054 (EVEX-Byte 3, Bit [6-5] – S2-1) als das Rundungsoperationsfeld 1059A interpretiert, während dann, wenn das RL-Feld 1057A eine 0 enthält (VSIZE 1057.A2), der Rest des Beta-Felds 1054 (EVEX-Byte 3, Bit [6-5] – S2-1), als das Vektorlängenfeld 1059B (EVEX-Byte 3, Bit [6-5] – L1-0) interpretiert wird. Wenn U = 1 ist und das MOD-Feld 1142 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bedeutet), wird das Beta-Feld 1054 (EVEX-Byte 3, Bits [6:4] – SSS) als das Vektorlängenfeld 1059B (EVEX-Byte 3, Bit [6-5] - L1-0) und das Sendefeld 1057B (EVEX-Byte 3, Bit [4] – B) interpretiert.
  • Beispielhafte Registerarchitektur
  • 12 ist ein Blockschaltbild einer Registerarchitektur 1200 gemäß einer Ausführungsform der Erfindung. Bei der dargestellten Ausführungsform gibt es 32 Vektorregister 1210, die 512 Bit breit sind; diese Register werden als zmm0 bis zmm31 referenziert. Die niederwertigen 256 Bits der unteren 16 zmm-Register überlagern die Register ymm0-16. Die niederwertigen 128 Bits der unteren 16 zmm-Register (die niederwertigen 128 Bits der ymm-Register) überlagern die Register xmm0-15.
  • Das spezifische vektorfreundliche Befehlsformat 1100 arbeitet auf diesen überlagerten Registern, wie in den nachstehenden Tabellen dargestellt ist.
    Einstellbare Vektorlänge Klasse Operationem Register
    Befehlsvorlagen, die kein Vektorlängenfeld 1059B aufweisen A (Fig. 10A; U = 0) 1010, 1015, 1025, 1030 zmm-Register (die Vektorlänge beträgt 64 Byte)
    B (Fig. 10B; U = 1) 1012 zmm-Register (die Vektorlänge beträgt 64 Byte)
    Befehlsvorlagen, die das Vektorlängenfeld 1059B aufweisen B (Fig. 10B; U = 1) 1017, 1027 zmm-, ymm- oder xmm-Register (die Vektorlänge beträgt 64 Byte, 32 Byte oder 16 Byte) je nach Vektorlängenfeld 1059B
  • Mit anderen Worten wählt das Vektorlängenfeld 1059B zwischen einer maximalen Länge und einer oder mehreren kürzeren Längen, wobei jede solche kürzere Länge die halbe Länge der vorhergehenden Länge ist; und Befehlsvorlagen ohne das Vektorlängenfeld 1059B arbeiten bei der maximalen Vektorlänge. Ferner arbeiten bei einer Ausführungsform die Klasse-B-Befehlsvorlagen des spezifischen vektorfreundlichen Befehlsformats 1100 anhand von gepackten oder skalaren Gleitkommadaten mit einfacher/doppelter Genauigkeit und gepackten oder skalaren Ganzzahlendaten. Skalaroperationen sind Operationen, die an der Position des niedrigstwertigen Datenelements in einem zmm/ymm/xmm-Register durchgeführt werden; die Positionen der höherwertigen Datenelemente bleiben je nach Ausführungsform entweder die gleichen, die sie vor dem Befehl waren, oder werden genullt.
  • Schreibmaskenregister 1215 – bei der dargestellten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7) jeweils mit einer Größe von 64 Bit. Bei einer alternativen Ausführungsform weisen die Schreibmaskenregister 1215 eine Größe von 16 Bits auf. Wie vorstehend beschrieben worden ist, kann bei einer Ausführungsform der Erfindung das Vektormaskenregister k0 nicht als Schreibmaske verwendet werden; wenn die Kodierung, die normalerweise k0 anzeigen würde, für eine Schreibmaske verwendet wird, wird eine festverschaltete Schreibmaske mit 0xFFFF ausgewählt, wobei das Schreibmaskieren für diesen Befehl effektiv deaktiviert wird.
  • Universalregister 1225 – bei der dargestellten Ausführungsform gibt es sechszehn 64-Bit-Universalregister, die zum Adressieren der Speicheroperanden zusammen mit den bestehenden x86-Adressiermodi verwendet werden. Diese Register werden mit den Bezeichnungen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 referenziert.
  • Skalar-Gleitkomma-Stapelregisterdatei (x87-Stapel) 1245, auf der die MMX-Gepackt-Ganzzahlen-Flachregisterdatei 1250 einem Aliasing unterzogen wird – bei der dargestellten Ausführungsform ist der x87-Stapel ein Acht-Element-Stapel, der zum Durchführen von Skalar-Gleitkomma-Operationen auf 32-/64-/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung verwendet wird; während die MMX-Register zum Durchführen von Operationen an gepackten 64-Bit-Ganzzahlendaten sowie zum Halten von Operanden für einige Operationen, die zwischen den MMX- und XMM-Registern durchgeführt werden, verwendet werden.
  • Bei alternativen Ausführungsformen der Erfindung können breitere oder schmalere Register verwendet werden. Des Weiteren können bei alternativen Ausführungsformen der Erfindung mehr, weniger oder andere Registerdateien und Register verwendet werden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf unterschiedliche Arten für unterschiedliche Zwecke und in unterschiedlichen Prozessoren implementiert sein. Zum Beispiel können Implementierungen solcher Kerne umfassen: 1) einen Universal-In-Order-Kern, der für eine Universalberechnung vorgesehen ist; 2) einen Hochleistungs-Universal-Out-of-Order-Kern, der für eine Universalberechnung vorgesehen ist; 3) einen Spezialkern, der primär für eine Grafik- und/oder wissenschaftliche (Durchsatz-)Berechnung vorgesehen ist. Implementierungen von unterschiedlichen Prozessoren können umfassen: 1) eine CPU mit einem oder mehreren Universal-In-Order-Kernen, die für eine Universalberechnung vorgesehen sind, und/oder einem oder mehreren Universal-Out-of-Order-Kernen, die für eine Universalberechnung vorgesehen sind; und 2) einen Koprozessor mit einem oder mehreren Spezialkernen, die primär für Grafik und/oder Wissenschaft (Durchsatz) vorgesehen sind. Solche unterschiedliche Prozessoren rühren zu unterschiedlichen Computersystemarchitekturen, die aufweisen können: 1) den Koprozessor auf einem von der CPU getrennten Chip; 2) den Koprozessor auf einem separaten Die in derselben Packung wie eine CPU; 3) den Koprozessor auf demselben Die wie eine CPU (in diesem Fall wird ein solcher Koprozessor manchmal als Speziallogik, wie z. B. Integriert-Grafik- und/oder Wissenschaft-(Durchsatz-)Logik, oder als Spezialkerne bezeichnet); und 4) ein System-on-Chip, das auf demselben Die die beschriebene CPU (manchmal als Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den oben beschriebenen Koprozessor und eine zusätzliche Funktionalität aufweisen kann. Beispielhafte Kernarchitekturen werden als Nächstes beschrieben, gefolgt von Beschreibungen von beispielhaften Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen
  • In-Order- und Out-of-Order-Kern-Blockschaltbild
  • 13A ist ein Blockschaltbild mit Darstellung sowohl einer beispielhaften In-Order-Pipeline als auch einer beispielhaften Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungs-Pipeline gemäß Ausführungsformen der Erfindung. 13B ist ein Blockschaltbild mit Darstellung sowohl einer beispielhaften Ausführungsform eines In-Order-Architekturkerns als auch eines beispielhaften Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungs-Architekturkerns, der in einem Prozessor enthalten ist, gemäß Ausführungsformen der Erfindung. Die in durchgezogenen Linien dargestellten Kästchen in 13A–B zeigen die In-Order-Pipeline und den In-Order-Kern, während die wahlweise hinzugefügten, in gestrichelten Linien dargestellten Kästchen die Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungs-Pipeline und -Kern darstellen. Vor dem Hintergrund, dass der In-Order-Aspekt ein Teilsatz des Out-of-Order-Aspekts ist, wird der Out-of-Order-Aspekt beschrieben.
  • In 13A weist eine Prozessor-Pipeline 1300 eine Abrufstufe 1302, eine Längendekodierungsstufe 1304, eine Dekodierungsstufe 1306, eine Zuteilungsstufe 1308, eine Umbenennungsstufe 1310, eine Scheduling-(bekannt auch als Beförderungs- oder Ausgabe-)Stufe 1312, eine Registerlese-/Speicherlesestufe 1314, eine Ausführungsstufe 1316, eine Rückschreib-/Speicherschreibstufe 1318, eine Ausnahmehandhabungsstufe 1322 und eine Commitstufe 1324 auf.
  • 13B zeigt einen Prozessorkern 1390 mit einer Front-End-Einheit 1330, die mit einer Ausführungsmaschineneinheit 1350 gekoppelt ist, wobei beide mit einer Speichereinheit 1370 gekoppelt sind. Der Kern 1390 kann ein Rechnerkern mit reduziertem Befehlssatz (RISC), ein Rechnerkern mit komplexem Befehlssatz (CISC), ein Kern mit sehr langem Befehlswort (VLIW) oder ein hybrider oder alternativer Kerntyp sein. Bei noch einer weiteren Option kann der Kern 1390 ein Spezialkern, wie zum Beispiel ein Netz- oder Kommunikationskern, eine Komprimierungsmaschine, ein Koprozessorkern, ein Universalrechner-Grafikverarbeitungseinheits-(general purpose computing graphics processing unit – GPGPU-)Kern oder dergleichen sein.
  • Die Front-End-Einheit 1330 weist eine Verzweigungsvorhersageeinheit 1332 auf, die mit einer Befehls-Cache-Einheit 1334 gekoppelt ist, welche mit einem Befehlsübersetzungs-Lookaside-Puffer (translation lookaside buffer – TLB) 1336 gekoppelt ist, der mit einer Befehlsabrufeinheit 1338 gekoppelt ist, die mit einer Dekodierungseinheit 1340 gekoppelt ist. Die Dekodierungseinheit 1340 (oder der Dekodierer) kann Befehle dekodieren und als Ausgang eine oder mehrere Mikrooperationen, Mikrocode-Eingabepunkte, Mikrobefehle, andere Befehle oder andere Steuersignale erzeugen, die aus den ursprünglichen Befehlen dekodiert worden sind oder diese anderweitig reflektieren oder aus diesen abgeleitet worden sind. Die Dekodierungseinheit 1340 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Beispiele für geeignete Mechanismen umfassen, sind jedoch nicht beschränkt auf, Lookup-Tabellen, Hardware-Implementierungen, programmierbare logische Arrays (PLAs), Mikrocode-Nurlesespeicher (ROMs) etc. Bei einer Ausführungsform weist der Kern 1390 einen Mikrocode-ROM oder ein anderes Medium auf, das einen Mikrocode für bestimmte Makrobefehle speichert (z. B. in einer Dekodierungseinheit 1340 oder anderweitig in der Front-End-Einheit 1330). Die Dekodierungseinheit 1340 ist mit einer Umbenennungs-/Zuteilereinheit 1352 in der Ausführungsmaschineneinheit 1350 gekoppelt.
  • Die Ausführungsmaschineneinheit 1350 weist die Umbenennungs-/Zuteilereinheit 1352 auf, die mit einer Rückzugseinheit 1354 und einem Satz von einer oder mehreren Schedulereinheit(en) 1356 gekoppelt ist. Die Schedulereinheit(en) 1356 stellt (stellen) jede Anzahl von unterschiedlichen Schedulern dar, einschließlich Reservierungsstationen, zentralem Befehlsfenster etc. Die Schedulereinheit(en) 1356 ist (sind) mit der (den) Physikalisch-Registerdatei(en)-Einheit(en) 1358 gekoppelt. Jede der Physikalisch-Registerdatei(en)-Einheit(en) 1358 stellt eine oder mehrere physikalische Registerdateien dar, von denen unterschiedliche einen oder mehrere unterschiedliche Datentypen speichern, wie z. B. skalare Ganzzahl, skalare Gleitkommazahl, packte Ganzzahl, gepackte Gleitkommazahl, Vektor-Ganzzahl, Vektor-Gleitkommazahl, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) etc. Bei einer Ausführungsform umfasst (umfassen) die Physikalisch-Registerdatei(en)-Einheit(en) 1358 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine Skalarregistereinheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister und Universalregister bereitstellen. Die Physikalisch-Registerdatei(en)-Einheit(en) 1358 wird (werden) von der Rückzugseinheit 1354 überlappt, um verschiedene Arten darzustellen, auf die eine Registerumbenennung und Out-of-Order-Ausführung implementiert werden kann (z. B. unter Verwendung eines (von) Neuordnungspuffers (Neuordnungspuffern) und einer (von) Rückzugsregisterdatei(en); unter Verwendung einer (von) Zukunftsdatei(en), eines Verlaufspuffers (Vorlaufpuffern) und einer (von) Rückzugsregisterdatei(en); unter Verwendung von Registerabbildungen und eines Pools von Registern; etc.). Die Rückzugseinheit 1354 und die Physikalisch-Registerdatei(en)-Einheit(en) 1358 sind mit dem (den) Ausführungs-Cluster(n) 1360 gekoppelt. Das (die) Ausführungs-Cluster 1360 weist (weisen) einen Satz von einer oder mehreren Ausführungseinheiten 1362 und einen Satz von einer oder mehreren Speicherzugriffseinheiten 1364 auf. Die Ausführungseinheiten 1362 können verschiedene Operationen (z. B. Verschiebung, Addition, Subtraktion, Multiplikation) an verschiedenen Typen von Daten (z. B. skalare Gleitkommazahl, gepackte Ganzzahl, gepackte Gleitkommazahl, Vektor-Ganzzahl, Vektor-Gleitkommazahl) durchführen. Obwohl einige Ausführungsformen eine Anzahl von Ausführungsformen umfassen können, die für spezifische Funktionen oder Sätze von Funktionen zweckbestimmt sind, können andere Ausführungsformen nur ein Ausführungseinheit oder mehrere Ausführungseinheiten aufweisen, die alle sämtliche Funktionen durchführen. Die Scheduler-Einheit(en) 1356, Physikalisch-Registerdatei(en)-Einheit(en) 1358 und Ausführungs-Cluster 1360 sind so gezeigt, dass sie möglicherweise in einer Vielzahl vorhanden sind, da bei bestimmten Ausführungsformen separate Pipelines für bestimmte Typen von Daten/Operationen erstellt werden (z. B. eine Skalar-Ganzzahlen-Pipeline, eine Skalar-Gleitkomma-/Gepackt-Ganzzahlen-/Gepackt-Gleitkomma-/Vektor-Ganzzahlen-/Vektor-Gleitkomma-Pipeline und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre eigene Scheduler-Einheit, Physikalisch-Registerdatei(en)-Einheit und/oder Ausführungs-Cluster aufweisen – und im Fall einer separaten Speicherzugriffs-Pipeline werden bestimmte Ausführungsformen implementiert, bei denen nur das Ausführungs-Cluster dieser Pipeline die Speicherzugriffseinheit(en) 1364 aufweist). Es versteht sich ferner, dass dann, wenn separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines eine Out-of-Order-Ausgabe/Ausführung und den Rest auf In-Order-Weise durchführen.
  • Der Satz von Speicherzugriffseinheiten 1364 ist mit der Speichereinheit 1370 gekoppelt, die eine TLB-Einheit 1372 aufweist, welche mit einer Daten-Cache-Einheit 1374 gekoppelt ist, die mit einer Level-2-(L2-)Cache-Einheit 1376 gekoppelt ist. Bei einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 1364 eine Ladeeinheit, eine Speicherungsadresseneinheit und eine Speicherungsdateneinheit aufweisen, von denen jede mit der TLB-Einheit 1372 in der Speichereinheit 1370 gekoppelt ist. Die Befehls-Cache-Einheit 1334 ist ferner mit einer Level-2-(L2-)Cache-Einheit 1376 in der Speichereinheit 1370 gekoppelt. Die L2-Cache-Einheit 1376 ist mit einem oder mehreren weiteren Cache-Levels und schließlich mit einem Hauptspeicher gekoppelt.
  • Zum Beispiel kann die beispielhafte Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungs-Kernarchitektur die Pipeline 1300 wie folgt implementieren: 1) die Befehlsabrufung 1338 führt die Abruf- und Längendekodierungsstufen 1302 und 1304 durch; 2) die Dekodierungseinheit 1340 führt die Dekodierungsstufe 1306 durch; 3) die Umbenennungs-/Zuteilereinheit 1352 führt die Zuteilungsstufe 1308 und die Umbenennungsstufe 1310 durch; 4) die Scheduler-Einheit(en) 1356 führt (führen) die Schedulingstufe 1312 durch; 5) die Physikalisch-Registerdatei(en)-Einheit(en) 1358 und die Speichereinheit 1370 führen die Registerlese-/Speicherlesestufe 1314 durch; das Ausführungs-Cluster 1360 führt die Ausführungsstufe 1316 durch; 6) die Speichereinheit 1370 und die Physikalisch-Registerdatei(en)-Einheit(en) 1358 führen die Rückschreib-/Speicherschreibstufe 1318 durch; 7) verschiedene Einheiten können in die Ausnahmehandhabungsstufe 1322 eingebunden sein; und 8) die Rückzugseinheit 1354 und die Physikalisch-Registerdatei(en)-Einheit(en) 1358 führen die Commitstufe 1324 durch.
  • Der Kern 1390 kann einen oder mehrere Befehlssätze (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt worden sind); den MIPS-Befehlssatz von MIPS Technologies, Sunnyvale, CA; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen, wie z. B. NEON) von ARM Holdings, Sunnyvale, CA), einschließlich des (der) hier beschriebenen Befehls (Befehle), unterstützen. Bei einer Ausführungsform weist der Kern 1390 eine Logik zum Unterstützen einer Gepackt-Daten-Befehlssatzerweiterung (z. B. AVX1, AVX2) auf, wodurch ermöglicht wird, dass die Operationen, die bei vielen Multimedia-Anwendungen verwendet werden, unter Verwendung von gepackten Daten durchgeführt werden.
  • Es versteht sich, dass der Kern ein Multithreading (Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann, und dies auf eine Vielzahl von Arten durchführen kann, einschließlich Zeitscheiben-Multithreading, gleichzeitiges Multithreading (wobei ein einzelner physikalischer Kern einen logischen Kern für jeden der Threads bietet, die dieser physikalische Kern gleichzeitig einem Multithreading unterzieht) oder einer Kombination daraus (z. B. Zeitscheiben-Abrufen und -Dekodieren und danach gleichzeitiges Multithreading, wie z. B. bei der Intel®-Hyperthreading-Technologie).
  • Obwohl die Registerumbenennung im Kontext der Out-of-Order-Ausführung beschrieben wird, versteht sich, dass die Registerumbenennung auch bei einer In-Order-Architektur angewendet werden kann. Obwohl die dargestellte Ausführungsform des Prozessors ferner separate Befehls- und Daten-Cache-Einheiten 1334/1374 und eine gemeinsam genutzte L2-Cache-Einheit 1376 aufweist, können alternative Ausführungsformen einen einzelnen internen Cache sowohl für Befehle als auch Daten aufweisen, wie zum Beispiel einen internen Level-1-(L1-)Cache oder mehrere Levels eines internen Caches. Bei einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, aufweisen. Alternativ kann sich der gesamte Cache außerhalb des Kerns und/oder Prozessors befinden.
  • Spezifische beispielhafte In-Order-Kernarchitektur
  • 14A–B zeigen ein Blockschaltbild einer spezifischeren beispielhaften In-Order-Kernarchitektur, wobei der Kern einer von mehreren logischen Blöcken (einschließlich anderer Kerne desselben Typs und/oder unterschiedlicher Typen) in einem Chip ist. Die logischen Blöcke kommunizieren je nach Anwendung über ein Zwischenverbindungsnetz (z. B. ein Ringnetz) mit hoher Bandbreite mit einer Festfunktionslogik, Speicher-I/O-Schnittstellen und anderer erforderlicher I/O-Logik.
  • 14A ist ein Blockschaltbild eines Einzelprozessorkerns zusammen mit seiner Verbindung mit dem auf dem Die befindlichen Zwischenverbindungsnetz 1402 und mit seinem lokalen Teilsatz des Level-2-(L2-)Caches 1404 gemäß Ausführungsformen der Erfindung. Bei einer Ausführungsform unterstützt ein Befehlsdekodierer 1400 den x86-Befehlssatz mit einer Gepackt-Daten-Befehlssatzerweiterung. Ein L1-Cache 1406 ermöglicht Zugriffe mit niedriger Latenz auf den Cachespeicher in den Skalar- und Vektoreinheiten. Obwohl bei einer Ausführungsform (zum Vereinfachen der Auslegung) eine Skalareinheit 1408 und eine Vektoreinheit 1410 separate Registersätze (jeweils Skalarregister 1412 und Vektorregister 1414) verwenden und Daten, die zwischen diesen übertragen werden, in den Speicher geschrieben werden und dann aus einem Level-1-(L1-)Cache 1406 ausgelesen werden, kann bei alternativen Ausführungsformen der Erfindung eine andere Vorgehensweise angewendet werden (z. B. Verwendung eines einzelnen Registersatzes oder Aufnehmen eines Kommunikationswegs, der ermöglicht, dass Daten zwischen den zwei Registerdateien übertragen werden, ohne geschrieben und ausgelesen zu werden).
  • Der lokale Teilsatz des L2-Caches 1404 ist Teil eines globalen L2-Caches, das in separate lokale Teilsätze unterteilt ist, und zwar einen pro Prozessorkern. Jeder Prozessorkern weist einen Direktzugriffsweg zu seinem eigenen lokalen Teilsatz des L2-Caches 1404 auf. Daten, die von einem Prozessorkern gelesen werden, werden in seinem L2-Cache-Teilsatz 1404 gespeichert, und es kann schnell auf diese zugegriffen werden, und zwar parallel zum Zugriff durch andere Prozessorkerne auf deren eigene L2-Cache-Teilsätze. Daten, die von einem Prozessorkern geschrieben werden, werden in dessen eigenem L2-Cache-Teilsatz 1404 gespeichert und, falls erforderlich, aus anderen Teilsätzen eliminiert. Das Ringnetz stellt eine Kohärenz für gemeinsam genutzte Daten sicher. Das Ringnetz ist bidirektional, um es Agenten, wie z. B. Prozessorkernen, L2-Caches und anderen logischen Blöcken zu ermöglichen, innerhalb des Chips miteinander zu kommunizieren. Jeder Ring-Datenweg ist pro Richtung 1012 Bit breit.
  • 14B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 14A gemäß Ausführungsformen der Erfindung. 14B umfasst einen L1-Datencache- 1406A Teil des L1-Caches 1404 sowie mehr Details bezüglich der Vektoreinheit 1410 und der Vektorregister 1414. Insbesondere ist die Vektoreinheit 1410 eine 16-breite Vektorverarbeitungseinheit (vector processing unit – VPU) (siehe 16-breite ALU 1428), die Ganzzahlen-, Gleitkommazahlen-Befehle mit einfacher Genauigkeit und doppelter Genauigkeit verarbeitet. Die VPU unterstützt das Swizzling der Registereingänge mit einer Swizzle-Einheit 1420, eine numerische Umwandlung mit Numerisch-Umwandlungs-Einheiten 1422A–B und eine Replikation mit einer Replikationseinheit 1424 am Speichereingang. Schreibmaskenregister 1426 ermöglichen ein Prädizieren der daraus resultierenden Vektorschreibungen.
  • Prozessor mit Integriert-Speicher-Controller und -Grafik
  • 15 ist ein Blockschaltbild eines Prozessors 1500, der mehr als einen Kern aufweisen kann, einen Integriert-Speicher-Controller aufweisen kann und eine integrierte Grafik aufweisen kann, gemäß Ausführungsformen der Erfindung. Die in durchgezogenen Linien dargestellten Kästchen in 15 zeigen einen Prozessor 1500 mit einem Einzelkern 1502A, einem Systemagenten 1510, einem Satz von einer oder mehreren Bus-Controller-Einheiten 1516, während die wahlweise hinzugefügten, in gestrichelten Linien dargestellten Kästchen einen alternativen Prozessor 1500 mit mehreren Kernen 1502A–N, einem Satz von einer oder mehreren Integriert-Speicher-Controller-Einheit(en) 1514 in der Systemagenteneinheit 1510 und einer Speziallogik 1508 zeigen.
  • Somit können unterschiedliche Implementierungen des Prozessors 1500 umfassen: 1) eine CPU mit der Speziallogik 1508, die eine Integriert-Grafik- und/oder wissenschaftliche (Durchsatz-)Logik (die einen oder mehrere Kerne aufweisen kann) ist, und den Kernen 1502A–N, die ein oder mehrere Universalkerne (z. B. Universal-In-Order-Kerne, Universal-Out-of-Order-Kerne, eine Kombination aus beiden) sind; 2) einen Koprozessor mit den Kernen 1502A–N, die eine große Anzahl von Spezialkernen sind, welche primär für Grafik und/oder Wissenschaft (Durchsatz) vorgesehen sind; und 3) einen Koprozessor mit den Kernen 1502A–N, die eine große Anzahl von Universal-In-Order-Kernen sind. Somit kann der Prozessor 1500 ein Universalprozessor, Koprozessor oder Spezialprozessor sein, wie zum Beispiel ein Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, eine GPGPU (Universal-Grafikverarbeitungseinheit), ein Hochdurchsatz-Viele-Integrierte-Kerne-(mang integrated core – MIC-)Koprozessor (einschließlich 30 oder mehr Kernen), eingebetteter Prozessor oder dergleichen. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 1500 kann Teil von und/oder unter Anwendung einer Anzahl von Prozesstechnologien, wie zum Beispiel BiCMOS, CMOS oder NMOS, auf einem oder mehreren Substraten implementiert sein.
  • Die Speicherhierarchie weist einen oder mehrere Cache-Levels innerhalb der Kerne, einen Satz oder einen oder mehrere gemeinsam genutzte Cache-Einheiten 1506 und einen (nicht gezeigten) externen Speicher, der mit dem Satz von Integriert-Speicher-Controller-Einheiten 1514 gekoppelt ist, auf. Der Satz von gemeinsam genutzten Cache-Einheiten 1506 kann einen oder mehrere Caches auf mittlerem Level, wie z. B. Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Levels, einen Cache eines letzten Levels (last level cache – LLC) und/oder Kombinationen daraus aufweisen. Obwohl bei einer Ausführungsform eine ringbasierte Zwischenverbindungseinheit 1512 die Integriert-Grafik-Logik 1508, den Satz von gemeinsam genutzten Cache-Einheiten 1506 und die Systemagenteneinheit 1510/Integriert-Speicher-Controller-Einheit(en) 1514 miteinander verbindet, kann bei alternativen Ausführungsformen jede Anzahl von bekannten Techniken zum Verbinden solcher Einheiten angewendet werden. Bei einer Ausführungsform wird eine Kohärenz zwischen einer oder mehreren Cache-Einheiten 1506 und den Kernen 1502A–N aufrechterhalten.
  • Bei einigen Ausführungsformen sind ein oder mehrere der Kerne 1502A–N multithreadingfähig. Der Systemagent 1510 weist diejenigen Komponenten auf, die die Kerne 1502A–N koordinieren und betreiben. Die Systemagenteneinheit 1510 kann zum Beispiel eine Energiesteuereinheit (power control unit – PCU) und eine Anzeigeeinheit aufweisen. Die PCU kann aus einer Logik und Komponenten gebildet sein oder diese aufweisen, die zum Regeln des Energiezustands der Kerne 1502A–N und der Integriert-Grafik-Logik 1508 benötigt werden. Die Anzeigeeinheit dient zum Treiben einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 1502A–N können hinsichtlich der Architektur und/oder des Befehlssatzes homogen oder heterogen sein; dass heißt, dass zwei oder mehr der Kerne 1502A–N in der Lage sein können, den gleichen Befehlssatz auszuführen, während andere in der Lage sein können, nur einen Teilsatz des Befehlssatzes oder einen anderen Befehlssatz auszuführen.
  • Beispielhafte Computerarchitekturen
  • 1619 sind Blockschaltbilder von beispielhaften Computerarchitekturen. Andere Systemauslegungen und -konfigurationen, die auf dem Sachgebiet für Laptops, Desktops, Handheld-PCs, persönliche digitale Assistenten, Konstruktionsarbeitsstationen, Server, Netzvorrichtungen, Netz-Hubs, Schalter, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Medienplayer, Handheld-Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind ebenfalls geeignet. Generell ist eine große Vielzahl von Systemen oder elektronischen Vorrichtungen, die in der Lage sind, einen Prozessor und/oder eine andere Ausführungslogik, die hier offengelegt ist, aufzunehmen, allgemein geeignet.
  • 16 zeigt ein Blockschaltbild eines Systems 1600 gemäß einer Ausführungsform der vorliegenden Erfindung. Das System 1600 kann einen oder mehrere Prozessoren 1610, 1615 aufweisen, die mit einem Controller-Hub 1620 gekoppelt sind. Bei einer Ausführungsform weist der Controller-Hub 1620 einen Grafikspeicher-Controller-Hub (graphics memory controller hub – GMCH) 1690 und einen Eingangs-/Ausgangs-Hub (input/output hub – IOH) 1650 auf (die sich auf separaten Chips befinden können); der GMCH 1690 weist Speicher- und Grafik-Controller auf, mit denen ein Speicher 1640 und ein Koprozessor 1645 gekoppelt sind; der IOH 1650 koppelt Eingangs-/Ausgangs-(I/O-)Vorrichtungen 1660 mit dem GMCH 1690. Alternativ sind einer oder beide der Speicher- und Grafik-Controller in den Prozessor integriert (wie hier beschrieben ist), sind der Speicher 1640 und der Koprozessor 1645 direkt mit dem Prozessor 1610 und dem Controller-Hub 1620, der sich auf einem einzelnen Chip mit dem IOH 1650 befindet, gekoppelt.
  • Die optionale Natur von zusätzlichen Prozessoren 1615 ist in 16 durch gestrichelte Linien dargestellt. Jeder Prozessor 1610, 1615 kann einen oder mehrere Verarbeitungskerne, die hier beschrieben sind, aufweisen und kann eine bestimmte Version des Prozessors 1500 sein.
  • Der Speicher 1640 kann zum Beispiel ein dynamischer Schreib-/Lesespeicher (DRAM), Phasenwechsel-Speicher (phase change memory – PCM) oder eine Kombination aus den beiden sein. Bei mindestens einer Ausführungsform kommuniziert der Controller-Hub 1620 über einen Mehrpunktbus, wie z. B. einen Frontside-B (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie z. B. QuickPath Interconnect (QPI), oder eine im Wesentlichen gleiche Verbindung 1695 mit dem (den) Prozessor(en) 1610, 1615.
  • Bei einer Ausführungsform ist der Koprozessor 1645 ein Spezialprozessor, wie zum Beispiel ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. Bei einer Ausführungsform kann der Controller-Hub 1620 einen Integriert-Grafik-Beschleuniger aufweisen.
  • Es kann hinsichtlich eines Metrics-of-Merit-Spektrums einschließlich architektonischer, mikroarchitektonischer, Wärme-, Energieverbrauchs-Charakteristiken oder dergleichen eine Vielzahl von Unterschieden zwischen den physikalischen Ressourcen 1610, 1615 geben.
  • Bei einer Ausführungsform führt der Prozessor 1610 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. Koprozessorbefehle können in den Befehlen eingebettet sein. Der Prozessor 1610 erkennt diese Koprozessorbefehle als solche eines Typs, die von dem angeschlossenen Koprozessor 1645 auszuführen sind. Entsprechend gibt der Prozessor 1610 diese Koprozessorbefehle (oder Steuersignale, die Koprozessorbefehle darstellen) auf einem Koprozessorbus oder einer anderen Zwischenverbindung an den Koprozessor 1645 aus. Der (die) Koprozessor(en) 1645 übernimmt (übernehmen) die empfangenen Koprozessorbefehle und führt (führen) diese aus.
  • 17 zeigt ein Blockschaltbild eines ersten spezifischeren beispielhaften Systems 1700 gemäß einer Ausführungsform der vorliegenden Erfindung. Wie in 17 gezeigt ist, ist ein Multiprozessorsystem 1700 ein Punkt-zu-Punkt-Zwischenverbindungssystem und weist einen ersten Prozessor 1770 und einen zweiten Prozessor 1780 auf, die über eine Punkt-zu-Punkt-Zwischenverbindung 1750 miteinander gekoppelt sind. Jeder der Prozessoren 1770 und 1780 kann eine Version des Prozessors 1500 sein. Bei einer Ausführungsform der Erfindung sind die Prozessoren 1770 und 1780 jeweils die Prozessoren 1610 und 1615, während ein Koprozessor 1738 der Koprozessor 1645 ist. Bei einer weiteren Ausführungsform sind die Prozessoren 1770 und 1780 jeweils der Prozessor 1610 und der Koprozessor 1645.
  • Die Prozessoren 1770 und 1780 sind mit Integriert-Speicher-Controller-(integrated memory controller – IMC-)Einheiten 1772 bzw. 1782 gezeigt. Der Prozessor 1770 weist ferner als Teil seiner Bus-Controller-Einheiten Punkt-zu-Punkt-(P-P-)Schnittstellen 1776 und 1778 auf; auf im Wesentlichen gleiche Weise weist der zweite Prozessor 1780 P-P-Schnittstellen 1786 und 1788 auf. Die Prozessoren 1770 und 1780 können Informationen über eine Punkt-zu-Punkt-(P-P-)Schnittstelle 1750 unter Verwendung von P-P-Schnittstellenschaltungen 1778, 1788 austauschen. Wie in 17 gezeigt ist, koppeln die IMCs 1772 und 1782 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 1732 und einem Speicher 1734, die Abschnitte des Hauptspeichers sein können, der lokal an die jeweiligen Prozessoren angeschlossen ist.
  • Die Prozessoren 1770, 1780 können Daten über einzelne P-P-Schnittstellen 1752, 1754 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 1776, 1794, 1786, 1798 mit einem Chipsatz 1790 austauschen. Der Chipsatz 1790 kann wahlweise Daten über eine Hochleistungs-Schnittstelle 1739 mit dem Koprozessor 1738 austauschen. Bei einer Ausführungsform ist der Koprozessor 1738 ein Spezialprozessor, wie zum Beispiel ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein (nicht gezeigter) gemeinsam genutzter Cache kann in jedem der zwei Prozessoren oder außerhalb der beiden Prozessoren vorgesehen sein, jedoch über eine P-P-Zwischenverbindung mit den Prozessoren verbunden sein, so dass Lokal-Cache-Informationen einer der zwei oder beider Prozessoren in dem gemeinsam genutzten Cache gespeichert werden können, falls ein Prozessor in einen Niederenergiemodus gesetzt ist.
  • Der Chipsatz 1790 kann über eine Schnittstelle 1796 mit einem ersten Bus 1716 gekoppelt sein. Bei einer Ausführungsform kann der erste Bus 1716 ein Peripheriekomponenten-Zwischenverbindungs-(Peripheral Component Interconnect – PCI-)Bus oder ein Bus, wie z. B. ein PCI-Express-Bus oder ein anderer I/O-Zwischenverbindungsbus der dritten Generation sein, obwohl der Umfang der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in 17 gezeigt ist, können verschiedene I/O-Vorrichtungen 1714 mit dem ersten Bus 1716 gekoppelt sein, und zwar zusammen mit einer Busbrücke 1718, die den ersten Bus 1716 mit einem zweiten Bus 1720 koppelt. Bei einer Ausführungsform ist (sind) ein oder mehrere weitere Prozessor(en) 1715, wie z. B. Koprozessoren, Hochdurchsatz-MIC-Prozessoren, GPGPUs, Beschleuniger (wie z. B. Grafikbeschleuniger oder Digitalsignalverarbeitungs-(DSP-)Einheiten), feldprogrammierbare Gate-Arrays oder jeder andere Prozessor, mit dem ersten Bus 1716 gekoppelt. Bei einer Ausführungsform kann der zweite Bus 1720 ein Low-Pin-Count-(LPC-)Bus sein. Verschiedene Vorrichtungen können bei einer Ausführungsform mit einem zweiten Bus 1720 gekoppelt sein, einschließlich zum Beispiel einer Tastatur und/oder Maus 1722, Kommunikationsvorrichtungen 1727 und einer Speicherungseinheit 1728, wie z. B. eines Diskettenlaufwerks oder einer anderen Massenspeicherungsvorrichtung, die Befehle/Code und Daten 1730 aufweisen kann. Ferner kann ein Audio-I/O 1724 mit dem zweiten Bus 1720 gekoppelt sein. Es sei darauf hingewiesen, dass andere Architekturen möglich sind. Zum Beispiel kann anstelle der Punkt-zu-Punkt-Architektur von 17 ein System einen Mehrpunktbus oder eine andere derartige Architektur implementieren.
  • 18 zeigt ein Blockschaltbild eines zweiten spezifischeren beispielhaften Systems 1800 gemäß einer Ausführungsform der vorliegenden Erfindung. Gleiche Elemente in 17 und 18 sind mit gleichen Bezugszeichen bezeichnet, und bestimmte Aspekte von 17 sind in 18 weggelassen worden, um zu vermeiden, dass andere Aspekte von 18 nicht klar ersichtlich sind.
  • 18 zeigt, dass die Prozessoren 1770, 1780 eine Integriert-Speicher- und I/O-Steuerlogik (control logic – ”CL”) 1772 bzw. 1782 aufweisen können. Somit kann die CL 1772, 1782 Integriert-Speicher-Controller-Einheiten aufweisen und eine I/O-Steuerlogik aufweisen. 18 zeigt, dass nicht nur die Speicher 1732, 1734 mit der CL 1772, 1782 gekoppelt sind, sondern dass auch I/O-Vorrichtungen 1814 ebenfalls mit der Steuerlogik 1772, 1782 gekoppelt sind. Ältere I/O-Vorrichtungen 1815 sind mit dem Chipsatz 1790 gekoppelt.
  • 19 zeigt ein Blockschaltbild eines SoC 1900 gemäß einer Ausführungsform der vorliegenden Erfindung. Im Wesentlichen gleiche Elemente in 15 sind mit gleichen Bezugszeichen bezeichnet. Ferner sind in gestrichelten Linien dargestellte Kästchen optionale Merkmale weiterentwickelter SoCs. In 19 ist (sind) (eine) Zwischenverbindungseinheit(en) 1902 gekoppelt mit: einem Anwendungsprozessor 1910, der einen Satz von einem oder mehreren Kernen 202A–N und (eine) gemeinsam genutzte Cacheeinheit(en) 1506 aufweist; einer Systemagenteneinheit 1510; (einer) Bus-Controller-Einheit(en) 1516; (einer) Integriert-Speicher-Controller-Einheit(en) 1514; einem Satz oder einem oder mehreren Koprozessoren 1920, die eine Integriert-Grafik-Logik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor aufweisen können; einer Statisch-Schreib-/Lesespeicher-(SRAM-)Einheit 1930; einer Direktspeicherzugriffs-(direct memory access – DMA-)Einheit 1932; und einer Anzeigeeinheit 1940 zum Koppeln mit einer oder mehreren externen Anzeigen. Bei einer Ausführungsform weist (weisen) der (die) Koprozessor(en) 1920 einen Spezialprozessor, wie zum Beispiel einen Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, GPGPU, einen Hochdurchsatz-MIC-Prozessor, eingebetteten Prozessor oder dergleichen, auf.
  • Ausführungsformen der hier offengelegten Mechanismen können in Hardware, Software, Firmware oder einer Kombination aus solchen Implementierungsarten implementiert sein. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert sein, der auf programmierbaren Systemen arbeitet, die mindestens einen Prozessor, ein Speicherungssystem (einschließlich flüchtiger und nichtflüchtiger Speicher- und/oder Speicherungselementen), mindestens eine Eingabevorrichtung und mindestens eine Ausgabevorrichtung umfassen.
  • Der Programmcode, wie z. B. der Programmcode 1730, der in 17 gezeigt ist, kann auf Eingangsdaten angewendet werden, um die hier beschriebenen Funktionen durchzuführen und Ausgangsinformationen zu erzeugen. Die Ausgangsinformationen können auf bekannte Weise bei einer oder mehreren Ausgangsvorrichtungen angewendet werden. Zum Zweck dieser Anmeldung umfasst ein Verarbeitungssystem jedes System, das einen Prozessor aufweist, wie zum Beispiel: einen Digitalsignalprozessor (DSP), einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (application specific integrated circuit – ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann zum Kommunizieren mit einem Verarbeitungssystem in einer höheren verfahrens- oder objektorientierten Programmiersprache implementiert sein. Der Programmcode kann ferner, falls gewünscht, in einer Assembler- oder Maschinensprache implementiert sein. Die hier beschriebenen Mechanismen sind in ihrem Umfang nicht auf eine besondere Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können mittels charakteristischer Befehle implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das eine unterschiedliche Logik in dem Prozessor darstellt und das, wenn es von einer Maschine gelesen wird, bewirkt, dass die Maschine eine Logik zum Durchführen der hier beschriebenen Techniken herstellt. Solche Verkörperungen, die als ”IP-Kerne” bekannt sind, können auf einem realen maschinenlesbaren Medium gespeichert werden und zu verschiedenen Kunden oder Herstellanlagen zwecks Ladens in die Fertigungsmaschinen, die die Logik oder den Prozessor tatsächlich herstellen, geliefert werden.
  • Solche maschinenlesbaren Speichermedien können umfassen, sind jedoch nicht beschränkt auf, nichttransitorische reale Anordnungen von Artikeln, die von einer Maschine oder Vorrichtung hergestellt oder ausgebildet werden, einschließlich Speicherungsmedien, wie z. B. Festplatten, jeden anderen Typ von Platte, einschließlich Floppy Disks, optische Platten, Kompaktdisketten-Nurlesespeicher (compact disc read-only memories – CD-ROMs), wiederbeschreibbare Kompaktdisketten (compact disk rewritables – CD-RWs) und magnetooptische Platten, Halbleitervorrichtungen, wie z. B. Nurlesespeicher (ROMs), Schreib-/Lesespeicher (RAMs), wie z. B. dynamische Schreib-/Lesespeicher (DRAMs), statische Schreib-/Lesespeicher (SRAMs), löschbare programmierbare Nurlesespeicher (erasable programmable read-only memories – EPROMs), Flashspeicher, elektrisch löschbare programmierbare Nurlesespeicher (electrically erasable programmable read-only memories – EEPROMSs), Phasenwechsel-Speicher (PCM), magnetische oder optische Karten und jeden anderen Typ von Medien, der zum Speichern von elektronischen Befehlen geeignet ist.
  • Entsprechend umfassen Ausführungsformen der Erfindung ferner nichttransitorische reale maschinenlesbare Medien, die Befehle enthalten oder Auslegungsdaten enthalten, wie z. B. Hardwarebeschreibungssprache (Hardware Description Language – HDL), die hier beschriebene Strukturen, Schaltungen, Einrichtungen, Prozessoren und/oder Systemmerkmale definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich binärer Übersetzung, Code-Morphen etc.)
  • In einigen Fällen kann ein Befehlsumwandler zum Umwandeln eines Befehls aus einem Quellbefehlssatz in einen Zielbefehlssatz verwendet werden. Zum Beispiel kann der Befehlsumwandler einen Befehl (z. B. unter Anwendung einer statischen binären Übersetzung, einer dynamischen binären Übersetzung einschließlich einer dynamischer Kompilation) übersetzen, morphen, emulieren oder anderweitig in einen oder mehrere andere Befehle umwandeln, die von dem Kern zu verarbeiten sind. Der Befehlsumwandler kann in der Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. Der Befehlsumwandler kann sich auf einem Prozessor, außerhalb eines Prozessors oder teilweise auf einem und teilweise außerhalb eines Prozessor(s) befinden.
  • 20 ist ein Blockschaltbild zur Gegenüberstellung der Verwendung eines Software-Befehlsumwandlers zum Umwandeln von binären Befehlen in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung. Bei der dargestellten Ausführungsform ist der Befehlsumwandler ein Software-Befehlsumwandler, obwohl alternativ der Befehlsumwandler in der Software, Firmware, Hardware oder verschiedenen Kombinationen daraus implementiert sein kann. 20 zeigt, dass ein Programm in einer Hochsprache 2002 unter Verwendung eines x86-Kompilierers 2004 kompiliert werden kann, um einen x86-Binärcode 2006 zu erzeugen, der von einem Prozessor mit mindestens einem x86-Befehlssatzkern 2016 nativ ausgeführt werden kann. Der Prozessor mit mindestens einem x86-Befehlssatzkern 2016 stellt jeden Prozessor dar, der im Wesentlichen die gleichen Funktionen durchführen kann wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern, und zwar durch kompatibles Ausführen oder anderweitiges Verarbeiten (1) eines wesentlichen Abschnitts des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) von Objektcodeversionen von Anwendungen oder einer anderen Software, die dazu vorgesehen sind, auf einem Intel-Prozessor mit mindestens einem x86-Befehlssatzkern zu laufen, um im Wesentlichen das gleiche Ergebnis zu erzielen wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern. Der x86-Kompilierer 2004 stellt einen Kompilierer dar, der so ausgelegt ist, dass er einen x86-Binärcode 2006 (z. B. Objektcode) erzeugt, der mit oder ohne weitere Verknüpfungsverarbeitung auf dem Prozessor mit dem mindestens einen x86-Befehlssatzkern 2016 ausgeführt werden kann. Auf im Wesentlichen gleiche Weise zeigt 20, dass das Programm in der Hochsprache 2002 unter Verwendung eines Alternativ-Befehlssatz-Kompilierers 2008 kompiliert werden kann, um einen Alternativ-Befehlssatz-Binärcode 2010 zu erzeugen, der von einem Prozessor ohne mindestens einen x86-Befehlssatzkern 2014 (z. B. einem Prozessor mit Kernen, die einen MIPS-Befehlssatz von MIPS Technologies, Sunnyvale, CA, ausführen und/oder den ARM-Befehlssatz von ARM Holding, Sunnyvale, CA ausführen) nativ ausgeführt werden kann. Der Befehlsumwandler 2012 wird verwendet, um den x86-Binärcode 2006 in einen Code umzuwandeln, der von dem Prozessor ohne einen x86-Befehlssatzkern 2014 nativ ausgeführt werden kann. Es ist nicht wahrscheinlich, dass dieser umgewandelte Code der gleiche ist wie der Alternativ-Befehlssatz-Binärcode 2010, da es schwierig ist, einen Befehlsumwandler herzustellen, der dazu in der Lage ist; der umgewandelte Code erfüllt jedoch die allgemeine Operation und ist aus Befehlen aus dem alternativen Befehlssatz aufgebaut. Somit stellt der Befehlsumwandler 2012 eine Software, Firmware, Hardware oder eine Kombination daraus dar, die es durch Emulation, Simulation oder einen anderen Prozess einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen x86-Befehlssatzprozessor oder -kern aufweist, ermöglicht, den x86-Binärcode 2006 auszuführen.
  • Komponenten, Merkmale und Details, die für jede von 38 beschrieben worden sind, können wahlweise auch in 2 verwendet werden. Komponenten, Merkmale und Details, die für jede von 45 beschrieben worden sind, können wahlweise auch in 3 verwendet werden. Komponenten, Merkmale und Details, die für jede von 78 beschrieben worden sind, können wahlweise auch in 6 verwendet werden. Ferner können Komponenten, Merkmale und Details, die für die hier beschriebene Einrichtung beschrieben worden sind, wahlweise auch in den hier beschriebenen Verfahren verwendet und/oder auf diese angewendet werden, die bei Ausführungsformen von und/oder mit einer solchen Einrichtung durchgeführt werden können. Jeder der hier beschriebenen Prozessoren kann in jedem der hier offengelegten Computersysteme oder anderen Systemen vorgesehen sein. Bei einigen Ausführungsformen können die Befehle jedes der hier offengelegten Befehlsformate aufweisen, obwohl dies nicht erforderlich ist.
  • In der Beschreibung und den Patentansprüchen können die Ausdrücke ”gekoppelt” und/oder ”verbunden” zusammen mit ihren Ableitungen verwendet worden sein. Diese Ausdrücke gelten nicht als Synonyme. Vielmehr kann bei Ausführungsformen ”verbunden” verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente in direktem physischen und/oder elektrischen Kontakt miteinander stehen. ”Gekoppelt” kann bedeuten, dass zwei oder mehr Elemente in direktem physischen und/oder elektrischen Kontakt mit einander stehen. ”Gekoppelt” kann jedoch auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander stehen, jedoch trotzdem miteinander kooperieren oder interagieren. Zum Beispiel kann eine Ausführungseinheit über eine oder mehrere zwischengeschaltete Komponenten mit einem Register und/oder einer Dekodierungseinheit gekoppelt sein. In den Figuren werden Pfeile verwendet, um die Verbindungen und Kopplungen anzuzeigen.
  • Der Ausdruck ”und/oder” kann verwendet worden sein. Wie hier verwendet, bedeutet der Ausdruck ”und/oder” der/die/das eine oder der/die/das andere oder beide (z. B. bedeutet A und/oder B A oder B oder sowohl A als auch B).
  • In der vorstehenden Beschreibung sind Details dargelegt worden, um ein gründliches Verständnis der Ausführungsformen zu ermöglichen. Andere Ausführungsformen können jedoch auch ohne einige der spezifischen Details in die Praxis umgesetzt werden. Der Umfang der Erfindung wird nicht durch die oben dargelegten spezifischen Beispiele bestimmt, sondern nur durch die nachstehenden Patentansprüche. In anderen Fällen sind bekannte Schaltungen, Strukturen, Vorrichtungen und Operationen in Form von Blockschaltbildern und/oder nicht detailliert gezeigt, um das Verständnis der Beschreibung nicht zu verkomplizieren. Wo es angemessen erscheint, sind Bezugszeichen oder Endteile von Bezugszeichen in den Figuren wiederholt worden, um entsprechende oder analoge Elemente anzuzeigen, die wahlweise im Wesentlichen gleiche oder gleiche Charakteristiken aufweisen können, sofern nichts anderes angegeben oder klar ersichtlich ist.
  • Bestimmte Operationen können durch Hardware-Komponenten durchgeführt werden oder können in maschinenausführbaren oder schaltungsausführbaren Befehlen enthalten sein, die bewirken und/oder dazu führen können, dass eine Maschine, Schaltung oder Hardware-Komponente (z. B. ein Prozessor, Abschnitt eines Prozessors, eine Schaltung etc.), die mit den Befehlen programmiert sind, die Operationen durchführt. Die Operationen können ferner wahlweise von einer Kombination aus Hardware und Software durchgeführt werden. Ein Prozessor, eine Maschine, Schaltung oder Hardware kann eine spezifische oder spezielle Schaltungsanordnung oder andere Logik (z. B. eine Hardware, die potenziell mit einer Firmware und/oder Software kombiniert ist) aufweisen und ist so ausgelegt, dass er/sie den Befehl ausführt und/oder verarbeitet und ein Ergebnis in Reaktion auf den Befehl speichert.
  • Einige Ausführungsformen umfassen einen Herstellartikel (z. B. ein Computerprogrammprodukt), der ein maschinenlesbares Medium aufweist. Das Medium kann einen Mechanismus aufweisen, der Informationen in einer Form bereitstellt, zum Beispiel speichert, die für die Maschine lesbar ist. Das maschinenlesbare Medium kann einen Befehl oder eine Sequenz von Befehlen bereitstellen oder speichern, die, falls und/oder wenn sie von einer Maschine ausgeführt werden, dazu vorgesehen sind zu bewirken oder dazu zu führen, dass die Maschine eine(s) der hier offengelegten Operationen, Verfahren oder Techniken durchführt. Das maschinenlesbare Medium kann eine oder mehrere der Ausführungsformen der hier offengelegten Befehle speichern oder anderweitig bereitstellen.
  • Bei einigen Ausführungsformen kann das maschinenlesbare Medium ein reales und/oder nichttransitorisches maschinenlesbares Speicherungsmedium aufweisen. Zum Beispiel kann das reale und/oder nichttransitorische maschinenlesbare Speicherungsmedium eine Floppy Disk, ein optisches Speicherungsmedium, eine optische Platte, eine optische Datenspeicherungsvorrichtung, eine CD-ROM, eine magnetische Platte, eine magnetooptische Platte, einen Nurlesespeicher (ROM), einen programmierbaren ROM (PROM), einen löschbaren und programmierbaren ROM (EPROM), einen elektrisch löschbaren und programmierbaren ROM (EEPROM), einen Schreib-/Lesespeicher (RAM), einen statischen RAM (SRAM), einen dynamischen RAM (DRAM), einen Flashspeicher, einen Phasenwechsel-Speicher, ein Phasenwechsel-Datenspeicherungsmaterial, einen nichtflüchtigen Speicher, eine nichtflüchtige Datenspeicherungsvorrichtung, einen nichttransitorischen Speicher, eine nichttransitorische Datenspeicherungsvorrichtung oder dergleichen umfassen.
  • Beispiele für geeignete Maschinen umfassen, sind jedoch nicht beschränkt auf, einen Universalprozessor, einen Spezialprozessor, eine Befehlsverarbeitungseinrichtung, eine digitale logische Schaltung, eine integrierte Schaltung oder dergleichen. Weitere Beispiele für geeignete Maschinen umfassen eine Rechnervorrichtung oder andere elektronische Vorrichtung, die einen Prozessor, eine Befehlsverarbeitungseinrichtung, digitale logische Schaltung oder integrierte Schaltung aufweist. Beispiele für solche Rechnervorrichtungen und elektronische Vorrichtungen umfassen, sind jedoch nicht beschränkt auf, Desktop-Computer, Laptop-Computer, Notebook-Computer, Tablet-Computer, Netbooks, Smartphones, Mobiltelefone, Server, Netzvorrichtungen (z. B. Router), mobile Internetvorrichtungen (mobile internet devices – MIDs), Medienplayer, Smart-Fernseher, Nettops, Set-Top-Boxen und Videospiel-Controller.
  • Eine Bezugnahme in dieser Patentschrift auf ”eine der Ausführungsformen”, ”eine Ausführungsform”, ”eine oder mehrere Ausführungsformen”, ”einige Ausführungsformen” zeigt zum Beispiel an, dass ein besonderes Merkmal bei der Umsetzung der Erfindung in die Praxis vorgesehen sein kann, dies jedoch nicht notwendigerweise erforderlich ist. Auf im Wesentlichen gleiche Weise sind in der Beschreibung verschiedene Merkmale manchmal zu einer einzelnen Ausführungsform, Figur oder Beschreibung derselben zusammengefasst, um die Offenlegung zu straffen und das Verständnis der verschiedenen erfinderischen Aspekte zu vereinfachen. Diese Art der Offenlegung darf jedoch nicht so ausgelegt werden, dass sie die Absicht wiedergibt, dass die beanspruchten Ausführungsformen mehr Merkmale benötigen als ausdrücklich in jedem Patentanspruch aufgeführt sind. Vielmehr liegen, wie die nachfolgenden Patentansprüche wiedergeben, die erfinderischen Aspekte in weniger als sämtlichen Merkmalen einer einzelnen offengelegten Ausführungsform. Somit sind die nachfolgenden Patentansprüche, die sich an die Detaillierte Beschreibung anschließen, hiermit ausdrücklich in die Detaillierte Beschreibung integriert, wobei jeder Patentanspruch als separate Ausführungsform für sich allein steht.
  • BEISPIELHAFTE AUSFÜHRUNGSFORMEN
  • Die folgenden Beispiele betreffen weitere Ausführungsformen. Spezifische Details in den Beispielen können an jeder Stelle bei einer oder mehreren Ausführungsformen verwendet werden.
  • Beispiel 1 ist ein Prozessor oder eine andere Einrichtung, der/die eine Vielzahl von Gepacktdaten-Registern und eine Dekodierungseinheit zum Dekodieren eines Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls aufweist. Der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl zeigt ein Gepacktdaten-Register der Vielzahl von Gepacktdaten-Registern an, das Quell-Gepackt-Speicherindizes aufweist. Die Quell-Gepackt-Speicherindizes weisen eine Vielzahl von Speicherindizes auf. Der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl liefert dem Prozessor einen Keine-Lokalität-Hinweis für Datenelemente, auf die mit den Speicherindizes zugegriffen wird. Der Prozessor weist ferner eine Ausführungseinheit auf, die mit der Dekodierungseinheit und der Vielzahl von Gepacktdaten-Registern gekoppelt ist. Die Ausführungseinheit greift in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl auf die Datenelemente an Speicherstellen zu, die auf den Speicherindizes basieren.
  • Beispiel 2 umfasst den Prozessor von Beispiel 1 und umfasst ferner eine Cache-Hierarchie, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Vektor-Ladebefehl aufweist. Die Ausführungseinheit lädt in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl die Datenelemente aus den Speicherstellen. Die Cache-Hierarchie führt in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl wahlweise kein Cachen der aus den Speicherstellen geladenen Datenelemente durch.
  • Beispiel 3 umfasst den Prozessor von einem der Beispiele 1–2 und umfasst ferner eine Cache-Hierarchie, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Vektor-Ladebefehl aufweist. Die Ausführungseinheit lädt in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl die Datenelemente aus den Speicherstellen. Die Cache-Hierarchie teilt in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl bei einem Cache-Nichttreffer für ein Datenelement wahlweise keinen Platz in der Cache-Hierarchie für das Datenelement zu, das aus dem Speicher geladen wird.
  • Beispiel 4 umfasst den Prozessor von einem der Beispiele 1–3 und umfasst ferner eine Cache-Hierarchie, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Vektor-Ladebefehl aufweist. Die Ausführungseinheit lädt in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl die Datenelemente aus den Speicherstellen. Die Cache-Hierarchie gibt in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl bei einem Cache-Treffer für ein Datenelement wahlweise nicht mehr als eine halbe Cache-Line aus der Cache-Hierarchie aus.
  • Beispiel 5 umfasst den Prozessor von Beispiel 4, wobei die Cache-Hierarchie in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl beim Cache-Treffer für das Datenelement wahlweise nicht mehr als ein einzelnes Datenelement aus der Cache-Hierarchie ausgibt.
  • Beispiel 6 umfasst den Prozessor von einem der Beispiele 1–4 und umfasst ferner einen Speicher-Controller, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Vektor-Ladebefehl aufweist. Der Speicher-Controller lädt in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl wahlweise nicht mehr als die Datenmenge einer halben Cache-Line für jedes der aus dem Speicher geladenen Datenelemente.
  • Beispiel 7 umfasst den Prozessor von Beispiel 6, wobei der Speicher-Controller in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl wahlweise nicht mehr als 128 Bits für jedes der aus dem Speicher geladenen Datenelemente lädt.
  • Beispiel 8 umfasst den Prozessor von einem der Beispiele 1–7, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Erfassungsbefehl aufweist. Der Keine-Lokalität-Hinweis-Erfassungsbefehl zeigt ein Ziel-Gepacktdaten-Register der Vielzahl von Gepacktdaten-Registern an. Die Ausführungseinheit speichert in Reaktion auf den Keine-Lokalität-Hinweis-Erfassungsbefehl ein Gepacktdaten-Ergebnis in dem Ziel-Gepacktdaten-Register. Das Gepacktdaten-Ergebnis weist die aus den Speicherstellen erfassten Datenelemente auf.
  • Beispiel 9 umfasst den Prozessor von Beispiel 1 und umfasst ferner einen Speicher-Controller, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Vektor-Schreibbefehl aufweist. Die Ausführungseinheit schreibt in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Schreibbefehl Datenelemente von Quell-Gepacktdaten, die von dem Befehl angezeigt werden, über die Datenelemente an den Speicherstellen. Der Speicher-Controller schreibt in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Schreibbefehl wahlweise nicht mehr als die Datenmenge einer halben Cache-Line für jedes der Datenelemente der Quell-Gepacktdaten, die in den Speicher geschrieben sind.
  • Beispiel 10 umfasst den Prozessor von einem der Beispiele 1 und 9 und umfasst ferner eine Cache-Hierarchie, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Vektor-Schreibbefehl aufweist. Die Ausführungseinheit schreibt in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Schreibbefehl Datenelemente von Quell-Gepacktdaten, die von dem Befehl angezeigt werden, über die Datenelemente an den Speicherstellen. Die Cache-Hierarchie bringt in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Schreibbefehl bei einem Cache-Treffer für ein Datenelement in einem Cache eines niedrigeren Levels wahlweise keine Cache-Line, die dem Cache-Treffer zugeordnet ist, in einen Cache eines höheren Levels ein.
  • Beispiel 11 umfasst den Prozessor von einem der Beispiele 1, 9 und 10, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Streubefehl aufweist und wobei der Keine-Lokalität-Hinweis-Streubefehl ein zweites Gepacktdaten-Register der Vielzahl von Gepacktdaten-Registern anzeigt, das Quell-Gepacktdaten aufweist, die eine Vielzahl von Datenelementen umfassen. Die Ausführungseinheit schreibt in Reaktion auf den Keine-Lokalität-Hinweis-Streubefehl wahlweise die Datenelemente der Quell-Gepacktdaten über die Datenelemente an den Speicherstellen.
  • Beispiel 12 umfasst den Prozessor von einem der Beispiele 1–11, wobei die Dekodierungseinheit den Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl dekodiert, der wahlweise mindestens ein Bit umfasst, das einen ersten Wert aufweist, der den Keine-Lokalität-Hinweis anzeigt, und einen zweiten Wert aufweist, der das Nichtvorhandensein des Keine-Lokalität-Hinweises anzeigt.
  • Beispiel 13 umfasst den Prozessor von einem der Beispiele 1–11, wobei die Dekodierungseinheit den Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl dekodiert, der wahlweise eine Vielzahl von Bits umfasst, die einen ersten Wert zum Anzeigen, dass der Keine-Lokalität-Hinweis ein Keine-zeitliche-Lokalität-Hinweis ist, einen zweiten Wert zum Anzeigen, dass der Keine-Lokalität-Hinweis ein Keine-räumliche-Lokalität-Hinweis ist, und einen dritten Wert zum Anzeigen, dass der Keine-Lokalität-Hinweis ein Keine-zeitliche-Lokalität- und Keine-räumliche-Lokalität-Hinweis ist, aufweisen.
  • Beispiel 14 umfasst den Prozessor von einem der Beispiele 1–13, wobei die Dekodierungseinheit den Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl dekodiert, der wahlweise eine Quell-Gepacktdaten-Operationsmaske anzeigt.
  • Beispiel 15 umfasst ein Verfahren in einem Prozessor, das das Empfangen eines Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls umfasst. Der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl zeigt Quell-Gepackt-Speicherindizes mit einer Vielzahl von Speicherindizes an. Der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl liefert dem Prozessor einen Keine-Lokalität-Hinweis für Datenelemente, auf die mit den Speicherindizes zugegriffen wird. Das Verfahren umfasst ferner das Zugreifen auf die Datenelemente an Speicherstellen, die auf den Speicherindizes basieren, in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl.
  • Beispiel 16 umfasst das Verfahren von Beispiel 15, wobei das Empfangen des Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls das Empfangen eines Keine-Lokalität-Hinweis-Vektor-Ladebefehls umfasst und das Zugreifen das Laden der Datenelemente aus den Speicherstellen umfasst. Das Verfahren umfasst ferner wahlweise das Wegfallenlassen des Cachens von Datenelementen, die aus dem Speicher geladen werden, in eine Cache-Hierarchie.
  • Beispiel 17 umfasst das Verfahren von einem der Beispiele 15–16, wobei das Empfangen des Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls das Empfangen eines Keine-Lokalität-Hinweis-Vektor-Ladebefehls umfasst und wobei das Zugreifen das Laden der Datenelemente aus den Speicherstellen umfasst. Das Verfahren umfasst ferner bei einem Cache-Treffer für ein Datenelement in einer Cache-Hierarchie wahlweise das Ausgeben von nicht mehr als einer halben Cache-Line aus der Cache-Hierarchie.
  • Beispiel 18 umfasst das Verfahren von einem der Beispiele 15–17, wobei das Empfangen des Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls das Empfangen eines Keine-Lokalität-Hinweis-Vektor-Ladebefehls umfasst. Das Zugreifen umfasst das Laden der Datenelemente aus den Speicherstellen, einschließlich des wahlweisen Ladens einer Datenmenge von nicht mehr als einer halben Cache-Line für jedes Datenelement, das aus dem Speicher geladen wird.
  • Beispiel 19 umfasst das Verfahren von Beispiel 15, wobei das Empfangen des Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls das Empfangen eines Keine-Lokalität-Hinweis-Vektor-Schreibbefehls umfasst. Das Zugreifen umfasst das Schreiben von Datenelementen von Quell-Gepacktdaten, die von dem Befehl angezeigt werden, über Datenelemente an den Speicherstellen, einschließlich des wahlweisen Schreibens einer Datenmenge von nicht mehr als einer halben Cache-Line für jedes Datenelement, das in den Speicher geschrieben wird.
  • Beispiel 20 umfasst das Verfahren von einem der Beispiele 15 und 19, wobei das Empfangen des Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls das Empfangen eines Keine-Lokalität-Hinweis-Vektor-Schreibbefehls umfasst. Das Zugreifen umfasst das Schreiben von Datenelementen von Quell-Gepacktdaten, die von dem Befehl angezeigt werden, über Datenelemente an den Speicherstellen. Das Verfahren umfasst ferner bei einem Cache-Treffer für ein Datenelement in einem Cache eines niedrigeren Levels wahlweise das Nichteinbringen einer Cache-Line, die dem Cache-Treffer zugeordnet ist, in einen Cache eines höheren Levels.
  • Beispiel 21 umfasst ein System zum Verarbeiten von Befehlen, das eine Zwischenverbindung und einen Prozessor, der mit der Zwischenverbindung gekoppelt ist, aufweist. Der Prozessor empfangt einen Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl. Der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl zeigt Quell-Gepackt-Speicherindizes an. Die Quell-Gepackt-Speicherindizes weisen eine Vielzahl von Speicherindizes auf. Der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl liefert dem Prozessor einen Keine-Lokalität-Hinweis für Datenelemente, auf die mit den Speicherindizes zugegriffen wird. Der Prozessor greift in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl auf die Datenelemente an Speicherstellen zu, die auf den Speicherindizes basieren. Das System weist ferner einen dynamischen Schreib-/Lesespeicher (DRAM) auf, der mit der Zwischenverbindung gekoppelt ist.
  • Beispiel 22 umfasst das System von Beispiel 21, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Erfassungsbefehl aufweist. Der Prozessor führt in Reaktion auf den Keine-Lokalität-Hinweis-Erfassungsbefehl wahlweise kein Cachen von in Reaktion auf den Keine-Lokalität-Hinweis-Erfassungsbefehl aus dem Speicher geladenen Datenelementen in eine Cache-Hierarchie durch.
  • Beispiel 23 umfasst einen Herstellartikel, einschließlich eines nichttransitorischen maschinenlesbaren Speicherungsmediums. Das nichttransitorische maschinenlesbare Speicherungsmedium speichert einen Keine-Lokalität-Hinweis-Vektor-Ladebefehl. Der Keine-Lokalität-Hinweis-Vektor-Ladebefehl zeigt ein Gepacktdaten-Register an, das Quell-Gepackt-Speicherindizes aufweist, die eine Vielzahl von Speicherindizes aufweisen. Der Befehl zeigt ferner ein Ziel-Gepacktdaten-Register an. Der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl stellt einen Keine-Lokalität-Hinweis bereit. Der Keine-Lokalität-Hinweis-Vektor-Ladebefehl bewirkt bei Ausführung durch eine Maschine, dass die Maschine Operationen durchführt, einschließlich des Speicherns eines Gepacktdaten-Ergebnisses in dem Ziel-Gepacktdaten-Register. Das Gepacktdaten-Ergebnis umfasst Datenelemente, die aus Speicherstellen erfasst worden sind, welche auf den Speicherindizes basieren. Die Operationen umfassen ferner das Wegfallenlassen des Cachens von Datenelementen, die aus dem Speicher geladen worden sind, in einer Cache-Hierarchie.
  • Beispiel 24 umfasst den Herstellartikel von Beispiel 23, wobei der Befehl wahlweise bewirkt, dass die Maschine eine Datenmenge von weniger als einer halben Cache-Line für jedes aus dem Speicher geladene Datenelement lädt.
  • Beispiel 25 umfasst einen Prozessor oder eine andere Einrichtung, der/die so ausgelegt ist, dass er/sie das Verfahren von einem der Beispiele 15–20 durchführt.
  • Beispiel 26 umfasst einen Prozessor oder eine andere Einrichtung, der/die ein Mittel zum Durchführen des Verfahrens von einem der Beispiele 15–20 aufweist.
  • Beispiel 27 umfasst einen Prozessor, der jede Kombination aus Modulen, Einheiten, Logik, Schaltungsanordnung und Mitteln zum Durchführen des Verfahrens von einem der Beispiele 15–20 aufweist.
  • Beispiel 28 umfasst einen Herstellartikel, der ein optional nichttransitorisches maschinenlesbares Medium aufweist, das wahlweise einen Befehl speichert oder anderweitig bereitstellt, der, falls und/oder wenn er von einem Prozessor, Computersystem oder einer anderen Maschine ausgeführt wird, dazu vorgesehen ist zu bewirken, dass die Maschine das Verfahren von einem der Beispiele 15-20 durchführt.
  • Beispiel 29 umfasst ein Computersystem oder eine andere elektronische Vorrichtung, das/die eine Zwischenverbindung, den Prozessor von einem der Beispiele 1–14, der mit der Zwischenverbindung gekoppelt ist, und mindestens eine Komponente aufweist, die mit der Zwischenverbindung gekoppelt ist und die aus einem dynamischen Schreib-/Lesespeicher (DRAM), einer Netzschnittstelle, einem Grafikchip, einem Drahtloskommunikationschip, einer Antenne eines globalen Systems für mobile Kommunikation (Global System for Mobile Communications – GSM), einem Phasenwechsel-Speicher und einer Videokamera ausgewählt ist.
  • Beispiel 30 umfasst einen Prozessor oder eine andere Einrichtung, wie im Wesentlichen hier beschrieben worden ist.
  • Beispiel 31 umfasst einen Prozessor oder eine andere Einrichtung, der/die so ausgelegt ist, dass er/sie jedes Verfahren durchführt, wie im Wesentlichen hier beschrieben worden ist.
  • Beispiel 32 umfasst einen Prozessor oder eine andere Einrichtung, der/die ein Mittel zum Durchführen jedes Verfahrens, wie im Wesentlichen hier beschrieben worden ist, aufweist.
  • Beispiel 33 umfasst einen Prozessor oder eine andere Einrichtung, der/die so ausgelegt ist, dass er/sie jeden Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl ausführt, wie hier im Wesentlichen beschrieben worden ist.
  • Beispiel 34 umfasst einen Prozessor oder eine andere Einrichtung, der/die ein Mittel zum Durchführen jedes Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls, wie hier im Wesentlichen beschrieben worden ist, aufweist.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • Intel® Advanced Vector Extensions Programming Reference, Dokument-Referenznummer 319433-011, veröffentlicht im Juni 2011 [0003]
    • Intel® 64 and IA-32 Architectures Software Developers Manual, Oktober 2011 [0083]
    • Intel® Advanced Vector Extensions Programming Reference, Juni 2011 [0083]

Claims (25)

  1. Prozessor, der umfasst: eine Vielzahl von Gepacktdaten-Registern; eine Dekodierungseinheit zum Dekodieren eines Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl ein Gepacktdaten-Register der Vielzahl von Gepacktdaten-Registern, das Quell-Gepackt-Speicherindizes aufweist, anzeigt, wobei die Quell-Gepackt-Speicherindizes eine Vielzahl von Speicherindizes aufweisen, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis zu dem Prozessor liefert für Datenelemente, auf die mit den Speicherindizes zugegriffen wird; und eine Ausführungseinheit, die mit der Dekodierungseinheit und der Vielzahl von Gepacktdaten-Registern gekoppelt ist, wobei die Ausführungseinheit in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl auf die Datenelemente an Speicherstellen zugreift, die auf den Speicherindizes basieren.
  2. Prozessor nach Anspruch 1, der ferner eine Cache-Hierarchie umfasst, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Vektor-Ladebefehl umfasst, wobei die Ausführungseinheit in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl die Datenelemente aus den Speicherstellen lädt und wobei die Cache-Hierarchie in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl kein Cachen der aus den Speicherstellen geladenen Datenelemente durchführt.
  3. Prozessor nach Anspruch 1 oder 2, der ferner eine Cache-Hierarchie umfasst, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Vektor-Ladebefehl umfasst, wobei die Ausführungseinheit in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl die Datenelemente aus den Speicherstellen lädt und wobei die Cache-Hierarchie in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl bei einem Cache-Nichttreffer für ein Datenelement keinen Platz in der Cache-Hierarchie für das Datenelement, das aus dem Speicher geladen wird, zuteilt.
  4. Prozessor nach Anspruch 1, der ferner eine Cache-Hierarchie umfasst, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Vektor Ladebefehl umfasst, wobei die Ausführungseinheit in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl die Datenelemente aus den Speicherstellen lädt und wobei die Cache-Hierarchie in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl bei einem Cache-Treffer für ein Datenelement nicht mehr als eine halbe Cache-Line aus der Cache-Hierarchie ausgibt.
  5. Prozessor nach einem der Ansprüche 1 bis 3, wobei die Cache-Hierarchie in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl beim Cache-Treffer für das Datenelement nicht mehr als ein einzelnes Datenelement aus der Cache-Hierarchie ausgibt.
  6. Prozessor nach einem der Ansprüche 1 bis 5, der ferner einen Speicher-Controller umfasst, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Vektor-Ladebefehl umfasst und wobei der Speicher-Controller in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl nicht mehr als die Datenmenge einer halben Cache-Line für jedes der aus dem Speicher geladenen Datenelemente lädt.
  7. Prozessor nach Anspruch 6, wobei der Speicher-Controller in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Ladebefehl nicht mehr als 128 Bits für jedes der aus dem Speicher geladenen Datenelemente lädt.
  8. Prozessor nach einem der Ansprüche 1 bis 7, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Erfassungsbefehl umfasst, wobei der Keine-Lokalität-Hinweis-Erfassungsbefehl ein Ziel-Gepacktdaten-Register der Vielzahl von Gepacktdaten-Registern anzeigt, wobei die Ausführungseinheit in Reaktion auf den Keine-Lokalität-Hinweis-Erfassungsbefehl ein Gepacktdaten-Ergebnis in dem Ziel-Gepacktdaten-Register speichert und wobei das Gepacktdaten-Ergebnis die aus den Speicherstellen erfassten Datenelemente aufweist.
  9. Prozessor nach Anspruch 1, der ferner einen Speicher-Controller umfasst, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Vektor-Schreibbefehl umfasst, wobei die Ausführungseinheit in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Schreibbefehl Datenelemente von Quell-Gepacktdaten, die von dem Befehl angezeigt werden, über die Datenelemente an den Speicherstellen schreibt und wobei der Speicher-Controller in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Schreibbefehl nicht mehr als die Datenmenge einer halben Cache-Line für jedes der Datenelemente der Quell-Gepacktdaten, die in den Speicher geschrieben sind, schreibt.
  10. Prozessor nach Anspruch 1 oder 9, der ferner eine Cache-Hierarchie umfasst, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Vektor-Schreibbefehl umfasst, wobei die Ausführungseinheit in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Schreibbefehl Datenelemente von Quell-Gepacktdaten, die von dem Befehl angezeigt werden, über die Datenelemente an den Speicherstellen schreibt und wobei die Cache-Hierarchie in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Schreibbefehl bei einem Cache-Treffer für ein Datenelement in einem Cache eines niedrigeren Levels keine Cache-Line, die dem Cache-Treffer zugeordnet ist, in einen Cache eines höheren Levels einbringt.
  11. Prozessor nach einem der Ansprüche 1 oder 9 oder 10, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis-Streubefehl umfasst, wobei der Keine-Lokalität-Hinweis-Streubefehl ein zweites Gepacktdaten-Register der Vielzahl von Gepacktdaten-Registern anzeigt, das Quell-Gepacktdaten aufweist, die eine Vielzahl von Datenelementen aufweisen, wobei die Ausführungseinheit in Reaktion auf den Keine-Lokalität-Hinweis-Streubefehl die Datenelemente der Quell-Gepacktdaten über die Datenelemente an den Speicherstellen schreibt.
  12. Prozessor nach einem der Ansprüche 1 bis 11, wobei die Dekodierungseinheit den Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl dekodiert, der mindestens ein Bit aufweist, das einen ersten Wert aufweist, der den Keine-Lokalität-Hinweis anzeigt, und einen zweiten Wert aufweist, der das Nichtvorhandensein des Keine-Lokalität-Hinweises anzeigt.
  13. Prozessor nach einem der Ansprüche 1 bis 11, wobei die Dekodierungseinheit den Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl dekodiert, der eine Vielzahl von Bits aufweist, die einen ersten Wert zum Anzeigen, dass der Keine-Lokalität-Hinweis ein Keine-zeitliche-Lokalität-Hinweis ist, einen zweiten Wert zum Anzeigen, dass der Keine-Lokalität-Hinweis ein Keine-räumliche-Lokalität-Hinweis ist, und einen dritten Wert zum Anzeigen, dass der Keine-Lokalität-Hinweis ein Keine-zeitliche-Lokalität- und Keine-räumliche-Lokalität-Hinweis ist, aufweisen.
  14. Prozessor nach einem der Ansprüche 1 bis 11, wobei die Dekodierungseinheit den Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl dekodiert, der eine Quell-Gepacktdaten-Operationsmaske anzeigt.
  15. Verfahren in einem Prozessor, das umfasst: Empfangen eines Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl Quell-Gepackt-Speicherindizes mit einer Vielzahl von Speicherindizes anzeigt, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis zu dem Prozessor liefert für Datenelemente, auf die mit den Speicherindizes zugegriffen wird; und Zugreifen auf die Datenelemente an Speicherstellen, die auf den Speicherindizes basieren, in Reaktion auf den Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl.
  16. Verfahren nach Anspruch 15, wobei das Empfangen des Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls das Empfangen eines Keine-Lokalität-Hinweis-Vektor-Ladebefehls umfasst, wobei das Zugreifen das Laden der Datenelemente aus den Speicherstellen umfasst, und das ferner das Wegfallenlassen des Cachens von Datenelementen, die aus dem Speicher geladen werden, in eine Cache-Hierarchie umfasst.
  17. Verfahren nach Anspruch 15, wobei das Empfangen des Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls das Empfangen eines Keine-Lokalität-Hinweis-Vektor-Ladebefehls umfasst, wobei das Zugreifen das Laden der Datenelemente aus den Speicherstellen umfasst, und das ferner bei einem Cache-Treffer für ein Datenelement in einer Cache-Hierarchie das Ausgeben von nicht mehr als einer halben Cache-Line aus der Cache-Hierarchie umfasst.
  18. Verfahren nach einem der Ansprüche 15 oder 16, wobei das Empfangen des Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls das Empfangen eines Keine-Lokalität-Hinweis-Vektor-Ladebefehls umfasst, wobei das Zugreifen das Laden der Datenelemente aus den Speicherstellen umfasst, einschließlich des Ladens einer Datenmenge von nicht mehr als einer halben Cache-Line für jedes aus dem Speicher geladene Datenelement.
  19. Verfahren nach Anspruch 15, wobei das Empfangen des Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls das Empfangen eines Keine-Lokalität-Hinweis-Vektor-Schreibbefehls umfasst, wobei das Zugreifen das Schreiben von Datenelementen von Quell-Gepacktdaten, die von dem Befehl angezeigt werden, über Datenelemente an den Speicherstellen umfasst, einschließlich des Schreibens einer Datenmenge von nicht mehr als einer halben Cache-Line für jedes Datenelement, das in den Speicher geschrieben wird.
  20. Verfahren nach Anspruch 15 oder 19, wobei das Empfangen des Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehls das Empfangen eines Keine-Lokalität-Hinweis-Vektor-Schreibbefehls umfasst, wobei das Zugreifen das Schreiben von Datenelementen von Quell-Gepacktdaten, die von dem Befehl angezeigt werden, über Datenelemente an den Speicherstellen umfasst, und ferner bei einem Cache-Treffer für ein Datenelement in einem Cache eines niedrigeren Levels das Nichteinbringen einer Cache-Line, die dem Cache-Treffer zugeordnet ist, in einen Cache eines höheren Levels umfasst.
  21. Herstellartikel, der ein nichttransitorisches maschinenlesbares Speicherungsmedium umfasst, wobei das nichttransitorische maschinenlesbare Speicherungsmedium einen Keine-Lokalität-Hinweis-Vektor-Ladebefehl speichert, wobei der Keine-Lokalität-Hinweis-Vektor-Ladebefehl ein Gepacktdaten-Register, das Quell-Gepackt-Speicherindizes aufweist, die eine Vielzahl von Speicherindizes aufweisen, und ein Ziel-Gepacktdaten-Register anzeigt, wobei der Keine-Lokalität-Hinweis-Vektor-Speicherzugriffsbefehl einen Keine-Lokalität-Hinweis bereitstellt und der Keine-Lokalität-Hinweis-Vektor-Ladebefehl bei Ausführung durch eine Maschine bewirkt, dass die Maschine Operationen durchführt, die umfassen: Speichern eines Gepacktdaten-Ergebnisses in dem Ziel-Gepacktdaten-Register, wobei das Gepacktdaten-Ergebnis Datenelemente aufweist, die aus Speicherstellen erfasst worden sind, welche auf den Speicherindizes basieren; und Wegfallenlassen des Cachens von Datenelementen, die aus dem Speicher geladen worden sind, in einer Cache-Hierarchie.
  22. Herstellartikel nach Anspruch 21, wobei der Befehl bewirkt, dass die Maschine eine Datenmenge von weniger als einer halben Cache-Line für jedes aus dem Speicher geladene Datenelement lädt.
  23. Einrichtung, die ein Mittel zum Durchführen des Verfahrens nach einem der Ansprüche 15 bis 20 umfasst.
  24. Herstellartikel, der ein nichttransitorisches maschinenlesbares Medium umfasst, das einen Befehl speichert, der bei Ausführung durch eine Maschine dazu vorgesehen ist zu bewirken, dass die Maschine das Verfahren nach einem der Ansprüche 15 bis 20 durchführt.
  25. Elektronische Vorrichtung, die eine Zwischenverbindung, den Prozessor nach einem der Ansprüche 1 bis 14, der mit der Zwischenverbindung gekoppelt ist, und einen dynamischen Schreib-/Lesespeicher (DRAM), der mit der Zwischenverbindung gekoppelt ist, umfasst.
DE102015007571.3A 2014-07-18 2015-06-11 Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren, -verfahren, -systeme und -befehle Active DE102015007571B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/335,006 2014-07-18
US14/335,006 US9600442B2 (en) 2014-07-18 2014-07-18 No-locality hint vector memory access processors, methods, systems, and instructions

Publications (2)

Publication Number Publication Date
DE102015007571A1 true DE102015007571A1 (de) 2016-01-21
DE102015007571B4 DE102015007571B4 (de) 2024-05-02

Family

ID=55021835

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102015007571.3A Active DE102015007571B4 (de) 2014-07-18 2015-06-11 Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren, -verfahren, -systeme und -befehle

Country Status (4)

Country Link
US (7) US9600442B2 (de)
CN (3) CN115437971A (de)
DE (1) DE102015007571B4 (de)
TW (1) TWI567556B (de)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
US9600442B2 (en) * 2014-07-18 2017-03-21 Intel Corporation No-locality hint vector memory access processors, methods, systems, and instructions
US10248419B2 (en) * 2016-03-09 2019-04-02 International Business Machines Corporation In-memory/register vector radix sort
US10379855B2 (en) 2016-09-30 2019-08-13 Intel Corporation Processors, methods, systems, and instructions to load multiple data elements to destination storage locations other than packed data registers
US10261786B2 (en) * 2017-03-09 2019-04-16 Google Llc Vector processing unit
US10409727B2 (en) 2017-03-31 2019-09-10 Intel Corporation System, apparatus and method for selective enabling of locality-based instruction handling
US10402336B2 (en) * 2017-03-31 2019-09-03 Intel Corporation System, apparatus and method for overriding of non-locality-based instruction handling
US10503652B2 (en) * 2017-04-01 2019-12-10 Intel Corporation Sector cache for compression
US10705590B2 (en) 2017-11-28 2020-07-07 Google Llc Power-conserving cache memory usage
US10572259B2 (en) * 2018-01-22 2020-02-25 Arm Limited Hints in a data processing apparatus
US10831478B2 (en) * 2018-11-06 2020-11-10 International Business Machines Corporation Sort and merge instruction for a general-purpose processor
US10831502B2 (en) 2018-11-06 2020-11-10 International Business Machines Corporation Migration of partially completed instructions
US10831503B2 (en) 2018-11-06 2020-11-10 International Business Machines Corporation Saving and restoring machine state between multiple executions of an instruction
US11237970B2 (en) * 2018-11-07 2022-02-01 Micron Technology, Inc. Reduce data traffic between cache and memory via data access of variable sizes
US11113207B2 (en) * 2018-12-26 2021-09-07 Samsung Electronics Co., Ltd. Bypass predictor for an exclusive last-level cache
US11609858B2 (en) * 2018-12-26 2023-03-21 Samsung Electronics Co., Ltd. Bypass predictor for an exclusive last-level cache
US11615057B2 (en) * 2019-02-26 2023-03-28 Amir More Data compression and decompression facilitated by machine learning
CN111584011B (zh) * 2020-04-10 2023-08-29 中国科学院计算技术研究所 面向基因比对的细粒度并行负载特征抽取分析方法及系统
CN117591184B (zh) * 2023-12-08 2024-05-07 超睿科技(长沙)有限公司 Risc-v向量压缩乱序执行的实现方法及装置

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5966528A (en) 1990-11-13 1999-10-12 International Business Machines Corporation SIMD/MIMD array processor with vector processing
US5708849A (en) 1994-01-26 1998-01-13 Intel Corporation Implementing scatter/gather operations in a direct memory access device on a personal computer
US5829025A (en) 1996-12-17 1998-10-27 Intel Corporation Computer system and method of allocating cache memories in a multilevel cache hierarchy utilizing a locality hint within an instruction
US6275904B1 (en) 1998-03-31 2001-08-14 Intel Corporation Cache pollution avoidance instructions
US7467377B2 (en) 2002-10-22 2008-12-16 Intel Corporation Methods and apparatus for compiler managed first cache bypassing
US7647557B2 (en) 2005-06-29 2010-01-12 Intel Corporation Techniques for shuffling video information
US7627735B2 (en) 2005-10-21 2009-12-01 Intel Corporation Implementing vector memory operations
US8330866B2 (en) 2006-02-21 2012-12-11 Qualcomm Incorporated Multi-program viewing in a wireless apparatus
US8074026B2 (en) 2006-05-10 2011-12-06 Intel Corporation Scatter-gather intelligent memory architecture for unstructured streaming data on multiprocessor systems
US8447962B2 (en) 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
US7984273B2 (en) 2007-12-31 2011-07-19 Intel Corporation System and method for using a mask register to track progress of gathering elements from memory
US8667221B2 (en) 2008-04-08 2014-03-04 Intel Corporation Detection of streaming data in cache
US7814303B2 (en) * 2008-10-23 2010-10-12 International Business Machines Corporation Execution of a sequence of vector instructions preceded by a swizzle sequence instruction specifying data element shuffle orders respectively
US8627017B2 (en) * 2008-12-30 2014-01-07 Intel Corporation Read and write monitoring attributes in transactional memory (TM) systems
US8230172B2 (en) 2009-12-03 2012-07-24 Intel Corporation Gather and scatter operations in multi-level memory hierarchy
US20110257505A1 (en) * 2010-04-20 2011-10-20 Suri Jasjit S Atheromatic?: imaging based symptomatic classification and cardiovascular stroke index estimation
US9727471B2 (en) 2010-11-29 2017-08-08 Intel Corporation Method and apparatus for stream buffer management instructions
US8688957B2 (en) 2010-12-21 2014-04-01 Intel Corporation Mechanism for conflict detection using SIMD
US9471532B2 (en) * 2011-02-11 2016-10-18 Microsoft Technology Licensing, Llc Remote core operations in a multi-core computer
GB2508533B (en) 2011-09-26 2020-01-01 Intel Corp Instruction and logic to provide vector scatter-op and gather-op functionality
GB2508312B (en) * 2011-09-26 2020-04-22 Intel Corp Instruction and logic to provide vector load-op/store-op with stride functionality
US9021233B2 (en) * 2011-09-28 2015-04-28 Arm Limited Interleaving data accesses issued in response to vector access instructions
US20130159679A1 (en) * 2011-12-20 2013-06-20 James E. McCormick, Jr. Providing Hint Register Storage For A Processor
US9870338B2 (en) * 2011-12-23 2018-01-16 Intel Corporation Systems, apparatuses, and methods for performing vector packed compression and repeat
KR101328725B1 (ko) * 2011-12-29 2013-11-11 전자부품연구원 블롭 감지 장치 및 그 방법
US8850162B2 (en) * 2012-05-22 2014-09-30 Apple Inc. Macroscalar vector prefetch with streaming access detection
US9842046B2 (en) * 2012-09-28 2017-12-12 Intel Corporation Processing memory access instructions that have duplicate memory indices
US9348601B2 (en) 2012-12-26 2016-05-24 Intel Corporation Coalescing adjacent gather/scatter operations
US9244684B2 (en) * 2013-03-15 2016-01-26 Intel Corporation Limited range vector memory access instructions, processors, methods, and systems
US9600442B2 (en) * 2014-07-18 2017-03-21 Intel Corporation No-locality hint vector memory access processors, methods, systems, and instructions
US10409727B2 (en) * 2017-03-31 2019-09-10 Intel Corporation System, apparatus and method for selective enabling of locality-based instruction handling
US11281585B2 (en) * 2018-08-30 2022-03-22 Micron Technology, Inc. Forward caching memory systems and methods
US11500779B1 (en) * 2019-07-19 2022-11-15 Marvell Asia Pte, Ltd. Vector prefetching for computing systems

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Intel® 64 and IA-32 Architectures Software Developers Manual, Oktober 2011
Intel® Advanced Vector Extensions Programming Reference, Dokument-Referenznummer 319433-011, veröffentlicht im Juni 2011
Intel® Advanced Vector Extensions Programming Reference, Juni 2011

Also Published As

Publication number Publication date
US9600442B2 (en) 2017-03-21
US20190179762A1 (en) 2019-06-13
US10210091B2 (en) 2019-02-19
US20230052652A1 (en) 2023-02-16
CN105278917A (zh) 2016-01-27
US20210141734A1 (en) 2021-05-13
CN108595348B (zh) 2022-08-16
TW201617890A (zh) 2016-05-16
CN115437971A (zh) 2022-12-06
US20170300420A1 (en) 2017-10-19
TWI567556B (zh) 2017-01-21
CN108595348A (zh) 2018-09-28
US10467144B2 (en) 2019-11-05
US10452555B2 (en) 2019-10-22
DE102015007571B4 (de) 2024-05-02
US10929298B2 (en) 2021-02-23
US20160019184A1 (en) 2016-01-21
CN105278917B (zh) 2018-04-10
US11892952B2 (en) 2024-02-06
US20180225217A1 (en) 2018-08-09
US20180225218A1 (en) 2018-08-09
US11392500B2 (en) 2022-07-19

Similar Documents

Publication Publication Date Title
DE102015007571B4 (de) Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren, -verfahren, -systeme und -befehle
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE112012007119T5 (de) Threadmigration-Unterstützung für Kerne unterschiedlicher Architektur
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE112011105122T5 (de) Systeme, Vorrichtungen und Verfahren zum Vermischen zweier Quelloperanden in einem einzigen Ziel unter Verwendung einer Schreibmaske
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE112013005372T5 (de) Befehl zum Bestimmen von Histogrammen
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE102014003644A1 (de) Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich
DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE112016004348T5 (de) Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE112017001709T5 (de) Prozessoren, verfahren, systeme, und instruktionen zum partitionieren von quellpackdaten in spuren
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE112013003713T5 (de) Befehlssatz für SKEIN256 SHA3-Algorithmus auf einem 128-Bit-Prozessor
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R016 Response to examination communication
R130 Divisional application to

Ref document number: 102015017380

Country of ref document: DE

R002 Refusal decision in examination/registration proceedings
R006 Appeal filed
R007 Decision rectified on appeal
R018 Grant decision by examination section/examining division