DE112016004351T5 - Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich - Google Patents

Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich Download PDF

Info

Publication number
DE112016004351T5
DE112016004351T5 DE112016004351.1T DE112016004351T DE112016004351T5 DE 112016004351 T5 DE112016004351 T5 DE 112016004351T5 DE 112016004351 T DE112016004351 T DE 112016004351T DE 112016004351 T5 DE112016004351 T5 DE 112016004351T5
Authority
DE
Germany
Prior art keywords
operand
mask
data
packed
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112016004351.1T
Other languages
English (en)
Inventor
Asit K. Mishra
Edward T. Grochowski
Jonathan D. Pearce
Deborah T. Marr
Ehud Cohen
Elmoustapha Ould-Ahmed-Vall
Jesus Corbal San Adrian
Robert Valentine
Mark J. Charney
Christopher J. Hughes
Milind B. Girkar
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 DE112016004351T5 publication Critical patent/DE112016004351T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Ein Prozessor enthält eine Decodiereinheit, um einen Befehl zu decodieren, der einen ersten gepackten Quelldatenoperanden angibt, der wenigstens vier Datenelemente enthält, einen zweiten gepackten Quelldatenoperanden angibt, der wenigstens vier Datenelemente enthält, und einen oder mehrere Zielspeicherorte angibt. Die Ausführungseinheit speichert in Reaktion auf den Befehl wenigstens einen Ergebnismaskenoperanden an dem (den) Zielspeicherort(en). Der wenigstens eine Ergebnismaskenoperand enthält für jedes entsprechende Datenelement in einem des ersten und des zweiten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenelement. Jedes Maskenelement gibt an, ob das entsprechende Datenelement in dem einen der gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem anderen der gepackten Quelldatenoperanden ist.

Description

  • HINTERGRUND
  • Technisches Gebiet
  • Die hier beschriebenen Ausführungsformen beziehen sich im Allgemeinen auf Prozessoren. Insbesondere beziehen sich die hier beschriebenen Ausführungsformen im Allgemeinen auf Prozessoren, um gepackte Datenoperanden zu verarbeiten.
  • Hintergrundinformationen
  • Viele Prozessoren weisen Einzelbefehls-Mehrfachdaten-Architekturen (SIMD-Architekturen) auf. In den SIMD-Architekturen kann ein Befehl für gepackte Daten, ein Vektorbefehl oder ein SIMD-Befehl auf mehrere Datenelemente oder mehrere Paare von Datenelementen gleichzeitig oder parallel wirken. Der Prozessor kann eine Hardware für parallele Ausführung aufweisen, die auf den Befehl für gepackte Daten reagiert, um mehrere Operationen gleichzeitig oder parallel auszuführen.
  • Mehrere Datenelemente können innerhalb eines Registers oder eines Speicherorts als gepackte Daten oder Vektordaten gepackt sein. In den gepackten Daten können die Bits des Registers oder des anderen Speicherorts logisch in eine Folge von Datenelementen aufgeteilt sein. Ein 256 Bits breites Register für gepackte Daten kann z. B. vier 64 Bits breite Datenelemente, acht 32-Bit-Datenelemente, sechzehn 16-Bit-Datenelemente usw. aufweisen. Jedes der Datenelemente kann ein separates einzelnes Stück der Daten (z. B. eine Bildpunktfarbe, eine Komponente einer komplexen Zahl usw.) repräsentieren, auf die separat und/oder unabhängig von den anderen gewirkt werden kann.
  • Figurenliste
  • Die Erfindung kann unter Bezugnahme auf die folgende Beschreibung und die beigefügten Zeichnungen, die verwendet werden, um die Ausführungsformen zu veranschaulichen, am besten verstanden werden. In den Zeichnungen:
    • 1 ist ein Blockschaltplan eines Anteils einer beispielhaften dünnbesetzten Matrix.
    • 2 veranschaulicht eine Darstellung einer komprimierten dünnbesetzten Zeile einer Teilmenge der Spalten der Zeilen 1 und 2 der dünnbesetzten Matrix nach 1.
    • 3 ist ein Blockschaltplan einer Ausführungsform eines Prozessors, der betriebsfähig ist, um eine Ausführungsform eines Datenelement-Vergleichsbefehls auszuführen.
    • 4 ist ein Blockschaltplan einer Ausführungsform eines Verfahrens zum Ausführen einer Ausführungsform eines Datenelement-Vergleichsbefehls.
    • 5 ist ein Blockschaltplan einer ersten beispielhaften Ausführungsform einer Datenelement-Vergleichsoperation.
    • 6 ist ein Blockschaltplan einer zweiten beispielhaften Ausführungsform einer Datenelement-Vergleichsoperation.
    • 7 ist ein Blockschaltplan einer dritten beispielhaften Ausführungsform einer Datenelement-Vergleichsoperation.
    • 8 ist ein Blockschaltplan einer vierten beispielhaften Ausführungsform einer Datenelement-Vergleichsoperation.
    • 9 ist ein Blockschaltplan einer beispielhaften maskierten Datenelement-Zusammenlegungsoperation.
    • 10 ist ein Blockschaltplan einer beispielhaften Ausführungsform eines geeigneten Satzes von Operationsmaskenregistern für gepackte Daten.
    • 11 ist ein Blockschaltplan einer beispielhaften Ausführungsform eines geeigneten Satzes von Registern für gepackte Daten.
    • 12A-C sind Blockschaltpläne, die ein generisches vektorfreundliches Befehlsformat und dessen Befehlsschablonen gemäß den Ausführungsformen der Erfindung veranschaulichen.
    • 13A-B ist ein Blockschaltplan, der ein beispielhaftes spezifisches vektorfreundliches Befehlsformat und ein Opcode-Feld gemäß den Ausführungsformen der Erfindung veranschaulicht.
    • 14A-D ist ein Blockschaltplan, der ein beispielhaftes spezifisches vektorfreundliches Befehlsformat und dessen Felder gemäß den Ausführungsformen der Erfindung veranschaulicht.
    • 15 ist ein Blockschaltplan einer Ausführungsform einer Registerarchitektur.
    • 16A ist ein Blockschaltplan, der eine Ausführungsform einer In-Order-Pipeline und einer Out-of-Order-Ausgabe-/Ausführungspipeline mit Registerumbenennung veranschaulicht.
    • 16B ist ein Blockschaltplan einer Ausführungsform eines Prozessorkerns, der eine Front-End-Einheit enthält, die an eine Ausführungsmaschineneinheit gekoppelt ist, wobei beide an eine Speichereinheit gekoppelt sind.
    • 17A ist ein Blockschaltplan einer Ausführungsform eines einzigen Prozessorkerns zusammen mit seiner Verbindung zu dem Zusammenschaltungsnetz auf dem Die und zusammen mit seiner lokalen Teilmenge des Ebene-2-Caches (L2-Caches).
    • 17B ist ein Blockschaltplan einer Ausführungsform einer erweiterten Ansicht eines Teils des Prozessorkerns nach 17A.
    • 18 ist ein Blockschaltplan einer Ausführungsform eines Prozessors, der mehr als einen Kern aufweisen kann, einen integrierten Speicher-Controller aufweisen kann und eine integrierte Graphik aufweisen kann.
    • 19 ist ein Blockschaltplan einer ersten Ausführungsform einer Computerarchitektur.
    • 20 ist ein Blockschaltplan einer zweiten Ausführungsform einer Computerarchitektur.
    • 21 ist ein Blockschaltplan einer dritten Ausführungsform einer Computerarchitektur.
    • 22 ist ein Blockschaltplan einer vierten Ausführungsform einer Computerarchitektur.
    • 23 ist ein Blockschaltplan der Verwendung eines Software-Befehlsumsetzers, um binäre Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß den Ausführungsformen der Erfindung umzusetzen.
  • AUSFÜHRLICHE BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
  • Hier sind Datenelement-Vergleichsbefehle, Prozessoren, um die Befehle auszuführen, Verfahren, die durch die Prozessoren ausgeführt werden, wenn sie die Befehle verarbeiten oder ausführen, und Systeme, die einen oder mehrere Prozessoren umfassen, um die Befehle zu verarbeiten oder auszuführen, offenbart. In der folgenden Beschreibung sind zahlreiche spezifische Einzelheiten (z. B. spezifische Befehlsoperationen, Datenformate, Prozessorkonfigurationen, mikroarchitektonische Einzelheiten, Folgen von Operationen usw.) dargelegt. Die Ausführungsformen können jedoch ohne diese spezifischen Einzelheiten praktiziert werden. In anderen Fällen sind wohlbekannte Schaltungen, Strukturen und Techniken nicht ausführlich gezeigt worden, um es zu vermeiden, das Verstehen der Beschreibung undeutlich zu machen.
  • Die hier offenbarten Datenelement-Vergleichsbefehle sind Universalbefehle und sind nicht auf irgendeine bekannte Verwendung eingeschränkt. Stattdessen können diese Befehle für verschiedene Zwecke und/oder in verschiedenen Weisen basierend auf der Kreativität des Programmierers, dem Kompilierer oder dergleichen verwendet werden. In einigen Ausführungsformen können diese Befehle verwendet werden, um Daten zu verarbeiten, die dünnbesetzten Matrizen zugeordnet sind, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. In einigen Ausführungsformen können diese Befehle verwendet werden, um die Daten zu verarbeiten, die einer Darstellung einer komprimierten dünnbesetzten Zeile (CSR-Darstellung) zugeordnet sind, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. Um bestimmte Konzepte weiter zu veranschaulichen, werden spezifische Verwendungen dieser Befehle, um die Indizes in einem CSR-Format zu verarbeiten, das verwendet werden kann, um die Indizes und die Werte einer dünnbesetzten Matrix zu repräsentieren, beschrieben, obwohl erkannt werden soll, dass dies nur eine mögliche Verwendung dieser Befehle ist. Repräsentativ kann dies bei der Datenanalyse, der Hochleistungsberechnung, dem maschinellen Lernen, bei dünnbesetzten Problemen der linearen Algebra und dergleichen nützlich sein. In anderen Ausführungsformen können diese Befehle verwendet werden, um außer dünnbesetzten Matrizen und/oder Daten im CSR-Format andere Typen von Daten zu verarbeiten. Diese Befehle können z. B. verwendet werden, um verschiedene Typen der Daten, wie z. B. Multimediadaten, Graphikdaten, Tondaten, Videodaten, Bildpunkte, Textfolgendaten, Zeichenkettendaten, Finanzdaten oder andere Typen ganzzahliger Daten oder dergleichen, zu verarbeiten. Überdies kann eine derartige Verarbeitung der Daten für verschiedene Zwecke verwendet werden, wie z. B. um doppelte Datenelemente zu identifizieren, doppelte Datenelemente auszuwählen, doppelte Datenelemente zusammenzuschließen, doppelte Datenelemente zu entfernen, doppelte Datenelemente zu ändern, oder für verschiedene andere Zwecke verwendet werden.
  • 1 ist ein Blockschaltplan eines Anteils einer beispielhaften dünnbesetzten Matrix 100. Die Matrix repräsentiert im Allgemeinen eine zweidimensionale Datenstruktur, in der die Datenwerte in Zeilen und Spalten angeordnet sind. Die Datenwerte können hier außerdem einfach als Werte oder Datenelemente bezeichnet werden. Es ist gezeigt, dass die veranschaulichte beispielhafte dünnbesetzte Matrix wenigstens neununddreißig Spalten und wenigstens zwei Zeilen und optional mehr aufweist. Alternativ können andere dünnbesetzte Matrizen mehr Zeilen und/oder weniger oder mehr Spalten aufweisen. Die Werte der ersten Zeile sind als a*-Werte gezeigt, wobei der Stern (*) die Spaltennummer, die den Wert aufweist, repräsentiert. Ähnlich sind die Werte der zweiten Zeile als b*-Werte gezeigt, wobei der Stern (*) die Spaltennummer, die den Wert aufweist, repräsentiert. Der Wert in Zeile 1, Spalte 7 ist a7, der Wert in Zeile 1, Spalte 23 ist a23, der Wert in Zeile 2, Spalte 15 ist b15 usw.
  • In vielen verschiedenen Anwendungen kann es erwünscht sein, auf zwei Vektoren zu wirken, wie z. B. auf zwei Zeilen der dünnbesetzten Matrix. Dies kann z. B. für Skalarproduktberechnungen dünnbesetzter Vektoren ausgeführt werden. Derartige Skalarproduktberechnungen dünnbesetzter Vektoren werden im Allgemeinen z. B. in Anwendungen des maschinellen Lernens verwendet. Beispiele derartiger Anwendungen des maschinellen Lernens sind die kernelisierte Stützvektormaschine (SVM), die Open-SourcelibSVM, die kernelisierte Hauptkomponentenanalyse und dergleichen. Ein in derartigen Anwendungen häufig verwendeter Kernel ist das quadratische Abstandsberechnungsmuster, das außerdem als die L2-Norm zwischen zwei Vektoren bekannt ist. Die quadratische Abstandsfunktion, f, (|| f ||) zwischen zwei Vektoren α und β wird durch Gleichung 1 repräsentiert: α β 2 = α 2 + β 2 2 α · β
    Figure DE112016004351T5_0001
  • Das innere Produkt (•) zwischen den beiden Vektoren α und β, die dünnbesetzte Vektoren sein können, ist als eine Skalarproduktberechnung dargestellt, wie in Gleichung 2 gezeigt ist: α · β = α ( i ) * β ( i ) , 0 i min ( Länge ( α ) ,Länge ( β ) )
    Figure DE112016004351T5_0002
  • Derartige Skalarproduktberechnungen dünnbesetzter Vektoren tendieren dazu, zu der Gesamtrechenzeit des maschinellen Lernens und anderer Anwendungen signifikant beizutragen. Entsprechend kann das Vergrößern der Leistung des Ausführens derartiger Skalarproduktberechnungen dünnbesetzter Vektoren dazu tendieren, es zu unterstützen, die Leistung sowohl des maschinellen Lernens als auch anderer Anwendungen zu verbessern.
  • In 1 kann die dünnbesetzte Matrix 100 als dünnbesetzt bezeichnet werden, wenn eine signifikante Anzahl oder ein signifikanter Anteil der Werte der Matrix Nullwerte sind. Oft weisen derartige Nullwerte spezielle mathematische Eigenschaften auf, eine Multiplikation mit null erzeugt z. B. ein Produkt von null oder dergleichen. In dem Fall der Multiplikation der Werte in verschiedenen Zeilen derselben Spalte können derartige Nullwerte Produkte mit einem Wert von null erzeugen, wohingegen die Multiplikation von zwei von null verschiedenen Werten von null verschiedene Werte erzeugen kann. Beispielhaft erzeugt die Multiplikation der Datenelemente in den Zeilen 1 und 2 der Spalte 2 (d. h., a2 * 0) ein Produkt von null, wohingegen die Multiplikation der Datenelemente in den Zeilen 1 und 2 der Spalte 3 (d. h., a3 * b3) ein von null verschiedenes Produkt erzeugt. Ferner können in dem spezifischen Fall einer Berechnung des Multiplikationsakkumulations- oder Skalarprodukttyps derartige Nullwerte oft nicht zu dem gesamten Akkumulationswert oder dem Skalarprodukt beitragen.
  • Entsprechend kann es in diesen und bestimmten anderen Verwendungen erwünscht sein, diese Nullwerte der dünnbesetzten Matrix zu ignorieren. In der dünnbesetzten Matrix dieses speziellen Beispiels gibt es nur drei Paare von Werten aus den Zeilen 1 und 2, die eine gemeinsame Spalte belegen, die beide von null verschiedene Werte enthalten, wie durch das Bezugszeichen 102 gezeigt ist. Spezifisch trifft dies für a3 und b3, für a7 und b7 und für a23 und b23 zu. In einigen Ausführungsformen kann es vorteilhaft sein, derartige Paare von Werten effizient zu identifizieren und/oder zu isolieren. Wie im Folgenden weiter erklärt wird, sind die hier offenbarten Datenelement-Vergleichsbefehle für diesen Zweck nützlich, obwohl sie nicht auf nur diesen Zweck eingeschränkt sind.
  • 2 veranschaulicht eine Darstellung 204 einer komprimierten dünnbesetzten Zeile (CSR) einer Teilmenge der Spalten der Zeilen 1 und 2 der dünnbesetzten Matrix nach 1. In der CSR-Darstellung oder in dem CSR-Format sind die Werte der Matrix und/oder eines Vektors (z. B. einer einzigen Zeile der Matrix) durch ein 2-Tupel oder ein Paar aus einem Index und einem entsprechenden Wert dargestellt. In dem Fall der obenerwähnten dünnbesetzten Matrix kann der Index z. B. die Spaltennummer repräsentieren, während der Wert den Datenwert für eine gegebene Zeile in dieser Spalte repräsentieren kann. Diese <Index:Wert>-2-Tupel oder -Paare können für alle von null verschiedenen Datenwerte in einer Zeile im Allgemeinen in einer zunehmenden Indexreihenfolge zusammen aufgereiht werden. Das Ende der Zeichenkette kann durch einen Sentinel-Wert, wie z. B. einen Wert einer negativen eins (d. h., -1), abgegrenzt werden. Die Nullwerte können aus der CSR-Darstellung weggelassen oder „komprimiert“ werden. Beispielhaft können die CSR-Darstellungen für eine Teilmenge der Spalten der Zeile 1 und für eine Teilmenge der Spalten der Zeile 2 wie folgt dargestellt werden: < 2 :a2 > , < 3 :a3 > , < 7 :a7 > , < 9 :a9 > , < 12 :a12 > , < 13 :a13 > ,... < 39 :a39 >
    Figure DE112016004351T5_0003
    < 3 :b3 > , < 5 :b5 > , < 6 :b6 > , < 7 :b7 > , < 11 :b11 > , < 15 :b15 > ,... < 31 :b31 >
    Figure DE112016004351T5_0004
  • Wie leicht gesehen werden kann, lässt ein derartiges CSR-Format die Nullwerte weg (die z. B. nicht zu einem Skalarprodukt oder einem anderen Typ der Operation beitragen können). Eine wahrscheinliche Konsequenz der CSR-Darstellung oder des CSR-Formats ist jedoch, dass sich die Werte, die sich in derselben Spalte einer Matrix (oder eines Satzes von Vektoren) befanden, wie z. B. die Datenwerte a3 und b3, teilweise aufgrund der Entfernung von im Allgemeinen unterschiedlichen Anzahlen von Nullen und/oder Nullen an unterschiedlichen Positionen in den verschiedenen Vektoren nicht in derselben relativen 2-Tupel-Position befinden und/oder „ausgerichtet“ sein können, wenn sie in die CSR-Darstellung umgesetzt sind. Dieses Fehlen der Ausrichtung ist in der Veranschaulichung durch das Bezugszeichen 206 gezeigt. In der Matrix nach 1 befanden sich z. B. die Werte a3 und b3 beide in der Spalte 3, wobei sie vertikal ausgerichtet waren, obwohl sich in der CSR-Darstellung der Zeilen 1 und 2 das Tupel <3:a3> an der zweiten Position von links in der Liste der Tupel befindet (weil z. B. a3 der zweite von null verschiedene Wert in der Zeile 1 ist), wohingegen sich das Paar <3:b3> der Zeile 2 an der ersten Position von links in der Liste der Tupel befindet (weil z. B. b3 der erste von null verschiedene Wert in der Zeile 2 ist). Ähnlich können sich die Datenelemente a7 und b7 und a23 und b23 außerdem im CSR-Format an unterschiedlichen relativen Positionen befinden.
  • Eine wahrscheinliche Konsequenz dessen ist, dass, wenn die Daten in Vektorprozessoren, Prozessoren für gepackte Daten oder Einzelbefehls-Mehrfachdaten-Prozessoren (SIMD-Prozessoren) verarbeitet werden, sich die Werte, die sich in derselben Spalte der Matrix befunden haben, nicht länger in denselben entsprechenden vertikal ausgerichteten Datenelementpositionen der gepackten Datenoperanden, Vektoren oder SIMD-Operanden befinden können. In einigen Ausführungsformen kann es erwünscht sein, auf die Werte in derselben Spalte (z. B. in dem Fall einer Vektormultiplikation usw.) zu wirken. Dies kann dazu tendieren, beim effizienten Implementieren von Operationen auf derartige Werte bestimmte Herausforderungen darzustellen, weil die Vektoroperationen, die Operationen für gepackte Daten oder die SIMD-Operationen oft entworfen sind, um auf entsprechende vertikal ausgerichtete Datenelemente zu wirken. Ein Befehlssatz kann z. B. einen gepackten Multiplikationsbefehl aufweisen, um ein entsprechendes Paar niedrigstwertiger Datenelemente eines ersten und eines zweiten gepackten Quelldatenoperanden zu multiplizieren, ein entsprechendes Paar neben den niedrigstwertigen Datenelementen des ersten und des zweiten gepackten Quelldatenoperanden zu multiplizieren usw. Umgekehrt kann der gepackte Multiplikationsbefehl nicht betriebsfähig sein, um Datenelemente in nicht entsprechenden oder nicht vertikal ausgerichteten Positionen zu multiplizieren.
  • 3 ist ein Blockschaltplan einer Ausführungsform eines Prozessors 310, der betriebsfähig ist, um eine Ausführungsform eines Datenelement-Vergleichsbefehls 312 auszuführen. In einigen Ausführungsformen kann der Prozessor ein Universalprozessor (z. B. ein Universalmikroprozessor oder eine Zentraleinheit (CPU) des Typs, der in einem Desktop, einem Laptop oder in anderen Computern verwendet wird) sein. Alternativ kann der Prozessor ein Spezialprozessor sein. Beispiele geeigneter Spezialprozessoren enthalten Netzprozessoren, Kommunikationsprozessoren, kryptographische Prozessoren, Graphikprozessoren, Coprozessoren, eingebettete Prozessoren, digitale Signalprozessoren (DSPs) und Controller (z. B. Mikrocontroller), sind aber nicht auf diese eingeschränkt. Der Prozessor kann irgendeine der verschiedenen Architekturen der Berechnung mit komplexem Befehlssatz (CISC-Architekturen), der Architekturen der Berechnung mit verringertem Befehlssatz (RISC-Architekturen), der Architekturen mit sehr langen Befehlswörtern (VLIW-Architekturen), der Hybridarchitekturen oder anderer Typen von Architekturen aufweisen oder kann eine Kombination aus verschiedenen Architekturen aufweisen (verschiedene Kerne können z. B. verschiedene Architekturen aufweisen).
  • Während des Betriebs kann der Prozessor 310 einen Datenelement-Vergleichsbefehl 312 empfangen. Der Befehl kann z. B. von einem Speicher auf einem Bus oder einer anderen Zusammenschaltung empfangen werden. Der Befehl kann einen Makrobefehl, einen Assemblersprachenbefehl, einen Maschinencodebefehl oder einen anderen Befehl oder ein Steuersignal eines Befehlssatzes des Prozessors repräsentieren. Der Datenelement-Vergleichsbefehl kann in einigen Ausführungsformen explizit (z. B. durch ein oder mehrere Felder oder einen Satz von Bits) einen ersten gepackten Quelldatenoperanden 322 spezifizieren oder anderweitig angeben (z. B. implizit angeben), kann einen zweiten gepackten Quelldatenoperanden 324 spezifizieren oder anderweitig angeben und kann wenigstens einen Zielspeicherort 326 spezifizieren oder anderweitig angeben, wo ein erster Ergebnismaskenoperand 328 und optional ein zweiter Ergebnismaskenoperand 330 gespeichert werden sollen. In einigen Ausführungsformen kann es wenigstens vier oder wenigstens acht Datenelemente in jedem des ersten und des zweiten gepackten Quelldatenoperanden geben. In einigen Ausführungsformen können die Datenelemente Indizes repräsentieren, die einer CSR-Darstellung entsprechen, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. Als ein Beispiel kann der Befehl Spezifikationsfelder des Quell- und/oder des Zieloperanden aufweisen, um Register, Datenspeicherorte oder andere Speicherorte für die Operanden zu spezifizieren. Alternativ können einer oder mehrere dieser Operanden optional für den Befehl implizit sein (z. B. für einen Opcode des Befehls implizit sein).
  • In 3 kann in einigen Ausführungsformen der erste gepackte Quelldatenoperand 322 optional in einem ersten Register für gepackte Daten eines Satzes von Registern 320 für gepackte Daten gespeichert sein, während der zweite gepackte Quelldatenoperand 324 optional in einem zweiten Register für gepackte Daten des Satzes von Registern 320 für gepackte Daten gespeichert sein kann. Alternativ können Datenspeicherorte oder andere Speicherorte optional für einen oder mehrere dieser Operanden verwendet werden. Jedes der Register für gepackte Daten kann einen Speicherort auf dem Die repräsentieren, der betriebsfähig ist, um gepackte Daten, Vektordaten oder Einzelbefehls-Mehrfachdaten-Daten (SIMD-Daten) zu speichern. Die Register für gepackte Daten können architektonisch sichtbare oder Architekturregister repräsentieren, die für die Software und/oder einen Programmierer sichtbar sind, und/oder sind die Register, die durch die Befehle des Befehlssatzes des Prozessors angegeben werden, um die Operanden zu identifizieren. Diese Architekturregister stehen im Gegensatz zu anderen Nicht-Architekturregistern in einer gegebenen Mikroarchitektur (z. B. den temporären Registern, den Umordnungspuffern, den Stilllegungsregistern usw.). Die Register für gepackte Daten können in verschiedenen Weisen in verschiedenen Mikroarchitekturen implementiert sein und sind nicht auf einen speziellen Entwurfstyp eingeschränkt. Beispiele geeigneter Typen der Register für gepackte Daten enthalten dedizierte physische Register, dynamisch zugewiesene physische Register unter Verwendung der Registerumbenennung und Kombinationen daraus, sind aber nicht auf diese eingeschränkt. Spezifische Beispiele der geeigneten Register für gepackte Daten enthalten jene, die in 11 gezeigt und beschrieben sind, sind aber nicht auf diese eingeschränkt.
  • In 3 kann der Prozessor in einigen Ausführungsformen optional einen Satz von Operationsmaskenregistern 322 für gepackte Daten enthalten. Jedes der Operationsmaskenregister für gepackte Daten kann einen Speicherort auf dem Die repräsentieren, der betriebsfähig ist, um wenigstens eine Operationsmaske für gepackte Daten zu speichern. Die Operationsmaskenregister für gepackte Daten können architektonisch sichtbare oder Architekturregister repräsentieren, die für die Software und/oder einen Programmierer sichtbar sind, und/oder sind die Register, die durch die Befehle des Befehlssatzes des Prozessors angegeben werden, um die Operanden zu identifizieren. Beispiele geeigneter Typen der Operationsmaskenregister für gepackte Daten enthalten dedizierte physische Register, dynamisch zugewiesene physische Register unter Verwendung der Registerumbenennung und Kombinationen daraus, sind aber nicht auf diese eingeschränkt. Spezifische Beispiele geeigneter Operationsmaskenregister für gepackte Daten enthalten jene, die in 10 gezeigt und beschrieben sind, und die im hinteren Teil der Anmeldung beschriebenen Masken- oder k-Masken-Register, sind aber nicht auf diese eingeschränkt.
  • Wie weiter gezeigt ist, können in einigen Ausführungsformen der eine oder die mehreren Zielspeicherorte 326 optional ein oder mehrere Operationsmaskenregister für gepackte Daten in dem Satz der Operationsmaskenregister 332 für gepackte Daten sein. In einigen Ausführungsformen kann ein erstes Operationsmaskenregister für gepackte Daten optional verwendet werden, um den ersten Ergebnismaskenoperanden 328 zu speichern, und kann ein zweites anderes Operationsmaskenregister für gepackte Daten optional verwendet werden, um den zweiten Ergebnismaskenoperanden 330 zu speichern, wie im Folgenden (z. B. im Zusammenhang mit 5) weiter erklärt wird. In anderen Ausführungsformen kann ein einziges Operationsmaskenregister für gepackte Daten optional verwendet werden, um sowohl den ersten Ergebnismaskenoperanden 328 als auch den zweiten Ergebnismaskenoperanden 330 zu speichern, wie im Folgenden (z. B. im Zusammenhang mit 6) weiter erklärt wird. In noch anderen Ausführungsformen können stattdessen der erste Ergebnismaskenoperand 328 und der zweite Ergebnismaskenoperand 330 optional in einem Register für gepackte Daten in dem Satz der Register 320 für gepackte Daten gespeichert sein, wie im Folgenden (z. B. im Zusammenhang mit 8) weiter erklärt wird. Die Ergebnismaskenoperanden können z. B. in einem anderen Register für gepackte Daten als jene gespeichert sein, die verwendet werden, um den ersten und den zweiten gepackten Quelldatenoperanden zu speichern. Alternativ kann ein Register für gepackte Daten, das entweder für den ersten gepackten Quelldatenoperanden oder für den zweiten gepackten Quelldatenoperanden verwendet wird, optional wiederverwendet werden, um den ersten und den zweiten Ergebnismaskenoperanden zu speichern. Der Befehl kann z. B. ein Quell-/Zielregister für gepackte Daten angeben, das implizit oder impliziert durch den Prozessor erkannt werden kann, um sowohl anfangs für einen gepackten Quelldatenoperanden verwendet zu werden als auch anschließend verwendet zu werden, um die Ergebnismaskenoperanden zu speichern.
  • In 3 enthält der Prozessor einer Decodiereinheit oder einen Decodierer 314. Die Decodiereinheit kann den Datenelement-Vergleichsbefehl empfangen und decodieren. Die Decodiereinheit kann einen oder mehrere Befehle auf einer relativ tieferen Ebene oder ein oder mehrere Steuersignale 316 (z. B. ein oder mehrere Mikrobefehle, Mikrooperationen, Mikrocode-Einsprungstellen, decodierte Befehle oder Steuersignale usw.) ausgeben, die den Datenelement-Vergleichsbefehl auf einer relativ höherer Ebene widerspiegeln, repräsentieren und/oder von diesem abgeleitet sind. In einigen Ausführungsformen kann die Decodiereinheit ein oder mehrere Eingangsstrukturen (z. B. einen Anschluss (Anschlüsse), eine Zusammenschaltung(en), eine Schnittstelle), um den Datenelement-Vergleichsbefehl zu empfangen, eine Befehlserkennungs- und -decodierlogik, die damit gekoppelt ist, um den Datenelement-Vergleichsbefehl zu erkennen und zu decodieren, und eine oder mehrerer Ausgangsstrukturen (z. B. einen Anschluss (Anschlüsse), eine Zusammenschaltung(en), eine Schnittstelle), die damit gekoppelt sind, um den Befehl(e) auf einer tieferen Ebene oder das Steuersignal(e) auszugeben, enthalten. Die Decodiereinheit kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert sein, einschließlich Mikrocode-Festwertspeicher (Mikrocode-ROMs), Nachschlagtabellen, Hardware-Implementierungen, programmierbarer Logikanordnungen (PLAs) und anderer Mechanismen, die geeignet sind, um Decodiereinheiten zu implementieren, ist aber nicht auf diese eingeschränkt.
  • In einigen Ausführungsformen kann anstelle des Datenelement-Vergleichsbefehls, der der Decodiereinheit direkt bereitgestellt wird, ein Befehlsemulator, -übersetzer, -morpher, -interpreter oder ein anderes Befehlsumsetzungsmodul optional verwendet werden. Verschiedene Typen von Befehlsumsetzungsmodulen können in Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. In einigen Ausführungsformen kann sich das Befehlsumsetzungsmodul außerhalb des Prozessors befinden, wie z. B. auf einem separaten Die und/oder in einem Speicher (z. B. als ein statisches, dynamisches oder Laufzeit-Emulationsmodul). Beispielhaft kann das Befehlsumsetzungsmodul den Datenelement-Vergleichsbefehl empfangen, der von einem ersten Befehlssatz sein kann, wobei es den Datenelement-Vergleichsbefehl emulieren, übersetzen, morphen, interpretieren oder anderweitig in einen oder mehrere entsprechende Zwischenbefehle oder Steuersignale umsetzen kann, die von einem zweiten, anderen Befehlssatz sein können. Der eine oder die mehreren Zwischenbefehle oder das eine oder die mehreren Steuersignale des zweiten Befehlssatzes können einer Decodiereinheit (z. B. der Decodiereinheit 314) bereitgestellt werden, die sie dann in ein oder mehrere Befehle einer tieferen Ebene oder ein oder mehrere Steuersignale decodieren kann, die durch die native Hardware des Prozessors (z. B. eine oder mehrere Ausführungseinheiten) ausführbar sind.
  • In 3 ist die Ausführungseinheit 318 mit der Decodiereinheit 314, den Registern 320 für gepackte Daten und optional den Operationsmaskenregistern 332 für gepackte Daten (z. B. wenn die Ergebnismaskenoperanden 328, 330 darin gespeichert werden sollen) gekoppelt. Die Ausführungseinheit kann den einen bzw. das eine oder die mehreren decodierten oder anderweitig umgesetzten Befehle oder Steuersignale 316 empfangen, die den Datenelement-Vergleichsbefehl repräsentieren und/oder von dem Datenelement-Vergleichsbefehl abgeleitet sind. Die Ausführungseinheit kann außerdem den ersten gepackten Quelldatenoperanden 322 und den zweiten gepackten Quelldatenoperanden 324 empfangen. Die Ausführungseinheit kann in Reaktion auf den Datenelement-Vergleichsbefehl und/oder im Ergebnis des Datenelement-Vergleichsbefehls (z. B. in Reaktion auf den einen oder die mehreren Befehle oder das eine oder die mehreren Steuersignale, die aus dem Befehl decodiert worden sind) betriebsfähig sein, um den ersten Ergebnismaskenoperanden 328 und den optionalen zweiten Ergebnismaskenoperanden 330 an dem einen oder den mehreren Zielspeicherorten 326, die durch den Befehl angegeben werden, zu speichern. In einigen Ausführungsformen kann wenigstens ein Ergebnismaskenoperand (z. B. der erste Ergebnismaskenoperand 328) für jedes entsprechende Datenelement in einem des ersten und des zweiten gepackten Quelldatenoperanden (z. B. dem ersten gepackten Quelldatenoperanden 322) an derselben relativen Position innerhalb der Operanden ein anderes Maskenelement enthalten. In einigen Ausführungsformen kann jedes Maskenelement angeben, ob das entsprechende Datenelement in dem obenerwähnten einen des ersten und des zweiten gepackten Quelldatenoperanden (z. B. dem ersten Ergebnismaskenoperanden 328) gleich irgendwelchen Datenelementen in dem anderen des ersten und des zweiten gepackten Quelldatenoperanden (z. B. dem zweiten Ergebnismaskenoperanden 330) ist.
  • In einigen Ausführungsformen kann der erste Ergebnismaskenoperand 328 für jedes entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden 322 an derselben relativen Position innerhalb der Operanden ein anderes Maskenelement enthalten, wobei jedes Maskenelement des ersten Ergebnismaskenoperanden 328 angeben kann, ob das entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden 322 gleich irgendeinem der Datenelemente in dem zweiten gepackten Quelldatenoperanden 324 ist. In einigen Ausführungsformen kann der zweite Ergebnismaskenoperand 330 für jedes entsprechende Datenelement in dem zweiten gepackten Quelldatenoperanden 330 an derselben relativen Position innerhalb der Operanden ein anderes Maskenelement enthalten, wobei jedes Maskenelement des zweiten Ergebnismaskenoperanden 330 angeben kann, ob das entsprechende Datenelement in dem zweiten gepackten Quelldatenoperanden 324 gleich irgendeinem der Datenelemente in dem ersten gepackten Quelldatenoperanden 322 ist. In einigen Ausführungsformen kann jedes Maskenelement ein einziges Maskenbit sein. In einigen Ausführungsformen kann das Ergebnis irgendeines von jenen sein, die in den 5-8 gezeigt und beschrieben sind, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist.
  • Die Ausführungseinheit und/oder der Prozessor können eine spezifische oder spezielle Logik (z. B. Transistoren, eine integrierte Schaltungsanordnung oder andere Hardware, die potentiell mit Firmware (z. B. in einem nichtflüchtigen Speicher gespeicherten Anweisungen) kombiniert ist, und/oder Software) enthalten, die betriebsfähig ist, um den Datenelement-Vergleichsbefehl auszuführen und/oder das Ergebnis in Reaktion auf den und/oder im Ergebnis des Datenelement-Vergleichsbefehls (z. B. in Reaktion auf einen oder mehrere Befehle oder ein oder mehrere Steuersignale, die aus dem Datenelement-Vergleichsbefehl decodiert worden sind) zu speichern. In einigen Ausführungsformen kann die Ausführungseinheit eine oder mehrere Eingangsstrukturen (z. B. einen Anschluss (Anschlüsse), eine Zusammenschaltung(en), eine Schnittstelle), um Quelloperanden zu empfangen, eine Schaltungsanordnung oder eine Logik, die damit gekoppelt ist, um die Quelloperanden zu empfangen und zu verarbeiten und um die Ergebnisoperanden zu erzeugen, und eine oder mehrere Ausgangsstrukturen (z. B. einen Anschluss (Anschlüsse), eine Zusammenschaltung(en), eine Schnittstelle), die damit gekoppelt sind, um die Ergebnisoperanden auszugeben, enthalten. In einigen Ausführungsformen kann die Ausführungseinheit optional eine Vergleichsschaltungsanordnung oder -logik enthalten, die durch eine vollständig verbundene Kreuzschiene mit den Datenelementen der Quelloperanden gekoppelt ist, wobei jedes Datenelement in dem ersten gepackten Quelldatenoperanden mit jedem Datenelement in dem zweiten gepackten Quelldatenoperanden verglichen werden kann, so dass ein Vergleich aller Elemente mit allen Elementen ausgeführt werden kann. Wenn es in einigen Ausführungsformen z. B. N ganzzahlige Elemente in dem ersten gepackten Quelldatenoperanden und M ganzzahlige Elemente in dem zweiten gepackten Quelldatenoperanden gibt, dann können N * M Vergleiche ausgeführt werden.
  • Um es zu vermeiden, die Beschreibung undeutlich zu machen, ist ein relativ einfacher Prozessor 310 gezeigt und beschrieben worden. Der Prozessor kann jedoch optional andere Prozessorkomponenten enthalten. Verschiedene unterschiedliche Ausführungsformen können z. B. verschiedene unterschiedliche Kombinationen und Konfigurationen der Komponenten enthalten, die in irgendeiner der 15-18 gezeigt und beschrieben sind. Alle der Komponenten des Prozessors können miteinander gekoppelt sein, um ihnen zu ermöglichen, zu arbeiten, wie es beabsichtigt ist.
  • 4 ist ein Blockschaltplan einer Ausführungsform eines Verfahrens 436 zum Ausführen einer Ausführungsform eines Datenelement-Vergleichsbefehls. In verschiedenen Ausführungsformen kann das Verfahren durch einen Prozessor, eine Befehlsverarbeitungsvorrichtung oder eine andere digitale Logikvorrichtung ausgeführt werden. In einigen Ausführungsformen kann das Verfahren 436 durch den und/oder innerhalb des Prozessors 310 nach 3 ausgeführt werden. Die hier für den Prozessor 310 beschriebenen Komponenten, Merkmale und spezifischen optionalen Einzelheiten gelten optional außerdem für das Verfahren 436. Alternativ kann das Verfahren 436 durch einen und/oder innerhalb eines ähnlichen oder anderen Prozessors oder durch eine und/oder innerhalb einer ähnlichen oder anderen Vorrichtung ausgeführt werden. Überdies kann der Prozessor 310 Verfahren ausführen, die zu dem Verfahren 436 ähnlich oder anders als das Verfahren 436 sind.
  • Das Verfahren enthält im Block 437 das Empfangen des Datenelement-Vergleichsbefehls. In verschiedenen Aspekten kann der Befehl an einem Prozessor oder einem Abschnitt davon (z. B. einer Befehlsholeinheit, einer Decodiereinheit, einer Busschnittstelleneinheit usw.) empfangen werden. In verschiedenen Aspekten kann der Befehl von einer Quelle außerhalb des Prozessors und/oder außerhalb des Dies (z. B. von einem Speicher, einer Zusammenschaltung usw.) oder von einer Quelle in dem Prozessor und/oder in dem Die (z. B. von einem Befehls-Cache, einer Befehlswarteschlange usw.) empfangen werden. Der Datenelement-Vergleichsbefehl kann einen ersten gepackten Quelldatenoperanden, der wenigstens vier Datenelemente oder in einigen Fällen wenigstens acht oder mehr Datenelemente enthält, spezifizieren oder anderweitig angeben, einen zweiten gepackten Quelldatenoperanden, der wenigstens vier Datenelemente oder in einigen Fällen wenigstens acht oder mehr Datenelemente enthält, angeben und einen oder mehrere Zielspeicherorte angeben. In einigen Ausführungsformen können die Datenelemente Indizes repräsentieren, die einer CSR-Darstellung entsprechen, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist.
  • Im Block 438 kann wenigstens ein Ergebnismaskenoperand in Reaktion auf den und/oder im Ergebnis des Datenelement-Vergleichsbefehls an dem einen oder den mehreren Zielspeicherorten gespeichert werden. Der wenigstens eine Ergebnismaskenoperand kann für jedes entsprechende Datenelement in einem des ersten und des zweiten gepackten Quelldatenoperanden an der gleichen relativen Position innerhalb der Operanden ein anderes Maskenelement enthalten. Jedes Maskenelement kann angeben, ob das entsprechende Datenelement in dem obenerwähnten einen des ersten und des zweiten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem anderen des ersten und des zweiten gepackten Quelldatenoperanden ist. In einigen Ausführungsformen sind wenigstens zwei Ergebnismaskenoperanden gespeichert. In einigen Ausführungsformen können die beiden Ergebnismaskenoperanden in einem einzigen Maskenregister gespeichert sein. In anderen Ausführungsformen können die beiden Ergebnismaskenoperanden in zwei verschiedenen Maskenregistern gespeichert sein. In noch anderen Ausführungsformen können die beiden Ergebnismaskenoperanden in einem gepackten Datenoperanden gespeichert sein, wie z. B. durch das Speichern eines Bits jedes des ersten und des zweiten Ergebnismaskenoperanden in jedem Datenelement des gepackten Datenoperanden.
  • Das veranschaulichte Verfahren beinhaltet Architekturoperationen (z. B. jene, die aus einer Software-Perspektive sichtbar sind). In anderen Ausführungsformen kann das Verfahren optional eine oder mehrere Mikroarchitekturoperationen enthalten. Beispielhaft kann der Befehl geholt, decodiert, außerhalb der Reihenfolge geplant werden, kann auf die Quelloperanden zugegriffen werden, kann eine Ausführungseinheit die Mikroarchitekturoperationen ausführen, um den Befehl zu implementieren, usw. In einigen Ausführungsformen können die Mikroarchitekturoperationen, um den Befehl zu implementieren, optional das Vergleichen jedes Datenelements des ersten gepackten Quelldatenoperanden mit jedem Datenelement des zweiten gepackten Quelldatenoperanden enthalten. In einigen Ausführungsformen kann eine kreuzschienenbasierte Hardware-Vergleichslogik verwendet werden, um diese Vergleiche auszuführen.
  • In einigen Ausführungsformen kann das Verfahren optional während eines Algorithmus oder als Teil eines Algorithmus ausgeführt werden, um eine Arithmetik eines dünnbesetzten Vektors mit einem dünnbesetzten Vektor (z. B. eine Skalarproduktberechnung eines dünnbesetzten Vektors mit einem dünnbesetzten Vektor) zu beschleunigen, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. In einigen Ausführungsformen können die in Reaktion auf den Befehl gespeicherten Ergebnismaskenoperanden verwendet werden, um die Datenelemente zusammenzuschließen oder zusammenzutragen, von denen die Ergebnismaskenoperanden angeben, dass sie in den gepackten Quelldatenoperanden übereinstimmen. In einigen Ausführungsformen können die Ergebnismaskenoperanden z. B. als ein Quelloperand eines maskierten Datenelement-Zusammenschlussbefehls angegeben und durch einen maskierten Datenelement-Zusammenschlussbefehl verwendet werden. In anderen Ausführungsformen kann der Ergebnismaskenoperand (können die Ergebnismaskenoperanden) minimal verarbeitet werden, wobei dann der (die) resultierende Ergebnismaskenoperand(en) als der (die) Quelloperand(en) des maskierten Datenelement-Zusammenschlussbefehls (der maskierten Datenelement-Zusammenschlussbefehle) angegeben werden kann (können) und durch den (die) maskierten Datenelement-Zusammenschlussbefehl(e) verwendet werden kann (können).
  • 5 ist ein Blockschaltplan, der eine erste beispielhafte Ausführungsform einer Datenelement-Vergleichsoperation 540 veranschaulicht, die in Reaktion auf eine erste beispielhafte Ausführungsform eines Datenelement-Vergleichsbefehls ausgeführt werden kann, veranschaulicht. Der Befehl kann einen ersten gepackten Quelldatenoperanden 522 spezifizieren oder anderweitig angeben und kann einen zweiten gepackten Quelldatenoperanden 524 spezifizieren oder anderweitig angeben. Diese Quelloperanden können in Registern für gepackte Daten, an Datenspeicherorten oder an anderen Speicherorten gespeichert sein, wie vorher beschrieben worden ist.
  • In der veranschaulichten Ausführungsform ist sowohl der erste als auch der zweite gepackte Quelldatenoperand ein 512-Bit-Operand, der sechzehn 32-Bit-Datenelemente aufweist, obwohl Operanden mit anderer Größe, Datenelemente mit anderer Größe und andere Anzahlen von Datenelementen in anderen Ausführungsformen optional verwendet werden können. Üblicherweise kann die Anzahl der Datenelemente in jedem gepackten Quelldatenoperanden gleich der Größe in Bits des gepackten Quelldatenoperanden, geteilt durch die Größe in Bits eines einzigen Datenelements sein. In verschiedenen Ausführungsformen können die Größen jedes der gepackten Quelldatenoperanden 64 Bits, 128 Bits, 256 Bits, 512 Bits oder 1024 Bits sein, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. In verschiedenen Ausführungsformen kann die Größe jedes Datenelements 8 Bits, 16 Bits, 32 Bits oder 64 Bits sein, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. Andere Größen der gepackten Datenoperanden und andere Größen der Datenelemente sind außerdem geeignet. In verschiedenen Ausführungsformen kann es wenigstens vier, wenigstens acht, wenigstens sechzehn, wenigstens zweiunddreißig oder mehr als zweiunddreißig Datenelemente (z. B. wenigstens vierundsechzig Datenelemente) in jedem der gepackten Quelldatenoperanden geben. Oft kann die Anzahl der Datenelemente sowohl im ersten als auch im zweiten gepackten Quelldatenoperanden die gleiche sein, obwohl dies nicht erforderlich ist.
  • Zur weiteren Veranschaulichung werden einige veranschaulichende Beispiele geeigneter alternativer Formate erwähnt, obwohl der Schutzumfang der Erfindung nicht auf nur diese Formate eingeschränkt ist. Ein erstes beispielhaftes Format ist ein gepacktes 128-bit-Byteformat, das sechzehn 8-Bit-Datenelemente enthält. Ein zweites beispielhaftes Format ist ein gepacktes 128-bit-Wortformat, das acht 16-Bit-Datenelemente enthält. Ein drittes beispielhaftes Format ist ein gepacktes 256-bit-Byteformat, das zweiunddreißig 8-Bit-Datenelemente enthält. Ein viertes beispielhaftes Format ist ein gepacktes 256-bit-Wortformat, das sechzehn 16-Bit-Datenelemente enthält. Ein fünftes beispielhaftes Format ist ein gepacktes 256-bit-Doppelwortformat, das acht 32-Bit-Datenelemente enthält. Ein sechstes beispielhaftes Format ist ein gepacktes 512-bit-Wortformat, das zweiunddreißig 16-Bit-Datenelemente enthält. Ein siebentes beispielhaftes Format ist ein gepacktes 512-bit-Doppelwortformat, das sechzehn 32-Bit-Datenelemente enthält. Ein achtes beispielhaftes Format ist ein gepacktes 512-bit-Quadwortformat, das acht 64-Bit-Datenelemente enthält.
  • Wie gezeigt ist, kann in einigen Ausführungsformen in Reaktion auf den Befehl und/oder die Operation ein erster Ergebnismaskenoperand 528 erzeugt und in einem durch den Befehl angegebenen ersten Maskenregister 532-1 gespeichert werden und kann ein zweiter Ergebnismaskenoperand 530 erzeugt und in einem durch den Befehl angegebenen zweiten Maskenregister 532-2 gespeichert werden. In einigen Ausführungsformen können der erste und der zweite gepackte Quelldatenoperand 522, 524 in eine Ausführungseinheit 518 eingegeben werden. Die Ausführungseinheit kann in Reaktion auf den Befehl (z. B. wie sie durch einen oder mehrere Befehle oder ein oder mehrere Steuersignale 516, die aus dem Befehl decodiert worden sind, gesteuert wird) die Ergebnismaskenoperanden erzeugen und speichern. In einigen Ausführungsformen kann dies enthalten, dass die Ausführungseinheit jedes Datenelement in dem ersten gepackten Quelldatenoperanden mit jedem Datenelement in dem gepackten zweiten Quelldatenoperanden vergleicht. Jedes der sechzehn Datenelemente in dem ersten gepackten Quelldatenoperanden kann z. B. mit jedem der sechzehn Datenelemente in dem zweiten gepackten Quelldatenoperanden für eine Gesamtmenge von zweihundertsechsundfünfzig Vergleichen verglichen werden.
  • Jeder Ergebnismaskenoperand kann einem anderen der gepackten Quelldatenoperanden entsprechen. In der veranschaulichten Ausführungsform kann der erste Ergebnismaskenoperand z. B. dem ersten gepackten Quelldatenoperanden entsprechen, während der zweite Ergebnismaskenoperand dem zweiten gepackten Quelldatenoperanden entsprechen kann. In einigen Ausführungsformen kann jeder Ergebnismaskenoperand die gleiche Anzahl von Maskenelementen wie die Anzahl der Datenelemente in dem entsprechenden gepackten Quelldatenoperanden aufweisen. In den veranschaulichten Ausführungsformen ist jedes der Maskenelemente ein einziges Bit. Wie gezeigt ist, kann der erste Ergebnismaskenoperand sechzehn 1-Bit-Maskenelemente aufweisen, wobei jedes einem anderen der sechzehn Datenelemente des ersten gepackten Quelldatenoperanden an derselben relativen Position innerhalb der Operanden entspricht, wobei der zweite Ergebnismaskenoperand sechzehn 1-Bit-Maskenelemente aufweisen kann, wobei jedes einem anderen der sechzehn Datenelemente des zweiten gepackten Quelldatenoperanden an derselben relativen Position innerhalb der Operanden entspricht. In dem Fall anderer Anzahlen der Datenelemente in anderen Ausführungsformen können dann, wenn ein erster gepackter Quelldatenoperand N Datenelemente aufweist und ein zweiter gepackter Quelldatenoperand M Datenelemente aufweist, N * M Vergleiche ausgeführt werden, wobei eine erste N-Bit-Ergebnismaske, die dem ersten gepackten Quelldatenoperanden entspricht, gespeichert werden kann und eine zweite M-Bit-Ergebnismaske, die dem zweiten gepackten Quelldatenoperanden entspricht, gespeichert werden kann.
  • In einigen Ausführungsformen kann jedes Maskenelement einen Wert (z. B. in diesem Fall einen Bitwert) aufweisen, um anzugeben, ob sein entsprechendes Quelldatenelement (z. B. an derselben relativen Position) in seinem entsprechenden gepackten Quelldatenoperanden mit irgendeinem der Quelldatenelemente in dem anderen nicht entsprechenden gepackten Quelldatenoperanden entspricht oder nicht. Jedes Bit in dem ersten Ergebnismaskenoperanden kann z. B. einen Bitwert aufweisen, um anzugeben, ob sein entsprechendes Datenelement (z. B. an derselben relativen Position) in dem ersten gepackten Quelldatenoperanden mit irgendeinem der Datenelemente in dem zweiten gepackten Quelldatenoperanden übereinstimmt oder nicht, wohingegen jedes Bit in dem zweiten Ergebnismaskenoperanden einen Bitwert aufweisen kann, um anzugeben, ob sein entsprechendes Datenelement (z. B. an derselben relativen Position) in dem zweiten gepackten Quelldatenoperanden mit irgendeinem der Datenelemente in dem ersten gepackten Quelldatenoperanden übereinstimmt oder nicht. Gemäß einer möglichen Konvention, die in der veranschaulichten Ausführungsform verwendet wird, kann jedes Maskenbit, das auf eine binäre eins (d. h., 1) gesetzt ist, angeben, dass sein entsprechendes Datenelement in seinem entsprechenden gepackten Quelldatenoperanden mit wenigstens einem Datenelement in dem anderen nicht entsprechenden gepackten Quelldatenoperanden übereinstimmt oder diesem gleicht. Im Gegensatz kann jedes Maskenbit, das auf eine binäre null (d. h., 0) gelöscht ist, angeben, dass sein entsprechendes Datenelement in seinem entsprechenden gepackten Quelldatenoperanden mit keinem der Datenelemente in dem anderen nicht entsprechenden gepackten Quelldatenoperanden übereinstimmt oder keinem gleicht. Die entgegengesetzte Konvention ist für andere Ausführungsformen außerdem geeignet.
  • In der speziellen veranschaulichten beispielhaften Ausführungsform sind die einzigen Datenelemente in dem ersten gepackten Quelldatenoperanden, die mit den Datenelementen in dem zweiten gepackten Quelldatenoperanden übereinstimmen oder diesen gleichen, z. B. jene mit den Werten 3, 7 und 23. In Anbetracht des ersten gepackten Quelldatenoperanden befindet sich das Datenelement des Wertes 3 an der zweiten Datenelementposition von dem linken oder niedrigstwertigen Bit, befindet sich das Datenelement des Wertes 7 an der dritten Datenelementposition von links oder dem niedrigstwertigen Bit und befindet sich das Datenelement des Wertes 23 an der zehnten Datenelementposition von links oder dem niedrigstwertigen Bit. Entsprechend sind in dem ersten Ergebnismaskenoperanden nur das zweite, das dritte und das zehnte Maskenbit von links oder dem niedrigstwertigen Ende auf eine binäre eins (d. h., 1) gesetzt, um anzugeben, dass die entsprechenden Datenelemente in dem ersten gepackten Quelldatenoperanden mit wenigstens einem Datenelement in dem zweiten gepackten Quelldatenoperanden übereinstimmen, wohingegen alle anderen Bits auf eine binäre null (d. h., 0) gelöscht sind, um anzugeben, dass die entsprechenden Datenelemente in dem ersten gepackten Quelldatenoperanden nicht mit irgendwelchen Datenelementen in dem zweiten gepackten Quelldatenoperanden übereinstimmen.
  • Gleichermaßen befindet sich in Anbetracht des zweiten gepackten Quelldatenoperanden das Datenelement des Wertes 3 an der ersten Datenelementposition von links oder dem niedrigstwertigen Bit, befindet sich das Datenelement des Wertes 7 an der vierten Datenelementposition von links oder dem niedrigstwertigen Bit und befindet sich das Datenelement des Wertes 23 an der neunten Datenelementposition von links oder dem niedrigstwertigen Bit. Entsprechend sind in dem zweiten Ergebnismaskenoperanden nur das erste, das vierte und das neunte Maskenbit von links oder dem niedrigstwertigen Ende auf eine binäre eins (d. h., 1) gesetzt, um anzugeben, dass die entsprechenden Datenelemente in dem zweiten gepackten Quelldatenoperanden mit wenigstens einem Datenelement in dem ersten gepackten Quelldatenoperanden übereinstimmen, wohingegen alle anderen Bits auf eine binäre null (d. h., 0) gelöscht sind, um anzugeben, dass die entsprechenden Datenelemente in dem zweiten gepackten Quelldatenoperanden mit keinen Datenelementen in dem ersten gepackten Quelldatenoperanden übereinstimmen.
  • In einigen Ausführungsformen können das erste und das zweite Maskenregister die Register von einem Satz von Architekturregistern eines Prozessors repräsentieren, die durch die maskierten Befehle für gepackte Daten eines Befehlssatzes des Prozessors verwendet werden sollen, um die Operationsmaskierung, Operationsaussage oder bedingte Steuerung der Operation für gepackte Daten auszuführen. In einigen Ausführungsformen können das erste und das zweite Maskenregister z. B. Register in dem Satz der Operationsmaskenregister 322 für gepackte Daten nach 3 sein. Die maskierten Befehle für gepackte Daten können betriebsfähig sein, um die Maskenregister als die Quelloperanden anzugeben, (können z. B. ein Feld aufweisen, um die Maskenregister als die Quelloperanden anzugeben), die zu verwenden sind, um eine Operation für gepackte Daten zu maskieren, auszusagen oder bedingt zu steuern. In einigen Ausführungsformen können die Maskierung, die Aussage oder die bedingte Steuerung auf einer Granularität pro Datenelement bereitgestellt sein, so dass die Operationen an verschiedenen Datenelementen oder Paaren von entsprechenden Datenelementen separat und/oder unabhängig von den anderen maskiert, ausgesagt oder bedingt gesteuert werden können. Jedes Maskenbit kann z. B. einen ersten Wert aufweisen, um es zu erlauben, dass die Operation ausgeführt wird, und um es zu erlauben, dass das entsprechende Ergebnisdatenelement an dem Ziel gespeichert wird, oder kann einen zweiten anderen Wert aufweisen, um es nicht zu erlauben, dass die Operation ausgeführt wird, und/oder um es nicht zu erlauben, dass das entsprechende Ergebnisdatenelement an dem Ziel gespeichert wird. Gemäß einer möglichen Konvention kann ein zu einer binären null (d. h., 0) gelöschtes Maskenbit eine ausgeblendete Operation repräsentieren, für die eine entsprechende Operation nicht ausgeführt werden soll und/oder ein entsprechendes Ergebnis nicht gespeichert werden soll, wohingegen ein auf eine binäre eins (d. h., 1) gesetztes Maskenbild eine unmaskierte Operation repräsentieren kann, für die eine entsprechende Operation ausgeführt werden soll und ein entsprechendes Ergebnis gespeichert werden soll. Die entgegengesetzte Konvention ist außerdem möglich.
  • In der in 5 veranschaulichten Ausführungsform sind der erste und der zweite Ergebnismaskenoperand in verschiedenen Maskenregistern (z. B. in verschiedenen Operationsmaskenregistern für gepackte Daten) gespeichert. Ein möglicher Vorteil für einige Ausführungsformen ist, dass jeder Ergebnismaskenoperand und/oder jedes Maskenregister für die Verwendung als ein gepackter Quelldatenoperationsmaskenoperand für einen maskierten oder ausgesagten Befehl für gepackte Daten, wie z. B. einen maskierten oder ausgesagten Datenelement-Zusammenschlussbefehl (wie z. B. einen VPCOMPRESS-Befehl) direkt geeignet ist, obwohl der Schutzumfang der Erfindung nicht auf eine derartige Verwendung eingeschränkt ist. Beispielhaft können zwei Instanzen des maskierten oder ausgesagten Datenelement-Zusammenschlussbefehls jede einen anderen des ersten und des zweiten Ergebnismaskenoperanden, ohne dass im Wesentlichen irgendeine zusätzliche Verarbeitung des ersten und des zweiten Ergebnismaskenoperanden erforderlich ist, als einen Quellenmaskenoperanden, einen Aussageoperanden oder einen Operanden zur bedingten Steuerung für eine Datenelement-Zusammenschlussoperation verwenden. Die unmaskierten Bits oder Maskenelemente der Ergebnismasken oder der Maskenregister können den übereinstimmenden Indizes der CSR-Tupel entsprechen, die verglichen wurden, wobei der maskierte oder ausgesagte Datenelement-Zusammenschlussbefehl diese unmaskierten Bits oder Maskenelemente verwenden kann, um die entsprechenden Werte dieser CSR-Tupel zusammenzuschließen. Weitere Einzelheiten, wie derartige maskierte oder ausgesagte Datenelement-Zusammenschlussbefehle in dieser Weise verwendet werden können, werden im Folgenden weiter erörtert.
  • 6 ist ein Blockschaltplan, der eine zweite beispielhafte Ausführungsform einer Datenelement-Vergleichsoperation 640 veranschaulicht, die in Reaktion auf eine zweite beispielhafte Ausführungsform eines Datenelement-Vergleichsbefehls ausgeführt werden kann. Die Operation 640 weist bestimmte Ähnlichkeiten mit der Operation 540 nach 5 auf. Um es zu vermeiden, die Beschreibung undeutlich zu machen, werden die unterschiedlichen und/oder zusätzlichen Eigenschaften für die Operation 640 in erster Linie beschrieben, ohne alle der optional ähnlichen oder gemeinsamen Eigenschaften und Einzelheiten bezüglich der Operation 540 zu wiederholen. Es soll jedoch erkannt werden, dass die vorher beschriebenen Eigenschaften und Einzelheiten der Operation 540 einschließlich ihrer Variationen und alternativen Ausführungsformen außerdem optional für die Operation 640 gelten können, wenn es nicht anders dargelegt ist oder anderweitig deutlich offensichtlich ist.
  • Wie in der Ausführungsform nach 6 kann der Befehl einen ersten gepackten Quelldatenoperanden 622 spezifizieren oder anderweitig angegeben, wobei er einen zweiten gepackten Quelldatenoperanden 624 spezifizieren oder anderweitig angeben kann. Der erste und der zweite gepackte Quelldatenoperand können in eine Ausführungseinheit 618 eingegeben werden. Die Ausführungseinheit kann in Reaktion auf den Befehl (z. B. wie sie durch einen oder mehrere Befehle oder ein oder mehrere Steuersignale 616, die aus dem Befehl decodiert worden sind, gesteuert wird) einen ersten Ergebnismaskenoperanden 628 und einen zweiten Ergebnismaskenoperanden 630 erzeugen und speichern.
  • Ein Unterschied der Ausführungsform nach 6 bezüglich der Ausführungsform nach 5 ist, dass der erste und der zweite Ergebnismaskenoperand in einem einzigen Maskenregister 632 gespeichert sind, anstatt das jeder in einem anderen Maskenregister (z. B. dem ersten Maskenregister 532-1 und dem zweiten Maskenregister 532-2) gespeichert ist. Spezifisch ist der erste Ergebnismaskenoperand 628 in den niedrigstwertigen 16 Bits des einzigen Maskenregisters gespeichert, während der zweite Ergebnismaskenoperand 630 in den nächsten benachbarten 16 Bits des einzigen Maskenregisters gespeichert ist. Alternativ können die Positionen des ersten und des zweiten Maskenoperanden optional ausgetauscht sein. In diesem Fall entspricht der niedrigstwertige Anteil des einzigen Maskenregisters (z. B. die niedrigstwertigen 16 Bits) einem der gepackten Quelldatenoperanden (in diesem Fall z. B. dem ersten gepackten Quelldatenoperanden), während ein höherwertiger Anteil des einzigen Maskenregisters (z. B. die nächsten höherwertigen 16 Bits) einem weiteren der gepackten Quelldatenoperanden (in diesem Fall z. B. dem zweiten gepackten Quelldatenoperanden) entspricht. In der Veranschaulichung ist gezeigt, dass das Maskenregister nur 32 Bits aufweist, obwohl es in anderen Ausführungsformen weniger oder mehr, wie z. B. 64 Bits, aufweisen kann.
  • In einigen Ausführungsformen kann der niedrigstwertige erste Ergebnismaskenoperand für die Verwendung als ein gepackter Quelldatenoperationsmaskenoperand für einen maskierten Befehl für gepackte Daten, wie z. B. einen maskierten oder ausgesagten Datenelement-Zusammenschlussbefehl (wie z. B. einen VPCOMPRESS-Befehl), direkt geeignet sein, obwohl der Schutzumfang der Erfindung nicht auf eine derartige Verwendung eingeschränkt ist. Überdies kann eine einfache Verschiebung verwendet werden, um die Bits [16:31] des Maskenregisters in die Bits [0:15] zu verschieben, so dass der zweite Ergebnismaskenoperand für die Verwendung als ein gepackter Quelldatenoperationsmaskenoperand für einen maskierten Befehl für gepackte Daten, wie z. B. einen maskierten oder ausgesagten Datenelement-Zusammenschlussbefehl (wie z. B. einen VPCOMPRESS-Befehl), direkt geeignet sein kann, obwohl der Schutzumfang der Erfindung nicht auf eine derartige Verwendung eingeschränkt ist.
  • 7 ist ein Blockschaltplan, der eine dritte beispielhafte Ausführungsform einer Datenelement-Vergleichsoperation 740 veranschaulicht, die in Reaktion auf eine dritte beispielhafte Ausführungsform des Datenelement-Vergleichsbefehls ausgeführt werden kann. Die Operation 740 weist bestimmte Ähnlichkeiten mit der Operation 540 nach 5 auf. Um es zu vermeiden, die Beschreibung undeutlich zu machen, werden die unterschiedlichen und/oder zusätzlichen Eigenschaften für die Operation 740 in erster Linie beschrieben, ohne alle der optional ähnlichen oder gemeinsamen Eigenschaften und Einzelheiten bezüglich der Operation 540 zu wiederholen. Es soll jedoch erkannt werden, dass die vorher beschriebenen Eigenschaften und Einzelheiten der Operation 540 einschließlich ihrer Variationen und alternativen Ausführungsformen außerdem optional für die Operation 740 gelten können, wenn es nicht anders dargelegt ist oder anderweitig deutlich offensichtlich ist.
  • Wie in der Ausführungsform nach 7 kann der Befehl einen ersten gepackten Quelldatenoperanden 722 spezifizieren oder anderweitig angeben, wobei er einen zweiten gepackten Quelldatenoperanden 724 spezifizieren oder anderweitig angeben kann. Der erste und der zweite gepackte Quelldatenoperand können in eine Ausführungseinheit 718 eingegeben werden. Die Ausführungseinheit kann in Reaktion auf den Befehl (z. B. wie sie durch einen oder mehrere Befehle oder ein oder mehrere Steuersignale 716, die aus dem Befehl decodiert worden sind, gesteuert wird) ein Ergebnis erzeugen und speichern.
  • Ein Unterschied der Ausführungsform nach 7 bezüglich der Ausführungsform nach 5 ist, dass die Ausführungseinheit 718 nur einen einzigen Ergebnismaskenoperanden 728 erzeugen und speichern kann. In einigen Ausführungsformen kann der einzige Ergebnismaskenoperand in einem Maskenregister (z. B. einem Operationsmaskenregister für gepackte Daten) gespeichert werden. In einigen Ausführungsformen kann der einzige Ergebnismaskenoperand einem des ersten und des zweiten gepackten Quelldatenoperanden (in dem veranschaulichten Beispiel z. B. dem ersten gepackten Quelldatenoperanden) entsprechen. In einigen Ausführungsformen können der Ergebnismaskenoperand 728 und/oder das Maskenregister 732 für die Verwendung als ein gepackter Quelldatenoperationsmaskenoperand für einen maskierten Befehl für gepackte Daten, wie z. B. einen maskierten oder ausgesagten Datenelement-Zusammenschlussbefehl (wie z. B. einen VPCOMPRESS-Befehl), direkt geeignet sein, obwohl der Schutzumfang der Erfindung nicht auf eine derartige Verwendung eingeschränkt ist. Eine andere Instanz des Befehls (mit dem gleichen Opcode) kann abermals ausgeführt werden, um den Ergebnismaskenoperanden für den anderen gepackten Quelldatenoperanden zu erzeugen.
  • 8 ist ein Blockschaltplan, der eine vierte beispielhafte Ausführungsform einer Datenelement-Vergleichsoperation 840 veranschaulicht, die in Reaktion auf eine vierte beispielhafte Ausführungsform des Datenelement-Vergleichsbefehls ausgeführt werden kann. Die Operation 840 weist bestimmte Ähnlichkeiten mit der Operation 540 nach 5 auf. Um es zu vermeiden, die Beschreibung undeutlich zu machen, werden die unterschiedlichen und/oder zusätzlichen Eigenschaften für die Operation 840 in erster Linie beschrieben, ohne alle der optional ähnlichen oder gemeinsamen Eigenschaften und Einzelheiten bezüglich der Operation 540 zu wiederholen. Es soll jedoch erkannt werden, dass die vorher beschriebenen Eigenschaften und Einzelheiten der Operation 540 einschließlich ihrer Variationen und alternativen Ausführungsformen außerdem optional für die Operation 840 gelten können, wenn es nicht anders dargelegt ist oder anderweitig deutlich offensichtlich ist.
  • Wie in der Ausführungsform nach 8 kann der Befehl einen ersten gepackten Quelldatenoperanden 822 spezifizieren oder anderweitig angeben, wobei er einen zweiten gepackten Quelldatenoperanden 824 spezifizieren oder anderweitig angeben kann. Der erste und der zweite gepackte Quelldatenoperand können in eine Ausführungseinheit 818 eingegeben werden. Die Ausführungseinheit kann in Reaktion auf den Befehl (z. B. wie sie durch einen oder mehrere Befehle oder ein oder mehrere Steuersignale 816, die aus dem Befehl decodiert worden sind, gesteuert wird) einen ersten Ergebnismaskenoperanden 828 und einen zweiten Ergebnismaskenoperanden 830 erzeugen und speichern.
  • Ein Unterschied der Ausführungsform nach 8 bezüglich der Ausführungsform nach 5 ist, dass die Ausführungseinheit 818 den ersten und den zweiten Ergebnismaskenoperanden 828, 830 erzeugen und in einem gepackten Ergebnisdatenoperanden 820 speichern kann. Der gepackte Ergebnisdatenoperand kann z. B. in einem Register für gepackte Daten, an einem Datenspeicherort oder einem anderen Speicherort gespeichert werden. In einer Ausführungsform kann der gepackte Ergebnisdatenoperand oder das Register ein 512-Bit-Operand oder -Register sein, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. Ein weiterer Unterschied ist, dass die Maskenbits des ersten und des zweiten Ergebnismaskenoperanden innerhalb anderer Nicht-Maskenbits angeordnet sein können. Wie gezeigt ist, kann es zwei Bits in jedem Ergebnisdatenelement in dem gepackten Ergebnisdatenoperanden geben, die als die Maskenbits verwendet werden. Eines dieser zwei Bits in jedem Datenelement kann für den ersten Ergebnismaskenoperanden verwendet werden, wohingegen das andere für den zweiten Ergebnismaskenoperanden verwendet werden kann. Die zwei niedrigstwertigen Bits jedes Datenelements können z. B. optional verwendet werden, die zwei höchstwertigen Bits jedes Datenelements können optional verwendet werden, das niedrigstwertige und das höchstwertige Bit können optional verwendet werden oder es kann irgendein anderer Satz von Bits optional verwendet werden. In der veranschaulichten Ausführungsform werden die zwei niedrigstwertigen Bits verwendet, wobei das niedrigstwertige Bit der beiden für den ersten Maskenoperanden verwendet wird, während das höherwertige Bit der beiden für den zweiten Maskenoperanden verwendet wird, obwohl dies nicht erforderlich ist.
  • Der folgende Pseudocode repräsentiert eine beispielhafte Ausführungsform eines Datenelement-Vergleichsbefehls mit dem Namen VXBARCMPU:
    • VXBARCMPU{Q|DQ} VDEST, SRC1, SRC2
    • //Der Befehl erzeugt 2 Masken für n Indizes in jedem des SRC1 and SRC2
    • //VDEST, SRC1 und SRC2 sind jedes ein Register für gepackte Daten
    • VDEST = 0 ; // initialisieren, VDEST hält die endgültigen 2-Bit-Masken
    • für i ← 1 bis n // n=16 (Q) oder 8 (DQ)
    • für j ← 1 bis n // n=16 (Q) oder 8 (DQ)
    • bool match = (SRC1.element[i] == SRC2.element[j]) ? 1:0 //n^2 Vergleiche
    • VDEST.element[i].bit[0] = VDEST.element[i].bit[0] | match; //bit0
    • VDEST.element[j].bit[1] = VDEST.element[j].bit[l] | match; //bit1
  • In diesem Pseudocode repräsentiert Q ein 32-Bit-Quadwort, wohingegen DQ ein 64-Bit-Doppelquadwort repräsentiert. Das Symbol „|“ repräsentiert das logische ODER. Der Begriff „match“ repräsentiert den Vergleich für die Gleichheit, z. B. von ganzen Zahlen.
  • Nun stellt in den Ausführungsformen nach den 5-8 jedes der Bits in dem Ergebnismaskenoperanden eine Zusammenfassung oder eine kumulative Angabe dessen bereit, ob sein entsprechendes Quelldatenelement mit irgendeinem der Quelldatenelemente in dem anderen nicht entsprechenden Operanden übereinstimmt oder nicht. Außerdem weist in den Ausführungsformen nach den 5-8 jeder Ergebnismaskenoperand die gleiche Anzahl von Maskenbits wie die Anzahl der Datenelemente in seinem entsprechenden Quelloperanden auf. Diese Maskenbits als solche befinden sich in einem Format, das im Allgemeinen für die Verwendung als ein Maskenoperand für einen maskierten Befehl für gepackte Daten, wie z. B. einen maskierten oder ausgesagten Datenelement-Zusammenschlussbefehl (z. B. einen maskierten VPCOMPRESS-Befehl), gut geeignet ist.
  • Eine alternative mögliche Herangehensweise würde sein, eine Anzahl von Bits pro Vergleich zu speichern, deren Anzahl gleich der Anzahl der ausgeführten Vergleiche ist. Jedes dieser Bits allein würde keine Zusammenfassung oder kumulative Angabe dessen bereitstellen, ob sein entsprechendes Quelldatenelement mit irgendeinem der Quelldatenelemente in dem anderen nicht entsprechenden Operanden übereinstimmt oder nicht. Stattdessen würde jedes dieser Bits pro Vergleich einem einzigen Vergleich entsprechen, der zwischen einer anderen Kombination aus einem Datenelement des ersten gepackten Quelldatenoperanden und einem Datenelement des zweiten gepackten Quelldatenoperanden ausgeführt wird. In dem Fall von zwei gepackten Quelldatenoperanden, die jeder N Datenelemente aufweisen, können N * N Vergleiche ausgeführt werden, wobei N * N Ergebnismaskenbits unter Verwendung dieser alternativen Herangehensweise gespeichert werden können. In dem Fall von zwei Sechzehn-Datenelement-Operanden können zweihundertsechsundfünfzig ausgeführt werden, wobei anstatt von nur zwei 16-Bit-Ergebnismasken eine 256-Bit-Ergebnismaske gespeichert werden kann.
  • Ein potentieller Nachteil bei einer derartigen alternativen Herangehensweise ist jedoch, dass der Ergebnismaskenoperand dazu tendiert, sich in einem weniger nützlichen und/oder effizienten Format für bestimmte Typen der anschließenden Operationen zu befinden. Kein einziges derartiges Bit pro Vergleich gibt z. B. ohne eine weitere Verarbeitung an, ob ein Datenelement in einer Quelle ein übereinstimmendes Datenelement in der anderen Quelle aufweist oder nicht. Diese Ergebnismaskenbits pro Vergleich als solche können ohne eine weitere Verarbeitung nicht so gut für die Verwendung als ein Maskenoperand für einen maskierten Befehl für gepackte Daten, wie z. B. einen maskierten oder ausgesagten Datenelement-Zusammenschlussbefehl (wie z. B. einen maskierten VPCOMPRESS-Befehl), geeignet sein. Zusätzlich können die für alle Vergleichsergebnisse bereitgestellten zusätzlichen Bits dazu tendieren, mehr Zusammenschaltungsbandbreite, Registerraum, Leistung usw. aufzunehmen.
  • Im Gegensatz kann jeder der ersten und zweiten Ergebnismaskenoperanden 528, 530 und/oder jedes der ersten und zweiten Maskenregister 532-1, 532-2 als eine Quellmaske durch einen maskierten Befehl für gepackte Daten (wie z. B. einen maskierten VPCOMPRESS-Befehl) direkt verwendbar sein. Gleichermaßen kann der erste Ergebnismaskenoperand 628 durch einen maskierten Befehl für gepackte Daten (wie z. B. einen maskierten VPCOMPRESS-Befehl) als eine Quellmaske direkt verwendbar sein, während der zweite Ergebnismaskenbefehl 630 (z. B. durch eine einfache 16-Bit-Verschiebung) leicht direkt verwendbar gemacht werden kann. Gleichermaßen können der Ergebnismaskenoperand 728 und/oder das Maskenregister 732 durch einen maskierten Befehl für gepackte Daten (wie z. B. einen maskierten VPCOMPRESS-Befehl) als eine Quellmaske direkt verwendbar sein.
  • In irgendeiner der in den 3-8 gezeigten Ausführungsformen können in einigen Ausführungsformen bestimmte Vergleiche optional vermieden werden, falls es für den Befehl fest ist (z. B. für einen Opcode des Befehls fest oder impliziert ist) oder anderweitig sichergestellt sein kann, dass die Datenelemente der Quelloperanden jeweils in einer aufsteigenden Reihenfolge angeordnet sind (wie es z. B. der Fall sein kann, wenn mit den Indizes der Daten im CSR-Format gearbeitet wird oder wenn mit bestimmten anderen Typen von Daten gearbeitet wird). Es können z. B. Vergleiche vermieden werden, wenn es leicht bestimmt werden kann, dass keines der Elemente in den gepackten Quelldatenoperanden übereinstimmen würde. Beispielhaft kann eine Logik enthalten sein, um zu testen, ob entweder das niedrigstwertige Datenelement in dem ersten gepackten Quelldatenoperanden größer als das höchstwertige Datenelement in dem zweiten gepackten Quelldatenoperanden ist oder das höchstwertige Datenelement in dem ersten gepackten Quelldatenoperanden kleiner als das niedrigstwertige Datenelement in dem zweiten gepackten Quelldatenoperanden ist und ob irgendeines von diesem zutrifft, um das Vergleichen jedes Datenelements einer Quelle mit jedem Datenelement der anderen Quelle zu vermeiden. Dies kann es einerseits unterstützen, die Leistungsaufnahme zu verringern, wobei es optional nicht erforderlich ist.
  • 9 ist ein Blockschaltplan eines Beispiels einer maskierten Datenelement-Zusammenschlussoperation 996, die in Reaktion auf einen maskierten Datenelement-Zusammenschlussbefehl ausgeführt werden kann. Ein Beispiel eines derartigen Befehls, der für die Ausführungsformen geeignet ist, ist der VPCOMPRESSED-Befehl im x86, obwohl die Verwendung dieses Befehls nicht erforderlich ist.
  • Der maskierte Datenelement-Zusammenschlussbefehl kann einen gepackten Quelldatenoperanden 997 angeben. In einigen Ausführungsformen kann der gepackte Quelldatenoperand Datenwerte speichern, die den Indizes eines CSR-Formats entsprechen. Der gepackte Quelldatenoperand kann z. B. Datenwerte speichern, die den Indizes eines der ersten gepackten Quelldatenoperanden 522, 622, 722 oder 822 entsprechen. Abermals unter Bezugnahme auf die dünnbesetzte Matrix nach 1 entspricht der Datenwert a3 dem Index 3 der Spalte 3, entspricht der Datenwert a7 dem Index 7 der Spalte 7 usw.
  • Der maskierte Datenelement-Zusammenschlussbefehl kann außerdem einen Quellmaskenoperanden 928 angeben. In verschiedenen Ausführungsformen kann der Quellmaskenoperand der erste Ergebnismaskenoperand 528, der erste Ergebnismaskenoperand 628 oder der Ergebnismaskenoperand 728 sein. Alternativ kann der gepackte Ergebnismaskenoperand 820 minimal verarbeitet werden, um den Quellmaskenoperanden 928 zu erzeugen.
  • Der gepackte Quelldatenoperand 997 und der Quellmaskenoperand 928 können einer Ausführungseinheit 918 bereitgestellt werden. Die Ausführungseinheit kann in Reaktion auf den Befehl und/oder die Operation betriebsfähig sein, um den gepackten Ergebnisdatenoperanden 998 zu speichern. In einigen Ausführungsformen kann der Befehl/die Operation die Ausführungseinheit veranlassen, die aktiven Datenelemente in dem gepackten Quelldatenoperanden 997, die den Maskenbits des Quellmaskenoperanden 928 an denselben relativen Positionen entsprechen, die auf eine binäre eins gesetzt sind, an den niedrigstwertigen Datenelementpositionen des gepackten Ergebnisdatenoperand zusammenhängend zu speichern. Alle verbleibenden Datenelemente des gepackten Ergebnisdatenoperanden können auf null gelöscht werden. Wie gezeigt ist, können die drei Werte a3, a7 und a23 des gepackten Quelldatenoperanden, die die einzigen drei aktiven Werte mit entsprechenden gesetzten Maskenbits sind, an den drei niedrigstwertigen Datenelementpositionen des gepackten Ergebnisdatenoperanden zusammengeschlossen werden, wobei alle höherwertigen Ergebnisdatenelemente auf null gesetzt sind. In diesem Fall verwendet der VPCOMPRESSED-Befehl die Nullsetz-Maskierung, bei der die maskierten Ergebnisdatenelemente auf null gesetzt werden.
  • Weitere Instanzen eines maskierten Datenelement-Zusammenschlussbefehls können ähnlich ausgeführt werden, um die übereinstimmenden Werte b3, b7 und b23 an den drei niedrigstwertigen Datenelementpositionen eines weiteren gepackten Ergebnisdatenoperanden zusammenzuschließen. Der zweite Ergebnismaskenoperand 530 kann z. B. zusammen mit den entsprechenden Werten aus der CSR-Darstellung der Zeile 2 der dünnbesetzten Matrix 100 verwendet werden. Bei dieser Herangehensweise können die übereinstimmenden oder sich gleichenden Datenwerte der in einem CSR-Format dargestellten Daten isoliert, zusammengeschlossen und in eine vertikale SIMD-Ausrichtung an denselben relativen Positionen in den gepackten Datenoperanden gesetzt werden. Derartige Operationen können wiederholt werden, bis die Vektoren oder Zeilen des Endes der dünnbesetzten Matrix ihre Enden erreichen. Dies kann es unterstützen, eine effiziente vertikale SIMD-Verarbeitung dieser übereinstimmenden Datenwerte zu ermöglichen. Dies kann in einem Aspekt vorteilhaft verwendet werden, um die Leistung der Arithmetikoperationen eines dünnbesetzten Vektors mit einem dünnbesetzten Vektor zu verbessern.
  • 10 ist ein Blockschaltplan einer beispielhaften Ausführungsform eines geeigneten Satzes von Operationsmaskenregistern 1032 für gepackte Daten. In der veranschaulichten Ausführungsform enthält der Satz acht Register, die als k0 bis k7 bezeichnet sind. Alternative Ausführungsformen können entweder weniger als acht Register (z. B. zwei, vier, sechs usw.) oder mehr als acht Register (z. B. sechzehn, zweiunddreißig usw.) enthalten. Jedes dieser Register kann verwendet werden, um eine Operationsmaske für gepackte Daten zu speichern. In der veranschaulichten Ausführungsform besteht jedes der Register aus 64 Bits. In alternativen Ausführungsformen können die Breiten der Register entweder breiter als 64 Bits (z. B. 80 Bits, 128 Bits usw.) oder schmaler als 64 Bits (z. B. 8 Bits, 16 Bits, 32 Bits usw.) sein. Die Register können in unterschiedlichen Weisen implementiert sein und sind nicht auf irgendeinen speziellen Schaltungs- oder Entwurfstyp eingeschränkt. Beispiele geeigneter Register enthalten dedizierte physische Register, dynamisch zugewiesene physische Register unter Verwendung der Registerumbenennung und Kombinationen daraus, sind aber nicht auf diese eingeschränkt.
  • In einigen Ausführungsformen können die Operationsmaskenregister 1032 für gepackte Daten ein separater dedizierter Satz von Architekturregistern sein. In einigen Ausführungsformen können die Befehle die Operationsmaskenregister für gepackte Daten in anderen Bits oder in einem oder mehreren anderen Feldern eines Befehlsformats als jenen, die verwendet werden, um andere Typen von Registern (z. B. Register für gepackte Daten) zu codieren oder zu spezifizieren, codieren oder spezifizieren. Beispielhaft kann ein Befehl drei Bits (z. B. ein 3-Bit-Feld) verwenden, um irgendeines der acht Operationsmaskenregister für gepackte Daten k0 bis k7 zu codieren oder zu spezifizieren. In alternativen Ausführungsformen können jeweils entweder weniger oder mehr Bits verwendet werden, wenn es weniger oder mehr Operationsmaskenregister für gepackte Daten gibt. In einer speziellen Implementierung können nur die Operationsmaskenregister für gepackte Daten k1 bis k7 (aber nicht k0) als ein Aussageoperand adressiert werden, um eine maskierte Operation für gepackte Daten auszusagen. Das Register k0 kann als eine regelmäßige Quelle oder ein regelmäßiges Ziel verwendet werden, wobei es aber nicht als ein Aussageoperand codiert werden kann (falls z. B. k0 spezifiziert wird, weist es eine „Keine-Masken“-Codierung auf), obwohl dies nicht erforderlich ist.
  • 11 ist ein Blockschaltplan einer beispielhaften Ausführungsform eines geeigneten Satzes von Registern 1120 für gepackte Daten. Die Register für gepackte Daten enthalten zweiunddreißig 512-Bit-Register für gepackte Daten, die als ZMM0 bis ZMM31 bezeichnet sind. In der veranschaulichten Ausführungsform sind die 256 Bits unterer Ordnung der unteren sechzehn Register, nämlich ZMM0-ZMM15, als die entsprechenden 256-Bit-Register für gepackte Daten, die als YMM0-YMM15 bezeichnet sind, bezeichnet oder diesen überlagert, obwohl dies nicht erforderlich ist. Gleichermaßen sind in der veranschaulichten Ausführungsform die 128 Bits unterer Ordnung der Register YMM0-YMM15 als die entsprechenden 128-Bit-Register für gepackte Daten, die als XMM0-XMM15 bezeichnet werden, bezeichnet oder diesen überlagert, obwohl dies außerdem nicht erforderlich ist. Die 512-Bit-Register ZMM0 bis ZMM31 sind betriebsfähig, um gepackte 512-Bit-Daten, gepackte 256-Bit-Daten oder gepackte 128-Bit-Daten zu halten. Die 256-Bit-Register YMM0-YMM15 sind betriebsfähig, um gepackte 256-Bit-Daten oder gepackte 128-Bit-Daten zu halten. Die 128-Bit-Register XMM0-XMM15 sind betriebsfähig, um gepackte 128-Bit-Daten zu halten. In einigen Ausführungsformen kann jedes der Register verwendet werden, um entweder gepackte Gleitkommadaten oder gepackte Ganzzahldaten zu speichern. Es werden unterschiedliche Datenelementgrößen unterstützt, einschließlich wenigstens 8-Bit-Bytedaten, 16-Bit-Wortdaten, 32-Bit-Doppelwort, 32-Bit-Gleitkommadaten in einfacher Genauigkeit, 64-Bit-Doppelwort und 64-Bit-Gleitkommadaten in doppelter Genauigkeit. In alternativen Ausführungsformen können andere Anzahlen von Registern und/oder andere Größen der Register verwendet werden. In noch anderen Ausführungsformen können die Register das Aliasing größerer Register auf kleinere Register verwenden oder nicht und/oder können verwendet oder nicht, um Gleitkommadaten zu speichern.
  • Ein Befehlssatz enthält ein oder mehrere Befehlsformate. Ein gegebenes Befehlsformat definiert verschiedene Felder (Anzahl der Bits, Orte der Bits), um unter anderem die auszuführende Operation (den Opcode) und den (die) Operanden, an dem (denen) die Operation auszuführen ist, zu spezifizieren. Einige Befehlsformate sind durch die Definition von Befehlsschablonen (oder Unterformaten) weiter aufgegliedert. Die Befehlsschablonen eines gegebenen Befehlsformats können z. B. so definiert sein, dass sie andere Teilmengen der Felder des Befehlsformats aufweisen (die enthaltenen Felder sind typischerweise in der gleichen Reihenfolge, wobei wenigstens einige verschiedene Bitpositionen aufweisen, weil weniger Felder enthalten sind), und/oder so definiert sein, dass sie ein gegebenes Feld aufweisen, das anders interpretiert wird. Folglich wird jeder Befehl eines ISA unter Verwendung eines gegebenen Befehlsformats (und in einer gegebenen Befehlsschablone der Befehlsschablonen dieses Befehlsformats, falls sie definiert sind) ausgedrückt, wobei er Felder zum Spezifizieren der Operation und der Operanden enthält. Ein beispielhafter ADD-Befehl weist z. B. einen spezifischen Opcode und ein Befehlsformat auf, das ein Opcode-Feld enthält, um diese Opcode- und Operandenfelder zu spezifizieren, um Operanden (Quelle1/Ziel und Quelle2) auszuwählen; wobei ein Auftreten dieses ADD-Befehls in einem Befehlsstrom spezifische Inhalte in den Operandenfeldern aufweist, die spezifische Operanden auswählen. Ein Satz von SIMD-Erweiterungen, die als die weiterentwickelten Vektorerweiterungen (AVX) (AVX1 und AVX2) bezeichnet werden und das Vektorerweiterungs-Codierungsschema (VEX-Codierungsschema) 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
  • Die Ausführungsformen des (der) hier beschriebenen Befehls (Befehle) können in verschiedenen Formaten verkörpert sein. Zusätzlich werden im Folgenden beispielhafte Systeme, Architekturen und Pipelines ausführlich beschrieben. Die Ausführungsformen des Befehls (der Befehle) können in derartigen Systemen, Architekturen und Pipelines ausgeführt werden, sind jedoch nicht auf jene eingeschränkt, die ausführlich beschrieben werden.
  • Das VEX-Befehlsformat
  • Die VEX-Codierung ermöglicht, dass Befehle mehr als zwei Operanden aufweisen, und ermöglicht, dass SIMD-Vektorregister länger als 128 Bits sind. Die Verwendung eines VEX-Präfixes stellt eine Syntax für drei (oder mehr) Operanden bereit. Die vorherigen Zwei-Operanden-Befehle führten z. B. Operationen wie z. B. A = A + B aus, der einen Quelloperanden überschreibt. Die Verwendung eines VEX-Präfixes ermöglicht Operanden, zerstörungsfreie Operationen auszuführen, wie z. B. A = B + C.
  • 12A veranschaulicht ein beispielhaftes AVX-Befehlsformat, das ein VEX-Präfix 1202, ein echtes Opcode-Feld 1230, ein Mod R/M-Byte 1240, ein SIB-Byte 1250, ein Verschiebungsfeld 1262 und ein IMM8 1272 enthält. 12B veranschaulicht, welche Felder aus 12A ein vollständiges Opcode-Feld 1274 und ein Basisoperationsfeld 1242 bilden. 12C veranschaulicht, welche Felder aus 12A ein Registerindexfeld 1244 bilden.
  • Das VEX-Präfix (die Bytes 0-2) 1202 ist in einer Drei-Byte-Form codiert. Das erste Byte ist das Formatfeld 1240 (das VEX-Byte 0, die Bits [7:0]), das einen expliziten C4-Byte-Wert (den eindeutigen Wert, der zum Unterscheiden des C4-Befehlsformats verwendet wird) enthält. Die zweiten-dritten Bytes (die VEX-Bytes 1-2) enthalten eine Anzahl von Bitfeldern, die eine spezifische Fähigkeit bereitstellen. Spezifisch besteht das REX-Feld 1205 (das VEX-Byte 1, die Bits [7-5]) aus einem VEX.R-Bitfeld (dem VEX-Byte 1, dem Bit [7] - R), einem VEX.X-Bitfeld (dem VEX-Byte 1, dem Bit [6] -X) und einem VEX.B-Bitfeld (dem VEX-Byte 1, dem Bit [5] - B). Die anderen Felder der Befehle codieren die unteren drei Bits der Registerindizes, wie in der Technik bekannt ist (rrr, xxx und bbb), so dass Rrrr, Xxxx und Bbbb durch das Addieren von VEX.R, VEX.X und VEX.B gebildet werden können. Das Opcode-Abbildungsfeld 1215 (das VEX-Byte 1, die Bits [4:0] - mmmmm) enthält den Inhalt, um ein impliziertes führendes Opcode-Byte zu codieren. Das W-Feld 1264 (das VEX-Byte 2, das Bit [7] - W) - ist durch die Schreibweise VEX.W dargestellt und stellt in Abhängigkeit von dem Befehl verschiedene Funktionen bereit. Die Rolle des VEX.vvvv 1220 (des VEX-Bytes 2, der Bits [6:3] - vvvv) kann das Folgende enthalten: 1) das VEX.vvvv codiert den ersten Quellregisteroperanden, ist in invertierter (1-komplementärer) Form spezifiziert und ist für Befehle mit 2 oder mehr Quelloperanden gültig; 2) das VEX.vvvv codiert den Zielregisteroperanden und ist für bestimmte Vektorverschiebungen in 1-komplementärer Form spezifiziert; oder 3) das VEX.vvvv codiert keinen Operanden, wobei das Feld reserviert ist und 1211b enthalten sollte. Falls das Größenfeld VEX.L 1268 (das VEX-Byte 2, das Bit [2] - L) = 0 ist, gibt es einen 128-Bit-Vektor an; falls VEX.L = 1 gilt, gibt es einen 256-Bit-Vektor an. Das Präfix-Codierungsfeld 1225 (das VEX-Byte 2, die Bits [1:0] - pp) stellt zusätzliche Bits für das Basisoperationsfeld bereit.
  • Das echte Opcode-Feld 1230 (das Byte 3) ist außerdem als das Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • Das MOD R/M-Feld 1240 (das Byte 4) enthält ein MOD-Feld 1242 (die Bits [7-6]), ein Reg-Feld 1244 (die Bits [5-3]) und ein R/M-Feld 1246 (die Bits [2-0]). Die Rolle des Reg-Feldes 1244 kann das Folgende enthalten: Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden (das rrr des Rrrr), oder es kann als eine Opcode-Erweiterung behandelt werden und nicht verwendet werden, um irgendeinen Befehlsoperanden zu codieren. Die Rolle des R/M-Feldes 1246 kann das Folgende enthalten: Codieren des Befehlsoperanden, der auf eine Speicheradresse verweist, oder Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Maßstab, Index, Basis (SIB) - Der Inhalt des Maßstabsfeldes 1250 (das Byte 5) enthält das SS 1252 (die Bits [7-6]), das für die Speicheradressenerzeugung verwendet wird. Auf die Inhalte des SIB.xxx 1254 (der Bits [5-3]) und des SIB.bbb 1256 (der Bits [2-0]) ist vorher bezüglich der Registerindizes Xxxx und Bbbb verwiesen worden.
  • Das Verschiebungsfeld 1262 und das Sofortfeld (IMM8) 1272 enthalten Adressendaten.
  • Das generische vektorfreundliche 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). Während die Ausführungsformen beschrieben werden, in denen sowohl Vektor- als auch Skalaroperationen durch das vektorfreundliche Befehlsformat unterstützt werden, verwenden in alternativen Ausführungsformen nur Vektoroperationen das vektorfreundliche Befehlsformat.
  • Die 13A-13B sind Blockschaltpläne, die ein generisches vektorfreundliches Befehlsformat und dessen Befehlsschablonen gemäß den Ausführungsformen der Erfindung veranschaulichen. 13A ist ein Blockschaltplan, der ein generisches vektorfreundliches Befehlsformat und dessen Befehlsschablonen der Klasse A gemäß den Ausführungsformen der Erfindung veranschaulicht; während 13B ein Blockschaltplan ist, der das generische vektorfreundliche Befehlsformat und dessen Befehlsschablonen der Klasse B gemäß den Ausführungsformen der Erfindung veranschaulicht. Spezifisch ein generisches vektorfreundliches Befehlsformat 1300, für das die Befehlsschablonen der Klasse A und der Klasse B definiert sind, wobei beide von diesen Befehlsschablonen ohne Speicherzugriff 1305 und Befehlsschablonen mit Speicherzugriff 1320 enthalten. Der Begriff generisch im Kontext des vektorfreundlichen Befehlsformats bezieht sich auf das Befehlsformat, das nicht an irgendeinen spezifischen Befehlssatz gebunden ist.
  • Indessen werden die Ausführungsformen der Erfindung beschrieben, in denen das vektorfreundliche Befehlsformat das Folgende unterstützt: eine Länge (oder Größe) der Vektoroperanden von 64 Bytes mit Breiten (oder Größen) der Datenelemente von 32 Bits (4 Bytes) oder 64 Bits (8 Bytes), (wobei folglich ein 64-Byte-Vektor entweder aus 16 Elementen in Doppelwortgröße oder 8 Elementen in Vierfachwortgröße besteht); eine Länge (oder Größe) der Vektoroperanden von 64 Bytes mit Breiten (oder Größen) der Datenelemente von 16 Bits (2 Bytes) oder 8 Bits (1 Byte); eine Länge (oder Größe) der Vektoroperanden von 32 Bytes mit Breiten (oder Größen) der Datenelemente von 32 Bits (4 Bytes), 64 Bits (8 Bytes), 16 Bits (2 Bytes) oder 8 Bits (1 Byte); und eine Länge (oder Größe) der Vektoroperanden von 16 Bytes mit Breiten (oder Größen) der Datenelemente von 32 Bits (4 Bytes), 64 Bits (8 Bytes), 16 Bits (2 Bytes) oder 8 Bits (1 Byte); alternative Ausführungsformen können mehr, weniger und/oder andere Größen der Vektoroperanden (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder anderen Breiten der Datenelemente (z. B. Breiten der Datenelemente von 128 Bits (16 Bytes)) unterstützen.
  • Die Befehlsschablonen der Klasse A in 13A enthalten Folgendes: 1) innerhalb der Befehlsschablonen ohne Speicherzugriff 1305 ist eine Befehlsschablone einer Operation 1310 des Typs der vollen Rundensteuerung ohne Speicherzugriff und eine Befehlsschablone einer Operation 1315 des Datentransformationstyps ohne Speicherzugriff gezeigt; und 2) innerhalb der Befehlsschablonen mit Speicherzugriff 1320 ist eine zeitliche Befehlsschablone 1325 mit Speicherzugriff und eine nicht zeitliche Befehlsschablone 1330 mit Speicherzugriff gezeigt. Die Befehlsschablonen der Klasse B in 13B enthalten Folgendes: 1) innerhalb der Befehlsschablonen ohne Speicherzugriff 1305 ist eine Befehlsschablone einer Operation 1312 des Typs der Teilrundensteuerung mit Schreibmaskensteuerung und ohne Speicherzugriff und eine Befehlsschablone einer Operation 1317 des vsize-Typs mit Schreibmaskensteuerung und ohne Speicherzugriff gezeigt; und 2) innerhalb der Befehlsschablonen mit Speicherzugriff 1320 ist eine Befehlsschablone mit Schreibmaskensteuerung 1327 und Speicherzugriff gezeigt.
  • Das generische vektorfreundliche Befehlsformat 1320 enthält die folgenden Felder, die im Folgenden in der in den 13A-13B veranschaulichten Reihenfolge aufgelistet sind.
  • Das Formatfeld 1340 - ein spezifischer Wert (ein Befehlsformat-Kennungswert) in diesem Feld identifiziert eindeutig das vektorfreundliche Befehlsformat und folglich die Auftritte von Befehlen in dem vektorfreundlichen Befehlsformat in den Befehlsströmen. Dieses Feld ist als solches in dem Sinn optional, dass es für einen Befehlssatz, der nur das generische vektorfreundliche Befehlsformat aufweist, nicht erforderlich ist.
  • Das Basisoperationsfeld 1342 - sein Inhalt unterscheidet die verschiedenen Basisoperationen.
  • Das Registerindexfeld 1344 - sein Inhalt spezifiziert direkt oder durch Adressenerzeugung die Orte der Quell- und Zieloperanden, ob sie sich in Registern oder im Speicher befinden. Diese enthalten eine ausreichende Anzahl von Bits, um N Register aus einer P × Q-Register Datei (z. B. 32 × 512, 16 × 128, 32 × 1024, 64 × 1024) auszuwählen. Während in einer Ausführungsform N bis zu drei Quellen und ein Zielregister sein kann, können alternative Ausführungsformen mehr oder weniger Quellen und Zielregister unterstützen (sie können z. B. bis zu zwei Quellen unterstützen, wobei eine dieser Quellen außerdem als das Ziel wirkt, sie können bis zu drei Quellen unterstützen, wobei eine dieser Quellen außerdem als das Ziel wirkt, und sie können bis zu zwei Quellen und ein Ziel unterstützen).
  • Das Modifiziererfeld 1346 - sein Inhalt unterscheidet die Vorkommen der Befehle in dem generischen Vektorbefehlsformat, die den Vektorzugriff spezifizieren, von jenen, die dies nicht tun; d. h., zwischen den Befehlsschablonen ohne Speicherzugriff 1305 und den Befehlsschablonen 1320 mit Speicherzugriff. Die Operationen mit Speicherzugriff lesen und/oder schreiben in die Speicherhierarchie (wobei sie in einigen Fällen die Quell- und/oder Zieladressen unter Verwendung der Werte in den Registern spezifizieren), während die Operationen ohne Speicherzugriff dies nicht tun (z. B. die Quelle und die Ziele sind Register). Während in einer Ausführungsform dieses Feld außerdem zwischen drei verschiedenen Weisen unterscheidet, um die Speicheradressenberechnungen auszuführen, können alternative Ausführungsformen mehr, weniger oder andere Weisen unterstützen, um die Speicheradressenberechnungen auszuführen.
  • Das Vergrößerungsoperationsfeld 1350 - sein Inhalt unterscheidet, welche von einer Vielfalt verschiedener Operationen zusätzlich zu der Basisoperation auszuführen ist. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Erfindung ist dieses Feld in ein Klassenfeld 1368, ein Alphafeld 1352 und ein Betafeld 1354 unterteilt. Das Vergrößerungsoperationsfeld 1350 ermöglicht, dass gemeinsame Gruppen von Operationen anstatt in 2, 3 oder 4 Befehlen in einem einzigen Befehl ausgeführt werden.
  • Das Maßstabsfeld 1360 - sein Inhalt ermöglicht das Skalieren des Inhalts des Indexfeldes für die Speicheradressenerzeugung (z. B. für die Adressenerzeugung, die 2Maßstab * Index + Basis verwendet).
  • Das Verschiebungsfeld 1362A - sein Inhalt wird als ein Teil der Speicheradressenerzeugung verwendet (z. B. für die Adressenerzeugung, die 2Maßstab * Index + Basis + Verschiebung verwendet).
  • Das Verschiebungsfaktorfeld 1362B (es sei angegeben, dass die Nebeneinanderstellung des Verschiebungsfeldes 1362A direkt über dem Verschiebungsfaktorfeld 1362B angibt, dass das eine oder das andere verwendet wird) - sein Inhalt wird als Teil der Adressenerzeugung verwendet; es spezifiziert einen Verschiebungsfaktor, der mit der Größe eines Speicherzugriffs (N) zu skalieren ist - wobei N die Anzahl der Bytes in dem Speicherzugriff ist (z. B. für die Adressenerzeugung, die 2Maßstab * Index + Basis + skalierte Verschiebung verwendet). Redundante Bits niedriger Ordnung werden ignoriert, wobei folglich der Inhalt des Verschiebungsfaktorfeldes mit der Gesamtgröße (N) der Speicheroperanden multipliziert wird, um die endgültige Verschiebung zu erzeugen, die beim Berechnen einer effektiven Adresse zu verwenden ist. Der Wert von N wird durch die Prozessor-Hardware zur Laufzeit basierend auf dem vollen Opcode-Feld 1374 (das hier später beschrieben wird) und dem Datenmanipulationsfeld 1354C bestimmt. Das Verschiebungsfeld 1362A und das Verschiebungsfaktorfeld 1362B sind in dem Sinn optional, dass sie für die Befehlsschablonen ohne Speicherzugriff 1305 nicht verwendet werden und/oder verschiedene Ausführungsformen nur eines oder keines der beiden implementieren können.
  • Das Datenelementbreitenfeld 1364 - sein Inhalt unterscheidet, welche von einer Anzahl von Datenelementbreiten verwendet werden soll (in einigen Ausführungsformen für alle Befehle; in anderen Ausführungsformen nur für einige der Befehle). Dieses Feld ist in dem Sinn optional, dass es nicht erforderlich ist, falls nur eine Datenelementbreite unterstützt wird und/oder die Datenelementbreiten unter Verwendung irgendeines Aspekts der Opcodes unterstützt werden.
  • Das Schreibmaskenfeld 1370 - sein Inhalt steuert auf einer Grundlage pro Datenelementposition, ob die Datenelementposition in dem Zielvektoroperanden das Ergebnis der Basisoperation und der Vergrößerungsoperation widerspiegelt. Die Befehlsschablonen der Klasse A unterstützen die Verschmelzungs-Schreibmaskierung, während die Befehlsschablonen der Klasse B sowohl die Verschmelzungs- als auch die Nullsetzungs-Schreibmaskierung unterstützen. Beim Verschmelzen ermöglichen die Vektormasken, dass irgendein Satz von Elementen in dem Ziel während der Ausführung irgendeiner Operation (die durch die Basisoperation und die Vergrößerungsoperation spezifiziert ist) vor Aktualisierungen geschützt ist; in einer anderen Ausführungsform wird der alte Wert jedes Element des Ziels, wo das entsprechende Maskenbit eine 0 aufweist, beibehalten. Im Gegensatz ermöglichen die Vektormasken bei der Nullsetzung, dass während der Ausführung irgendeiner Operation (die durch die Basisoperation und die Vergrößerungsoperation spezifiziert ist) irgendein Satz von Elementen in dem Ziel null gesetzt wird; in einer Ausführungsform wird ein Element des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen 0-Wert aufweist. Eine Teilmenge dieser Funktionalität ist die Fähigkeit, die Vektorlänge der Operation, die ausgeführt wird, (d. h., die Spanne der Elemente, die modifiziert werden, vom ersten bis zum letzten) zu steuern; es ist jedoch nicht notwendig, dass die Elemente, die modifiziert werden, aufeinanderfolgend sind. Folglich ermöglicht das Schreibmaskenfeld 1370 teilweise Vektoroperationen, einschließlich Ladeoperationen, Speicheroperationen, arithmetisch, logisch usw. Während die Ausführungsformen der Erfindung beschrieben werden, in denen der Inhalt des Schreibmaskenfeldes 1370 eines aus einer Anzahl von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält, (wobei folglich der Inhalt des Schreibmaskenfeldes 1370 indirekt identifiziert, dass die Maskierung auszuführen ist), ermöglichen alternative Ausführungsformen stattdessen oder zusätzlich, dass der Inhalt des Schreibmaskenfeldes 1370 direkt die Maskierung spezifiziert, die auszuführen ist.
  • Das Sofortfeld 1372 - sein Inhalt ermöglicht die Spezifikation eines Sofortwerts. Dieses Feld ist in dem Sinn optional, dass es in einer Implementierung des generischen vektorfreundlichen Formats nicht vorhanden ist, die keinen Sofortwert unterstützt, und dass es in Befehlen nicht vorhanden ist, die keinen Sofortwert verwenden.
  • Das Klassenfeld 1368 - sein Inhalt unterscheidet zwischen verschiedenen Klassen von Befehlen. In den 13A-B wählen die Inhalte dieses Feldes zwischen den Befehlen der Klasse A und der Klasse B aus. In den 13A-B werden die Vierecke mit abgerundeten Ecken verwendet, um einen spezifischen Wert anzugeben, der in einem Feld vorhanden ist (z. B. Klasse A 1368A bzw. Klasse B 1368B für das Klassenfeld 1368 in 13A-B).
  • Die Befehlsschablonen der Klasse A
  • In dem Fall der Befehlsschablonen ohne Speicherzugriff 1305 der Klasse A wird das Alphafeld 1352 als ein RS-Feld 1352A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Vergrößerungsoperationstypen ausgeführt werden soll (z. B. das Runden 1352A.1 und die Datentransformation 1352A.2 sind für die Befehlsschablonen der Operation 1310 des Rundentyps ohne Speicherzugriff bzw. der Operation 1315 des Datentransformationstyps ohne Speicherzugriff spezifiziert), während das Betafeld 1354 unterscheidet, welche der Operationen des spezifizierten Typs ausgeführt werden soll. In den Befehlsschablonen ohne Speicherzugriff 1305 sind das Maßstabsfeld 1362, das Verschiebungsfeld 1362A und das Verschiebungsmaßstabsfeld 1362B nicht vorhanden.
  • Die Befehlsschablonen ohne Speicherzugriff - die Operation des Typs der vollen Rundensteuerung
  • In der Befehlsschablone der Operation 1310 des Typs der vollen Rundensteuerung ohne Speicherzugriff wird das Betafeld 1354 als ein Rundensteuerfeld 1354A interpretiert, dessen Inhalt(e) ein statisches Runden bereitstellen. Während in den beschriebenen Ausführungsformen der Erfindung das Rundensteuerfeld 1354A ein Feld 1356 zum Unterdrücken aller Gleitkomma-Ausnahmen (SAE) und ein Rundenoperations-Steuerfeld 1358 enthält, können alternative Ausführungsformen das Codieren dieser beiden Konzepte in dasselbe Feld unterstützen oder können nur das eine oder das andere dieser Konzepte/Felder aufweisen (können z. B. nur das Rundenoperations-Steuerfeld 1358 aufweisen).
  • Das SAE-Feld 1356 - sein Inhalt unterscheidet, ob die Ausnahmeereignismeldung zu sperren ist oder nicht; wenn der Inhalt des SAE-Feldes 1356 angibt, dass die Unterdrückung freigegeben ist, meldet ein gegebener Befehl keine Art eines Gleitkomma-Ausnahmemerkers und startet keine Gleitkomma-Ausnahmebehandlungseinrichtung.
  • Das Rundenoperations-Steuerfeld 1358 - sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen auszuführen ist (z. B. Aufrunden, Abrunden, Runden zur Null und Runden zum Nächsten). Folglich ermöglicht das Rundenoperations-Steuerfeld 1358 das Ändern des Rundungsmodus auf einer Grundlage pro Befehl. In einer Ausführungsform der Erfindung, in der ein Prozessor ein Steuerregister zum Spezifizieren der Rundungsmodi enthält, setzt der Inhalt des Rundenoperations-Steuerfelds 1350 diesen Registerwert außer Kraft.
  • Die Befehlsschablonen ohne Speicherzugriff - die Operation des Datentransformationstyps
  • In der Befehlsschablone der Operation 1315 des Datentransformationstyps ohne Speicherzugriff wird das Betafeld 1354 als ein Datentransformationsfeld 1354B interpretiert, dessen Inhalt unterscheidet, welche aus einer Anzahl von Datentransformationen ausgeführt werden soll (z. B. keine Datentransformation, Swizzle, Rundsenden).
  • In dem Fall einer Befehlsschablone mit Speicherzugriff 1320 der Klasse A wird das Alphafeld 1352 als ein Räumungshinweisfeld 1352B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise verwendet werden soll (in 13A sind zeitlich 1352B.1 und nicht zeitlich 1352B.2 für die zeitliche Befehlsschablone mit Speicherzugriff 1325 bzw. die nicht zeitliche Befehlsschablone mit Speicherzugriff 1330 spezifiziert), während das Betafeld 1354 als ein Datenmanipulationsfeld 1354C interpretiert wird, dessen Inhalt unterscheidet, welche von einer Anzahl von Datenmanipulationsoperationen (die außerdem als Grundelemente bekannt sind) ausgeführt werden soll (z. B. keine Manipulation; Rundsenden; Aufwärtsumsetzung einer Quelle; und Abwärtsumsetzung eines Ziels). Die Befehlsschablonen mit Speicherzugriff 1320 enthalten das Maßstabsfeld 1360 und optional das Verschiebungsfeld 1362A oder das Verschiebungsmaßstabsfeld 1362B.
  • Die Vektorspeicherbefehle führen Vektor-Ladeoperationen aus dem und Vektor-Speicheroperationen in den Speicher mit Umsetzungsunterstützung aus. Wie bei regelmäßigen Vektorbefehlen übertragen die Vektorspeicherbefehle Daten von dem/zu dem Speicher in einer datenelementweisen Weise, wobei die Elemente, die tatsächlich übertragen werden, durch die Inhalte der Vektormaske vorgeschrieben sind, die als die Schreibmaske ausgewählt ist.
  • Die Befehlsschablonen mit Speicherzugriff - zeitlich
  • Die zeitlichen Daten sind Daten, die wahrscheinlich bald genug erneut verwendet werden, um von der Cache-Speicherung zu profitieren. Dies ist jedoch ein Hinweis, wobei verschiedene Prozessoren ihn in verschiedener Weise implementieren können, einschließlich des völligen Ignorierens des Hinweises.
  • Die Befehlsschablonen mit Speicherzugriff - nicht zeitlich
  • Es ist unwahrscheinlich, dass die nicht zeitlichen Daten bald genug erneut verwendet werden, um von der Cache-Speicherung im Cache der 1. Ebene zu profitieren, wobei ihnen die Priorität für die Räumung gegeben werden sollte. Dies ist jedoch ein Hinweis, wobei verschiedene Prozessoren ihn in verschiedener Weise implementieren können, einschließlich des völligen Ignorierens des Hinweises.
  • Die Befehlsschablonen der Klasse B
  • In dem Fall der Befehlsschablonen der Klasse B wird das Alphafeld 1352 als ein Schreibmasken-Steuerfeld 1352C (Z) interpretiert, dessen Inhalt unterscheidet, ob die durch das Schreibmaskenfeld 1370 gesteuerte Schreibmaskierung eine Verschmelzung oder eine Nullsetzung sein sollte.
  • In dem Fall der Befehlsschablonen ohne Speicherzugriff 1305 der Klasse B wird ein Teil des Betafeldes 1354 als ein RL-Feld 1357A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Vergrößerungsoperationstypen ausgeführt werden soll (z. B. das Runden 1357A.1 und die Vektorlänge (VSIZE) 1357A.2 sind jeweils für die Befehlsschablone der Operation 1312 des Typs der Teilrundensteuerung mit Schreibmaskensteuerung und ohne Speicherzugriff bzw. die Befehlsschablone der Operationen 1317 des VSIZE-Typs mit Schreibmaskensteuerung und ohne Speicherzugriff spezifiziert), während der Rest des Betafeldes 1354 unterscheidet, welche der Operationen des spezifizierten Typs ausgeführt werden soll. In den Befehlsschablonen ohne Speicherzugriff 1305 sind das Maßstabsfeld 1360, das Verschiebungsfeld 1362A und das Verschiebungsmaßstabsfeld 1362B nicht vorhanden.
  • In der Befehlsschablone der Operation 1310 des Typs der Teilrundensteuerung mit Schreibmaskensteuerung und ohne Speicherzugriff wird der Rest des Betafeldes 1354 als ein Rundenoperationsfeld 21359A interpretiert, wobei die Ausnahmeereignismeldung gesperrt ist (ein gegebener Befehl meldet keine Art eines Gleitkomma-Ausnahmemerkers und startet keine Gleitkomma-Ausnahmebehandlungseinrichtung).
  • Das Rundenoperations-Steuerfeld 1359A - genau wie das Rundenoperations-Steuerfeld 1358, sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen auszuführen ist (z. B. Aufrunden, Abrunden, Runden zur Null und Runden zum Nächsten). Folglich ermöglicht das Rundenoperations-Steuerfeld 1359A das Ändern des Rundungsmodus auf einer Grundlage pro Befehl. In einer Ausführungsform der Erfindung, in der ein Prozessor ein Steuerregister zum Spezifizieren der Rundungsmodi enthält, setzt der Inhalt des Rundenoperations-Steuerfeldes 1350 diesen Registerwert außer Kraft.
  • In der Befehlsschablone der Operation 1317 des VSIZE-Typs mit Schreibmaskensteuerung und ohne Speicherzugriff wird der Rest des Betafeldes 1354 als ein Vektorlängenfeld 1359B interpretiert, dessen Inhalt unterscheidet, mit welcher von einer Anzahl von Datenvektorlängen gearbeitet werden soll (z. B. 128, 256 oder 512 Bytes).
  • In dem Fall einer Befehlsschablone mit Speicherzugriff 1320 der Klasse B wird ein Teil des Betafeldes 1354 als ein Rundsendefeld 1357B interpretiert, dessen Inhalt unterscheidet, ob eine Datenmanipulationsoperation des Rundsendetyps ausgeführt werden soll, während der Rest des Betafeldes 1354 als das Vektorlängenfeld 1359B interpretiert wird. Die Befehlsschablonen mit Speicherzugriff 1320 enthalten das Maßstabsfeld 1360 und optional das Verschiebungsfeld 1362A oder das Verschiebungsmaßstabsfeld 1362B.
  • Bezüglich des generischen vektorfreundlichen Befehlsformats 1300 ist gezeigt, dass ein volles Opcode-Feld 1374 das Formatfeld 1340, das Basisoperationsfeld 1342 und das Datenelementbreitenfeld 1364 enthält. Während eine Ausführungsform gezeigt ist, in der das volle Opcode-Feld 1374 alle diese Felder enthält, wobei das volle Opcode-Feld 1374 in den Ausführungsformen, die nicht alle von ihnen unterstützen, weniger als alle dieser Felder enthält. Das volle Opcode-Feld 1374 stellt den Operationscode (den Opcode) bereit.
  • Das Vergrößerungsoperationsfeld 1350, das Datenelementbreitenfeld 1364 und das Schreibmaskenfeld 1370 ermöglichen, dass diese Merkmale in dem generischen vektorfreundlichen Befehlsformat auf einer Grundlage pro Befehl spezifiziert werden.
  • Die Kombination des Schreibmaskenfeldes und des Datenelementbreitenfeldes erzeugt typisierte Befehle, weil sie ermöglichen, dass die Maske basierend auf verschiedenen Datenelementbreiten angewendet wird.
  • Die verschiedenen Befehlsschablonen, die innerhalb der Klasse A und der Klasse B gefunden werden, sind in verschiedenen Situationen vorteilhaft. In einigen Ausführungsformen der Erfindung können verschiedene Prozessoren oder verschiedene Kerne innerhalb eines Prozessors nur die Klasse A, nur die Klasse B oder beide Klassen unterstützen. Ein Hochleistungs-Out-of-Order-Universalkern, der für die Universalberechnung vorgesehen ist, kann nur die Klasse B unterstützen, ein Kern, der hauptsächlich für die Graphik- und/oder wissenschaftliche (Durchsatz-) Berechnung vorgesehen ist, kann nur die Klasse A unterstützen, und ein Kern, der für beides vorgesehen ist, kann beides unterstützen (selbstverständlich befindet sich ein Kern, der irgendeine Mischung der Schablonen und der Befehle aus beiden Klassen, aber nicht alle Schablonen und Befehle aus beiden Klassen aufweist, innerhalb des Geltungsbereichs dieser Erfindung). Außerdem kann ein einziger Prozessor mehrere Kerne enthalten, von denen alle die gleiche Klasse unterstützen oder in dem verschiedene Kerne verschiedene Klassen unterstützen. In einem Prozessor mit separaten Graphik- und Universalkernen kann z. B. einer der Graphikkerne, der hauptsächlich für Graphik- und/oder wissenschaftliche Berechnung vorgesehen ist, nur die Klasse A unterstützen, während einer oder mehrerer der Universalkerne Hochleistungs-Universalkerne mit Out-of-Order-Ausführung und Registerumbenennung sein können, die für die Universalberechnung vorgesehen sind, die nur die Klasse B unterstützen. Ein weiterer Prozessor, der keinen separaten Graphikkern aufweist, kann einen oder mehrere In-Order- oder Out-of-Order-Universalkerne enthalten, die sowohl die Klasse A als auch die Klasse B unterstützen. Selbstverständlich können die Merkmale von einer Klasse außerdem in anderen Ausführungsformen der Erfindung in der anderen Klasse implementiert sein. Die Programme, die in einer höheren Sprache geschrieben sind, würden (z. B. rechtzeitig kompiliert oder statisch kompiliert) in eine Vielfalt verschiedener ausführbarer Formen übersetzt werden, einschließlich des Folgenden: 1) eine Form, die nur die Befehle der Klasse(n) aufweist, die durch den Zielprozessor für die Ausführung unterstützt wird (werden); oder 2) eine Form, die alternative Routinen aufweist, die unter Verwendung verschiedener Kombinationen der Befehle aller Klassen geschrieben sind und die Steuerungsablaufcode aufweisen, der die auszuführenden Routinen basierend auf den Befehlen auswählt, die durch den Prozessor unterstützt werden, der gegenwärtig den Code ausführt.
  • Ein beispielhaftes spezifisches vektorfreundliches Befehlsformat
  • 14 ist ein Blockschaltplan, der ein beispielhaftes spezifisches vektorfreundliches Befehlsformat gemäß den Ausführungsformen der Erfindung veranschaulicht. 14 zeigt ein spezifisches vektorfreundliches Befehlsformat 1400, das in dem Sinn spezifisch ist, dass es sowohl den Ort, die Größe, die Interpretation und die Reihenfolge der Felder als auch die Werte für einige dieser Felder spezifiziert. Das spezifische vektorfreundliche Befehlsformat 1400 kann verwendet werden, um den x86-Befehlssatz zu erweitern, wobei folglich einige der Felder ähnlich oder die gleichen wie jene sind, die in dem vorhandenen x86-Befehlssatz und dessen Erweiterung (z. B. AVX) verwendet werden. Dieses Format bleibt mit dem Präfixcodierungsfeld, dem echten Opcode-Byte-Feld, dem MOD R/M-Feld, dem SIB-Feld, dem Verschiebungsfeld und den Sofortfeldern des vorhandenen x86-Befehlssatzes mit Erweiterungen konsistent. Die Felder nach 13, in die die Felder nach 14 abbilden, sind veranschaulicht.
  • Es sollte erkannt werden, dass, obwohl die Ausführungsformen der Erfindung unter Bezugnahme auf das spezifische vektorfreundliche Befehlsformat 1400 im Kontext des generischen vektorfreundlichen Befehlsformats 1300 für Veranschaulichungszwecke beschrieben werden, die Erfindung nicht auf das spezifische vektorfreundliche Befehlsformat 1400 eingeschränkt ist, mit Ausnahme, wo es beansprucht ist. Das generische vektorfreundliche Befehlsformat 1300 betrachtet z. B. verschiedene mögliche Größen für die verschiedenen Felder, während gezeigt ist, dass das spezifische vektorfreundliche Befehlsformat 1400 Felder mit spezifischen Größen aufweist. Während als ein spezifisches Beispiel das Datenelementbreitenfeld 1364 in dem spezifischen vektorfreundlichen Befehlsformat 1400 als ein Ein-Bit-Feld veranschaulicht ist, ist die Erfindung nicht in dieser Weise eingeschränkt (d. h., das generische vektorfreundliche Befehlsformat 1300 betrachtet andere Größen des Datenelementbreitenfelds 1364).
  • Das generische vektorfreundliche Befehlsformat 1300 enthält die folgenden Felder, die im Folgenden in der in 14A veranschaulichten Reihenfolge aufgelistet sind.
  • Das EVEX-Präfix (die Bytes 0-3) 1402 - ist in einer Vier-Byte-Form codiert.
  • Das Formatfeld 1340 (das EVEX-Byte 0, die Bits [7:0]) - das erste Byte (das EVEX-Byte 0) ist das Formatfeld 1340, wobei es 0x62 enthält (den eindeutigen Wert, der zum Unterscheiden des vektorfreundlichen Befehlsformats in einer Ausführungsform der Erfindung verwendet wird).
  • Die zweiten-vierten Bytes (die EVEX-Bytes 1-3) enthalten eine Anzahl von Bitfeldern, die eine spezifische Fähigkeit bereitstellen.
  • Das REX-Feld 1405 (das EVEX-Byte 1, die Bits [7-5]) - besteht aus einem EVEX.R-Bitfeld (dem EVEX-Byte 1, dem Bit [7] - R), einem EVEX.X-Bitfeld (dem EVEX-Byte 1, dem Bit [6] -X) und dem 1357BEX-Byte 1, dem Bit [5] - B). Das EVEX.R-, das EVEX.X- und das EVEX.B-Bitfeld stellen die gleiche Funktionalität wie die entsprechenden VEX-Bitfelder bereit, wobei sie unter Verwendung der 1-Komplementform codiert sind, d. h., ZMM0 ist als 1211B codiert, ZMM15 ist als 0000B codiert. Andere Felder der Befehle codieren die unteren drei Bits der Registerindizes, wie es in der Technik bekannt ist (rrr, xxx und bbb), so dass Rrrr, Xxxx und Brrr durch das Addieren von EVEX.R, EVEX.X und EVEX.B gebildet werden können.
  • Das REX'-Feld 1310 - dies ist der erste Teil des REX'-Feldes 1310 und ist das EVEX.R'-Bitfeld (das EVEX-Byte 1, das Bit [4] - R'), das verwendet wird, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Register-Satzes zu codieren. In einer Ausführungsform der Erfindung ist dieses Bit zusammen mit anderen, wie im Folgenden angegeben wird, in einem bitinvertierten Format gespeichert, um es (in dem wohlbekannten x86-32-Bit-Modus) von dem BOUND-Befehl zu unterscheiden, dessen echtes Opcode-Byte 62 ist, das aber in dem (im Folgenden beschriebenen) MOD R/M-Feld den Wert von 11 in dem MOD-Feld nicht akzeptiert; alternative Ausführungsformen der Erfindung speichern dieses und die anderen im Folgenden angegebenen Bits nicht in dem invertierten Format. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, R'Rrrr wird durch das Kombinieren von EVEX.R', EVEX.R und den anderen RRR von den anderen Feldern gebildet.
  • Das Opcode-Abbildungsfeld 1415 (das EVEX-Byte 1, die Bits [3:0] - mmmm) - sein Inhalt codiert ein impliziertes führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Das Datenelementbreitenfeld 1364 (das EVEX-Byte 2, das Bit [7] - W) - ist durch die Schreibweise EVEX.W dargestellt. EVEX.W wird verwendet, um die Granularität (die Größe) des Datentyps zu definieren (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente).
  • Das EVEX.vvvv 1420 (das EVEX-Byte 2, die Bits [6:3] - vvvv) - die Rolle des EVEX.vvvv kann das Folgende enthalten: 1) EVEX.vvvv codiert den ersten Quellregisteroperanden, ist in einer invertieren (1-Komplement-) Form spezifiziert und ist für Befehle mit 2 oder mehr Quelloperanden gültig; 2) EVEX.vvvv codiert den Zielregisteroperanden und ist in 1-Komplement-Form für bestimmte Vektorverschiebungen spezifiziert; oder 3) EVEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1211b enthalten. Folglich codiert das EVEX.vvvv-Feld 1420 die 4 Bits niedriger Ordnung des ersten Quellregister-Spezifikationselements, das in invertierter (1-Komplement-) Form gespeichert ist. In Abhängigkeit von dem Befehl wird ein zusätzliches anderes EVEX-Bitfeld verwendet, um die Größe des Spezifikationselements auf 32 Register zu erweitern.
  • Das EVEX.U 1368 Klassenfeld (das EVEX-Byte 2, das Bit [2] - U) - Falls EVEX.U = 0 gilt, gibt es die Klasse A oder EVEX.U0 an; falls EVEX.U = 1 gilt, gibt es die Klasse B oder EVEX.U1 an.
  • Das Präfixcodierungsfeld 1425 (das EVEX-Byte 2, die Bits [1:0] - pp) - stellt zusätzliche Bits für das Basisoperationsfeld bereit. Zusätzlich zum Bereitstellen von Unterstützung für die Alt-SSE-Befehle in dem EVEX-Präfixformat weist dies außerdem den Vorteil des Verdichtens des SIMD-Präfixes auf (anstatt ein Byte zu erfordern, um das SIMD-Präfix auszudrücken, erfordert das EVEX-Präfix nur 2 Bits). Um die Alt-SSE-Befehle, die das SIMD-Präfix verwenden (66H, F2H, F3H), sowohl im Altformat als auch im EVEX-Präfixformat zu unterstützen, sind in einer Ausführungsform diese Alt-SIMD-Präfixe in dem SIMD-Präfixcodierungsfeld codiert; wobei sie zur Laufzeit in den Alt-SIMD-Präfix expandiert werden, bevor sie dem PLA des Codierers bereitgestellt werden (so kann der PLA sowohl das Alt- als auch das EVEX-Format dieser Altbefehle ohne Modifikation ausführen). Obwohl neuere Befehle den Inhalt des EVEX-Präfixcodierungsfeldes als eine Opcode-Erweiterung direkt verwenden könnten, erweitern bestimmte Ausführungsformen in einer ähnlichen Weise für die Konsistenz, wobei sie es aber ermöglichen, dass durch diese Alt-SIMD-Präfixe verschiedene Bedeutungen spezifiziert werden. Eine alternative Ausführungsform kann den PLA neu konstruieren, um die 2-Bit-SIMD-Präfixcodierungen zu unterstützen, und erfordert folglich die Erweiterung nicht.
  • Das Alphafeld 1352 (das EVEX-Byte 3, das Bit [7] - EH; außerdem als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.Schreibmaskensteuerung und EVEX.N bekannt; außerdem mit α veranschaulicht) - wie vorher beschrieben worden ist, ist dieses Feld kontextspezifisch.
  • Das Betafeld 1354 (das EVEX-Byte 3, die Bits [6:4] - SSS, außerdem als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB bekannt; außerdem mit βββ veranschaulicht) - wie vorher beschrieben worden ist, ist dieses Feld kontextspezifisch.
  • Das REX'-Feld 1310 - dies ist der Rest des REX'-Feldes und ist das EVEX.V'-Bitfeld (das EVEX-Byte 3, das Bit [3] - V'), das verwendet werden kann, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Register-Satzes zu codieren. Dieses Bit ist in einem bitinvertierten Format gespeichert. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, V'VVVV wird durch das Kombinieren von EVEX.V', EVEX.vvvv gebildet.
  • Das Schreibmaskenfeld 1370 (das EVEX-Byte 3, die Bits [2:0] - kkk) - sein Inhalt spezifiziert den Index eines Registers in den Schreibmaskenregistern, wie vorher beschrieben worden ist. In einer Ausführungsform der Erfindung weist der spezifische Wert EVEX.kkk = 000 ein spezifisches Verhalten auf, das impliziert, dass für den speziellen Befehl keine Schreibmaske verwendet wird (dies kann in verschiedenen Weisen einschließlich der Verwendung einer Schreibmaske, die mit allen festverdrahtet ist, oder Hardware, die die Maskierungs-Hardware umgeht, implementiert sein).
  • Das echte Opcode-Feld 1430 (das Byte 4) ist außerdem als das Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • Das MOD R/M-Feld 1440 (das Byte 5) enthält das MOD-Feld 1442, das Reg-Feld 1444 und das R/M-Feld 1446. Wie vorher beschrieben worden ist, unterscheidet der Inhalt des MOD-Feldes 1442 zwischen Operationen mit Speicherzugriff und ohne Speicherzugriff. Die Rolle des Reg-Feldes 1444 kann in zwei Situationen zusammengefasst werden: Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden oder kann als eine Opcode-Erweiterung behandelt werden und nicht verwendet werden, um irgendeinen Befehlsoperanden zu codieren. Die Rolle des R/M-Feldes 1446 kann das Folgende enthalten: Codieren des Befehlsoperanden, der auf eine Speicheradresse verweist, oder Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Das Maßstab-, Index-, Basis- (SIB-) Byte (das Byte 6) - Wie vorher beschrieben worden ist, wird der Inhalt des Maßstabfeldes 1350 für die Speicheradressenerzeugung verwendet. Das SIB.xxx 1454 und das SIB.bbb 1456 - auf die Inhalte dieser Felder ist vorher bezüglich der Registerindizes Xxxx und Bbbb verwiesen worden.
  • Das Verschiebungsfeld 1362A (die Bytes 7-10) - wenn das MOD-Feld 1442 10 enthält, sind die Bytes 7-10 das Verschiebungsfeld 1362A, wobei es gleich wie die Alt-32-Bit-Verschiebung (disp32) arbeitet und auf Byte-Granularität arbeitet.
  • Das Verschiebungsfaktorfeld 1362B (das Byte 7) - wenn das MOD-Feld 1442 01 enthält, ist das Byte 7 das Verschiebungsfaktorfeld 1362B. Der Ort dieses Feldes ist der gleiche wie der der 8-Bit-Verschiebung (disp8) des Alt-x86-Befehlssatzes, die auf Byte-Granularität arbeitet. Weil der disp8 vorzeichenerweitert ist, kann er nur zwischen -128- und 137-Byte-Versätzen adressieren; hinsichtlich von 64-Byte-Cache-Zeilen verwendet der disp8 8 Bits, die auf nur vier wirklich nützliche Werte -128, -64, 0 und 64 gesetzt werden können; weil oft ein größerer Bereich benötigt wird, wird der disp32 verwendet; der disp32 erfordert jedoch 4 Bytes. Im Gegensatz zum disp8 und zum disp32 ist das Verschiebungsfaktorfeld 1362B eine Neuinterpretation des disp8; wenn das Verschiebungsfaktorfeld 1362B verwendet wird, ist die tatsächliche Verschiebung durch den Inhalt des Verschiebungsfaktorfeldes multipliziert mit der Größe des Speicheroperandenzugriffs (N) bestimmt. Dieser Typ der Verschiebung wird als disp8 * N bezeichnet. Dies verringert die durchschnittliche Befehlslänge (ein einziges Byte wird für die Verschiebung verwendet, aber mit einem viel größeren Bereich). Eine derartige komprimierte Verschiebung basiert auf der Annahme, dass die effektive Verschiebung ein Vielfaches der Granularität des Speicherzugriffs ist, wobei folglich die redundanten Bits niedriger Ordnung des Adressenversatzes nicht codiert werden müssen. Mit anderen Worten, das Verschiebungsfaktorfeld 1362B ersetzt die 8-Bit-Verschiebung des Alt-x86-Befehlssatzes. Folglich ist das Verschiebungsfaktorfeld 1362B in der gleichen Weise wie eine 8-Bit-Verschiebung des x86-Befehlssatzes codiert (daher keine Änderungen der ModRM/SIB-Codierungsregeln), mit der einzigen Ausnahme, dass der disp8 zum disp8 * N überladen wird. Mit anderen Worten, es gibt keine Änderungen der Codierungsregeln oder der Codierungslängen, sondern nur in der Interpretation des Verschiebungswertes durch die Hardware (die die Verschiebung mit der Größe des Speicheroperanden skalieren muss, um einen byteweisen Adressenversatz zu erhalten).
  • Das Sofortfeld 1372 arbeitet so, wie vorher beschrieben worden ist.
  • Das vollständige Opcode-Feld
  • 14B ist ein Blockschaltplan, der die Felder des spezifischen vektorfreundlichen Befehlsformats 1400 veranschaulicht, die das vollständige Opcode-Feld 1374 gemäß einer Ausführungsform der Erfindung bilden. Spezifisch enthält das vollständige Opcode-Feld 1374 das Formatfeld 1340, das Basisoperationsfeld 1342 und das Datenelementbreitenfeld 1364 (W). Das Basisoperationsfeld 1342 enthält das Präfixcodierungsfeld 1425, das Opcode-Abbildungsfeld 1415 und das echte Opcode-Feld 1430.
  • Das Registerindexfeld
  • 14C ist ein Blockschaltplan, der die Felder des spezifischen vektorfreundlichen Befehlsformats 1400 veranschaulicht, die das Registerindexfeld 1344 gemäß einer Ausführungsform der Erfindung bilden. Spezifisch enthält das Registerindexfeld 1344 das REX-Feld 1405, das REX'-Feld 1410, das MODR/M.reg-Feld 1444, das MODR/M.r/m-Feld 1446, das VVVV-Feld 1420, das xxx-Feld 1454 und das bbb-Feld 1456.
  • Das Vergrößerungsoperationsfeld
  • 14D ist ein Blockschaltplan, der die Felder des spezifischen vektorfreundlichen Befehlsformats 1400 veranschaulicht, die das Vergrößerungsoperationsfeld 1350 gemäß einer Ausführungsform der Erfindung bilden. Wenn das Klassenfeld 1368 (U) 0 enthält, bedeutet es EVEX.U0 (Klasse A 1368A); wenn es 1 enthält, bedeutet es EVEX.U1 (Klasse B 1368B). Wenn U = 0 gilt und das MOD-Feld 1442 11 enthält (was eine Operation ohne Speicherzugriff bedeutet), wird das Alphafeld 1352 (das EVEX-Byte 3, das Bit [7] - EH) als das rs-Feld 1352A interpretiert. Wenn das rs-Feld 1352A eine 1 enthält (das Runden 1352A.1), wird das Betafeld 1354 (das EVEX-Byte 3, die Bits [6:4] - SSS) als das Rundensteuerfeld 1354A interpretiert. Das Rundensteuerfeld 1354A enthält ein Ein-Bit-SAE-Feld 1356 und ein Zwei-Bit-Rundenoperationsfeld 1358. Wenn das rs-Feld 1352A eine 0 enthält (die Datentransformation 1352A.2), wird das Betafeld 1354 (das EVEX-Byte 3, die Bits [6:4] - SSS) als ein Drei-Bit-Datentransformationsfeld 1354B interpretiert. Wenn U = 0 gilt und das MOD-Feld 1442 00, 01 oder 10 enthält (was eine Operation mit Speicherzugriff bedeutet), wird das Alphafeld 1352 (das EVEX-Byte 3, das Bit [7] - EH) als das Räumungshinweisfeld 1352B (EH-Feld) interpretiert und wird das Betafeld 1354 (das EVEX-Byte 3, die Bits [6:4] - SSS) als ein Drei-Bit-Datenmanipulationsfeld 1354C interpretiert.
  • Wenn U = 1 gilt, wird das Alphafeld 1352 das (EVEX-Byte 3, das Bit [7] - EH) als das Schreibmasken-Steuerfeld 1352C (Z) interpretiert. Wenn U = 1 gilt und das MOD-Feld 1442 11 enthält (was eine Operation ohne Speicherzugriff bedeutet), wird ein Teil des Betafeldes 1354 (das EVEX-Byte 3, das Bit [4] - S0) als das RL-Feld 1357A interpretiert; wenn es eine 1 enthält (das Runden 1357A.1), wird der Rest des Betafeldes 1354 (das EVEX-Byte 3, das Bit [6-5] - S2-1) als das Rundenoperationsfeld 1359A interpretiert, während, wenn das RL-Feld 1357A eine 0 enthält (VSIZE 1357.A2), der Rest des Betafeldes 1354 (das EVEX-Byte 3, das Bit [6-5] - S2-1) als das Vektorlängenfeld 1359B (das EVEX-Byte 3, das Bit [6-5] - L1-0) interpretiert wird. Wenn U = 1 gilt und das MOD-Feld 1442 00, 01 oder 10 enthält (was eine Operation mit Speicherzugriff bedeutet), wird das Betafeld 1354 (das EVEX-Byte 3, die Bits [6:4] - SSS) als das Vektorlängenfeld 1359B (das EVEX-Byte 3, das Bit [6-5] - L1-0) und das Rundsendefeld 1357B (das EVEX-Byte 3, das Bit [4] - B) interpretiert.
  • Eine beispielhafte Registerarchitektur
  • 15 ist ein Blockschaltplan einer Registerarchitektur 1500 gemäß einer Ausführungsform der Erfindung. In der veranschaulichten Ausführungsform gibt es 32 Vektorregister 1510, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die 256 Bits niedrigerer Ordnung der unteren 16 zmm-Register sind den Registern ymm0-16 überlagert. Die 128 Bits niedriger Ordnung der unteren 16 zmm-Register (die 128 Bits niedriger Ordnung der ymm-Register) sind den Registern xmm0-15 überlagert. Das spezifische vektorfreundliche Befehlsformat 1400 wirkt auf diese überlagerte Registerdatei so, wie in den Tabellen im Folgenden veranschaulicht ist.
    einstellbare Vektorlänge Klasse Operationen Register
    Befehlsschablonen, die das Vektorlängenfeld 1359B nicht enthalten A 1310, 1315, zmm-Register (die Vektorlänge ist 64 Bytes)
    (13A; U = 0) 1325, 1330
    B 1312 zmm-Register (die Vektorlänge ist 64 Bytes)
    (13B; U=1)
    Befehlsschablonen, die das Vektorlängenfeld 1359B enthalten B 1317, 1327 zmm-, ymm- oder xmm-Register (die Vektorlänge ist in Abhängigkeit vom Vektorlängenfeld 1359B 64 Bytes, 32 Bytes oder 16 Bytes)
    (13B; U = 1)
  • Mit anderen Worten, das Vektorlängenfeld 1359B wählt zwischen einer maximalen Länge und einer oder mehreren anderen kürzeren Längen aus, wobei jede derartige kürzere Länge die Hälfte der Länge der vorhergehenden Länge ist; wobei die Befehlsschablonen ohne das Vektorlängenfeld 1359B auf die maximale Vektorlänge wirken. Ferner arbeiten in einer Ausführungsform die Befehlsschablonen der Klasse B des spezifischen vektorfreundlichen Befehlsformats 1400 auf gepackte oder skalare Gleitkommadaten mit einfacher/doppelter Genauigkeit und gepackte oder skalare Ganzzahldaten. Die Skalaroperationen sind Operationen, die an der Datenelementposition niedrigster Ordnung in einem zmm/ymm/xmm-Register ausgeführt werden; die Datenelementpositionen höherer Ordnung werden in Abhängigkeit von der Ausführungsform entweder als die gleichen gelassen, die sie vor dem Befehl waren, oder auf null gesetzt.
  • Die Schreibmaskenregister 1515 - in der veranschaulichten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7), jedes mit einer Größe von 64 Bits. In einer alternativen Ausführungsform weisen die Schreibmaskenregister 1515 eine Größe von 16 Bits auf. Wie vorher beschrieben worden ist, kann in einer Ausführungsform der Erfindung das Vektormaskenregister k0 nicht als eine Schreibmaske verwendet werden; wenn die Codierung, die normalerweise k0 angeben würde, für eine Schreibmaske verwendet wird, wählt sie die festverdrahtete Schreibmaske OxFFFF aus, die die Schreibmaskierung für diesen Befehl effektiv sperrt.
  • Die Universalregister 1525 - in der veranschaulichten Ausführungsform gibt es sechzehn 64-Bit-Universalregister, die zusammen mit den vorhandenen x86-Adressierungsmodi verwendet werden, um die Speicheroperanden zu adressieren. Auf diese Register wird durch die Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 verwiesen.
  • Skalare Gleitkomma-Stapelregisterdatei (x87-Stapel) 1545, die sonst die gepackte MMX-Ganzzahl-Flachregisterdatei 1550 genannt wird - in der veranschaulichten Ausführungsform ist der x87-Stapel ein Stapel mit acht Elementen, der verwendet wird, um skalare Gleitkommaoperationen an 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung auszuführen; während die MMX-Register verwendet werden, um sowohl Operationen an gepackten 64-Bit-Ganzzahldaten auszuführen als auch Operanden für einige Operationen, die zwischen den MMX- und den XMM-Registern ausgeführt werden, zu halten.
  • Alternative Ausführungsformen der Erfindung können breitere oder schmalere Register verwenden. Zusätzlich können alternative Ausführungsformen der Erfindung mehr, weniger oder andere Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Die Prozessorkerne können in verschiedenen Weisen, für verschiedene Zwecke und in verschiedenen Prozessoren implementiert sein. Die Implementierungen derartiger Kerne können z. B. Folgendes enthalten: 1) einen In-Order-Universalkern, der für eine Universalberechnung vorgesehen ist; 2) einen Hochleistungs-Out-of-Order-Universalkern, der für eine Universalberechnung vorgesehen ist; 3) einen Spezialkern, der hauptsächlich für Graphik und/oder wissenschaftliche Berechnung (Durchsatzberechnung) vorgesehen ist. Die Implementierungen der verschiedenen Prozessoren können Folgendes enthalten: 1) eine CPU, die einen oder mehrere In-Order-Universalkerne, die für eine Universalberechnung vorgesehen sind, und/oder einen oder mehrere Out-of-Order-Universalkerne, die für eine Universalberechnung vorgesehen sind, enthält; und 2) einen Coprozessor, der einen oder mehrere Spezialkerne enthält, die hauptsächlich für Graphik und/oder Wissenschaft (Durchsatz) vorgesehen sind. Derartige verschiedene Prozessoren führen zu verschiedenen Computersystemarchitekturen, die Folgendes enthalten können: 1) den Coprozessor auf einem von der CPU getrennten Chip; 2) den Coprozessor auf einem separaten Die in derselben Baugruppe wie eine CPU; 3) den Coprozessor auf demselben Die wie eine CPU (wobei in diesem Fall ein derartiger Coprozessor manchmal als eine Speziallogik, wie z. B. eine integrierte Graphik und/oder eine wissenschaftliche Logik (Durchsatzlogik), oder als Spezialkerne bezeichnet wird); und 4) ein System auf einem Chip, das auf demselben Die die beschriebene CPU (die manchmal als der (die) Anwendungskern(e) oder der (die) Anwendungsprozessor(en) bezeichnet wird), den oben beschriebenen Coprozessor und zusätzliche Funktionalität enthalten kann. Als Nächstes werden beispielhafte Kernarchitekturen beschrieben, gefolgt von den Beschreibungen der beispielhaften Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen
  • Ein Blockschaltplan eines In-Order- und Out-of-Order-Kerns
  • 16A ist ein Blockschaltplan, der sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Out-of-Order-Ausgabe-/Ausführungspipeline mit Registerumbenennung gemäß den Ausführungsformen der Erfindung veranschaulicht. 16B ist ein Blockschaltplan, der eine beispielhafte Ausführungsform sowohl eines Kerns einer In-Order-Architektur als auch eines beispielhaften Kerns einer Out-of-Order-Ausgabe-/Ausführungsarchitektur mit Registerumbenennung veranschaulicht, die in einem Prozessor gemäß den Ausführungsformen der Erfindung enthalten sind. Die Kästen mit durchgezogenen Linien in den 16A-B veranschaulichen die In-Order-Pipeline und den In-Order-Kern, während die optionale Ergänzung der Kästen mit den gestrichelten Linien die Out-of-Order-Ausgabe-/Ausführungspipeline mit Registerumbenennung und den Out-of-Order-Ausgabe-/Ausführungskern mit Registerumbenennung veranschaulichen. In Anbetracht dessen, dass der In-Order-Aspekt eine Teilmenge des Out-of-Order-Aspekts ist, wird der Out-of-Order-Aspekt beschrieben.
  • In 16A enthält eine Prozessorpipeline 1600 eine Holstufe 1602, eine Längendecodierstufe 1604, eine Decodierstufe 1606, eine Zuweisungsstufe 1608, eine Umbenennungsstufe 1610, eine Planungsstufe (die außerdem als eine Abfertigungs- oder Ausgabestufe bezeichnet wird) 1612, eine Registerlese-/Speicherlesestufe 1614, eine Ausführungsstufe 1616, eine Rückschreib-/Speicherschreibstufe 1618, eine Ausnahmebehandlungsstufe 1622 und eine Einspeicherstufe 1624.
  • 16B zeigt einen Prozessorkern 1690, der eine Front-End-Einheit 1630 enthält, die an eine Ausführungsmaschineneinheit 1650 gekoppelt ist, wobei beide an eine Speichereinheit 1670 gekoppelt sind. Der Kern 1690 kann ein Kern mit Berechnung mit verringertem Befehlssatz (RISC-Kern), ein Kern mit Berechnung mit komplexem Befehlssatz (CISC-Kern), ein Kern mit sehr langen Befehlswörtern (VLIW-Kern) oder ein hybrider oder alternativer Kerntyp sein. Als eine noch weitere Option kann der Kern 1690 ein Spezialkern sein, wie z. B. ein Netz- oder Kommunikationskern, eine Kompressionsmaschine, ein Coprozessorkern, ein Universalberechnungs-Graphikverarbeitungseinheits-Kern (GPGPU-Kern), ein Graphikkern oder dergleichen, sein.
  • Die Front-End-Einheit 1630 enthält eine Verzweigungsvorhersageeinheit 1632, die an eine Befehls-Cache-Einheit 1634 gekoppelt ist, die an einen Befehls-Adressenübersetzungspuffer (TLB) 1636 gekoppelt ist, der an eine Befehlsholeinheit 1638 gekoppelt ist, die an eine Decodiereinheit 1640 gekoppelt ist. Die Decodiereinheit 1640 (oder der Decodierer) kann Befehle decodieren und als eine Ausgabe eine oder mehrere Mikrooperationen, Mikrocode-Einsprungstellen, Mikrobefehle, andere Befehle oder andere Steuersignale erzeugen, die aus den ursprünglichen Befehlen decodiert werden oder die ursprünglichen Befehle anderweitig widerspiegeln oder aus den ursprünglichen Befehlen abgeleitet werden. Die Decodiereinheit 1640 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert sein. Beispiele geeigneter Mechanismen enthalten Nachschlagtabellen, Hardware-Implementierungen, programmierbare Logikanordnungen (PLAs), Mikrocode-Festwertspeicher (Mikrocode-ROMs) usw., sind aber nicht darauf eingeschränkt. In einer Ausführungsform enthält der Kern 1690 einen Mikrocode-ROM oder ein anderes Medium, der bzw. das Mikrocode für bestimmte Makrobefehle speichert, (z. B. in der Decodiereinheit 1640 oder anderweitig innerhalb der Front-End-Einheit 1630). Die Decodiereinheit 1640 ist an eine Umbenennungs-/Zuweisereinheit 1652 in der Ausführungsmaschineneinheit 1650 gekoppelt.
  • Die Ausführungsmaschineneinheit 1650 enthält eine Umbenennungs-/Zuweisereinheit 1652, die an eine Stilllegungseinheit 1654 und an einen Satz von einer oder mehreren Scheduler-Einheit(en) 1656 gekoppelt ist. Die Scheduler-Einheit(en) 1656 repräsentiert irgendeine Anzahl unterschiedlicher Scheduler, einschließlich Reservierungsstationen, eines zentralen Befehlsfensters usw. Die Scheduler-Einheit(en) 1656 ist an die Einheit(en) 1658 der physischen Registerdatei(en) gekoppelt. Jede der Einheiten 1658 der physischen Registerdatei(en) repräsentiert eine oder mehrere physische Registerdateien, von denen verschiedene einen oder mehrere verschiedene Datentypen, wie z. B. skalare Ganzzahl, skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw., speichern. In einer Ausführungsform umfasst die Einheit 1658 der physischen Registerdatei(en) eine Vektorregistereinheit, eine Schreibmasken-Registereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architektur-Vektorregister, Vektormaskenregister und Universalregister bereitstellen. Die Einheit(en) 1658 der physischen Registerdatei(en) ist durch die Stilllegungseinheit 1654 überlappt, um die verschiedenen Weisen zu veranschaulichen, in denen die Registerumbenennung und die Out-of-Order-Ausführung implementiert sein können (z. B. unter Verwendung eines Umordnungspuffers (von Umordnungspuffern) und einer Stilllegungsregisterdatei(en); unter Verwendung einer Zukunftsdatei(en), eines Historiepuffers (von Historiepuffern) und einer Stilllegungsregisterdatei(en); unter Verwendung von Registerabbildungen und einem Pool von Registern; usw.). Die Stilllegungseinheit 1654 und die Einheit(en) 1658 der physischen Registerdatei(en) sind an den (die) Ausführungs-Cluster 1660 gekoppelt. Der (die) Ausführung-Cluster 1660 enthält (enthalten) einen Satz von einer oder mehreren Ausführungseinheiten 1662 und einen Satz von einer oder mehreren Speicherzugriffseinheiten 1664. Die Ausführungseinheiten 1662 können verschiedene Operationen (z. B. Verschiebungen, eine Addition, eine Subtraktion, eine Multiplikation) und an verschiedenen Datentypen (z. B. skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma) ausführen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten enthalten können, die für spezifische Funktionen oder Sätze von Funktionen dediziert sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten, die alle alle Funktionen ausführen, enthalten. Die Scheduler-Einheit(en) 1656, die Einheit(en) 1658 der physikalischen Registerdatei(en) und der (die) Ausführungs-Cluster 1660 sind als möglicherweise mehrere gezeigt, weil bestimmte Ausführungsformen getrennte Pipelines für bestimmte Datentypen/Operationen erzeugen (z. B. eine skalare Ganzzahlpipeline, eine skalare Gleitkomma-/gepackte Ganzzahl-/gepackte Gleitkomma-/Vektorganzzahl-/Vektorgleitkommapipeline und/oder eine Speicherzugriffspipeline, die jede ihre eigene Scheduler-Einheit, ihre eigene Einheit der physikalischen Registerdatei(en) und/oder ihren eigenen Ausführung-Cluster aufweisen - wobei im Fall einer separaten Speicherzugriffspipeline bestimmte Ausführungsformen implementiert sind, in denen nur der Ausführungs-Cluster dieser Pipeline die Speicherzugriffseinheit(en) 1664 aufweist). Es sollte außerdem erkannt werden, dass, wo separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-Order-Ausgabe/Ausführung und der Rest In-Order sein können.
  • Der Satz von Speicherzugriffseinheiten 1664 ist an die Speichereinheit 1670 gekoppelt, die eine Daten-TLB-Einheit 1672 enthält, die an eine Daten-Cache-Einheit 1674 gekoppelt ist, die an eine Ebene-2-Cache-Einheit (L2-Cache-Einheit) 1676 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 1664 eine Ladeeinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit enthalten, von denen jede an die Daten-TLB-Einheit 1672 in der Speichereinheit 1670 gekoppelt ist. Die Befehls-Cache-Einheit 1634 ist ferner an eine Ebene-2-Cache-Einheit (L2-Cache-Einheit) 1676 in der Speichereinheit 1670 gekoppelt. Die L2-Cache-Einheit 1676 ist an eine oder mehrere andere Ebenen des Cache und schließlich an einen Hauptspeicher gekoppelt.
  • Beispielhaft kann die beispielhafte Out-of-Order-Ausgabe-/Ausführungskernarchitektur mit Registerumbenennung die Pipeline 1600 wie folgt implementieren: 1) das Befehlsholen 1638 führt die Hol- und Längendecodierstufen 1602 und 1604 aus; 2) die Decodiereinheit 1640 führt die Decodierstufe 1606 aus; 3) die Umbenennungs-/Zuweisereinheit 1652 führt die Zuweisungsstufe 1608 und die Umbenennungsstufe 1610 aus; 4) die Scheduler-Einheit(en) 1656 führt die Planungsstufe 1612 aus; 5) die Einheit(en) 1658 der physischen Registerdatei(en) und die Speichereinheit 1670 führen die Registerlese-/Speicherlesestufe 1614 aus; der Ausführungs-Cluster 1660 führt die Ausführungsstufe 1616 aus; 6) die Speichereinheit 1670 und die Einheit(en) 1658 der physischen Registerdatei(en) führen die Rückschreib-/Speicherschreibstufe 1618 aus; 7) in die Ausnahmebehandlungsstufe 1622 können verschiedene Einheiten einbezogen sein; und 8) die Stilllegungseinheit 1654 und die Einheit(en) 1658 der physischen Registerdatei(en) führen die Einspeicherstufe 1624 aus.
  • Der Kern 1690 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 Technolgies of Sunnyvale, CA; den ARM-Befehlssatz (mit optional zusätzlichen Erweiterungen, wie z. B. NEON) von ARM Holdings of Sunnyvale, CA), einschließlich der hier beschriebenen Befehl(e) unterstützen. In einer Ausführungsform enthält der Kern 1690 eine Logik, um eine Befehlssatzerweiterung für gepackte Daten (z. B. AVX1, AVX2) zu unterstützen, wobei dadurch die Operationen erlaubt werden, die durch viele Multimedia-Anwendungen verwendet werden, die unter Verwendung gepackter Daten auszuführen sind.
  • Es sollte erkannt werden, dass der Kern Multithreading (die Ausführung von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies in verschiedenen Weisen einschließlich des Zeitscheiben-Multithreading, des gleichzeitigen Multithreading (wo ein einziger physischer Kern einen logischen Kern für jeden der Threads bereitstellt, für die dieser physische Kern das gleichzeitige Multithreading ausführt) oder einer Kombination daraus (z. B. das Zeitscheiben-Holen und -Decodieren und danach das gleichzeitige Multithreading, wie z. B. in der Intel®-Hyperthreading-Technik) ausführen kann.
  • Während die Registerumbenennung im Kontext der Out-of-Order-Ausführung beschrieben wird, sollte erkannt werden, dass die Registerumbenennung in einer In-Order-Architektur verwendet werden kann. Während die veranschaulichte Ausführungsform des Prozessors außerdem separate Befehls- und Daten-Cache-Einheiten 1634/1674 und eine gemeinsam benutzte L2-Cache-Einheit 1676 enthält, können alternative Ausführungsformen einen einzigen internen Cache sowohl für Befehle als auch für Daten, wie z. B. einen internen Ebene-1-Cache (L1-Cache), oder mehrere Ebenen des internen Caches aufweisen. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, enthalten. Alternativ kann sich alles des Caches außerhalb des Kerns und/oder des Prozessors befinden.
  • Eine spezifische beispielhafte In-Order-Kernarchitektur
  • Die 17A-B veranschaulichen einen Blockschaltplan einer spezifischeren beispielhaften In-Order-Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne des gleichen Typs und/oder anderer Typen) in einem Chip sein würde. Die Logikblöcke kommunizieren in Abhängigkeit von der Anwendung durch ein Zusammenschaltungsnetz (z. B. ein Ringnetz) mit hoher Bandbreite mit irgendeiner Logik mit fester Funktion, Speicher-E/A-Schnittstellen und einer anderen notwendigen E/A-Logik.
  • 17A ist ein Blockschaltplan eines einzigen Prozessorkerns zusammen mit seiner Verbindung zu dem Zusammenschaltungsnetz 1702 auf dem Die und mit seiner lokalen Teilmenge des Ebene-2-Caches (L2-Caches) 1704 gemäß den Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdecodierer 1700 den x86-Befehlssatz mit der Befehlssatzerweiterung für gepackte Daten. Ein L1-Cache 1706 erlaubt Zugriffe mit geringer Latenzzeit auf den Cache-Speicher in die Skalar- und Vektoreinheiten. Während in einer Ausführungsform (um den Entwurf zu vereinfachen) eine Skalareinheit 1708 und eine Vektoreinheit 1710 getrennte Registersätze (Skalarregister 1712 bzw. Vektorregister 1714) verwenden und die zwischen ihnen übertragenen Daten in den Speicher geschrieben werden und dann von einem Ebene-1-Cache (L1-Cache) 1706 zurückgelesen werden, können alternative Ausführungsformen der Erfindung eine andere Herangehensweise verwenden (z. B. einen einzigen Registersatz verwenden oder einen Kommunikationsweg enthalten, der es ermöglicht, dass die Daten zwischen den zwei Registerdateien übertragen werden, ohne dass sie geschrieben und zurückgelesen werden).
  • Die lokale Teilmenge des L2-Caches 1704 ist ein Teil eines globalen L2-Caches, der in getrennte lokale Teilmengen, eine pro Prozessorkern, aufgeteilt ist. Jeder Prozessorkern weist einen direkten Zugangsweg zu seiner eigenen lokalen Teilmenge des L2-Cache 1704 auf. Die durch einen Prozessorkern gelesenen Daten werden in seiner L2-Cache-Teilmenge 1704 gespeichert, wobei parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilmengen zugreifen, schnell auf sie zugegriffen werden kann. Die durch einen Prozessorkern geschriebenen Daten werden in seiner eigenen L2-Cache-Teilmenge 1704 gespeichert und werden bei Bedarf aus anderen Teilmengen geleert. Das Ringnetz stellt die Kohärenz für die gemeinsam benutzten Daten sicher. Das Ringnetz ist bidirektional, um es den Agenten, wie z. B. den Prozessorkernen, den L2-Caches und anderen Logikblöcken zu ermöglichen, innerhalb des Chips miteinander zu kommunizieren. Jeder Ringdatenweg ist pro Richtung 1012 Bits breit.
  • 17B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 17A gemäß den Ausführungsformen der Erfindung. 17B enthält sowohl einen L1-Daten-Cache-Teil 1706A des L1-Caches 1704 als auch weitere Einzelheiten hinsichtlich der Vektoreinheit 1710 und der Vektorregister 1714. Spezifisch ist die Vektoreinheit 1710 eine 16 breite Vektorverarbeitungseinheit (VPU) (siehe die 16 breite ALU 1728), die einen oder mehrere der Ganzzahlbefehle, Gleitkommabefehle in einfacher Genauigkeit und Gleitkommabefehle in doppelter Genauigkeit ausführt. Die VPU unterstützt das Swizzling der Registereingaben mit der Swizzle-Einheit 1720, die numerische Umsetzung mit den numerischen Umsetzungseinheiten 1722A-B und die Replikation mit der Replikationseinheit 1724 an der Speichereingabe. Die Schreibmaskenregister 1726 erlauben das Aussagen der resultierenden Vektorschreibvorgänge.
  • Ein Prozessor mit integriertem Speicher-Controller und integrierter Graphik
  • 18 ist ein Blockschaltplan eines Prozessors 1800, der mehr als einen Kern aufweisen kann, einen integrierten Speicher-Controller aufweisen kann und eine integrierte Graphik aufweisen kann, gemäß den Ausführungsformen der Erfindung. Die Kästen mit durchgezogenen Linien in 18 veranschaulichen einen Prozessor 1800 mit einem einzigen Kern 1802A, einem Systemagenten 1810, einem Satz von einer oder mehreren Bus-Controller-Einheiten 1816, während die optionale Ergänzung der Kästen mit den gestrichelten Linien einen alternativen Prozessor 1800 mit mehreren Kernen 1802A-N, einem Satz von einer oder mehreren integrierten Speicher-Controller-Einheit(en) 1814 in der Systemagenteneinheit 1810 und einer Speziallogik 1808 veranschaulicht.
  • Folglich können verschiedene Implementierungen des Prozessors 1800 Folgendes enthalten: 1) eine CPU mit der Speziallogik 1808, die eine integrierte Graphik- und/oder wissenschaftliche Logik (Durchsatzlogik) ist (die einen oder mehrere Kerne enthalten kann), wobei die Kerne 1802A-N ein oder mehrere Universalkerne (z.B. In-Order-Universalkerne, Out-of-Order-Universalkerne, eine Kombination aus den beiden) sind; 2) einen Coprozessor mit den Kernen 1802A-N, die eine große Anzahl von Spezialkernen sind, die hauptsächlich für Graphik und/oder Wissenschaft (Durchsatz) vorgesehen sind; und 3) einen Coprozessor mit den Kernen 1802A-N, die eine große Anzahl von In-Order-Universalkernen sind. Folglich kann der Prozessor 1800 ein Universalprozessor, ein Coprozessor oder ein Spezialprozessor, wie z. B. ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Graphikprozessor, eine GPGPU (eine Universal-Graphikverarbeitungseinheit), ein Coprozessor mit vielen integrierten Kernen (MIC-Coprozessor) mit hohem Durchsatz (der 30 oder mehr Kerne enthält), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann in einem oder mehreren Chips implementiert sein. Der Prozessor 1800 kann ein Teil eines oder mehrerer Substrate sein und/oder unter Verwendung irgendeiner von einer Anzahl von Prozesstechniken, wie z. B. BiCMOS, CMOS oder NMOS, in einem oder mehreren Substraten implementiert sein.
  • Die Speicherhierarchie enthält eine oder mehrere Ebenen des Caches innerhalb der Kerne, einen Satz aus einer oder mehreren gemeinsam benutzten Cache-Einheiten 1806 und einen (nicht gezeigten) externen Speicher, der an den Satz von integrierten Speicher-Controller-Einheiten 1814 gekoppelt ist. Der Satz gemeinsam benutzter Cache-Einheiten 1806 kann einen oder mehrere Caches mittlerer Ebene, wie z. B. der Ebene 2 (L2), der Ebene 3 (L3), der Ebene 4 (L4) oder anderer Ebenen des Caches, einen Cache der letzten Ebene (LLC) und/oder Kombinationen daraus enthalten. Während in einer Ausführungsform eine ringbasierte Zusammenschaltungseinheit 1812 die integrierte Graphiklogik 1808, den Satz gemeinsam benutzter Cache-Einheiten 1806 und die Systemagenteneinheit 1810/die integrierten Speicher-Controller-Einheit(en) 1814 miteinander verbindet, können alternative Ausführungsformen irgendeine Anzahl wohlbekannter Techniken verwenden, um derartige Einheiten miteinander zu verbinden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cache-Einheiten 1806 und den Kernen 1802-A-N aufrechterhalten.
  • In einigen Ausführungsformen sind einer oder mehrerer der Kerne 1802A-N zum Multi-Threading imstande. Der Systemagent 1810 enthält jene Komponenten, die die Kerne 1802A-N koordinieren und betreiben. Die Systemagenteneinheit 1810 kann z. B. eine Leistungssteuereinheit (PCU) und eine Anzeigeeinheit enthalten. Die PCU kann die Logik und die Komponenten sein oder die Logik und die Komponenten enthalten, die benötigt werden, um den Leistungszustand der Kerne 1802A-N und der integrierte Graphiklogik 1808 zu regeln. Die Anzeigeeinheit dient dem Ansteuern einer oder mehrerer extern angeschlossener Anzeigen.
  • Die Kerne 802A-N können hinsichtlich des Architekturbefehlssatzes homogen oder heterogen sein; d. h., zwei oder mehr der Kerne 1802A-N können zur Ausführung des gleichen Befehlssatzes imstande sein, während andere zum Ausführen nur einer Teilmenge dieses Befehlssatzes oder eines anderen Befehlssatzes imstande sein können.
  • Beispielhafte Computerarchitekturen
  • Die 19-21 sind Blockschaltpläne beispielhafter Computerarchitekturen. Andere Systementwürfe und -konfigurationen, die in den Techniken für Laptops, Desktops, handgehaltene PCs, persönliche digitale Assistenten, Entwicklungs-Arbeitsplatzrechner, Server, Netzvorrichtungen, Netz-Hubs, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Graphikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxes, Mikrocontroller, Mobiltelephone, tragbare Medienspieler, handgehaltene Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind außerdem geeignet. Im Allgemeinen ist eine riesige Vielfalt von Systemen oder elektronischen Vorrichtungen, die einen Prozessor und/oder eine andere Ausführungslogik umfassen können, wie sie hier offenbart sind, im Allgemeinen geeignet.
  • In 19 ist ein Blockschaltplan eines Systems 1900 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 1900 kann einen oder mehrere Prozessoren 1910, 1915 enthalten, die an einen Controller-Hub 1920 gekoppelt sind. In einer Ausführungsform enthält der Controller-Hub 1920 einen Graphikspeicher-Controller-Hub (GMCH) 1990 und einen Eingabe/Ausgabe-HUB (EAH) 1950 (die sich auf getrennten Chips befinden können); wobei der GMCH 1990 Speicher- und Graphik-Controller enthält, an die ein Speicher 1940 und ein Coprozessor 1945 gekoppelt sind; wobei der EAH 1950 die Eingabe/Ausgabe-Vorrichtungen (E/A-Vorrichtungen) 1960 an den GMCH 1990 koppelt. Alternativ sind einer oder beide des Speicher- und Graphik-Controllers innerhalb des Prozessors integriert (wie hier beschrieben ist), sind der Speicher 1940 und der Coprozessor 1945 direkt an den Prozessor 1910 gekoppelt und befindet sich der Controller-HUB 1920 in einem einzigen Chip mit dem EAH 1950.
  • Die optionale Art der zusätzlichen Prozessoren 1915 ist in 19 mit gestrichelten Linien angegeben. Jeder Prozessor 1910, 1915 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne enthalten und kann irgendeine Version des Prozessors 1800 sein.
  • Der Speicher 1940 kann z. B. ein dynamischer Schreib-Lese-Speicher (DRAM), ein Phasenänderungsspeicher (PCM) oder eine Kombination aus den beiden sein. Für wenigstens eine Ausführungsform kommuniziert der Controller-Hub 1920 über einen Bus mit mehreren Stationen, wie z. B. einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie z. B. eine QuickPath Interconnect (QPI), oder eine ähnliche Verbindung 1995 mit dem (den) Prozessor(en) 1910, 1915.
  • In einer Ausführungsform ist der Coprozessor 1945 ein Spezialprozessor, wie z. B. ein MIC-Prozessor mit hohem Durchsatz, ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Graphikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Controller-Hub 1920 einen integrierten Graphikbeschleuniger enthalten.
  • Es kann verschiedene Unterschiede zwischen den physischen Betriebsmitteln 1910, 1915 hinsichtlich eines Spektrums der Metriken der Vorzüge einschließlich der Architektur-, Mikroarchitektur-, thermischen und Leistungsaufnahmeeigenschaften und dergleichen geben.
  • In einer Ausführungsform führt der Prozessor 1910 Befehle aus, die die Datenverarbeitungsseparation eines allgemeinen Typs steuern. In die Befehle können Coprozessorbefehle eingebettet sein. Der Prozessor 1910 erkennt diese Coprozessorbefehle als ein Typ, der durch den beigefügten Coprozessor 1945 ausgeführt werden sollte. Entsprechend gibt der Prozessor 1910 diese Coprozessorbefehle (oder Steuersignale, die die Coprozessorbefehle repräsentieren) auf einem Coprozessor-Bus oder einer anderen Zusammenschaltung zu dem Coprozessor 1945 aus. Der (die) Coprozessor(en) 1945 akzeptiert (akzeptieren) die empfangenen Coprozessorbefehle und führt (führen) sie aus.
  • In 20 ist ein Blockschaltplan eines ersten spezifischeren beispielhaften Systems 2000 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 20 gezeigt ist, ist das Mehrprozessorsystem 2000 ein Punkt-zu-Punkt-Zusammenschaltungssystem, wobei es einen ersten Prozessor 2070 und einen zweiten Prozessor 2080 enthält, die über eine Punkt-zu-Punkt-Zusammenschaltung 2050 gekoppelt sind. Jeder der Prozessoren 2070 und 2080 kann irgendeine Version des Prozessors 1800 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 2070 und 2080 die Prozessoren 1910 bzw. 1915, während der Coprozessor 2038 der Coprozessor 1945 ist. In einer weiteren Ausführungsform sind die Prozessoren 2070 und 2080 der Prozessor 1910 bzw. der Coprozessor 1945.
  • Es ist gezeigt, dass die Prozessoren 2070 und 2080 die integrierten Speicher-Controller-Einheiten (IMC-Einheiten) 2072 bzw. 2082 enthalten. Der Prozessor 2070 enthält außerdem als einen Teil seiner Bus-Controller-Einheiten die Punkt-zu-Punkt-Schnittstellen (P-P-Schnittstellen) 2076 und 2078; ähnlich enthält der zweite Prozessor 2080 die P-P-Schnittstellen 2086 und 2088. Die Prozessoren 2070, 2080 können Informationen über eine Punkt-zu-Punkt-Schnittstelle (P-P-Schnittstelle) 2050 unter Verwendung der P-P-Schnittstellenschaltungen 2078, 2088 austauschen. Wie in 20 gezeigt ist, koppeln die IMCs 2072 und 2082 die Prozessoren an entsprechende Speicher, nämlich einen Speicher 2032 und einen Speicher 2034, die Teile des Hauptspeichers sein können, die lokal mit den jeweiligen Prozessoren verbunden sind.
  • Die Prozessoren 2070, 2080 können jeder Informationen über die einzelnen P-P-Schnittstellen 2052, 2054 unter Verwendung der Punkt-zu-Punkt-Schnittstellenschaltungen 2076, 2094, 2086, 2098 mit einem Chipsatz 2090 austauschen. Der Chipsatz 2090 kann optional Informationen über eine Hochleistungsschnittstelle 2039 mit dem Coprozessor 2038 austauschen. In einer Ausführungsform ist der Coprozessor 2038 ein Spezialprozessor, wie z. B. ein MIC-Prozessor mit hohem Durchsatz, ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Graphikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • In jedem Prozessor oder außerhalb der beiden Prozessoren kann ein (nicht gezeigter) gemeinsam benutzter Cache enthalten sein, der dennoch über die P-P-Zusammenschaltung mit den Prozessoren verbunden ist, so dass die lokalen Cache-Informationen eines oder beider Prozessoren in dem gemeinsam benutzten Cache gespeichert sein können, falls ein Prozessor in einen Kleinleistungsmodus gesetzt ist.
  • Der Chipsatz 2090 kann über eine Schnittstelle 2096 an einen ersten Bus 2016 gekoppelt sein. In einer Ausführungsform kann der erste Bus 2016 ein Peripheriekomponenten-Verbindungsbus (PCI-Bus) oder ein Bus, wie z. B. ein PCI-Express-Bus oder ein anderer E/A-Verbindungsbus der dritten Generation, sein, obwohl der Schutzumfang der vorliegenden Erfindung nicht so eingeschränkt ist.
  • Wie in 20 gezeigt ist, können verschiedene E/A-Vorrichtungen 2014 zusammen mit einer Busbrücke 2018, die den ersten Bus 2016 an einen zweiten Bus 2020 koppelt, an den ersten Bus 2016 gekoppelt sein. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessor(en) 2015, wie z. B. Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie z. B. Graphikbeschleuniger oder digitale Signalverarbeitungseinheiten (DSP-Einheiten)), feldprogrammierbare Gatteranordnungen oder irgendein anderer Prozessor an den ersten Bus 2016 gekoppelt. In einer Ausführungsform kann der zweite Bus 2020 ein Bus mit geringer Pinanzahl (LPC-Bus) sein. In einer Ausführungsform können verschiedene Vorrichtungen an den zweiten Bus 2020 gekoppelt sein, einschließlich z. B. einer Tastatur und/oder einer Maus 2022, der Kommunikationsvorrichtungen 2027 und einer Speichereinheit 2028, wie z. B. eines Plattenlaufwerks oder einer anderen Massenspeichervorrichtung, die Befehle/Code und Daten 2030 enthalten kann. Ferner kann eine Audio-E/A 2024 an den zweiten Bus 2020 gekoppelt sein. Es wird angegeben, dass andere Architekturen möglich sind. Anstelle der Punkt-zu-Punkt-Architektur nach 20 kann das System einen Bus mit mehreren Stationen oder eine andere derartige Architektur implementieren.
  • In 21 ist ein Blockschaltplan eines zweiten spezifischeren beispielhaften Systems 2100 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in den 20 und 21 tragen gleiche Bezugszeichen, wobei bestimmte Aspekte nach 20 aus 21 weggelassen worden sind, um das Verbergen der anderen Aspekte nach 21 zu vermeiden.
  • 21 veranschaulicht, dass die Prozessoren 2070, 2080 eine integrierte Speicher- und E/A-Steuerlogik („CL“) 2072 bzw. 2082 enthalten können. Folglich enthalten die CL 2072, 2082 die integrierten Speicher-Controller-Einheiten und eine E/A-Steuerlogik. 21 veranschaulicht, dass nicht nur die Speicher 2032, 2034 an die CL 2072, 2082 gekoppelt sind, sondern dass außerdem die E/A-Vorrichtungen 2114 an die Steuerlogik 2072, 2082 gekoppelt sind. Die Alt-E/A-Vorrichtungen 2115 sind an den Chipsatz 2090 gekoppelt.
  • In 22 ist ein Blockschaltplan eines SoC 2200 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in 18 tragen gleiche Bezugszeichen. Außerdem sind die Kästen mit gestrichelten Linien optionale Merkmale in weiterentwickelteren SoCs. In 22 ist eine Zusammenschaltungseinheit(en) 2202 an Folgendes gekoppelt: einen Anwendungsprozessor 2210, der einen Satz von einem oder mehreren Kernen 212A-N und gemeinsam benutzte Cache-Einheit(en) 1806 enthält; eine Systemagenteneinheit 1810; eine Bus-Controller-Einheit(en) 1816; eine integrierte Speicher-Controller-Einheit(en) 1814; einen Satz von einem oder mehreren Coprozessoren 2220, der eine integrierte Graphiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor enthalten kann; eine statische Schreib-Lese-Speicher-Einheit (SRAM-Einheit) 2230; eine Speicherdirektzugriffseinheit (DMA-Einheit) 2232; und eine Anzeigeeinheit 2240 zum Koppeln an eine oder mehrere externe Anzeigen. In einer Ausführungsform enthält (enthalten) der (die) Coprozessor(en) 2220 einen Spezialprozessor, wie z. B. einen Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, eine GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder dergleichen.
  • Die Ausführungsformen der hier offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination derartiger Implementierungsherangehensweisen implementiert sein. Die Ausführungsformen der Erfindung können als Computer-Programme oder Programmcode, die in programmierbaren Systemen ausgeführt werden, die wenigstens einen Prozessor, ein Speichersystem (einschließlich flüchtiger und/oder nichtflüchtiger Datenspeicher- und/oder Speicherelemente), wenigstens eine Eingabevorrichtung und wenigstens eine Ausgabevorrichtung umfassen, implementiert sein.
  • Der Programmcode, wie z. B. der in 20 veranschaulichte Code 2030, kann auf Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen auszuführen und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können in bekannter Weise auf eine oder mehrere Ausgabevorrichtungen angewendet werden. Für die Zwecke dieser Anmeldung enthält das Verarbeitungssystem irgendein System, das einen Prozessor aufweist, wie z. B. einen digitalen Signalprozessor (DSP), einen Mikrocontroller, eine Anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren prozeduralen Programmiersprache oder einer objektorientierten Programmiersprache implementiert sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann auf Wunsch außerdem in einer Assembler- oder Maschinensprache implementiert sein. In der Tat sind die hier beschriebenen Mechanismen im Schutzumfang nicht auf irgendeine spezielle Programmiersprache eingeschränkt. In jedem Fall kann die Sprache eine kompilierte oder eine interpretierte Sprache sein.
  • Ein oder mehrere Aspekte wenigstens einer Ausführungsform können durch repräsentative Befehle implementiert sein, die in einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logiken innerhalb des Prozessors repräsentiert, die, wenn sie durch eine Maschine gelesen werden, die Maschine veranlassen, eine Logik herzustellen, um die hier beschriebenen Techniken auszuführen. Derartige Darstellungen, die als „IP-Kerne“ bekannt sind, können in einem greifbaren maschinenlesbaren Medium gespeichert sein und können verschiedenen Kunden oder Herstellungseinrichtungen geliefert werden, um sie in die Fertigungsmaschinen zu laden, die die Logik oder den Prozessor tatsächlich bilden.
  • Derartige maschinenlesbare Speichermedien können ohne Einschränkung nicht transitorische greifbare Anordnungen von Herstellungsartikeln enthalten oder durch eine Maschine oder eine Vorrichtung gebildet sein, einschließlich Speichermedien wie z. B. Festplatten, irgendeines anderen Typs von Platten einschließlich Disketten, optischer Platten, Kompaktplatten-Festwertspeichern (CD-ROMs), wiederbeschreibbarer Kompaktplatten (CD-RWs) und magnetooptischer Platten, Halbleitervorrichtungen, wie z. B. Festwertspeichern (ROMs), Schreib-Lese-Speichern (RAMs), wie z. B. dynamischer Schreib-Lese-Speicher (DRAMs), statischer Schreib-Lese-Speicher (SRAMs), löschbarer programmierbarer Festwertspeicher (EPROMs), Flash-Speichern, elektrisch löschbarer programmierbarer Festwertspeicher (EEPROMs), Phasenänderungsspeichern (PCM), magnetischer oder optischer Karten oder irgendeines anderen Typs der Medien, die zum Speichern elektronischer Befehle geeignet sind.
  • Entsprechend enthalten die Ausführungsformen der Erfindung außerdem nicht transitorische greifbare maschinenlesbaren Medien, die Befehle enthalten oder Entwurfsdaten enthalten, wie z. B. eine Hardware-Beschreibungssprache (HDL), die Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale, die hier beschrieben sind, definieren. Derartige Ausführungsformen können außerdem als Programmprodukte bezeichnet werden.
  • Die Emulation (einschließlich der binären Übersetzung, des Codemorphings usw.)
  • In einigen Fällen kann ein Befehlsumsetzer verwendet werden, um einen Befehl von einem Quellbefehlssatz zu einem Zielbefehlssatz umzusetzen. Der Befehlsumsetzer kann z. B. übersetzen (z. B. unter Verwendung der statischen binären Übersetzung, der dynamischen binären Übersetzung einschließlich der dynamischen Kompilierung), morphen, emulieren oder anderweitig einen Befehl in einen oder mehrere andere Befehle umsetzen, die durch den Kern zu verarbeiten sind. Der Befehlsumsetzer kann in Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. Der Befehlsumsetzer kann sich in dem Prozessor, außerhalb des Prozessors oder teilweise in dem Prozessor und teilweise außerhalb des Prozessors befinden.
  • 23 ist ein Blockschaltplan, der die Verwendung eines Software-Befehlsumsetzers, um binäre Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz umzusetzen, gemäß den Ausführungsformen der Erfindung gegenüberstellt. In der veranschaulichten Ausführungsform ist der Befehlsumsetzer ein Software-Befehlsumsetzer, obwohl alternativ der Befehlsumsetzer in Software, Firmware, Hardware oder verschiedenen Kombinationen daraus implementiert sein kann. 23 zeigt ein Programm in einer höheren Sprache 2302, das unter Verwendung eines x86-Kompilierers 2304 kompiliert werden kann, um einen binären x86-Code 2306 zu erzeugen, der nativ durch einen Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2316 ausgeführt werden kann. Der Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2316 repräsentiert irgendeinen Prozessor, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern durch das kompatible Ausführen oder anderweitige Verarbeiten (1) eines wesentlichen Anteils des Befehlssatzes des Intel-x86-Befehlssatz-Kerns oder (2) von Objektcode-Versionen von Anwendungen oder anderer Software, die darauf abzielt, in einem Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern ausgeführt werden, ausführen kann, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern zu erreichen. Der x86-Kompilierer 2304 repräsentiert einen Kompilierer, der betreibbar ist, um binären x86-Code 2306 (z. B. Objektcode) zu erzeugen, der mit einer oder ohne eine zusätzliche Verbindungsverarbeitung in dem Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2316 ausgeführt werden kann. Ähnlich zeigt 23 das Programm in der höheren Sprache 2302, das unter Verwendung eines Kompilierers 2308 für einen alternativen Befehlssatz kompiliert werden kann, um binären Code 2310 des alternativen Befehlssatzes zu erzeugen, der nativ durch einen Prozessor ohne wenigstens einen x86-Befehlssatz-Kern 2314 (z. B. einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technology of Sunnyvale, CA, ausführen und/oder die den ARM-Befehlssatz von ARM Holdings of Sunnyvale, CA, ausführen) ausgeführt werden kann. Der Befehlsumsetzer 2312 wird verwendet, um den binären x86-Code 2306 in Code umzusetzen, der nativ durch den Prozessor ohne einen x86-Befehlssatz-Kern 2314 ausgeführt werden kann. Dieser umgesetzte Code ist wahrscheinlich nicht der gleiche wie der binäre Code 2310 des alternativen Befehlssatzes, weil ein Befehlsumsetzer, der dies kann, schwierig herzustellen ist; der umgesetzte Code erreicht jedoch den allgemeinen Betrieb und kann aus Befehlen aus dem alternativen Befehlssatz gebildet sein. Folglich repräsentiert der Befehlsumsetzer 2312 Software, Firmware, Hardware oder eine Kombination daraus, die es durch Emulation, Simulation oder irgendeinen anderen Prozess einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen x86-Befehlssatz-Prozessor oder -Kern aufweist, ermöglicht, den binären x86-Code 2306 auszuführen.
  • Die für eine der 1-2 und 5-11 beschriebenen Komponenten, Merkmale und Einzelheiten können außerdem für irgendeine der 3-4 gelten. Überdies können die für irgendeine der Vorrichtungen beschriebenen Komponenten, Merkmale und Einzelheiten außerdem optional für irgendeines der Verfahren gelten, die in den Ausführungsformen durch eine derartige und/oder mit einer derartigen Vorrichtung ausgeführt werden können. Jeder der hier beschriebenen Prozessoren kann in irgendeinem der hier offenbarten Computersysteme (z. B. die 19-23) enthalten sein. In einigen Ausführungsformen kann das Computersystem einen dynamischen Schreib-Lese-Speicher (DRAM) enthalten. Alternativ kann das Computersystem einen Typ eines flüchtigen Speichers, der nicht aufgefrischt werden muss, oder einen Flash-Speicher enthalten. Die hier offenbarten Befehle können mit jedem der hier gezeigten Prozessoren, der irgendeine der hier gezeigten Mikroarchitekturen aufweist, in jedem der hier gezeigten Systeme ausgeführt werden. Die hier offenbarten Befehle können irgendeines der Merkmale der hier gezeigte Befehlsformate (z. B. in den 12-14) aufweisen.
  • In der Beschreibung und den Ansprüchen können die Begriffe „gekoppelt“ und/oder „verbunden“ zusammen mit ihren Ableitungen verwendet worden sein. Diese Begriffe sind nicht als Synonyme füreinander vorgesehen. Stattdessen kann in den Ausführungsformen „verbunden“ verwendet werden, um anzugeben, dass sich zwei oder mehr Elemente in direkten physischen und/oder elektrischen Kontakt miteinander befinden. „Gekoppelt“ kann bedeuten, dass sich zwei oder mehr Elemente in direkten physischen und/oder elektrischen Kontakt miteinander befinden. „Gekoppelt“ kann jedoch außerdem bedeuten, dass sich zwei oder mehr Elemente nicht in direkten Kontakt miteinander befinden, aber dennoch trotzdem zusammenarbeiten oder miteinander wechselwirken. Eine Ausführungseinheit kann z. B. durch eine oder mehrere dazwischenliegende Komponenten mit einem Register und/oder einer Decodiereinheit gekoppelt sein. In den Figuren werden Pfeile verwendet, um Verbindungen und Kopplungen zu zeigen.
  • In der Beschreibung und/oder in den Ansprüchen können die Begriffe „Logik“, „Einheit“, „Modul“ oder „Komponente“ verwendet worden sein. Jeder dieser Begriffe kann verwendet werden, um auf Hardware, Firmware, Software oder verschiedene Kombinationen daraus zu verweisen. In beispielhaften Ausführungsformen kann sich jeder dieser Begriffe auf eine integrierte Schaltungsanordnung, anwendungsspezifische integrierte Schaltungen, analoge Schaltungen, digitale Schaltungen, programmierte Logikvorrichtungen, Speichervorrichtungen, die Befehle enthalten, und dergleichen und verschiedene Kombinationen daraus beziehen. In einigen Ausführungsformen können diese wenigstens etwas Hardware (z. B. Transistoren, Gatter, andere Schaltungsanordnungskomponenten usw.) enthalten.
  • Der Begriff „und/oder“ kann verwendet worden sein. Der Begriff „und/oder“, wie er hier verwendet wird, bedeutet eines oder das andere oder beide (A und/oder B bedeutet z. B. A oder B oder sowohl A als auch B).
  • In der obigen Beschreibung sind spezifische Einzelheiten dargelegt worden, um ein umfassendes Verständnis der Ausführungsformen bereitzustellen. Es können jedoch andere Ausführungsformen ohne einige dieser spezifischen Einzelheiten praktiziert werden. Der Schutzumfang der Erfindung soll nicht durch die oben bereitgestellten spezifischen Beispiele bestimmt werden, sondern nur durch die Ansprüche im Folgenden. In anderen Fällen sind wohlbekannte Schaltungen, Strukturen, Vorrichtungen und Operationen in Form von Blockschaltplänen und/oder ohne Einzelheiten gezeigt worden, um es zu vermeiden, das Verstehen der Beschreibung undeutlich zu machen. Wo es als geeignet betrachtet wurde, sind Bezugszeichen oder die Endabschnitte der Bezugszeichen zwischen den Figuren wiederholt worden, um entsprechende oder analoge Elemente anzugeben, die optional ähnliche oder die gleichen Eigenschaften aufweisen können, wenn es nicht anderweitig spezifiziert oder deutlich offensichtlich ist.
  • Bestimmte Operationen können durch Hardware-Komponenten ausgeführt werden oder können in maschinenlesbaren oder schaltungsausführbaren Befehlen verkörpert sein, die verwendet werden können, um zu veranlassen und/oder dazu zu führen, dass eine Maschine, eine Schaltung oder eine Hardware-Komponente (z. B. ein Prozessor, ein Anteil eines Prozessors, eine Schaltung usw.), die mit den Befehlen programmiert ist, die Operationen ausführt. Die Operationen können außerdem optional durch eine Kombination aus Hardware und Software ausgeführt werden. Ein Prozessor, eine Maschine, eine Schaltung oder Hardware kann eine spezifische oder spezielle Schaltungsanordnung oder andere Logik (z. B. Hardware, potentiell kombiniert mit Firmware und/oder Software) enthalten, die betriebsfähig ist, um den Befehl auszuführen und/oder zu verarbeiten und ein Ergebnis in Reaktion auf den Befehl zu speichern.
  • Einige Ausführungsformen enthalten einen Herstellungsartikel (z. B. ein Computerprogrammprodukt), der ein maschinenlesbares Medium enthält. Das Medium kann einen Mechanismus enthalten, der Informationen in einer Form, die durch die Maschine lesbar ist, bereitstellt, z. B. speichert. Das maschinenlesbare Medium kann einen Befehl oder eine Folge von Befehlen bereitstellen oder darin gespeichert aufweisen, die, falls und/oder wenn sie durch eine Maschine ausgeführt werden, betriebsfähig sind, um die Maschine zu veranlassen, es auszuführen und/oder dazu zu führen, dass die Maschine eine oder mehrere Operationen, Verfahren oder Techniken, die hier offenbart sind, ausführt.
  • In einigen Ausführungsformen kann das maschinenlesbare Medium ein nicht transitorisches maschinenlesbares Speichermedium enthalten. Das nicht transitorische maschinenlesbare Speichermedium kann z. B. eine Diskette, ein optisches Speichermedium, eine optische Platte, eine optische Datenspeichervorrichtung, einen CD-ROM, eine Magnetplatte, eine magnetooptische Platte, einen Festwertspeicher (ROM) einen programmierbaren ROM (PROM), einen löschbaren und programmierbaren ROM (EPROM), einen elektrisch löschbaren und programmierbaren ROM (EEPROM), einen Schreib-Lese-Speicher (RAM), einen statischen RAM (SRAM), einen dynamischen RAM (DRAM), einen Flash-Speicher, einen Phasenänderungsspeicher, ein Phasenänderungs-Datenspeichermaterial, einen nichtflüchtigen Speicher, eine nichtflüchtige Datenspeichervorrichtung, einen nicht transitorischen Speicher, eine nicht transitorische Datenspeichervorrichtung oder dergleichen enthalten. Das nicht transitorische maschinenlesbare Speichermedium besteht nicht aus einem transitorischen ausgebreiteten Signal. In einigen Ausführungsformen kann das Speichermedium ein greifbares Medium enthalten, das einen Feststoff enthält.
  • Beispiele geeigneter Maschinen enthalten einen Universalprozessor, einen Spezialprozessor, eine digitale Logikschaltung, eine integrierte Schaltung oder dergleichen, sind aber nicht auf diese eingeschränkt. Noch andere Beispiele geeigneter Maschinen enthalten ein Computersystem oder eine elektronische Vorrichtung, die einen Prozessor, eine digitale Logikschaltung oder eine integrierte Schaltung enthält. Beispiele derartiger Computersysteme oder elektronischer Vorrichtungen enthalten Desktop-Computer, Laptop-Computer, Notebook-Computer, Tablet-Computer, Netbooks, Smartphones, Mobiltelephone, Server, Netzvorrichtungen (z. B. Router und Switches), mobile Internetvorrichtungen (MIDs), Medienspieler, intelligente Fernsehgeräte, Nettops, Set-Top-Boxes und Videospiel-Controller, sind aber nicht auf diese eingeschränkt.
  • Eine Bezugnahme überall in dieser Beschreibung auf „eine einzige Ausführungsform“, „eine Ausführungsform“, „eine oder mehrere Ausführungsformen“, „einige Ausführungsformen“ gibt z. B. an, dass ein spezielles Merkmal in der Praxis der Erfindung enthalten sein kann, wobei es aber nicht notwendigerweise erforderlich ist, dass es das ist. Ähnlich sind in der Beschreibung verschiedene Merkmale manchmal in einer einzigen Ausführungsform, Figur oder deren Beschreibung für den Zweck der Straffung der Offenbarung und des Unterstützens des Verständnisses der verschiedenen erfinderischen Aspekte zusammen gruppiert. Dieses Verfahren der Offenbarung soll jedoch nicht als eine Absicht widerspiegelnd interpretiert werden, dass die Erfindung mehr Merkmale erfordert, als in jedem Anspruch ausdrücklich dargestellt sind. Stattdessen liegen die erfinderischen Aspekte in weniger als allen Merkmalen einer einzigen offenbarten Ausführungsform, wie es die folgenden Ansprüche widerspiegeln. Folglich sind die der ausführlichen Beschreibung folgenden Ansprüche hierdurch ausdrücklich in diese ausführliche Beschreibung aufgenommen, wobei jeder Anspruch für sich allein als eine separate Ausführungsform der Erfindung steht.
  • BEISPIELHAFTE AUSFÜHRUNGSFORMEN
  • Die folgenden Beispiele betreffen weitere Ausführungsformen. Die Besonderheiten in den Beispielen können überall in einer oder mehreren Ausführungsformen verwendet werden.
  • Das Beispiel 1 ist ein Prozessor, der eine Decodiereinheit enthält, um einen Datenelement-Vergleichsbefehl zu decodieren. Der Datenelement-Vergleichsbefehl gibt einen ersten gepackten Quelldatenoperanden an, der wenigstens vier Datenelemente enthält, gibt einen zweiten gepackten Quelldatenoperanden an, der wenigstens vier Datenelemente enthält, und gibt einen oder mehrere Zielspeicherorte an. Der Prozessor enthält außerdem eine Ausführungseinheit, die mit der Decodiereinheit gekoppelt ist. Die Ausführungseinheit speichert in Reaktion auf den Datenelement-Vergleichsbefehl wenigstens einen Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten. Der wenigstens eine Ergebnismaskenoperand enthält für jedes entsprechende Datenelement in einem des ersten und des zweiten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenelement. Jedes Maskenelement gibt an, ob das entsprechende Datenelement in dem einen des ersten und des zweiten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem anderen des ersten und des zweiten gepackten Quelldatenoperanden ist.
  • Das Beispiel 2 enthält den Prozessor des Beispiels 1, in dem die Ausführungseinheit in Reaktion auf den Befehl zwei Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten speichert. Die beiden Ergebnismaskenoperanden enthalten einen ersten Ergebnismaskenoperanden, der für jedes entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenelement enthält. Jedes Maskenelement des ersten Ergebnismaskenoperanden gibt an, ob das entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem zweiten gepackten Quelldatenoperanden ist. Ein zweiter Ergebnismaskenoperand enthält für jedes entsprechende Datenelement in dem zweiten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenelement. Jedes Maskenelement des zweiten Ergebnismaskenoperanden gibt an, ob das entsprechende Datenelement in dem zweiten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem ersten gepackten Quelldatenoperanden ist.
  • Das Beispiel 3 enthält den Prozessor des Beispiels 2, wobei der eine oder die mehreren Zielspeicherorte ein erstes Maskenregister und ein zweites Maskenregister umfassen und wobei die Ausführungseinheit in Reaktion auf den Befehl den ersten Ergebnismaskenoperanden in dem ersten Maskenregister speichert und den zweiten Ergebnismaskenoperanden in dem zweiten Maskenregister speichert.
  • Das Beispiel 4 enthält den Prozessor des Beispiels 2, wobei der eine oder die mehreren Zielspeicherorte ein einziges Maskenregister umfassen und wobei die Ausführungseinheit in Reaktion auf den Befehl den ersten Ergebnismaskenoperanden und den zweiten Ergebnismaskenoperanden in dem einzigen Maskenregister speichert.
  • Das Beispiel 5 enthält den Prozessor des Beispiels 4, wobei die Ausführungseinheit in Reaktion auf den Befehl den ersten Ergebnismaskenoperanden in einem niedrigstwertigen Abschnitt des einzigen Maskenregisters speichert und den zweiten Ergebnismaskenoperanden in einem Abschnitt des einzigen Maskenregisters speichert, der höherwertiger als der niedrigstwertige Abschnitt ist.
  • Das Beispiel 6 enthält den Prozessor des Beispiels 1, wobei die Ausführungseinheit in Reaktion auf den Befehl sowohl einen ersten Ergebnismaskenoperanden als auch einen zweiten Ergebnismaskenoperanden in einem Register für gepackte Daten speichert und wobei jedes Datenelement in dem Register für gepackte Daten sowohl ein Maskenelement des ersten Ergebnismaskenoperanden als auch ein Maskenelement des zweiten Ergebnismaskenoperanden aufweist.
  • Das Beispiel 7 enthält den Prozessor des Beispiels 1, wobei die Ausführungseinheit in Reaktion auf den Befehl einen einzigen Ergebnismaskenoperanden in einem einzigen Maskenregister speichert.
  • Das Beispiel 8 enthält den Prozessor des Beispiels 1, wobei die Ausführungseinheit in Reaktion auf den Befehl den wenigstens einen Ergebnismaskenoperanden in wenigstens einem Maskenregister speichert und wobei ein Befehlssatz des Prozessors maskierte Befehle für gepackte Daten enthält, die betriebsfähig sind, um das wenigstens eine Maskenregister als einen Speicherort für einen Quellmaskenoperanden anzugeben, der verwendet werden soll, um eine Operation für gepackte Daten zu maskieren.
  • Das Beispiel 9 enthält den Prozessor eines der Beispiele 1 bis 8, wobei die Ausführungseinheit in Reaktion auf den Befehl eine Anzahl von Ergebnismaskenbits in dem wenigstens einen Ergebnismaskenoperanden speichert, die nicht größer als eine Anzahl der Datenelemente in dem ersten und dem zweiten gepackten Quelldatenoperanden ist.
  • Das Beispiel 10 enthält den Prozessor eines der Beispiele 1 bis 8, wobei die Ausführungseinheit in Reaktion auf den Befehl den wenigstens einen Ergebnismaskenoperanden speichert, in dem jedes Maskenelement ein einziges Maskenbit enthält.
  • Das Beispiel 11 enthält den Prozessor eines der Beispiele 1 bis 8, wobei die Decodiereinheit den Befehl decodiert, der den ersten gepackten Quelldatenoperanden angibt, der wenigstens acht Datenelemente enthält, und den zweiten gepackten Quelldatenoperanden angibt, der wenigstens acht Datenelemente enthält.
  • Das Beispiel 12 enthält den Prozessor eines der Beispiele 1 bis 8, wobei die Decodiereinheit den Befehl decodiert, der den ersten gepackten Quelldatenoperanden angibt, der wenigstens 512 Bits enthält, und den zweiten gepackten Quelldatenoperanden angibt, der wenigstens 512 Bits enthält.
  • Das Beispiel 13 ist ein Verfahren in einem Prozessor, das das Empfangen eines Datenelement-Vergleichsbefehls enthält. Der Datenelement-Vergleichsbefehl gibt einen ersten gepackten Quelldatenoperanden an, der wenigstens vier Datenelemente enthält, gibt einen zweiten gepackten Quelldatenoperanden an, der wenigstens vier Datenelemente enthält, und gibt einen oder mehrere Zielspeicherorte an. Das Verfahren enthält außerdem das Speichern wenigstens eines Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten in Reaktion auf den Datenelement-Vergleichsbefehl. Der wenigstens eine Ergebnismaskenoperand enthält für jedes entsprechende Datenelement in einem des ersten und des zweiten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenelement. Jedes Maskenelement gibt an, ob das entsprechende Datenelement in dem einen des ersten und des zweiten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem anderen des ersten und des zweiten gepackten Quelldatenoperanden ist.
  • Das Beispiel 14 enthält das Verfahren des Beispiels 13, wobei das Speichern das Speichern eines ersten Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten enthält. Der erste Ergebnismaskenoperand enthält für jedes entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenelement. Jedes Maskenelement des ersten Ergebnismaskenoperanden gibt an, ob das entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem zweiten gepackten Quelldatenoperanden ist. Außerdem enthält das Speichern das Speichern eines zweiten Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten. Der zweite Ergebnismaskenoperand enthält für jedes entsprechende Datenelement in dem zweiten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenelement. Jedes Maskenelement des zweiten Ergebnismaskenoperanden gibt an, ob das entsprechende Datenelement in dem zweiten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem ersten gepackten Quelldatenoperanden ist.
  • Das Beispiel 15 enthält das Verfahren des Beispiels 14, wobei das Speichern des ersten Ergebnismaskenoperanden das Speichern des ersten Ergebnismaskenoperanden in einem ersten Maskenregister enthält und wobei das Speichern des zweiten Ergebnismaskenoperanden das Speichern des zweiten Ergebnismaskenoperanden in einem zweiten Maskenregister enthält.
  • Das Beispiel 16 enthält das Verfahren des Beispiels 14, wobei das Speichern des ersten Ergebnismaskenoperanden und das Speichern des zweiten Ergebnismaskenoperanden das Speichern sowohl des ersten als auch des zweiten Ergebnismaskenoperanden in einem einzigen Maskenregister enthält.
  • Das Beispiel 17 enthält das Verfahren des Beispiels 13, wobei das Speichern des wenigstens einen Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten das Speichern sowohl eines ersten Ergebnismaskenoperanden als auch eines zweiten Ergebnismaskenoperanden in einem gepackten Ergebnisdatenoperanden enthält.
  • Das Beispiel 18 enthält das Verfahren des Beispiels 13, wobei es ferner das Empfangen eines maskierten Befehls für gepackte Daten enthält, der den wenigstens einen Ergebnismaskenoperanden als einen Aussageoperanden angibt.
  • Das Beispiel 19 ist ein System, um Befehle zu verarbeiten, das eine Zusammenschaltung und einen mit der Zusammenschaltung gekoppelten Prozessor enthält. Der Prozessor empfängt einen Datenelement-Vergleichsbefehl. Der Befehl gibt einen ersten gepackten Quelldatenoperanden an, der wenigstens vier Datenelemente enthält, gibt einen zweiten gepackten Quelldatenoperanden an, der wenigstens vier Datenelemente enthält, und gibt einen oder mehrere Zielspeicherorte an. Der Prozessor speichert in Reaktion auf den Befehl wenigstens einen Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten. Der wenigstens eine Ergebnismaskenoperand enthält für jedes entsprechende Datenelement in einem des ersten und des zweiten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenbit. Jedes Maskenbit gibt an, ob das entsprechende Datenelement in dem einen des ersten und des zweiten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem anderen des ersten und des zweiten gepackten Quelldatenoperanden ist. Das System enthält außerdem einen dynamischen Schreib-Lese-Speicher (DRAM), der mit der Zusammenschaltung gekoppelt ist. Der DRAM speichert optional einen Arithmetikalgorithmus eines dünnbesetzten Vektors mit einem dünnbesetzten Vektor. Der Arithmetikalgorithmus eines dünnbesetzten Vektors mit einem dünnbesetzten Vektor enthält optional einen maskierten Datenelement-Zusammenschlussbefehl, der den wenigstens einen Ergebnismaskenoperanden als einen Quelloperanden angibt, um eine Datenelement-Zusammenschlussoperation zu maskieren.
  • Das Beispiel 20 enthält das System des Beispiels 19, wobei die Ausführungseinheit in Reaktion auf den Befehl zwei Ergebnismaskenoperanden speichert, wobei jeder einem anderen der gepackten Quelldatenoperanden entspricht, wobei die beiden Ergebnismaskenoperanden in wenigstens einem Maskenregister gespeichert werden sollen.
  • Das Beispiel 21 ist ein Herstellungsartikel, der ein nicht transitorisches maschinenlesbares Speichermedium enthält. Das nicht transitorische maschinenlesbare Speichermedium speichert einen Datenelement-Vergleichsbefehl. Der Befehl gibt einen ersten gepackten Quelldatenoperanden an, der wenigstens vier Datenelemente enthält, gibt einen zweiten gepackten Quelldatenoperanden an, der wenigstens vier Datenelemente enthält, und gibt einen oder mehrere Zielspeicherorte an. Der Befehl veranlasst, falls er durch eine Maschine ausgeführt wird, die Maschine, die Operationen auszuführen, die das Speichern eines ersten Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten enthalten. Der erste Ergebnismaskenoperand enthält für jedes entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenbit. Jedes Maskenbit gibt an, ob das entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem zweiten gepackten Quelldatenoperanden ist.
  • Das Beispiel 22 enthält den Herstellungsartikel des Beispiels 21, wobei der Befehl, falls er durch eine Maschine ausgeführt wird, die Maschine veranlasst, die Operationen auszuführen, die das Speichern eines zweiten Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten enthalten. Außerdem umfassen optional der eine oder die mehreren Zielspeicherorte wenigstens ein Maskenregister. Außerdem weisen optional der erste und der zweite Ergebnismaskenoperand zusammen nicht mehr Maskenbits als eine Anzahl der Datenelemente in dem ersten und dem zweiten gepackten Quelldatenoperanden auf.
  • Das Beispiel 23 enthält den Prozessor eines der Beispiele 1 bis 8, wobei er ferner eine optionale Verzweigungsvorhersageeinheit, um Verzweigungen vorherzusagen, und eine optionale Befehls-Prefetch-Einheit, die mit der Verzweigungsvorhersageeinheit gekoppelt ist, enthält, wobei die Befehls-Prefetch-Einheit die Befehle, die den Datenelement-Vergleichsbefehl enthalten, im Voraus holt. Der Prozessor kann außerdem optional einen optionalen Befehls-Cache der Ebene 1 (L1-Befehls-Cache), der mit der Befehls-Prefetch-Einheit gekoppelt ist, wobei der LI-Befehls-Cache Befehle speichert, einen optionalen LI-Daten-Cache, um Daten zu speichern, und einen optionalen Cache der Ebene 2 (L2-Cache), um Daten und Befehle zu speichern, enthalten. Der Prozessor kann außerdem optional eine Befehlsholeinheit enthalten, die mit der Decodiereinheit, dem L1-Befehls-Cache und dem L2-Cache gekoppelt ist, um den Datenelement-Vergleichsbefehl in einigen Fällen von einem des L1-Befehls-Caches und des L2-Caches zu holen und um den Datenelement-Vergleichsbefehl der Decodiereinheit bereitzustellen. Der Prozessor kann außerdem optional eine Registerumbenennungseinheit, um Register umzubenennen, einen optionalen Scheduler, um eine oder mehrere Operationen, die von dem Datenelement-Vergleichsbefehl decodiert worden sind, für die Ausführung zu planen, und eine optionale Einspeichereinheit, um die Ausführungsergebnisse des Datenelement-Vergleichsbefehls einzuspeichern, enthalten.
  • Das Beispiel 24 enthält ein System auf dem Chip, das wenigstens eine Zusammenschaltung, den Prozessor eines der Beispiele 1 bis 8, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, eine optionale Graphikverarbeitungseinheit (GPU), die mit der wenigstens einen Zusammenschaltung gekoppelt ist, einen optionalen digitalen Signalprozessor (DSP), der mit der wenigstens einen Zusammenschaltung gekoppelt ist, einen optionalen Anzeige-Controller, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, einen optionalen Speicher-Controller, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, ein optionales drahtloses Modem, das mit der wenigstens einen Zusammenschaltung gekoppelt ist, einen optionalen Bildsignalprozessor, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, einen optionalen mit dem universellen Bus (USB) 3.0 kompatiblen Controller, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, einen optionalen mit Bluetooth 4.1 kompatiblen Controller, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, und einen optionalen drahtlosen Sender/Empfänger-Controller, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, enthält.
  • Das Beispiel 25 ist ein Prozessor oder eine andere Vorrichtung, um das Verfahren nach einem der Beispiele 13 bis 18 auszuführen oder um betriebsfähig zu sein, um das Verfahren eines der Beispiele 13 bis 18 auszuführen.
  • Das Beispiel 26 ist ein Prozessor oder eine andere Vorrichtung, die Mittel zum Ausführen des Verfahrens eines der Beispiele 13 bis 18 enthält.
  • Das Beispiel 27 ist ein Herstellungsartikel, der optional ein nicht transitorisches maschinenlesbares Medium enthält, das optional einen Befehl speichert oder anderweitig bereitstellt, der, falls und/oder wenn er durch einen Prozessor, ein Computersystem, eine elektronische Vorrichtung oder eine andere Maschine ausgeführt wird, betriebsfähig ist, um die Maschine zu veranlassen, das Verfahren eines der Beispiele 13 bis 18 auszuführen.
  • Das Beispiel 28 ist ein Prozessor oder eine andere Vorrichtung, wie er bzw. sie im Wesentlichen hier beschrieben ist.
  • Das Beispiel 29 ist ein Prozessor oder eine andere Vorrichtung, der bzw. die betriebsfähig ist, um irgendein Verfahren auszuführen, wie es im Wesentlichen hier beschrieben ist.
  • Das Beispiel 30 ist ein Prozessor oder eine andere Vorrichtung, um irgendeinen Datenelement-Vergleichsbefehl, wie er im Wesentlichen hier beschrieben ist, auszuführen (der bzw. die z. B. Komponenten aufweist, um irgendeinen Datenelement-Vergleichsbefehl, wie er im Wesentlichen hier beschrieben ist, auszuführen, oder die betriebsfähig sind, um irgendeinen Datenelement-Vergleichsbefehl, wie er im Wesentlichen hier beschrieben ist, auszuführen).
  • Das Beispiel 31 ist ein Computersystem oder eine andere elektronische Vorrichtung, die einen Prozessor enthält, der eine Decodiereinheit aufweist, um die Befehle eines ersten Befehlssatzes zu decodieren. Der Prozessor weist außerdem eine oder mehrere Ausführungseinheiten auf. Die elektronische Vorrichtung enthält außerdem eine Speichervorrichtung, die mit dem Prozessor gekoppelt ist. Die Speichervorrichtung speichert einen ersten Befehl, der irgendeiner der Datenelement-Vergleichsbefehle, wie sie im Wesentlichen hier offenbart sind, sein kann, und der aus einem zweiten Befehlssatz stammt. Die Speichervorrichtung speichert außerdem Befehle, um den ersten Befehl in einen oder mehrere Befehle des ersten Befehlssatzes umzusetzen. Der eine oder die mehreren Befehle des ersten Befehlssatzes veranlassen, wenn sie durch den Prozessor ausgeführt werden, den Prozessor, irgendeines der Ergebnisse des hier offenbarten ersten Befehls zu speichern.

Claims (25)

  1. Prozessor, der Folgendes umfasst: eine Decodiereinheit, um einen Datenelement-Vergleichsbefehl zu decodieren, wobei der Datenelement-Vergleichsbefehl einen ersten gepackten Quelldatenoperanden angibt, der wenigstens vier Datenelemente enthält, einen zweiten gepackten Quelldatenoperanden angibt, der wenigstens vier Datenelemente enthält, und einen oder mehrere Zielspeicherorte angibt; und eine Ausführungseinheit, die mit der Decodiereinheit gekoppelt ist, wobei die Ausführungseinheit in Reaktion auf den Datenelement-Vergleichsbefehl wenigstens einen Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten speichert, wobei der wenigstens eine Ergebnismaskenoperand für jedes entsprechende Datenelement in einem des ersten und des zweiten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenelement enthält, wobei jedes Maskenelement angibt, ob das entsprechende Datenelement in dem einen des ersten und des zweiten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem anderen des ersten und des zweiten gepackten Quelldatenoperanden ist.
  2. Prozessor nach Anspruch 1, wobei die Ausführungseinheit in Reaktion auf den Befehl zwei Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten speichert, wobei die beiden Ergebnismaskenoperanden Folgendes enthalten: einen ersten Ergebnismaskenoperanden, der für jedes entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenelement enthält, wobei jedes Maskenelement des ersten Ergebnismaskenoperanden angibt, ob das entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem zweiten gepackten Quelldatenoperanden ist; und einen zweiten Ergebnismaskenoperanden, der für jedes entsprechende Datenelement in dem zweiten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenelement enthält, wobei jedes Maskenelement des zweiten Ergebnismaskenoperanden angibt, ob das entsprechende Datenelement in dem zweiten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem ersten gepackten Quelldatenoperanden ist.
  3. Prozessor nach Anspruch 2, wobei der eine oder die mehreren Zielspeicherorte ein erstes Maskenregister und ein zweites Maskenregister umfassen und wobei die Ausführungseinheit in Reaktion auf den Befehl den ersten Ergebnismaskenoperanden in dem ersten Maskenregister speichert und den zweiten Ergebnismaskenoperanden in dem zweiten Maskenregister speichert.
  4. Prozessor nach Anspruch 2, wobei der eine oder die mehreren Zielspeicherorte ein einziges Maskenregister umfassen und wobei die Ausführungseinheit in Reaktion auf den Befehl den ersten Ergebnismaskenoperanden und den zweiten Ergebnismaskenoperanden in dem einzigen Maskenregister speichert.
  5. Prozessor nach Anspruch 4, wobei die Ausführungseinheit in Reaktion auf den Befehl den ersten Ergebnismaskenoperanden in einem niedrigstwertigen Abschnitt des einzigen Maskenregisters speichert und den zweiten Ergebnismaskenoperanden in einem Abschnitt des einzigen Maskenregisters speichert, der höherwertiger als der niedrigstwertige Abschnitt ist.
  6. Prozessor nach Anspruch 1, wobei die Ausführungseinheit in Reaktion auf den Befehl sowohl einen ersten Ergebnismaskenoperanden als auch einen zweiten Ergebnismaskenoperanden in einem Register für gepackte Daten speichert und wobei jedes Datenelement in dem Register für gepackte Daten sowohl ein Maskenelement des ersten Ergebnismaskenoperanden als auch ein Maskenelement des zweiten Ergebnismaskenoperanden aufweist.
  7. Prozessor nach Anspruch 1, wobei die Ausführungseinheit in Reaktion auf den Befehl einen einzigen Ergebnismaskenoperanden in einem einzigen Maskenregister speichert.
  8. Prozessor nach Anspruch 1, wobei die Ausführungseinheit in Reaktion auf den Befehl den wenigstens einen Ergebnismaskenoperanden in wenigstens einem Maskenregister speichert und wobei ein Befehlssatz des Prozessors maskierte Befehle für gepackte Daten enthält, die betriebsfähig sind, um das wenigstens eine Maskenregister als einen Speicherort für einen Quellmaskenoperanden anzugeben, der verwendet werden soll, um eine Operation für gepackte Daten zu maskieren.
  9. Prozessor nach einem der Ansprüche 1 bis 8, wobei die Ausführungseinheit in Reaktion auf den Befehl eine Anzahl von Ergebnismaskenbits in dem wenigstens einen Ergebnismaskenoperanden speichert, die nicht größer als eine Anzahl der Datenelemente in dem ersten und dem zweiten gepackten Quelldatenoperanden ist.
  10. Prozessor nach einem der Ansprüche 1 bis 8, wobei die Ausführungseinheit in Reaktion auf den Befehl den wenigstens einen Ergebnismaskenoperanden speichert, in dem jedes Maskenelement ein einziges Maskenbit umfasst.
  11. Prozessor nach einem der Ansprüche 1 bis 8, wobei die Decodiereinheit den Befehl decodiert, der den ersten gepackten Quelldatenoperanden angibt, der wenigstens acht Datenelemente enthält, und den zweiten gepackten Quelldatenoperanden angibt, der wenigstens acht Datenelemente enthält.
  12. Prozessor nach einem der Ansprüche 1 bis 8, wobei die Decodiereinheit den Befehl decodiert, der den ersten gepackten Quelldatenoperanden angibt, der wenigstens 512 Bits enthält, und den zweiten gepackten Quelldatenoperanden angibt, der wenigstens 512 Bits enthält.
  13. Verfahren in einem Prozessor, das Folgendes umfasst: Empfangen eines Datenelement-Vergleichsbefehls, wobei der Datenelement-Vergleichsbefehl einen ersten gepackten Quelldatenoperanden angibt, der wenigstens vier Datenelemente enthält, einen zweiten gepackten Quelldatenoperanden angibt, der wenigstens vier Datenelemente enthält, und einen oder mehrere Zielspeicherorte angibt; und Speichern wenigstens eines Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten in Reaktion auf den Datenelement-Vergleichsbefehl, wobei der wenigstens eine Ergebnismaskenoperand für jedes entsprechende Datenelement in einem des ersten und des zweiten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenelement enthält, wobei jedes Maskenelement angibt, ob das entsprechende Datenelement in dem einen des ersten und des zweiten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem anderen des ersten und des zweiten gepackten Quelldatenoperanden ist.
  14. Verfahren nach Anspruch 13, wobei das Speichern Folgendes umfasst: Speichern eines ersten Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten, wobei der erste Ergebnismaskenoperand für jedes entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenelement enthält, wobei jedes Maskenelement des ersten Ergebnismaskenoperanden angibt, ob das entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem zweiten gepackten Quelldatenoperanden ist; und Speichern eines zweiten Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten, wobei der zweite Ergebnismaskenoperand für jedes entsprechende Datenelement in dem zweiten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenelement enthält, wobei jedes Maskenelement des zweiten Ergebnismaskenoperanden angibt, ob das entsprechende Datenelement in dem zweiten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem ersten gepackten Quelldatenoperanden ist.
  15. Verfahren nach Anspruch 14, wobei das Speichern des ersten Ergebnismaskenoperanden das Speichern des ersten Ergebnismaskenoperanden in einem ersten Maskenregister umfasst und wobei das Speichern des zweiten Ergebnismaskenoperanden das Speichern des zweiten Ergebnismaskenoperanden in einem zweiten Maskenregister umfasst.
  16. Verfahren nach Anspruch 14, wobei das Speichern des ersten Ergebnismaskenoperanden und das Speichern des zweiten Ergebnismaskenoperanden das Speichern sowohl des ersten als auch des zweiten Ergebnismaskenoperanden in einem einzigen Maskenregister umfasst.
  17. Verfahren nach Anspruch 13, wobei das Speichern des wenigstens einen Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten das Speichern sowohl eines ersten Ergebnismaskenoperanden als auch eines zweiten Ergebnismaskenoperanden in einem gepackten Ergebnisdatenoperanden umfasst.
  18. Verfahren nach Anspruch 13, das ferner das Empfangen eines maskierten Befehls für gepackte Daten umfasst, der den wenigstens einen Ergebnismaskenoperanden als einen Aussageoperanden angibt.
  19. System, um Befehle zu verarbeiten, das Folgendes umfasst: eine Zusammenschaltung; einen mit der Zusammenschaltung gekoppelten Prozessor, wobei der Prozessor einen Datenelement-Vergleichsbefehl empfängt, wobei der Befehl einen ersten gepackten Quelldatenoperanden angibt, der wenigstens vier Datenelemente enthält, einen zweiten gepackten Quelldatenoperanden angibt, der wenigstens vier Datenelemente enthält, und einen oder mehrere Zielspeicherorte angibt, wobei der Prozessor in Reaktion auf den Befehl wenigstens einen Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten speichert, wobei der wenigstens eine Ergebnismaskenoperand für jedes entsprechende Datenelement in einem des ersten und des zweiten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenbit enthält, wobei jedes Maskenbit angibt, ob das entsprechende Datenelement in dem einen des ersten und des zweiten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem anderen des ersten und des zweiten gepackten Quelldatenoperanden ist; und einen dynamischen Schreib-Lese-Speicher (DRAM), der mit der Zusammenschaltung gekoppelt ist, wobei der DRAM einen Arithmetikalgorithmus eines dünnbesetzten Vektors mit einem dünnbesetzten Vektor speichert, wobei der Arithmetikalgorithmus eines dünnbesetzten Vektors mit einem dünnbesetzten Vektor einen maskierten Datenelement-Zusammenschlussbefehl enthält, der den wenigstens einen Ergebnismaskenoperanden als einen Quelloperanden angibt, um eine Datenelement-Zusammenschlussoperation zu maskieren.
  20. System nach Anspruch 19, wobei die Ausführungseinheit in Reaktion auf den Befehl zwei Ergebnismaskenoperanden speichert, wobei jeder einem anderen der gepackten Quelldatenoperanden entspricht, wobei die beiden Ergebnismaskenoperanden in wenigstens einem Maskenregister gespeichert werden sollen.
  21. Herstellungsartikel, der ein nicht transitorisches maschinenlesbares Speichermedium umfasst, wobei das nicht transitorische maschinenlesbare Speichermedium einen Datenelement-Vergleichsbefehl speichert, wobei der Befehl einen ersten gepackten Quelldatenoperanden angibt, der wenigstens vier Datenelemente enthält, einen zweiten gepackten Quelldatenoperanden angibt, der wenigstens vier Datenelemente enthält, und einen oder mehrere Zielspeicherorte angibt, wobei der Befehl, falls er durch eine Maschine ausgeführt wird, die Maschine veranlasst, die Operationen auszuführen, die Folgendes umfassen: Speichern eines ersten Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten, wobei der erste Ergebnismaskenoperand für jedes entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden an derselben relativen Position ein anderes Maskenbit enthält, wobei jedes Maskenbit angibt, ob das entsprechende Datenelement in dem ersten gepackten Quelldatenoperanden gleich irgendeinem der Datenelemente in dem zweiten gepackten Quelldatenoperanden ist.
  22. Herstellungsartikel nach Anspruch 21, wobei der Befehl, falls er durch eine Maschine ausgeführt wird, die Maschine veranlasst, die Operationen auszuführen, die das Speichern eines zweiten Ergebnismaskenoperanden an dem einen oder den mehreren Zielspeicherorten umfassen, und wobei der eine oder die mehreren Zielspeicherorte wenigstens ein Maskenregister umfassen und wobei der erste und der zweite Ergebnismaskenoperand zusammen nicht mehr Maskenbits als eine Anzahl der Datenelemente in dem ersten und dem zweiten gepackten Quelldatenoperanden aufweisen.
  23. Vorrichtung, die Mittel zum Ausführen des Verfahrens nach einem der Ansprüche 13 bis 18 umfasst.
  24. Herstellungsartikel, der ein maschinenlesbares Medium umfasst, das einen Befehl speichert, der, falls er durch eine Maschine ausgeführt wird, betriebsfähig ist, um die Maschine zu veranlassen, das Verfahren nach einem der Ansprüche 13 bis 18 auszuführen.
  25. Elektronische Vorrichtung, die eine Zusammenschaltung, den Prozessor nach einem der Ansprüche 1 bis 8, der mit der Zusammenschaltung gekoppelt ist, und einen dynamischen Schreib-Lese-Speicher (DRAM), der mit der Zusammenschaltung gekoppelt ist, umfasst.
DE112016004351.1T 2015-09-26 2016-08-24 Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich Pending DE112016004351T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/866,921 US10423411B2 (en) 2015-09-26 2015-09-26 Data element comparison processors, methods, systems, and instructions
US14/866,921 2015-09-26
PCT/US2016/048370 WO2017052917A1 (en) 2015-09-26 2016-08-24 Data element comparison processors, methods, systems, and instructions

Publications (1)

Publication Number Publication Date
DE112016004351T5 true DE112016004351T5 (de) 2018-06-07

Family

ID=58387419

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112016004351.1T Pending DE112016004351T5 (de) 2015-09-26 2016-08-24 Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich

Country Status (5)

Country Link
US (2) US10423411B2 (de)
CN (1) CN107924308B (de)
DE (1) DE112016004351T5 (de)
TW (2) TWI769645B (de)
WO (1) WO2017052917A1 (de)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10423411B2 (en) 2015-09-26 2019-09-24 Intel Corporation Data element comparison processors, methods, systems, and instructions
US10565207B2 (en) * 2016-04-12 2020-02-18 Hsilin Huang Method, system and program product for mask-based compression of a sparse matrix
US10726514B2 (en) 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
CN109461113B (zh) * 2018-10-11 2021-07-16 中国人民解放军国防科技大学 一种面向数据结构的图形处理器数据预取方法及装置
US12008475B2 (en) 2018-11-14 2024-06-11 Nvidia Corporation Transposed sparse matrix multiply by dense matrix for neural network training
CN113366454A (zh) 2019-03-15 2021-09-07 英特尔公司 用于图形操作的多片架构
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
CN112534405A (zh) * 2019-03-15 2021-03-19 英特尔公司 用于脉动阵列上的块稀疏操作的架构
US10817297B2 (en) * 2019-03-30 2020-10-27 Intel Corporation Method and apparatus for vector-matrix comparison
CN110147307B (zh) * 2019-05-15 2021-10-26 东华大学 一种嵌入式系统仿真ram、rom结果对比系统

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5341500A (en) 1991-04-02 1994-08-23 Motorola, Inc. Data processor with combined static and dynamic masking of operand for breakpoint operation
US5651121A (en) 1992-12-18 1997-07-22 Xerox Corporation Using mask operand obtained from composite operand to perform logic operation in parallel with composite operand
US6036350A (en) 1995-12-20 2000-03-14 Intel Corporation Method of sorting signed numbers and solving absolute differences using packed instructions
US20020002666A1 (en) 1998-10-12 2002-01-03 Carole Dulong Conditional operand selection using mask operations
US20080071851A1 (en) 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US7958181B2 (en) 2006-09-21 2011-06-07 Intel Corporation Method and apparatus for performing logical compare operations
US9069547B2 (en) 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
US9747105B2 (en) * 2009-12-17 2017-08-29 Intel Corporation Method and apparatus for performing a shift and exclusive or operation in a single instruction
US8972698B2 (en) 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
WO2013095515A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Packed data operation mask register arithmetic combination processors, methods, systems, and instructions
US20130326196A1 (en) * 2011-12-23 2013-12-05 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for performing vector packed unary decoding using masks
US20140089634A1 (en) 2011-12-23 2014-03-27 Victor W. Lee Apparatus and method for detecting identical elements within a vector register
WO2013095610A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for shuffling floating point or integer values
WO2013101124A1 (en) 2011-12-29 2013-07-04 Intel Corporation Packed data operation mask comparison processors, methods, systems, and instructions
CN104025067B (zh) 2011-12-29 2017-12-26 英特尔公司 具有由向量冲突指令和置换指令共享的全连接互连的处理器
WO2013101234A1 (en) 2011-12-30 2013-07-04 Intel Corporation Unique packed data element identification processors, methods, systems, and instructions
CN104011652B (zh) * 2011-12-30 2017-10-27 英特尔公司 打包选择处理器、方法、系统和指令
US9569211B2 (en) * 2012-08-03 2017-02-14 International Business Machines Corporation Predication in a vector processor
US9842046B2 (en) 2012-09-28 2017-12-12 Intel Corporation Processing memory access instructions that have duplicate memory indices
US9411584B2 (en) 2012-12-29 2016-08-09 Intel Corporation Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality
US20140281418A1 (en) * 2013-03-14 2014-09-18 Shihjong J. Kuo Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions
US10191743B2 (en) 2013-12-29 2019-01-29 Intel Corporation Versatile packed data comparison processors, methods, systems, and instructions
US11544214B2 (en) * 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
US10275247B2 (en) 2015-03-28 2019-04-30 Intel Corporation Apparatuses and methods to accelerate vector multiplication of vector elements having matching indices
US10423411B2 (en) 2015-09-26 2019-09-24 Intel Corporation Data element comparison processors, methods, systems, and instructions

Also Published As

Publication number Publication date
TW202132977A (zh) 2021-09-01
CN107924308B (zh) 2022-08-26
US20170090924A1 (en) 2017-03-30
US20200089494A1 (en) 2020-03-19
CN107924308A (zh) 2018-04-17
TWI769645B (zh) 2022-07-01
US11113053B2 (en) 2021-09-07
TWI715618B (zh) 2021-01-11
US10423411B2 (en) 2019-09-24
TW201723805A (zh) 2017-07-01
WO2017052917A1 (en) 2017-03-30

Similar Documents

Publication Publication Date Title
DE102015007571B4 (de) Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren, -verfahren, -systeme und -befehle
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE112016004348T5 (de) Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE112017003336T5 (de) Vorrichtungen, verfahren und systeme zum elementsortieren von vektoren
DE112013005236T5 (de) Verfahren und Vorrichtung für Integralbild-Berechnungsbefehle
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE102014003644A1 (de) Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich
DE112013004798T5 (de) Befehlssatz zur Nachrichtenplanung des SHA256-Algorithmus
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102018124944A1 (de) Vorrichtung und Verfahren zum Umsetzen eines Gleitkommawertes von halber Genauigkeit in einfache Genauigkeit
DE112013003713T5 (de) Befehlssatz für SKEIN256 SHA3-Algorithmus auf einem 128-Bit-Prozessor
DE112017001709T5 (de) Prozessoren, verfahren, systeme, und instruktionen zum partitionieren von quellpackdaten in spuren
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
R130 Divisional application to

Ref document number: 112016007678

Country of ref document: DE