DE102015002215A1 - Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle - Google Patents

Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle Download PDF

Info

Publication number
DE102015002215A1
DE102015002215A1 DE102015002215.6A DE102015002215A DE102015002215A1 DE 102015002215 A1 DE102015002215 A1 DE 102015002215A1 DE 102015002215 A DE102015002215 A DE 102015002215A DE 102015002215 A1 DE102015002215 A1 DE 102015002215A1
Authority
DE
Germany
Prior art keywords
data
packed
instruction
processor
command
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102015002215.6A
Other languages
English (en)
Inventor
Shay Gueron
Vlad Krasnov
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 DE102015002215A1 publication Critical patent/DE102015002215A1/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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/06Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
    • G06F7/08Sorting, i.e. grouping record carriers in numerical or other ordered sequence according to the classification of at least some of the information they carry
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/24Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/36Combined merging and sorting
    • 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/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/30098Register arrangements
    • 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/30105Register structure
    • 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
    • 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/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders

Landscapes

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

Abstract

Ein Prozessor eines Aspekts umfasst Gepackte-Daten-Register und eine Entschlüsselungseinheit zum Entschlüsseln eines Befehls. Der Befehl kann erste gepackte Quellendaten angeben, die zumindest vier Datenelemente umfassen, zweite gepackte Quellendaten angeben, die zumindest vier Datenelemente umfassen und einen Zielspeicherort angeben. Eine Ausführungseinheit ist an die Gepackte-Daten-Register und die Entschlüsselungseinheit gekoppelt. Die Ausführungseinheit speichert gepackte Ergebnisdaten als Antwort auf den Befehl in dem Zielspeicherort. Die gepackten Ergebnisdaten können zumindest vier Indizes umfassen, die entsprechende Datenelementpositionen in den ersten und zweiten gepackten Quellendaten identifizieren können. Die Indizes können in Positionen in den gepackten Ergebnisdaten gespeichert sein, die eine sortierte Reihenfolge von entsprechenden Datenelementen in den ersten und zweiten gepackten Quellendaten darstellen sollen.

Description

  • HINTERGRUND
  • Fachgebiet
  • Hierin beschriebene Ausführungsformen betreffen im Allgemeinen Prozessoren. Insbesondere betreffen hierin beschriebene Ausführungsformen ein Sortieren von Dateien in Prozessoren.
  • Stand der Technik
  • Datensortiervorgänge werden in Computer, Server, Datenzentren, Sortierungsnetzwerken und dergleichen sehr häufig verwendet. Beispielsweise werden Sortiervorgänge häufig in Tabellen, Datenbanken, Structured-Query-Language-(SQL)Datenbanken oder -Server, Datenzentren, Hochleistungsberechnungen (HPC), Apache Hadoop Software-Framework, Bildverarbeitung (z. B. für Median-Filter, Gestenerkennung etc.) und neuralen Netzwerken, um nur einige Beispiele zu nennen, verwendet. Sortiervorgänge können, insbesondere wenn große Datensätze sortiert werden, rechnerintensiv sein und können dazu tendieren, das allgemeine Leistungsverhalten zu beeinflussen.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Die Erfindung kann unter Bezugnahme auf die folgende Beschreibung und die beigelegten Zeichnungen, die verwendet werden, um die Ausführungsformen darzustellen, am besten verstanden werden. In den Zeichnungen ist/sind:
  • 1 ein Blockschaltbild einer Ausführungsform eines Prozessors, der ausgelegt ist, eine Ausführungsform eines Sortierungsbeschleunigungsbefehls durchzuführen.
  • 2 ein Blockschaltbild einer Ausführungsform eines Verfahrens zum Durchführen einer Ausführungsform eines Einzelquellenindexsortierungsbefehls.
  • 3 ein Blockschaltbild einer Ausführungsform eines Einzelquellenindexsortierungsvorgangs.
  • 4 ein Blockschaltbild einer Ausführungsform eines Einzelquellenindex- und Datenelementsortierungsvorgangs.
  • 5 ein Blockflussdiagramm einer Ausführungsform eines Verfahrens zum Durchführen einer Ausführungsform eines Zweiquellenindexsortierungsvorgangs.
  • 6 ein Blockschaltbild einer Ausführungsform eines Zweiquellenindexsortierungsbefehls für eine kleinste Hälfte von Datenelementen.
  • 7 ein Blockschaltbild einer Ausführungsform eines Zweiquellenindexsortierungsbefehls für eine größte Hälfte von Datenelementen
  • 8 ein Blockschaltbild einer Ausführungsform eines unsortierten Zweiquellenindexsortierungsbefehls für eine kleinste Hälfte von Datenelementen
  • 9 ein Blockschaltbild einer Ausführungsform eines Zweiquellenindex- und Datensortierungsvorgangs für eine kleinste Hälfte von Datenelementen
  • 10 ein Blockschaltbild einer Ausführungsform eines Zweiquellenindexsortierungsvorgangs mit Maske für eine kleinste Hälfte von Datenelementen
  • 11 ein Blockschaltbild einer Ausführungsform eines Zweiquellenindexsortierungsvorgangs mit Maske für eine größte Hälfte von Datenelementen
  • 12 ein Blockschaltbild einer Ausführungsform eines unsortierten Zweiquellenindexsortierungsvorgangs mit Maske für eine kleinste Hälfte von Datenelementen
  • 13 ein Blockschaltbild einer Ausführungsform eines Zweiquellenindex- und Datensortierungsvorgangs für eine kleinste Hälfte von Datenelementen
  • 14 ein Blockschaltbild einer Ausführungsform eines geeigneten Satzes von Gepackte-Daten-Registern.
  • 15A15B Blockschaltbilder, die ein generisches vektorfreundliches Befehlsformat und Befehlsmuster davon gemäß Ausführungsformen der Erfindung darstellen.
  • 16A ein Blockschaltbild, das ein beispielhaftes spezielles vektorfreundliches Befehlsformat gemäß Ausführungsformen der Erfindung darstellt.
  • 16B ein Blockschaltbild, das Felder eines speziellen vektorfreundlichen Befehlsformats, die ein ganzes Opcode-Feld ausmachen, gemäß einer Ausführungsform der Erfindung darstellt.
  • 16C ein Blockschaltbild, das Felder eines speziellen vektorfreundlichen Befehlsformats, die ein Registerindexfeld ausmachen, gemäß einer Ausführungsform der Erfindung darstellt.
  • 16D ein Blockschaltbild, das Felder eines speziellen vektorfreundlichen Befehlsformats, die ein Vergrößerungsvorgangsfeld ausmachen, gemäß einer Ausführungsform der Erfindung darstellt.
  • 17 ein Blockschaltbild einer Ausführungsform einer Registerarchitektur.
  • 18A ein Blockschaltbild, das eine Ausführungsform einer Pipeline in Reihenfolge und eine Ausführungsform einer Registerumbenennungs-Ausgabe/-Ausführungspipeline außerhalb der Reihenfolge darstellt.
  • 18B ein Blockschaltbild einer Ausführungsform eines Prozessorkerns, einschließlich einer Vorderendenheit, die an eine Ausführungsengineeinheit gekoppelt ist und die beide an eine Speichereinheit gekoppelt sind.
  • 19A ein Blockschaltbild einer Ausführungsform eines einzigen Prozessorkerns zusammen mit dessen Verbindung mit dem Verbindungsnetzwerk auf dem Nacktchip und mit dessen lokalem Teilsatz des Level-2-(L2)Cache.
  • 19B ein Blockschaltbild einer Ausführungsform einer vergrößerten Ansicht eines Teils des Prozessorkerns aus 19A.
  • 20 ein Blockschaltbild einer Ausführungsform eines Prozessors, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuereinheit aufweisen kann und integrierte Grafiken aufweisen kann.
  • 21 ein Blockschaltbild einer ersten Ausführungsform einer Computerarchitektur.
  • 22 ein Blockschaltbild einer zweiten Ausführungsform einer Computerarchitektur.
  • 23 ein Blockschaltbild einer dritten Ausführungsform einer Computerarchitektur.
  • 24 ein Blockschaltbild einer vierten Ausführungsform einer Computerarchitektur.
  • 25 ein Blockschaltbild der Verwendung eines Softwarebefehlskonvertierers zum Konvertieren von binären Befehlen in einem Quellenbefehlssatz zu binären Befehlen in einem Zielbefehlssatz, gemäß Ausführungsformen der Erfindung.
  • DETAILLIERTE BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
  • Hierin offenbart sind Sortierungsbeschleunigungsbefehle, Prozessoren zum Ausführen der Befehle, Verfahren, die von den Prozessoren durchgeführt werden, wenn die Befehle verarbeitet oder ausgeführt werden und Systeme, die einen oder mehrere Prozessoren umfassen, um die Befehle zu verarbeiten oder auszuführen. In der folgenden Beschreibung sind mehrere spezielle Details dargelegt (z. B. spezielle Befehlsvorgänge, gepackte Datenformate, Prozessorkonfigurationen, mikroarchitektonische Details, Vorgangssequenzen etc.). Jedoch können Ausführungsformen auch ohne diese speziellen Details umgesetzt werden. In anderen Fällen wurden bekannte Schaltungen, Strukturen und Verfahren nicht detailgenau dargestellt, um das Verständnis der Beschreibung nicht zu beeinträchtigen.
  • 1 ist ein Blockschaltbild einer Ausführungsform eines Prozessors 100, der ausgelegt ist, eine Ausführungsform eines Sortierungsbeschleunigungsbefehls 102 durchzuführen. In manchen Ausführungsformen kann der Prozessor ein Allzweckprozessor (z. B. von der Art, wie sie oft in Desktops, Laptops oder anderen Computern verwendet wird) sein. Alternativ dazu kann der Prozessor ein Spezialprozessor sein. Beispiele für Spezialprozessoren umfassen, ohne darauf beschränkt zu sein, Netzwerkprozessoren, Kommunikationsprozessoren, Grafikprozessoren, kryptografische Prozessoren, Coprozessoren, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs) und Steuereinheiten (z. B. Mikrosteuereinheiten). Der Prozessor kann jeder aus verschiedenen komplexen Befehlssatzberechnungs-(CISC)Prozessoren, reduzierten Befehlssatzberechnungs-(RISC)Prozessoren, Prozessoren mit sehr langem Befehlswort (VLIW), Hybriden daraus, ein anderer Typ sein oder kann eine Kombination aus solchen verschiedenen Prozessoren (z. B. in verschiedenen Kernen) aufweisen.
  • Während des Betriebs kann der Prozessor 100 die Ausführungsform des Sortierungsbeschleunigungsbefehls 102 empfangen. Beispielsweise kann der Befehl von einer Befehlsaufrufeinheit, einer Befehlswarteschlange oder dergleichen empfangen werden. Der Sortierungsbeschleunigungsbefehl kann einen Makrobefehl, einen Assembliersprachenbefehl, einen Maschinencodebefehl oder einen Befehl oder ein Steuersignal eines Befehlssatzes des Prozessors darstellen. In manchen Ausführungsformen kann der Sortierungsbeschleunigungsbefehl gepackte Quellendaten 110 explizit angeben (z. B. durch ein oder mehrere Felder oder Bit-Sätzen) oder anderweitig darstellen (z. B. bedingungslos darstellen etc.) und kann ein Ziel angeben oder anderweitig darstellen (z. B. einen Zielspeicherort), wo gepackte Ergebnisdaten 114 zu speichern sind. In manchen Ausführungsformen kann der Befehl gegebenenfalls zweite gepackte Quellendaten 112 angeben oder anderweitig darstellen und in manchen Ausführungsformen kann er gegebenenfalls ein zweites Ziel (z. B. einen Zielspeicherort) angeben oder anderweitig darstellen, wo zweite gepackte Ergebnisdaten 116 zu speichern sind.
  • Unter erneuter Bezugnahme auf 1 umfasst der Prozessor eine Entschlüsselungseinheit oder Entschlüssler 104. Die Entschlüsselungseinheit kann den Sortierungsbeschleunigungsbefehl entschlüsseln. Die Entschlüsselungseinheit kann einen oder mehrere Mikrobefehle, Mikrovorgänge, Mikrocode-Eintrittspunkte, verschlüsselte Befehle oder Steuersignale ausgeben oder Signale steuern, die den Sortierungsbeschleunigungsbefehl wiedergeben, darstellen und/oder davon abgeleitet sind. Der eine oder mehrere der niedrigeren Befehle oder Steuersignale können den höheren Befehl durch einen oder mehrere niedrigere (z. B. auf Schaltungsebene oder Hardwareebene) Vorgänge ausführen. In manchen Ausführungsformen kann die Entschlüsselungseinheit eine oder mehrere Eingangsstrukturen (z. B. Port(s), Verbindung(en), eine Schnittstelle) zum Empfangen des Befehls, eine Befehlserkennungs- und Entschlüsselungslogik, gekoppelt mit den Eingangsstrukturen zum Erkennen und Entschlüsseln des Befehls und eine oder mehrere Ausgangsstrukturen (z. B. Port(s), Verbindung(en), eine Schnittstelle), gekoppelt an die Befehlserkennungs- und Entschlüsselungslogik zum Ausgeben eines oder mehrerer entsprechender niedriger Befehle oder Steuersignale umfassen. Die Entschlüsselungseinheit kann unter Verwendung mehrerer verschiedener Mechanismen ausgeführt werden, einschließlich, ohne jedoch darauf beschränkt zu sein, Microcode Read Only Memories (ROMs), Verweistabellen, Hardwareausführungen, programmierbarer Logikanordnungen (PLAs) und anderer Mechanismen, die verwendet werden, um auf dem Gebiet bekannte Entschlüsselungseinheiten auszuführen.
  • In manchen Ausführungsformen kann anstelle, dass der Sortierungsbeschleunigungsbefehl direkt an der Entschlüsselungseinheit bereitgestellt wird, gegebenenfalls ein Befehlsemulator, -Übersetzer, -Morpher, -Interpretierer oder ein anderes Befehlskonversionsmodul verwendet werden. Verschiedene Arten von Befehlskonversionsmodulen sind auf den Gebieten bekannt und können in Software, Hardware, Firmware oder einer Kombination daraus ausgeführt sein. In manchen Ausführungsformen kann das Befehlskonversionsmodul außerhalb des Prozessors sein, wie z. B. auf einem getrennten Nacktchip und/oder in einem Speicher (z. B. als ein statisches, dynamisches oder Laufzeitemulationsmodul). Beispielsweise kann das Befehlskonversionsmodul den Sortierungsbeschleunigungsbefehl empfangen, der aus einem ersten Befehlssatz stammen kann und das den Sortierungsbeschleunigungsbefehl emulieren, übersetzen, morphen, interpretieren oder anderweitig in einen oder mehrere entsprechende oder abgeleitete Zwischenbefehle oder Steuersignale konvertieren kann, die aus einem anderen zweiten Befehlssatz stammen können. Der eine oder mehrere der Zwischenbefehle oder Steuersignale des zweiten Befehlssatzes können an einer Entschlüsselungseinheit bereitgestellt werden, die sie dann zu niedrigeren Befehlen oder Steuersignalen, die von der nativen Hardware des Prozessors (z. B. einer oder mehreren Ausführungseinheiten) ausführbar sind, entschlüsseln.
  • Der Prozessor 100 umfasst ebenfalls einen Satz aus Gepackte-Daten-Registern 108. Jedes der Gepackte-Daten-Register kann einen Speicherort auf dem Nacktchip darstellen, der ausgelegt ist, gepackte Daten, Vektordaten oder SIMD-Daten zu speichern. Die Gepackte-Daten-Register können architektonisch sichtbare Register darstellen (z. B. eine architektonische Registerdatei). Die architektonisch sichtbaren oder architektonischen Register sind für Software und/oder einen Programmierer sichtbar und/oder sind die Register, die von Befehlen aus einem Befehlssatz des Prozessors zum Identifizieren von Operanden angegeben werden. Diese architektonischen Register stehen anderen nichtarchitektonsichen oder nicht architektonisch sichtbaren Register in einer gegebenen Mikroarchitektur gegenüber (z. B. temporäre Register, Umordnungspuffer, Rückzugsregister etc.). Die Gepackte-Daten-Register können auf unterschiedliche Weise in verschiedenen Mikroarchitekturen unter Verwendung von bekannten Verfahren ausgeführt werden und sind nicht auf eine bestimmte Art Schaltung beschränkt. Beispiele für geeignete Arten von Registern umfassen, ohne darauf beschränkt zu sein, zugewiesene physikalische Register, dynamisch zugeordnete physikalische Register, die eine Registerumbenennung verwenden und Kombinationen daraus.
  • Wie dargestellt können die ersten gepackten Quellendaten 110, die optionalen zweiten gepackten Quellendaten 112, die ersten gepackten Ergebnisdaten 114 und die optionalen zweiten gepackten Ergebnisdaten 116 in einer Ausführungsform gegebenenfalls jeweils einzeln in den Gepackte-Daten-Registern gespeichert werden. Alternativ dazu können Speicherorte oder andere Orte zum Speichern, für einen oder mehrere dieser Operanden verwendet werden. Darüber hinaus kann ein Gepackte-Daten-Register, das für gepackte Quellendaten verwendet wird, obwohl sie in der Zeichnung als getrennt dargestellt sind, in manchen Ausführungsformen als ein Zielspeicherort wiederverwendet werden (z. B. können die gepackten Quellendaten mit den gepackten Ergebnisdaten überschrieben werden).
  • Unter erneuter Bezugnahme auf 1 ist die Ausführungseinheit 106 an die Entschlüsselungseinheit 104 und die Gepackte-Daten-Register 108 gekoppelt. Die Ausführungseinheit kann den einen oder mehrere entschlüsselte oder anderweitig konvertierte Befehle oder Steuersignale empfangen, die den Sortierungsbeschleunigungsbefehl darstellen und/oder davon abgeleitet sind. Die Ausführungseinheit kann auch die ersten gepackten Quellendaten 110 und in manchen Ausführungsformen auch die zweiten gepackten Quellendaten 112 empfangen. Die Ausführungseinheit ist als Antwort auf und/oder als Resultat auf den Sortierungsbeschleunigungsbefehl (z. B. als Antwort auf einen oder mehrere Befehle oder Steuersignale, die aus dem Befehl entschlüsselt wurden) ausgelegt oder konfiguriert, die ersten gepackten Ergebnisdaten 114 in dem ersten Ort, der von dem Befehl angegeben wird zu speichern und in manchen Ausführungsformen, die zweiten gepackten Ergebnisdaten 116 in dem zweiten Ort zu speichern, der von dem Befehl angegeben wird. In manchen Ausführungsformen kann die Ausführungseinheit gegebenenfalls auch eine Ergebnismaske 120 (z. B. in einem optionalen Satz aus Maskenregister 118) speichern. In verschiedenen Ausführungsformen können die gepackten Ergebnisdaten und/oder die Ergebnismaske jede aus 34 oder 613 sein.
  • Die Ausführungseinheit und/oder der Prozessor kann eine spezielle und/oder bestimmte Logik (z. B. Transistoren, integrierte Schaltungen oder andere Hardware, die möglicherweise mit Firmware (z. B. Befehlen, die in einem nichtflüchtigen Speicher gespeichert sind) und/oder Software) umfassen, die ausgelegt ist, den Sortierungsbeschleunigungsbefehl durchzuführen und/oder das Ergebnis als Antwort auf und/oder als ein Ergebnis des Befehls zu speichern.
  • Beispielsweise kann die Ausführungseinheit eine arithmetische Logikeinheit, eine Logikeinheit, eine Datenumordnungseinheit oder dergleichen umfassen. In manchen Ausführungsformen kann die Ausführungseinheit eine oder mehrere Eingangsstrukturen (z. B. Port(s), Verbindung(en), eine Schnittstelle) zum Empfangen von Quellenoperanden, eine Sortierungsschaltung oder – Logik 107, gekoppelt an die Eingangsstruktur(en) zum Empfangen und Verarbeiten der gepackten Quellendaten und zum Erzeugen der gepackten Ergebnisdaten und eine oder mehrere Ausgangsstrukturen (z. B. Port(s), Verbindung(en), eine Schnittstelle), gekoppelt an die Sortierungsschaltung oder -Logik 107 zur Ausgabe der gepackten Ergebnisdaten umfassen. Beispielsweise kann die Sortierungsschaltung oder -Logik eine Vergleichs- und Tauschkette, eine wertbasierte Auswahls- oder Routing-Hierarchie oder eine andere Sortierungsschaltung oder -Logik umfassen.
  • 2 ist ein Blockflussdiagramm einer Ausführungsform von Verfahren 225 zum Durchführen einer Ausführungsform eines Einzelquellenindexsortierungsbefehls. In verschiedenen Ausführungsformen kann das Verfahren von einem Prozessor (z. B. dem Prozessor aus 1), einer Befehlsverarbeitungsvorrichtung oder einer integrierten Schaltung ausgeführt werden. Die hierin beschriebenen Bauteile, Merkmale und spezielle optionale Details des Prozessors aus 1 betreffen gegebenenfalls auch die Vorgänge und/oder das Verfahren aus 2.
  • Das Verfahren umfasst ein Empfangen des Einzelquellenindexsortierungsbefehls an Block 226. Der Befehl kann an einem Prozessor oder einem Teil davon (z. B. einer Befehlsaufrufeinheit, einer Entschlüsselungseinheit, einer Busschnittstelleneinheit) empfangen werden. In verschiedenen Aspekten kann der Befehl von einer Quelle, die nicht auf dem Nacktchip liegt, (z. B. von einem Speicher, einer Verbindung etc.) oder von einer Quelle auf dem Nacktchip (z. B. von einem Befehlscache, einer Befehlswarteschlange) empfangen werden. Der Befehl kann gepackte Quellendaten, einschließlich zumindest vier Datenelemente, angeben, die nicht in einer sortierten Reihenfolge sind (z. B. innerhalb der gepackten Daten nicht in zunehmender oder abnehmender Größenordnung gereiht). Der Befehl kann auch einen Zielspeicherort angeben oder anderweitig darstellen.
  • Gepackte Ergebnisdaten werden als Antwort auf und/oder als ein Ergebnis des Befehls an Block 227 in dem Zielspeicherort gespeichert. Alternativ dazu kann eine Ausführungseinheit oder ein Prozessor den Befehl ausführen und das Ergebnis speichern. Die gepackten Ergebnisdaten können zumindest vier Indizes umfassen. In manchen Ausführungsformen können die Indizes in Positionen in den gepackten Ergebnisdaten gespeichert werden, die die sortierte Reihenfolge der entsprechenden Datenelemente der gepackten Quellendaten darstellen. Das heißt, dass die Indizes in einer sortierten Reihenfolge gespeichert werden können, wo sie nicht basierend auf den Werten der Indizes selbst, sondern vielmehr basierend auf den Werten ihrer entsprechenden Datenelemente in den gepackten Quellendaten sortiert sind. In manchen Ausführungsformen können die gepackten Ergebnisdaten Indizes umfassen, die allen Datenelementen in den gepackten Quellendaten entsprechen.
  • 3 ist ein Blockschaltbild, das eine Ausführungsform eines Einzelquellenindexsortierungsvorgangs 330 darstellt, der als Antwort auf eine Ausführungsform eines Einzelquellenindexsortierungsbefehls durchgeführt werden kann. Der Einzelquellenindexsortierungsbefehl kann gepackte Quellendaten 310 mit zumindest vier Datenelementen angeben oder anderweitig darstellen. Die gepackten Quellendaten können in einem Gepackte-Daten-Register, einem Speicherort oder einer anderen Speicherposition gespeichert werden. Üblicherweise kann die Anzahl der Datenelemente in den gepackten Quellendaten gleich der Größe oder Breite der gepackten Quellendaten in Bits, geteilt durch die Größe oder Breite jedes Datenelements in Bits sein. In verschiedenen Ausführungsformen kann die Breite der gepackten Quellendaten 64 Bits, 128 Bits, 256 Bits, 512 Bits oder 1024 Bits betragen. In verschiedenen Ausführungsformen kann die Breite jedes Datenelements 8 Bits, 16 Bits, 32 Bits oder 64 Bits betragen. In einem speziellen, nichtbeschränkenden Beispiel können die gepackten Quellendaten 512 Bits breit sein und können sechzehn 32-Bit-Datenelemente oder acht 64-Bit-Datenelemente aufweisen. Die Datenelemente können Integer-, Fixpunkt- oder Gleitkommaformate aufweisen.
  • In dem bestimmten dargestellten Beispiel weisen die gepackten Quellendaten acht Datenelemente auf. Die acht Datenelemente weisen, von einer am wenigsten signifikanten oder einer niedrigsten Bit-Position rechts bis hin zu einer am signifikantesten oder höchsten Bit-Position links die Werte –4, 1, 8, 12, 43, 55, 1 und 12 auf. Die Werte sind nicht in einer sortierten Reihenfolge (z. B. sind nicht in ansteigender oder absteigender Reihenfolge innerhalb der gepackten Daten sortiert).
  • Gepackte Ergebnisdaten 314 können erzeugt werden (z. B. von einer Ausführungseinheit 106) und als Antwort auf den Einzelquellenindexsortierungsbefehl in einem Zielspeicherort gespeichert werden. Der Zielspeicherort kann von dem Befehl angegeben oder anderweitig dargestellt werden. In verschiedenen Ausführungsformen kann der Zielspeicherort ein Gepackte-Daten-Register, ein Speicherort oder eine andere Speicherposition sein. Der Zielspeicherort kann entweder derselbe Speicherort sein, der für die gepackten Quellendaten verwendet wurde oder kann ein anderer Speicherort sein.
  • In manchen Ausführungsformen können die gepackten Ergebnisdaten zumindest vier Indizes umfassen. In dem bestimmten dargestellten Beispiel weisen die gepackten Ergebnisdaten acht Indizes auf. Jeder Index kann auf ein einziges entsprechendes Datenelement in den gepackten Quellendaten zeigen, dieses identifizieren oder damit assoziiert sein. Jedes der Datenelemente kann eine Position innerhalb der gepackten Quellendaten aufweisen, die von dem entsprechenden Index angegeben wird. Der Index kann die relative Position oder die Abweichung des Datenelements innerhalb des Operanden darstellen. Beispielsweise können Indexwerte von 0 bis 7 gemäß einer möglichen Konvention, die in der Darstellung verwendet wird, die acht Datenelemente in der ersten bis zur achten Position über die ganzen gepackten Daten hinweg von den am wenigsten bis zu den signifikantesten Bit-Positionen (Ansicht von rechts nach links) darstellen. Um dies weiter zu erklären weist das Datenelement mit dem Wert einen Index von 0 auf, das Datenelement mit dem Wert 8 weist einen Index von 2 auf, das Datenelement mit dem Wert 43 weist einen Index von 4 auf und so weiter. Alternativ dazu können verschiedene andere Indexkonventionen gegebenenfalls verwendet werden (z. B. angefangen mit 1 anstelle von 0, rückwärtsindizieren von 7 bis 0, eine willkürliche Kartierungskonvention etc.). Die Indizes können eine Anzahl von Bits aufweisen, die ausreicht, um die indexierten Positionen darzustellen (z. B. 3 Bits in dem dargestellten Beispiel).
  • In manchen Ausführungsformen können die Indizes in Positionen in den gepackten Ergebnisdaten gespeichert werden, die eine sortierte Reihenfolge der entsprechenden Datenelemente in den gepackten Quellendaten darstellen sollen. In dem dargestellten Beispiel ist die sortierte Reihenfolge eine ansteigende Reihenfolge, die von der am wenigsten bis zur signifikantesten Bit-Position hin ansteigt, obwohl stattdessen gegebenenfalls auch eine absteigende Reihenfolge verwendet werden kann. Für die Werte in dem dargestellten Beispiel wäre die ansteigend sortierte Reihenfolge –4, 1, 1, 8, 12, 12, 43 und 55. Daraus folgt, dass der Indexwert von 0, der dem Datenelement mit dem Wert von –4 entspricht, in der ersten oder niedrigsten Position in den gepackten Ergebnisdaten gespeichert wird, der Indexwert von 1, der dem Datenelement ganz rechts mit dem Wert von 1 entspricht, wird in der zweit oder nächst niedrigsten Position gespeichert und so weiter. In der Darstellung werden Pfeile verwendet, um den Zusammenhang zwischen den Indizes und den Datenelementen zu zeigen.
  • Es gilt anzumerken, dass die gepackten Ergebnisdaten die sortierten Indizes speichert, nicht die sortierten Datenelemente. In manchen Ausführungsformen können die sortierten Indizes gegebenenfalls anschließend von einem anderen Befehl verwendet werden, um die Quellendatenelemente zu sortieren. Beispielsweise kann ein Vertauschungsbefehl, ein Shuffling-Befehl oder dergleichen die Indizes verwendet, um die Quellendatenelemente zu sortieren. Beispielsweise kann der Vertauschungs- oder Shuffling-Befehl die gepackten Ergebnisdaten 314 mit den Indizes als ein erster Quellenoperand und die gepackten Quellendaten 310 als zweiten Quellenoperanden angeben und kann gepackte Ergebnisdaten, deren Datenelemente basierend auf der Steuerung der Indizes sortiert sind, speichern. Ein bestimmtes Beispiel für einen geeigneten Befehl ist der VPERMD-Befehl, der in Intel® Architecture Instruction Set Extensions Programming Reference, 319433-017, veröffentlicht im Dezember 2013, erhältlich von Intel Corporation aus Santa Clara, Kalifornien, beschrieben ist.
  • Jedoch ist es in manchen Ausführungen vorteilhaft, die Indizes anstelle der sortierten Datenelemente zu speichern. Beispielsweise können die sortierten Indizes verwendet werden, um andere Daten zusätzlich zu oder anstelle der Quellendatenelemente der gepackten Quellendaten 310 zu sortieren. Beispielsweise kann dies bei mehreren unterschiedlichen Datenstrukturen der Fall sein, in denen die Quellendatenelemente als Sortierschlüssel verwendet werden und jeweils mehreren Datenelementen zugewiesen sind. Um dies weiter zu erklären kann ein einfaches Beispiel einer Tabelle (z. B. in einer Spreadsheet-Tabelle), die in Spalten und Zeilen angeordnet ist, betrachtet werden. Eine Spalte führt Erfindernamen auf und eine andere Spalte führt Identifikationsnummern der Erfinder auf. Die Namen sowie die Identifikationsnummern müssen nun gemeinsam und durchgehend sortiert werden. Als ein Beispiel kann eine Sortierung auf dem Namen als Sortierungsschlüssel basieren, und sortierte Indizes können als ein Ergebnis gespeichert werden. Die sortierten Indizes können kann verwendet werden, um die Namen sowie die Identifikationsnummern zu sortieren. Dementsprechend kann ein Speichern der sortierten Indizes im Vergleich zum Speichern der sortierten Datenelemente in manchen Ausführungen Vorteile bieten, wie Flexibilität und die Möglichkeit, andere zugewiesene Daten zu sortieren.
  • In manchen Ausführungsformen kann das Sortieren in einer stabilen Reihenfolge (z. B. ansteigende Reihenfolge) vorgenommen werden. Mit stabil wird gemeint, dass, falls zwei Elemente die gleichen Suchbegriffe aufweisen, dann ändert sich die relative Reihenfolge zwischen ihnen nicht. Falls es beispielsweise zwei Zeilen mit demselben Erfindernamen gibt, die aber unterschiedliche Identifikationsnummern aufweisen, und die Tabelle nach Name sortiert wird, dann muss sich die Reihenfolge der Identifikationsnummer nicht unbedingt ändern. Dem gegenüber steht eine instabile Reihenfolge, in der die relative Reihenfolge nicht garantiert wird, und Elemente mit gleichen Suchbegriffen vertauscht werden können.
  • 4 ist ein Blockschaltbild, das eine Ausführungsform eines Einzelquellenindex- und Datenelementsortierungsvorgangs 432 zeigt, der als Antwort auf einen Einzelquellenindex- und Datenelementsortierungsbefehl ausgeführt werden kann. Der Vorgang aus 4 weist bestimmte Ähnlichkeiten mit dem Vorgang aus 3 auf. Um ein Verkomplizieren der Beschreibung zu verhindern, werden primär die verschiedenen und/oder zusätzlichen Charakteristika für den Vorgang aus 4 beschrieben, ohne dass alle der gegebenenfalls ähnlichen oder gleichen Eigenschaften und Details in Bezug auf den Vorgang aus 3 wiederholt werden. Jedoch können die zuvor beschriebenen Eigenschaften und Details in Bezug auf den Vorgang aus 3 gegebenenfalls auch auf den Vorgang aus 4 angewendet werden, sofern nicht anders angegeben oder anderweitig klar hervorgeht.
  • Der Einzelquellenindex- und Datenelementsortierungsbefehl kann gepackte Quellendaten 410 mit zumindest vier Datenelementen angeben oder anderweitig darstellen. Die gepackten Quellendaten und Datenelemente können wie andernorts hierin beschrieben sein (z. B. wie in 3).
  • Erste gepackte Ergebnisdaten 414 können erzeugt werden (z. B. von einer Ausführungseinheit 106) und als Antwort auf den Befehl in einem ersten Zielspeicherort gespeichert werden. Die ersten gepackten Ergebnisdaten 414 können zumindest vier Indizes umfassen. Die ersten gepackten Ergebnisdaten können wie andernorts hierin beschrieben sein (z. B. wie in 3).
  • In dieser Ausführungsform können zweite gepackte Ergebnisdaten 416 ebenfalls erzeugt und als Antwort auf den Befehl in einem zweiten Zielspeicherort gespeichert werden. Der zweite Zielspeicherort kann durch den Befehl angegeben oder anderweitig dargestellt werden und kann ein Gepackte-Daten-Register, ein Memory-Ort oder ein anderer Speicherort sein. Die zweiten gepackten Ergebnisdaten können die entsprechenden Datenelemente umfassen, die den Indizes entsprechen, die in den ersten gepackten Ergebnisdaten 414 gespeichert sind, die in Positionen der zweiten gepackten Ergebnisdaten 416 gespeichert sind, die die sortierte Reihenfolge Wiederspiegeln. Beispielsweise können die zweiten gepackten Ergebnisdaten die Werte –4, 1, 1, 8, 12, 12, 43 und 55 in ansteigender sortierter Reihenfolge, in der Darstellung von rechts nach links, speichern. In einer weiteren Ausführungsform kann für die Indizes und Datenelemente alternativ eine absteigende Reihenfolge verwendet werden.
  • In 3 werden sortierte Indizes als Ergebnis gespeichert. Sortierte Indizes sowie sortierte Datenelemente werden als Ergebnisse in 4 gespeichert. In einer weiteren Ausführungsform können sortierte Datenelemente, aber keine Indizes gegebenenfalls als Antwort auf einen Befehl gespeichert werden.
  • 5 ist ein Blockflussdiagramm einer Ausführungsform eines Verfahrens 535 zum Durchführen einer Ausführungsform eines Zweiquellenindexsortierungsbefehls. In mehreren Ausführungsformen kann das Verfahren von einem Prozessor (z. B. dem Prozessor aus 1), einer Befehlsverarbeitungsvorrichtung, einer digitalen Logikvorrichtung oder einer integrierten Schaltung durchgeführt werden. Die Bauteile, Merkmale und spezielle optionale Details, die hierin für den Prozessor aus 1 beschrieben sind, treffen gegebenenfalls auch auf die Vorgänge und/oder das Verfahren aus 5 zu.
  • Das Verfahren umfasst ein Empfangen des Zweiquellenindexsortierungsbefehls an Block 536. In verschiedenen Aspekten kann der Befehl an einem Prozessor oder einem Teil davon (z. B. einer Befehlsaufrufeinheit, einer Entschlüsselungseinheit, einer Busschnittstelleneinheit) empfangen werden. In verschiedenen Aspekten kann der Befehl von einer Quelle außerhalb des Nacktchips (z. B. von einem Speicher, Verbindung etc.) oder von einer Quelle auf dem Nacktchip (z. B. von einem Befehlscache, einer Befehlswarteschlange) empfangen werden. Der Zweiquellenindexsortierungsbefehl kann erste gepackte Quellendaten, einschließlich eines ersten Satzes aus zumindest vier Datenelementen, angeben oder anderweitig darstellen und kann zweite gepackte Quellendaten, einschließlich eines zweiten Satzes aus zumindest vier Datenelementen, angeben oder anderweitig darstellen. Der Befehl kann auch einen Zielspeicherort angeben oder anderweitig darstellen.
  • Unter erneuter Bezugnahme auf 5 werden gepackte Ergebnisdaten als Antwort auf und/oder als Ergebnis des Zweiquellenindexsortierungsbefehls an Block 537 in dem Zielspeicherort gespeichert. Alternativ dazu kann eine Ausführungseinheit oder ein Prozessor den Befehl durchführen und das Ergebnis speichern. Die gepackten Ergebnisdaten können zumindest vier Datenelemente umfassen. In manchen Ausführungsformen können die Indizes entsprechende Datenelementpositionen in den ersten und zweiten gepackten Quellendaten identifizieren. In manchen Ausführungsformen können die Indizes tatsächlich einzelne entsprechende Datenelemente in einen der ersten und zweiten gepackten Quellendaten identifizieren (siehe z. B. 69). Alternativ dazu können die Indizes nur entsprechende Datenelementpositionen in jeden der ersten und zweiten gepackten Quellendaten identifizieren und ein anderes Bit kann verwendet werden, um eine der ersten und zweiten gepackten Quellendaten anzugeben und dadurch ein einziges entsprechendes Datenelement anzeigen (siehe z. B. 1013). Die Indizes können in Positionen in den gepackten Ergebnisdaten gespeichert werden, die eine sortierte Reihenfolge von entsprechenden Datenelementen in den ersten und zweiten gepackten Quellendaten darstellen. Das Ergebnis kann eine Mischsortierung darstellen, die sortierte Indizes, die Datenelementen in einer der beiden Quellen entsprechen, speichert.
  • 6 ist ein Blockschaltbild, das eine Ausführungsform eines Zweiquellenindexsortierungsvorgangs für eine kleinste Hälfte von Datenelementen 640 darstellt, der als Antwort auf eine Ausführungsform eines Zweiquellenindexsortierungsbefehls für eine kleinste Hälfte von Datenelementen durchgeführt werden kann. Der Befehl kann erste gepackte Quellendaten 610 mit einem ersten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen und kann zweite gepackte Quellendaten 612 mit einem zweiten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen. Die ersten und zweiten gepackten Quellendaten können jeweils, unabhängig voneinander, in einem Gepackte-Daten-Register, einem Memory-Ort oder einem anderen Speicherort gespeichert werden. Die ersten und zweiten gepackten Quellendaten können die Größe, Anzahl von Datenelementen, Größe von Datenelementen und Arten von Datenelementen umfassen, die hierin andernorts offenbart sind.
  • In dem bestimmten dargestellten Beispiel können die ersten gepackten Quellendaten und die zweiten gepackten Quellendaten jeweils acht Datenelemente aufweisen. Die ersten gepackten Quellendaten weisen die Werte –4, 1, 1, 8, 12, 12, 43 und 55 von einer am wenigsten signifikanten Position rechts bis zu einer am signifikantesten Position links auf. Die zweiten gepackten Quellendaten weisen die Werte –14, –12, 0, 10, 16, 18, 24 und 60 von einer am wenigsten signifikanten Position rechts bis zu einer am signifikantesten Position links auf. In dieser Ausführungsform werden die Werte in den ersten gepackten Quellendaten und die Werte in den zweiten gepackten Quellendaten jeweils in ansteigender Reihenfolge von am wenigsten bis zu den am meisten signifikanten Bit-Positionen sortiert. In manchen Ausführungsformen kann angenommen werden, dass sich die Datenelemente innerhalb jeder der ersten und der zweiten gepackten Quellendaten innerhalb des jeweiligen gepackten Datenoperanden in sortierter Reihenfolge befinden (z. B. für den Befehl ausdrücklich angenommen) oder dies kann erforderlich sein (z. B. damit der Befehl korrekt ausgeführt wird). In anderen Ausführungsformen kann nicht angenommen werden, dass die Datenelemente innerhalb jeder der ersten und zweiten gepackten Quellendaten in sortierter Reihenfolge sind oder dies muss nicht erforderlich sein (z. B. kann der Befehl korrekt ausgeführt werden, auch wenn sich die Elemente in einer unsortierten Reihenfolge befinden).
  • Gepackte Ergebnisdaten 614 können erzeugt werden (z. B. von einer Ausführungseinheit 106) und als Antwort auf den Befehl in einem Zielspeicherort gespeichert werden. In verschiedenen Ausführungsformen kann der Zielspeicherort ein Gepackte-Daten-Register, ein Memory-Ort oder ein anderer Speicherort sein. Der Zielspeicherort kann entweder derselbe Speicherort sein, der für eine der ersten und zweiten gepackten Quellendaten verwendet wurde oder er kann ein anderer Speicherort sein.
  • In manchen Ausführungsformen können die gepackten Ergebnisdaten zumindest vier Indizes umfassen. In manchen Ausführungsformen können die gepackten Ergebnisdaten eine gleiche Anzahl von Indizes wie eine Anzahl von Datenelementen in einer der gepackten Quellendaten umfassen, obwohl dies nicht erforderlich ist. In dem bestimmten dargestellten Beispiel umfassen die gepackten Ergebnisdaten acht Indizes auf. Jeder Index kann auf entsprechende Datenelementpositionen in den ersten und zweiten gepackten Quellendaten zeigen, diese identifizieren oder diesen zugewiesen sein. In manchen Ausführungsformen können die Indizes tatsächlich einzelne entsprechende Datenelemente in einer der ersten und zweiten gepackten Quellendaten identifizieren. Jedes der Datenelemente kann eine indexierte Position innerhalb der ersten und zweiten gepackten Quellendaten aufweisen. Der Index kann die relative Position oder die Abweichung des Datenelements innerhalb der ersten und zweiten gepackten Daten darstellen. Beispielsweise können Indexwerte 0 bis 7, gemäß einer möglichen Konvention, die in dem dargestellten Beispiel verwendet wird, die acht Datenelemente indexieren, wenn in den ersten gepackten Quellendaten 610 von einer am wenigsten bis zur am meisten signifikanten Bit-Position (Ansicht von rechts nach links) durchgegangen wird und Indexwerte 8 bis 15 können die acht Datenelemente indexieren, wenn in den zweiten gepackten Quellendaten 612 von einer am wenigsten bis zur am meisten signifikanten Bit-Position (Ansicht von rechts nach links) durchgegangen wird. In dem dargestellten Beispiel werden Pfeile verwendet, um die Entsprechung zwischen Indizes und Datenelementen zu zeigen. Wie dargestellt weist das Datenelement mit dem Wert –14 einen Index von 8 auf, das Datenelement mit dem Wert –12 weist einen Index von 9 auf usw. Alternativ dazu können verschiedene andere Indexkonventionen, die für die bestimmte Ausführung wünschenswert sind, gegebenenfalls verwendet werden (z. B. angefangen mit einem Index von 1 anstelle von 0, Rückwärtsindexieren, eine willkürlich kartierte Indexkonvention etc.).
  • Die Indizes können in Positionen in den gepackten Ergebnisdaten gespeichert werden, die eine sortierte Reihenfolge von entsprechenden Datenelementen in den ersten und zweiten gepackten Quellendaten darstellen sollen. In manchen Ausführungsformen können die Indizes nur für einen gereihten Teilsatz aller Datenelemente in den ersten und zweiten gepackten Quellendaten gespeichert werden. In manchen Ausführungsformen kann ein gereihter Teilsatz ein gereihter kleinster Teilsatz (z. B. eine kleinste Hälfte) aller Datenelemente sein. In dem dargestellten Beispiel sind die acht kleinsten Werte –14, –12, –4, 0, 1, 1, 8 und 10. In der dargestellten Ausführungsform werden die acht Indizes in Positionen in den gepackten Ergebnisdaten gespeichert, die eine sortierte ansteigende Reihenfolge (die von am wenigsten bis hin zu am meisten signifikanten Bit-Positionen ansteigt) der entsprechenden acht kleinsten Datenelemente in den ersten und zweiten gepackten Quellendaten darstellen. Wie dargestellt, wird der Index 8, der dem Datenelement mit dem Wert –14 entspricht, in der niedrigsten Reihenfolgeposition in den gepackten Ergebnisdaten gespeichert, der Index 9, der dem Datenelement mit dem Wert –12 entspricht, wird in der zweitniedrigsten Reihenfolgeposition gespeichert, der Index 0, der dem Datenelement mit dem Wert 0 entspricht, wird in der drittniedrigsten Reihenfolgeposition gespeichert usw. In anderen Ausführungsformen kann gegebenenfalls eine absteigende oder umgekehrte Reihenfolge verwendet werden. Der Sortiervorgang führt sortierte Indizes für die ersten sowie die zweiten gepackten Quellendaten zusammen.
  • 7 ist ein Blockschaltbild, das eine Ausführungsform eines Zweiquellenindexsortiervorgangs für eine größte Hälfte von Datenelementen 742 darstellt, der als Antwort auf eine Ausführungsform eines Zweiquellenindexsortierbefehls für eine größte Hälfte von Datenelementen durchgeführt werden kann. Der Befehl kann erste gepackte Quellendaten 710 mit einem ersten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen und kann zweite gepackte Quellendaten 712 mit einem zweiten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen. Die ersten und zweiten gepackten Quellendaten können die hierin andernorts beschriebenen Merkmale und Variationen aufweisen. In der dargestellten Ausführungsform werden die Werte in den ersten gepackten Quellendaten und die Werte in den zweiten gepackten Quellendaten in ansteigender Reihenfolge sortiert, obwohl dies in anderen Ausführungsformen oder für andere Befehle nicht erforderlich ist.
  • Gepackte Ergebnisdaten 714 können erzeugt werden (z. B. von einer Ausführungseinheit 106) und als Antwort auf den Befehl in einem Zielspeicherort gespeichert werden. In manchen Ausführungsformen können die gepackten Ergebnisdaten zumindest vier Indizes umfassen. In manchen Ausführungsformen können die Indizes einzelne entsprechende Datenelemente in einer der ersten und zweiten gepackten Quellendaten identifizieren. In manchen Ausführungsformen können die Indizes in Positionen in den gepackten Ergebnisdaten gespeichert werden, die eine sortierte Reihenfolge von entsprechenden Datenelementen in den ersten und zweiten gepackten Quellendaten darstellen sollen.
  • In der Ausführungsform aus 7 wird der gereihte Teilsatz anstelle eines kleinsten Teilsatzes ein gereihter größter Teilsatz, z. B. eine größte Hälfte, aller Datenelemente in den ersten und zweiten gepackten Quellendaten sein. Beispielsweise können die acht Indizes in Positionen in den gepackten Ergebnisdaten gespeichert werden, die eine sortierte Reihenfolge der entsprechenden acht größten Datenelementen in den ersten und zweiten gepackten Quellendaten darstellen sollen. In Anbetracht der beispielhaften Werte der in der Darstellung gezeigten Datenelemente, sind die acht größten Datenelemente jene mit den Werten 12, 12, 16, 18, 24, 43, 55 und 60. In der dargestellten Ausführungsform werden die acht Indizes in Positionen in den gepackten Ergebnisdaten gespeichert, die eine sortierte ansteigende Reihenfolge (die von der am wenigsten bis hin zur am meisten signifikanten Bit-Position ansteigt) der entsprechenden acht größten Datenelemente in den ersten und zweiten gepackten Quellendaten darstellen sollen. Wie dargestellt, wird der Index 4, der dem Datenelement ganz rechts mit dem Wert 12 entspricht, in der niedrigsten Reihenfolgeposition gespeichert, der Index 5, der dem Datenelement ganz links mit dem Wert 12 entspricht, wird in der zweitniedrigsten Reihenfolgeposition gespeichert, der Index 12, der dem Datenelement mit dem Wert 16 entspricht, wird in der drittniedrigsten Reihenfolgeposition gespeichert usw. In anderen Ausführungsformen kann stattdessen gegebenenfalls eine absteigende Reihenfolge verwendet werden.
  • 67 zeigen Ausführungsformen, in denen Indizes nur für kleinste oder größte Hälften gespeichert werden. In anderen Ausführungsformen können Indizes für die kleinsten sowie die größten Hälften in dem Ergebnis mit gleicher Größe wie die Quellenoperanden gespeichert werden. Beispielsweise kann dies möglich sein, falls die Indizes ausreichend kleiner sind (z. B. halb so groß oder kleiner) als die entsprechenden Datenelemente. Ein solcher Ansatz kann in manchen Ausführungen einen Vorteil bieten. Alternativ dazu können die Indizes für die kleinsten und größten Hälften getrennt bleiben, um eine Verwendung eines entsprechenden Shuffle-Befehls, eines Mischbefehls oder dergleichen zu erleichtern.
  • 8 ist ein Blockschaltbild, das eine Ausfürungsform eines unsortierten Zweiquellenindexsortierungsvorgangs für eine kleinste Hälfte von Datenelementen 844 darstellt, der als Antwort auf eine Ausführungsform eines unsortierten Zweiquellenindexsortierungsbefehls für eine kleinste Hälfte von Datenelementen durchgeführt werden kann. Der Befehl kann erste gepackte Quellendaten 810 mit einem ersten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen und kann zweite gepackte Quellendaten 812 mit einem zweiten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen. In dem bestimmten dargestellten Beispiel umfassen die ersten gepackten Quellendaten und die zweiten gepackten Quellendaten jeweils acht Datenelemente auf. Die ersten gepackten Quellendaten weisen, von einer am wenigsten signifikanten Position rechts bis hin zu einer am meisten signifikanten Position links, die Werte –4, 1, 8, 12, 43, 55,1 und 12 auf. In dieser Ausführungsform befinden sich die Werte in den ersten gepackten Quellendaten nicht in einer sortierten Reihenfolge. Ähnlich dazu befinden sich die Werte in den zweiten gepackten Quellendaten nicht in einer sortierten Reihenfolge. In einer solchen Ausführungsform kann nicht angenommen werden, dass die Datenelemente innerhalb jeder der ersten und zweiten gepackten Quellendaten in einer sortierten Reihenfolge sind oder dies muss nicht erforderlich sein (z. B. kann der Befehl korrekt ausgeführt werden, wenn sich die Elemente in einer unsortierten Reihenfolge befinden).
  • Gepackte Ergebnisdaten 814 können erzeugt (z. B. von einer Ausführungseinheit 106) und als Antwort auf den Befehl in einem Zielspeicherort gespeichert werden. In manchen Ausführungsformen können die gepackten Ergebnisdaten zumindest vier Indizes umfassen. In manchen Ausführungsformen können die Indizes einzelne entsprechende Datenelemente in einer der ersten oder zweiten gepackten Quellendaten identifizieren. In manchen Ausführungsformen können die Indizes in Positionen in den gepackten Ergebnisdaten gespeichert werden, die eine sortierte Reihenfolge der entsprechenden Datenelemente in den ersten und zweiten gepackten Quellendaten darstellen sollen. In der dargestellten Ausführungsform weisen die gepackten Ergebnisdaten Indizes auf, die einem kleinsten Teilsatz, in diesem Fall einer kleinsten Hälfte, alle Datenelemente in den ersten und zweiten gepackten Quellendaten entsprechen. In einer weiteren Ausführungsform können die gepackten Ergebnisdaten Indizes aufweisen, die einem größten Teilsatz, z. B. einer größten Hälfte, aller Datenelemente in den ersten und zweiten gepackten Quellendaten entsprechen.
  • 9 ist ein Blockschaltbild, das eine Ausführungsform eines Zweiquellenindex- und Datensortierungsvorgangs für eine kleinste Hälfte von Datenelementen 946 darstellt, der als Antwort auf eine Ausführungsform eines Zweiquellenindex- und Datensortierungsbefehls für eine kleinste Hälfte von Datenelementen durchgeführt werden kann. Der Befehl kann erste gepackte Quellendaten 910 mit einem ersten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen und kann zweite gepackte Quellendaten 912 mit einem zweiten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen. Die ersten und zweiten gepackten Quellendaten können die Größe, Anzahl von Datenelementen, Größe von Datenelementen und die hierin andernorts offenbarten Arten von Datenelementen aufweisen. In der dargestellten Ausführungsform kann angenommen werden, dass die Datenelemente innerhalb jeder der ersten und zweiten gepackten Quellendaten in sortierter Reihenfolge innerhalb des jeweiligen gepackten Datenoperanden sind (z. B. bedingungslos für den Befehl angenommen) oder dass dies erforderlich ist. In anderen Ausführungsformen kann nicht angenommen werden, dass die Datenelemente innerhalb jeder der ersten gepackten Quellendaten und der zweiten gepackten Quellendaten innerhalb des jeweiligen gepackten Datenoperanden in sortierter Reihenfolge sind oder dies muss nicht erforderlich sein.
  • Erste gepackte Ergebnisdaten 914 können erzeugt werden (z. B. von einer Ausführungseinheit 106) und können als Antwort auf den Befehl in einem Zielspeicherort gespeichert werden. Die ersten gepackten Ergebnisdaten 914 können Indizes aufweisen. Die ersten gepackten Ergebnisdaten und Indizes können ähnliche oder gleiche Eigenschaften und Details aufweisen, wie bereits zuvor für 6 beschrieben wurde. In der dargestellten Ausführungsform weisen die gepackten Ergebnisdaten Indizes auf, die einem kleinsten Teilsatz, in diesem Fall einer kleinsten Hälfte, aller Datenelemente in den ersten und zweiten gepackten Quellendaten entsprechen. In einer weiteren Ausführungsform können die gepackten Ergebnisdaten Indizes aufweisen, die einem größten Teilsatz, z. B. einer größten Hälfte, aller Datenelemente in den ersten und zweiten gepackten Quellendaten entsprechen.
  • In dieser Ausführungsform können zweite gepackte Ergebnisdaten 916 auch erzeugt und als Antwort auf den Befehl in einem zweiten Speicherort gespeichert werden. Der zweite Speicherort kann durch den Befehl angegeben oder anderweitig dargestellt werden und kann ein Gepackte-Daten-Register, ein Memory-Ort oder ein anderer Speicherort sein. Der zweite Zielspeicherort kann entweder derselbe Speicherort sein, der für eine der ersten oder zweiten gepackten Quellendaten verwendet wurde oder kann ein anderer Speicherort sein. Die zweiten gepackten Ergebnisdaten können die entsprechenden Datenelemente umfassen, die den Indizes entsprechen, die in den ersten gepackten Ergebnisdaten gespeichert sind, die in Positionen der zweiten gepackten Ergebnisdaten gespeichert sind, die die sortierte Reihenfolge wiedergeben. In der dargestellten Ausführungsform weisen die zweiten gepackten Ergebnisdaten einen sortierten kleinsten Teilsatz, in diesem Fall eine sortierte kleinste Hälfte, aller Datenelemente in den ersten und zweiten gepackten Quellendaten auf. Im Speziellen speichern die zweiten gepackten Ergebnisdaten, von rechts nach links, die Datenelemente –14, –12, –4, 0, 1, 1, 8 und 10. In einer weiteren Ausführungsform können die zweiten gepackten Ergebnisdaten stattdessen einen sortierten größten Teilsatz, z. B. eine sortierte größte Hälfte, aller Datenelemente in den ersten und zweiten gepackten Quellendaten aufweisen.
  • Sortierte Indizes werden als ein Ergebnis in 6 gespeichert. Sortierte Indizes sowie sortierte Datenelemente werden als Ergebnisse in 9 gespeichert. In einer weiteren Ausführungsform werden sortierte Datenelemente, jedoch keine Indizes, gegebenenfalls als Antwort auf einen Befehl gespeichert werden.
  • 79 zeigen Vorgänge, die bestimmte Ähnlichkeiten mit dem Vorgang aus 6 aufweisen. Um ein Verkomplizieren der Beschreibung zu vermeiden, wurden die verschiedenen und/oder zusätzlichen Eigenschaften der Vorgänge aus 79 zuvor beschrieben, ohne dass alle der gegebenenfalls ähnlichen oder gleichen Eigenschaften und Details in Bezug auf den Vorgang aus 6 wiederholt wurden. Jedoch gilt anzuerkennen, dass die zuvor beschriebenen Eigenschaften und Details des Vorgangs aus 6 auch gegebenenfalls auf jeden der Vorgänge aus 79 zutreffen können, sofern nicht anders angegeben oder anders deutlich hervorgeht.
  • 10 ist ein Blockschaltbild, das eine Ausführungsform eines Zweiquellenindexsortierungsvorgangs mit Maske für eine kleinste Hälfte von Datenelementen 1048 zeigt, der als Antwort auf eine Ausführungsform eines Zweiquellenindexsortierungsbefehls mit Maske für eine kleinste Hälfte von Datenelementen durchgeführt werden kann. Der Befehl kann erste gepackte Quellendaten 1010 mit einem ersten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen und kann zweite gepackte Quellendaten 1012 mit einem zweiten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen. Die ersten und zweiten gepackten Quellendaten können die Größe, Anzahl von Datenelementen, Größe von Datenelementen und Arten von Datenelementen aufweisen, die hierin andernorts offenbart wurden.
  • In der dargestellten Ausführungsformen werden die Werte in jeder der ersten gepackten Quellendaten und der zweiten gepackten Quellendaten in Reihenfolge sortiert, obwohl dies nicht erforderlich ist. In manchen Ausführungsformen kann angenommen werden (z. B. bedingungslos für den Befehl angenommen werden) oder es kann erforderlich sein, dass die Quellendatenelemente innerhalb der jeweiligen gepackten Daten in sortierter Reihenfolge sind. In dem dargestellten Beispiel wird eine ansteigende Reihenfolge mit ansteigender Bit-Signifikanz in den Operanden verwendet, obwohl in einer weiteren Ausführungsform gegebenenfalls eine absteigende Reihenfolge verwendet werden kann. In anderen Ausführungsformen muss nicht angenommen werden oder es muss nicht erforderlich sein, dass die Datenelemente innerhalb jeder der ersten gepackten Quellendaten und der zweiten gepackten Quellendaten innerhalb der jeweiligen gepackten Daten in sortierter Reihenfolge sind (z. B. kann der Befehl korrekt ausgeführt werden, wenn die Elemente in einer unsortierten Reihenfolge sind).
  • Gepackte Ergebnisdaten 1014 können erzeugt werden (z. B. von einer Ausführungseinheit 106) und als Antwort auf den Befehl in einem Zielspeicherort gespeichert werden. In manchen Ausführungsformen können die gepackten Ergebnisdaten zumindest vier Indizes umfassen. In manchen Ausführungsformen kann jeder Index auf ein Paar entsprechender Datenelementpositionen in den ersten und zweiten gepackten Quellendaten zeigen, dieses identifizieren oder ihm zugewiesen sein. Die Indizes selbst können ein einziges entsprechendes Datenelement nicht tatsächlich identifizieren, sondern können vielmehr ein Paar aus entsprechenden Datenelementpositionen in den ersten und zweiten gepackten Daten identifizieren, ohne dass angegeben wird, ob das tatsächliche entsprechende Datenelement sich in den ersten oder zweiten gepackten Quellendaten befindet. Beispielsweise können Indexwerte von 0 bis 7, gemäß einer möglichen Konvention, die in dem dargestellten Beispiel verwendet wird, die acht Datenelementpositionen darstellen, wenn von einer am wenigsten bis zu einer am meisten signifikanten Bit-Position (in Ansicht von rechts nach links) in den ersten gepackten Quellendaten durchgegangen wird, und dieselben Indexwerte 0 bis 7 können die acht Datenelementpositionen darstellen, wenn von den am wenigsten bis zu den am meisten signifikanten Bit-Positionen in den zweiten gepackten Quellendaten durchgegangen wird. Beispielsweise können das Datenelement mit dem Wert 43 und das Datenelement mit dem Wert 24 beide einen gleichen Index von 6 aufweisen. Wie bereits zuvor erwähnt, können verschiedene andere Konventionen für die Indizes gegebenenfalls stattdessen verwendet werden (z. B. angefangen mit einem Index von 1 anstelle von 0, einer umgekehrten oder absteigenden Konvention, einer willkürlich kartierten Konvention etc.). In solchen Ausführungsformen kann der Index alleine nicht ausreichend sein, um ein einziges entsprechendes Datenelement zu identifizieren.
  • In manchen Ausführungsformen können die Indizes in Positionen in den gepackten Ergebnisdaten gespeichert werden, die eine sortierte Reihenfolge der entsprechenden Datenelemente darstellen sollen. In der dargestellten Ausführungsform werden die Indizes in Positionen in den gepackten Ergebnisdaten gespeichert, die eine sortierte ansteigende Reihenfolge der entsprechenden Datenelemente darstellen sollen. In anderen Ausführungsformen kann gegebenenfalls eine absteigende Reihenfolge verwendet werden. Darüber hinaus werden die Indizes in der dargestellten Ausführungsform nur für einen gereihten kleinsten Teilsatz, z. B. eine kleinste Hälfte, aller Datenelemente gespeichert. Alternativ dazu kann ein weiterer Teilsatz, wie ein größter Teilsatz (z. B. eine größte Hälfte) oder ein Zwischenteilsatz verwendet werden. Alternativ dazu können Indizes für alle Datenelemente in den gepackten Quellendaten gespeichert werden.
  • Unter erneuter Bezugnahme auf 10 kann eine Ergebnismaske 1020 erzeugt werden und als Antwort auf den Befehl in einem zweiten Zielspeicherort gespeichert werden. Der Zielspeicherort kann von dem Befehl angegeben oder anderweitig dargestellt werden. In manchen Ausführungsformen kann der zweite Zielspeicherort ein Maskenregister (z. B. eines der Maskenregister 118) sein. Alternativ dazu kann die Ergebnismaske in einem Allzweckregister, einem Memory-Ort oder einem anderen Speicherort gespeichert werden.
  • In manchen Ausführungsformen kann die Ergebnismaske zumindest vier Maskenelemente umfassen. In manchen Ausführungsformen kann die Ergebnismaske eine gleiche Anzahl von Maskenelementen wie eine Anzahl von Indizes in den gepackten Ergebnisdaten umfassen. Jedes Maskenelement kann einem anderen entsprechenden Index in den gepackten Ergebnisdaten entsprechen. Jedes Maskenelement kann angeben, ob sich ein einziges entsprechendes Datenelement an der Datenelementposition, die von dem entsprechenden Index angegeben wird, in den ersten gepackten Quellendaten befindet oder sich stattdessen in den zweiten gepackten Quellendaten befindet. Das heißt, dass jedes Maskenelement eine der ersten und zweiten gepackten Quellendaten identifizieren oder auswählen kann, wodurch das entsprechende einzelne Datenelement an der indexierten Position in den identifizierten oder ausgewählten gepackten Quellendaten identifiziert.
  • In manchen Ausführungsformen kann jedes Maskenelement ein einziges Bit sein, obwohl gegebenenfalls alternative dazu auch zwei oder mehr Bits verwendet werden können (z. b. für ein am meisten oder am wenigsten signifikantes Bit eines Multi-Bit-Datenelements). Gemäß einer möglichen Konvention, die in der dargestellten beispielhaften Ausführungsform verwendet wird, gibt ein einzelnes Bit, das auf einen binären Wert von eins (d. h. 1) gesetzt wurde, an, dass sich das Datenelement in den ersten gepackten Quellendaten 1010 befindet, wohingegen wenn das Bit auf einen binären Wert von null (d. h. 0) gesetzt wird, das angibt, dass sich das Datenelement in den zweiten gepackten Quellendaten 1012 befindet. Alternativ dazu kann die gegensätzliche Konvention gegebenenfalls verwendet werde. Um dies weiter auszuführen, wird das Datenelement mit dem Wert –14 durch den entsprechenden Index 0 in der Position ganz rechts der gepackten Ergebnisdaten und dem Maskenelementwert von 0 in der Position ganz rechts in der Ergebnismaske identifiziert (um die zweiten gepackten Quellendaten anzugeben). Ähnlich dazu wird das Datenelement mit dem Wert –4 durch den entsprechenden Index 0 in dritter Position von rechts der gepackten Ergebnisdaten und dem Maskenelementwert von 1 in der dritten Position von rechts der Ergebnismaske identifiziert (um die ersten gepackten Quellendaten anzugeben).
  • In manchen Ausführungsformen kann eine Konvention angenommen werden, in der, falls zwei Datenelementen innerhalb eines Operanden in verschiedenen gepackten Quellendaten gleiche Werte aufweisen, diese Elemente aus einer der gepackten Quellendaten interpretiert werden können, als ob sie einen kleineren Wert hätten, obwohl dies nicht erforderlich ist. In manchen Ausführungsformen kann eine Konvention angenommen werden, in der, falls zwei Datenelemente innerhalb des Operanden in denselben gepackten Quellendaten gleiche Werte aufweisen, das am wenigsten signifikante Datenelement interpretiert werden kann, als ob es einen kleineren Wert hätte, obwohl dies nicht erforderlich ist.
  • Ein Miteinbeziehen der zusätzlichen Auswahlbits des gepackten Datenoperanden (z. B. die Maskenelemente) in die Ergebnismaske kann, anstelle einer Aufnahme davon in die Indizes (wie in dem Ansatz in 69 dargestellt ist) kann in bestimmten Ausführungsformen Vorteile bieten. Beispielsweise kann dies der Fall sein, wenn ein Prozessor dazu in der Lage ist, die Ergebnismaske als einen Prädikatoperanden zu verwenden, um einen gepackten Datenvorgang zu maskieren oder zu prädizieren. In manchen Ausführungsformen kann das Maskieren oder die Prädikation bei einer Körnigkeit von jeweils einem Datenelement aufweisen, sodass Vorgänge auf verschiedenen Paaren aus entsprechenden Datenelementen getrennt und/oder unabhängig von anderen prädiziert oder bedingt gesteuert werden können. Die Maskenelemente in der Ergebnismaske können Prädikatelemente oder bedingte Steuerelemente darstellen. In einem Aspekt können die Maskenelemente in eine Eins-zu-Eins-Entsprechung mit entsprechenden Quellendatenelementen und/oder entsprechenden Ergebnisdatenelementen aufgenommen werden. Beispielsweise kann ein Wert jedes Maskenelements oder Bits steuern, ob ein entsprechender Vorgang durchgeführt werden soll und/oder ob ein entsprechendes Ergebnisdatenelement gespeichert werden soll oder nicht. Jedes Maskenelement oder Bit kann einen ersten Wert aufweisen, um zu ermöglichen, dass der Vorgang auf dem entsprechenden Paar aus Quellendatenelementen durchgeführt wird und ermöglicht, dass das entsprechende Ergebnisdatenelement in dem Ziel gespeichert wird, oder kann einen zweiten Wert aufweisen, um zu verhindern, dass der Vorgang auf dem entsprechenden Paar aus Quellendatenelementen durchgeführt wird und/oder um zu verhindern, dass das entsprechende Ergebnisdatenelement in dem Ziel gespeichert wird. Gemäß einer möglichen Konvention kann ein Masken-Bit, das binär auf null (d. h. 0) gesetzt wurde, einen maskierten Vorgang darstellen, während ein Maskenbit, das binär auf 1 (d. h. 1) eingestellt wurde, einen nichtmaskierten Vorgang darstellen kann.
  • In manchen Ausführungsformen kann der Befehlssatz zusätzlich zu dem Befehl, der die Ergebnismaske erzeugt, auch einen zweiten Befehl umfassen, der dazu in der Lage ist, die Ergebnismaske als einen Quellenprädikatoperanden oder bedingten Steueroperanden anzugeben oder darauf zuzugreifen, der verwendet wird, um zu prädizieren, bedingt zu steuern oder zu maskieren, ob entsprechende Vorgänge durchgeführt und/oder entsprechende Ergebnisse gespeichert werden sollen oder nicht. Ein spezielles Beispiel für einen Befehl, der die Ergebnismaske in bestimmten Ausführungen als einen Quellenprädikatoperanden angeben kann, ist ein VMOVDQA32-Befehl, der in Intel® Architecture Instruction Set Extensions Programming Reference, 319433-017, veröffentlicht im Dezember 2013, beschrieben ist. Der VMOVDQA32-Befehl ist dazu in der Lage, angeglichene gepackte Doppelwert-Integerwerte aus einem gepackten Quellendatenoperanden unter Verwendung einer Quellenschreibmaske zur Prädikation in einen gepackten Ergebnisdatenoperanden zu verschieben. Die Ergebnismaske kann von dem VMOVDQA32-Befehl als die Quellenschreibmaske angegeben werden. In manchen Ausführungen und/oder bei manchen Algorithmen kann die Ergebnismaske von solchen Prädikatbefehlen verwendet werden, um ein bestimmtes Leistungsverhalten und/oder Effizienzvorteile aus einer allgemeinen Algorithmus-Perspektive zu bieten. In manchen Ausführungsformen kann die Ergebnismaske sogar dann verwendet werden, falls die gepackten Ergebnisdaten 1014 genügend Bits aufweisen, dass das zusätzliche Bit stattdessen in die Indizes integriert werden könnte.
  • 11 ist ein Blockschaltbild, das eine Ausführungsform Zweiquellenindexsortierungsvorgangs mit Maske für eine größte Hälfte von Datenelementen 1150 darstellt, der als Antwort auf eine Ausführungsform eines Zweiquellenindexsortierungsbefehls mit Maske für eine größte Hälfte von Datenelementen durchgeführt werden kann. Der Befehl kann erste gepackte Quellendaten 1110 mit einem ersten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen und kann zweite gepackte Quellendaten 1112 mit einem zweiten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen. In der dargestellten Ausführungsform sind die Werte in jeden der ersten gepackten Quellendaten und den zweiten gepackten Quellendaten in sortierter Reihenfolge, obwohl dies nicht erforderlich ist. In manchen Ausführungsformen kann angenommen werden (z. B. bedingungslos für den Befehl angenommen werden) oder es kann erforderlich sein, dass die Quellendatenelemente innerhalb der jeweiligen gepackten Daten in sortierter Reihenfolge sind. In dem dargestellten Beispiel wird eine ansteigende Reihenfolge mit ansteigender Bit-Signifikanz in den Operanden verwendet, obwohl in einer weiteren Ausführungsform gegebenenfalls auch eine absteigende Reihenfolge verwendet werden kann. In anderen Ausführungsformen kann nicht angenommen werden oder ist es nicht erforderlich, dass die Datenelemente innerhalb jeder der ersten gepackten Quellendaten und der zweiten gepackten Quellendaten innerhalb der jeweiligen gepackten Daten in sortierter Reihenfolge sind (z. B. kann der Befehl auch dann korrekt ausgeführt werden, wenn die Elemente nicht in einer sortierten Reihenfolge sind).
  • Gepackte Ergebnisdaten 1114 können erzeugt (z. B. von einer Ausführungseinheit 106) und als Antwort auf den Befehl in einem Zielspeicherort gespeichert werden. In manchen Ausführungsformen können die gepackten Ergebnisdaten zumindest vier Indizes umfassen. In manchen Ausführungsformen kann jeder Index auf ein paar aus entsprechenden Datenelementpositionen in den ersten und zweiten gepackten Quellendaten zeigen, diese identifizieren oder ihnen zugewiesen sein. Ähnlich dazu kann eine Ergebnismaske 1120 als Antwort auf den Befehl gespeichert werden. Die Ergebnismaske kann Maskenelemente aufweisen, die den Indizes entsprechen.
  • In der Ausführungsform aus 11 können die Indizes einem gereihten größten Teilsatz, z. B. einer größten Hälfte in der dargestellten Ausführungsform, aller Datenelemente in den ersten und zweiten gepackten Quellendaten entsprechen. Beispielsweise können die acht Indizes in Positionen in den gepackten Ergebnisdaten gespeichert werden, die eine sortierte Reihenfolge von entsprechenden acht größten Datenelementen in den ersten und zweiten gepackten Quellendaten darstellen sollen (z. B. 12, 12, 16, 18, 24, 43, 55 und 60). Ähnlich dazu können die Maskenelemente der Ergebnismaske einem gereihten größten Teilsatz, z. B. einer größten Hälfte in der dargestellten Ausführungsform, aller Datenelemente in den ersten und zweiten gepackten Quellendaten entsprechen.
  • In der dargestellten Ausführungsform werden die acht Indizes in Positionen in den gepackten Ergebnisdaten gespeichert, die eine gereihte ansteigende Reihenfolge der entsprechenden acht größten Datenelemente in den ersten und zweiten gepackten Quellendaten darstellen sollen. In anderen Ausführungsformen kann gegebenenfalls eine absteigende oder eine umgekehrte Reihenfolge verwendet werden.
  • 12 ist ein Blockschaltbild, das eine Ausführungsform eines unsortierten Zweiquellenindexsortierungsvorgangs mit Maske für eine kleinste Hälfte von Datenelementen 1252 darstellt, der als Antwort auf eine Ausführungsform eines unsortierten Zweiquellenindexsortierungsbefehls mit Maske für eine kleinste Hälfte von Datenelementen durchgeführt werden kann. Der Befehl kann erste gepackte Quellendaten 1210 mit einem ersten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen und kann zweite gepackten Quellendaten 1212 mit einem zweiten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen. In dem Vorgang aus 12 sind die Werte der Datenelemente in dem ersten gepackten Quellendatenoperanden nicht in einer sortierten Reihenfolge. Ähnlich dazu sind die Werte der Datenelemente in dem zweiten gepackten Quellendatenoperanden nicht in einer sortierten Reihenfolge. Es kann nicht angenommen werden oder erforderlich sein, dass die Datenelemente innerhalb jeder der ersten gepackten Quellendaten und der zweiten gepackten Quellendaten innerhalb des jeweiligen gepackten Datenoperanden in sortierter Reihenfolge sind (z. B. kann der Befehl korrekt ausgeführt werden, wenn die Elemente in den gepackten Quellendatenoperanden in unsortierter Reihenfolge sind).
  • Gepackte Ergebnisdaten 1214 können erzeugt (z. B. von einer Ausführungseinheit 106) und als Antwort auf den Befehl in einem Zielspeicherort gespeichert werden. In manchen Ausführungsformen kann jeder Index auf ein Paar aus entsprechenden Datenelementpositionen in den ersten und zweiten gepackten Quellendaten zeigen, diese identifizieren oder ihnen zugewiesen sein. Ähnlich dazu kann eine Ergebnismaske 1220 als Antwort auf den Befehl gespeichert werden. Die Ergebnismaske kann Maskenelemente aufweisen, die den Indizes entsprechen.
  • In der dargestellten Ausführungsform entsprechen die Indizes und Maskenelemente einem kleinsten Teilsatz, in diesem Fall einer kleinsten Hälfte, aller Datenelemente in den ersten und zweiten gepackten Quellendaten. In einer weiteren Ausführungsform können die Indizes und Maskenelemente einem größten Teilsatz, z. B. einer größten Hälfte, aller Datenelemente in den ersten und zweiten gepackten Quellendaten entsprechen.
  • In der dargestellten Ausführungsform werden die acht Indizes in Positionen in den gepackten Ergebnisdaten gespeichert, die eine sortierte ansteigende Reihenfolge der entsprechenden acht größten Datenelemente in den ersten und zweiten gepackten Quellendaten darstellen sollen. In anderen Ausführungsformen kann gegebenenfalls eine absteigende oder umgekehrte Reihenfolge verwendet werden.
  • 13 ist ein Blockschaltbild, das eine Ausführungsform eines Zweiquellenindex- und Datensortierungsvorgangs für eine kleinste Hälfte von Datenelementen 1354 darstellt, der als Antwort auf eine Ausführungsform eines Zweiquellenindex- und Datensortierungsbefehls für eine kleinste Hälfte von Datenelementen durchgeführt werden kann. Der Befehl kann erste gepackte Quellendaten 1310 mit einem ersten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen und kann zweite gepackte Quellendaten 1312 mit einem zweiten Satz aus zumindest vier Datenelementen angeben oder anderweitig darstellen. In der dargestellten Ausführungsform sind die Werte in jeder der ersten gepackten Quellendaten und der zweiten gepackten Quellendaten in Reihenfolge sortiert, obwohl dies nicht erforderlich ist. In manchen Ausführungsformen kann angenommen werden (z. B. bedingungslos für den Befehl angenommen werden) oder es kann erforderlich sein, dass die Quellendatenelemente innerhalb der jeweiligen gepackten Daten in sortierter Reihenfolge sind. In dem dargestellten Beispiel wird eine ansteigende Reihenfolge mit ansteigender Bit-Signifikanz in den Operanden verwendet, obwohl in einer weiteren Ausführungsform gegebenenfalls eine absteigende Reihenfolge verwendet werden kann. In anderen Ausführungsformen kann nicht angenommen werden oder es muss nicht erforderlich sein, dass die Datenelemente innerhalb jeder der ersten gepackten Quellendaten und der zweiten gepackten Quellendaten innerhalb der jeweiligen gepackten Daten in sortierter Reihenfolge sind (z. B. kann der Befehl korrekt ausgeführt werden, wenn die Elemente in einer unsortierten Reihenfolge sind).
  • Erste gepackte Ergebnisdaten 1314 können erzeugt werden (z. B. von einer Ausführungseinheit 106) und als Antwort auf dem Befehl in einem Zielspeicherort gespeichert werden. In manchen Ausführungsformen kann jeder Index auf ein Paar aus entsprechenden Datenelementpositionen in den ersten und zweiten gepackten Quellendaten zeigen, diese identifizieren oder ihnen zugewiesen sein. Ähnlich dazu kann eine Ergebnismaske 1320 als Antwort auf den Befehl gespeichert werden. Die Ergebnismaske kann Maskenelemente aufweisen, die den Indizes entsprechen.
  • In dieser Ausführungsform können zweite gepackte Ergebnisdaten 1316 erzeugt und als Antwort auf den Befehl in einem zweiten Zielspeicherort gespeichert werden. Der zweite Zielspeicherort kann von dem Befehl angegeben oder anderweitig dargestellt werden und kann ein Gepackte-Daten-Register, ein Memory-Ort oder ein anderer Speicherort sein. Die zweiten gepackten Ergebnisdaten können die entsprechenden Datenelemente umfassen, die den gespeicherten Indizes und den Maskenelementen entsprechen, die in Positionen der zweiten gepackten Ergebnisdaten gespeichert sind, die die sortierte Reihenfolge wiedergeben.
  • In der dargestellten Ausführungsform entsprechen die sortierten Datenelemente, Indizes und Maskenelemente einem kleinsten Teilsatz, in diesem Fall einer kleinsten Hälfte, aller Datenelemente in den ersten und zweiten gepackten Quellendaten. In einer weiteren Ausführungsform können die sortierten Datenelemente, Indizes und Maskenelemente einem größten Teilsatz, z. B. einer größten Hälfte, aller Datenelemente in den ersten und zweiten gepackten Quellendaten entsprechen.
  • In der dargestellten Ausführungsform werden die sortierten Datenelemente, Indizes und Maskenelemente in Positionen gespeichert, um eine ansteigende Reihenfolge darzustellen. In anderen Ausführungsformen kann gegebenenfalls eine absteigende oder umgekehrte Reihenfolge verwendet werden.
  • Sortierte Indizes werden als ein Ergebnis in 10 gespeichert. Sortierte Indizes sowie sortierte Datenelemente werden als Ergebnisse in 13 gespeichert. In einer weiteren Ausführungsform können gegebenenfalls sortierte Datenelemente, aber keine Indizes als Antwort auf einen Befehl gespeichert werden.
  • Die Vorgänge aus 1113 weisen bestimmte Ähnlichkeiten mit dem Vorgang aus 10 auf. Um ein Verkomplizieren der Beschreibung zu verhindern, wurden die verschiedenen und/oder zusätzlichen Merkmale für die Vorgänge aus 1113 vorrangig beschrieben, ohne dass alle gegebenenfalls ähnlichen oder gemeinsamen Merkmale und Details in Bezug auf den Vorgang aus 10 wiederholt wurden. Jedoch gilt anzuerkennen, dass die zuvor beschriebenen Merkmale und Details des Vorgangs aus 10 gegebenenfalls auch auf die Vorgänge aus einer der 1113 zutreffen, sofern nicht anders angegeben oder anderweitig klar hervorgeht.
  • Ein Befehlssatz kann einen oder mehrerer der hierin offenbarten Befehle umfassen. Beispielsweise kann ein Befehlssatz in manchen Ausführungsformen gegebenenfalls einen ersten Befehl (z. B. wie für einen aus 34 dargestellt oder beschrieben), der dazu in der Lage ist, ein erstes sortiertes Ergebnis zu erzeugen und einen zweiten Befehl umfassen, der sortierte gepackte Quellendaten annimmt oder benötigt (z. B. wie für einen aus 6, 7, 9, 10, 11 und 13 dargestellt oder beschrieben). Als weiteres Beispiel kann ein Befehlssatz in manchen Ausführungsformen gegebenenfalls einen ersten Befehl für eine Sortierung von einer kleinsten Hälfte aller Quellendatenelemente umfassen (z. B. wie für einen aus 6 und 10 dargestellt oder beschrieben) und einen zweiten Befehl für eine Sortierung von einer größten Hälfte aller Datenelemente umfassen (z. B. wie für einen aus 7 und 10 dargestellt oder beschrieben). Alternativ dazu kann ein Befehlssatz nur einen der Befehle wie hierin dargestellt und beschrieben, umfassen.
  • Der folgende Code-Ausschnitt stellt eine beispielhafte Ausführungsform eines Algorithmus dar, der Beispiele für Befehle, wie hierin verwendet offenbart, um 32 Integer zu sortieren. Der sortassistd-Befehl sortiert Doppelwort-Elemente in zustimmender Reihenfolge mit einem Vorgang, der jenem ähnelt, der in 3 dargestellt ist. Die sortedmergedassistl- und sortedmergedassisth-Befehle sind zwei Quellenbefehle, die sortierte Indizes für bereits sortierte Elemente in ersten und zweiten gepackten Quellendaten speichern, ähnlich wie die Vorgänge aus 1011.
  • Figure DE102015002215A1_0002
  • In manchen Ausführungsformen kann ein Befehlsformat einen Vorgangscode oder Opcode umfassen. Der Opcode kann eine Vielzahl von Bits oder ein oder mehrere Felder darstellen, die ausgelegt sind, den Befehl und/oder den Vorgang, der durchzuführen ist, zu identifizieren (z. B. einen Sortierungsindexvorgang). Abhängig von dem jeweiligen Befehl kann das Befehlsformat gegebenenfalls auch einen oder mehrere Quellen- und/oder Ziel-Spezifikationen umfassen. Beispielsweise können diese Spezifikationen Bits oder ein oder mehrere Felder umfassen, um eine Adresse eines Registers, einen Memory-Ort oder einen anderen Speicherort anzugeben. Alternativ dazu können eine oder mehrere Quellen und/oder Ziele anstelle einer solchen expliziten Spezifikation gegebenenfalls implizit für den Befehl sein, anstelle dass sie explizit angegeben werden. Zusätzlich dazu kann es gegebenenfalls impliziert sein, dass eine Quelle als ein Ziel wiederverwendet werden soll. Zusätzlich dazu kann das Befehlsformat gegebenenfalls zusätzliche Felder hinzufügen, es kann bestimmte Felder überlagern etc. Felder müssen keine aufeinanderfolgenden Bit-Sequenzen umfassen, vielmehr können sie aus nicht aufeinanderfolgenden oder getrennten Bits bestehen. In manchen Ausführungsformen kann das Befehlsformat einem VEX- oder EVEX-Verschlüsselung oder Befehlsformat folgen, obwohl der Schutzumfang der Erfindung nicht darauf beschränkt ist.
  • 14 ist ein Blockschaltbild einer beispielhaften Ausführungsform eines geeigneten Satzes aus Gepackte-Daten-Registern 1408. Die Gepackte-Daten-Register umfassen zweiunddreißig 512-Bit-Gepackte-Daten-Register, beschriftet mit ZMM0 bis ZMM31. In der dargestellten Ausführungsform werden die niedrigeren 256 Bits der niedrigeren sechzehn Register, nämlich ZMM0–ZMM15, umbenannt oder auf jeweiligen 256-Bit-Gepackte-Daten-Registern, beschriftet mit YMM0–YMM15, überlagert, obwohl dies nicht erforderlich ist. Ähnlich dazu werden in der dargestellten Ausführungsform die niedrigeren 128 Bits der Register YMM0–XMM15 umbenannt oder auf jeweiligen 128-Bit-Gepackte-Daten-Registern, beschriftet mit XMM0–XMM15, überlagert, obwohl dies nicht erforderlich ist. Die 512-Bit-Register ZMM0 bis ZMM31 sind ausgelegt, gepackte 512-Bit-Daten, gepackte 256-Bit-Daten oder gepackte 128-Bit-Daten zu enthalten. Die 256-Bit-Register XMM0–YMM15 sind ausgelegt, gepackte 256-Bit-Daten oder gepackte 128-Bit-Daten zu enthalten. Die 128-Bit-Register XMM0-XMM15 sind ausgelegt, gepackte 128-Bit-Daten zu enthalten. In manchen Ausführungsformen kann jedes der Register verwendet werden, um entweder gepackte Gleitkommadaten oder gepackte Integerdaten zu speichern. Unterschiedliche Datenelementgrößen werden unterstützt, einschließlich zumindest 8-Bit-Byte-Daten, 16-Bit-Wortdaten, 32-Bit-Doppelwort-, 32-Bit-Einzelpräzisionsgleitkommadaten, 64-Bit-Vierfachwort- und 64-Bit-Doppelpräzisionsgleitkommadaten. In alternativen Ausführungsformen kann eine unterschiedliche Anzahl von Registern und/oder verschiedene Größen von Registern verwendet werden. In wieder anderen Ausführungsformen können Register ein Umbenennen von größeren Registern auf kleineren Registern verwenden oder nicht und können verwendet werden, um Gleitkommadaten zu speichern oder nicht.
  • Ein Befehlssatz umfasst ein oder mehrere Befehlsformate. Ein gegebenes Befehlsformat definiert verschiedene Felder (Anzahl von Bits, Position von Bits), um u. a. den auszuführenden Vorgang (Opcode) und den/die Operand(en) anzugeben, auf dem der Vorgang auszuführen ist. Manche Befehlsformate werden durch die Definition von Befehlsvorlagen (oder Unterformaten) weiter aufgeschlüsselt werden. Beispielsweise können die Befehlsvorlagen eines gegebenen Befehlsformats definiert sein, dass sie verschiedene Teilsätze der Felder des Befehlsformats aufweisen (die aufgenommenen Felder sind üblicherweise in derselben Reihenfolge, aber zumindest einige weisen andere Bit-Positionen auf, da es weniger aufgenommene Felder gibt) und/oder sind definiert, ein gegebenes Feld aufzuweisen, das unterschiedlich interpretiert wird. Somit wird jeder Befehl eines ISA unter Verwendung eines gegebenen Befehlsformats ausgedrückt (und, falls definiert, in einer gegebenen Befehlsvorlage dieses Befehlsformats) und umfasst Felder zum Angeben des Vorgangs und der Operanden. Beispielsweise weist ein beispielhafter ADD-Befehl einen speziellen Opcode und ein Befehlsformat auf, das ein Opcode-Feld umfasst, um anzugeben, dass Opcode und Opcode-Felder Operanden (Quelle 1/Ziel und Quelle 2) auswählen; und ein Auftreten dieses ADD-Befehls in einem Befehlsstrom weist einen speziellen Inhalt in den Operandenfeldern auf, der spezielle Operanden auswählt. Ein Satz aus SIMD-Erweiterungen, die zu den Advanced Vector Extensions (AVX) (AVX1 und AVX2) zählen und die das Vector Extensions (VEX) Verschlüsselungsschema verwendet, wurde herausgegeben und/oder veröffentlicht (siehe z. B. Intel® 64 snd IA-32 Architectures Software Developers Manual, Oktober 2011; und siehe Intel® Advanced Vector Extensions Programming Reference, Juni 2011).
  • Beispielhafte Befehlsformate
  • Ausführungsformen des/der hierin beschriebenen Befehls/Befehle können in verschiedenen Formaten ausgeführt werden. Zusätzlich dazu sind beispielhafte Systeme, Architekturen und Pipelines unten detailliert beschrieben. Ausführungsformen des/der Befehls/Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf die beschriebenen beschränkt.
  • Generisches vektorfreundliches Befehlsformat
  • Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (z. B. gibt es bestimmte Felder eigens für Vektorvorgänge). Während Ausführungsformen beschrieben werden, in denen Vektor- und Skalenvorgänge durch das vektorfreundliche Befehlsformat unterstützt werden, verwenden alternative Ausführungsformen nur Vektorvorgänge mit dem vektorfreundlichen Befehlsformat.
  • 15A15B sind Blockschaltbilder, die ein generisches vektorfreundliches Befehlsformat und Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung darstellen. 15A ist ein Blockschaltbild, das ein generisches vektorfreundliches Befehlsformat und Befehlsvorlagen der Klasse A davon gemäß Ausführungsformen der Erfindung darstellt; während 15B ein Blockschaltbild ist, das das generische vektorfreundliche Befehlsformat und Befehlsvorlagen der Klasse B davon gemäß Ausführungsformen der Erfindung darstellt. Im Speziellen ist ein generisches vektorfreundliches Befehlsformat 1500 eines, für das Befehlsvorlagen der Klasse A und der Klasse B definiert sind, von denen beide Befehlsvorlagen für keinen Speicherzugriff 1505 und Befehlsvorlagen für Speicherzugriff 1520 umfassen. Der Begriff generisch bezieht sich im Kontext des vektorfreundlichen Befehlsformats auf das Befehlsformat, das nicht an einen bestimmten Befehlssatz gebunden ist.
  • Während Ausführungsformen der Erfindung beschrieben werden, in denen das vektorfreundliche Befehlsformat die Folgenden unterstützt: eine 64-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 32 Bit (4 Byte) oder 64 Bit (8 Byte) (und somit besteht ein 64-Byte-Vektor entweder aus 16 Doppelwort-Elementen oder alternativ dazu aus 8-Vierfachwort-Elementen); eine 64-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 16 Bit (2 Byte) oder 8 Bit (1 Byte); eine 32-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); und eine 16-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); können alternative Ausführungsformen mehrere, weniger und/oder andere Vektoroperandengrößen (z. B. 256-Byte-Vektoroperanden) mit mehreren, weniger oder verschiedenen Datenelementbreiten (z. B. 128-Bit-(16-Byte)-Datenelementbreiten) unterstützen.
  • Die Befehlsformate der Klasse A aus 15A umfassen: 1) innerhalb der Befehlsvorlagen ohne Speicherzugriff 1505 wird eine Befehlsvorlage für einen Vorgang ohne Speicherzugriff 1510 eine Befehlsvorlage für einen Vorgang vom Datentransformationstyp ohne Speicherzugriff 1515 angezeigt; und 2) innerhalb der Befehlsvorlagen mit Speicherzugriff 1520 wird eine temporäre 1525 Befehlsvorlage mit Speicherzugriff und eine nichttemporäre 1530 Befehlsvorlage mit Speicherzugriff angezeigt. Die Befehlsvorlagen der Klasse B in 15B umfassen Folgendes: 1) innerhalb der Befehlsvorlagen ohne Speicherzugriff 1505 werden eine Befehlsvorlage für einen partiellen Rundungsvorgang vom Steuertyp ohne Speicherzugriff, mit Schreibmaskensteuerung, 1512 und eine Befehlsvorlage für einen Vorgang vom vsize-Typ ohne Speicherzugriff, mit Schreibmaskensteuerung 1517 angezeigt; und 2) innerhalb der Befehlsvorlagen mit Speicherzugriff 1520 wird eine Befehlsvorlage für eine Schreibmaskensteuerung mit Speicherzugriff 1527 angezeigt.
  • Das generische vektorfreundliche Befehlsformat 1500 umfasst die folgenden Felder, die unten in der in 15A15B dargestellten Reihenfolge angeführt sind.
  • Formatfeld 1540 – ein spezieller Wert (ein Befehlsformatidentifikationswert) in diesem Feld identifiziert nur das vektorfreundliche Befehlsformat und somit das Auftreten von Befehlen in dem vektorfreundlichen Befehlsformat in Befehlsströmen. Als solches ist das Feld in dem Sinn optional, da es nicht für einen Befehlssatz gebraucht wird, der nur das generische vektorfreundliche Befehlsformat aufweist.
  • Basisvorgangsfeld 1542 – sein Inhalt unterscheidet verschiedene Basisvorgänge.
  • Registerindexfeld 1544 – sein Inhalt, gibt die Positionen der Quellen- und Zieloperanden, direkt oder durch Adressenerzeugung, an, unabhängig davon, ob sie sich in Registern oder in einem Speicher befinden. Diese umfassen eine ausreichende Anzahl von Bits, um N-Register aus einer PxQ-(z. B. 32x512, 16x128, 32x1024, 64x1024)Registerdatei auszuwählen. Während N in einer Ausführungsform bis zu drei Quellen- und ein Zielregister sein kann, können alternative Ausführungsformen mehr oder weniger Quellen- und Zielregister unterstützen (z. B. können sie bis zu zwei Quellen unterstützen, wobei einer dieser Quellen auch als Ziel agiert, sie können bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als Ziel agiert, sie können bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifikatorfeld 1546 – sein Inhalt unterscheidet das Auftreten von Befehlen in dem generischen Vektorbefehlsformat, die einen Speicherzugriff angeben von jenen, die das nicht tun; d. h. zwischen Befehlsvorlagen ohne Speicherzugriff 1505 und Befehlsvorlagen mit Speicherzugriff 1520. Speicherzugriffvorgänge lesen und/oder schreiben in die Speicherhierarchie (in manchen Fällen geben sie dabei die Quellen- und/oder Zieladressen unter Verwendung der Werte in den Registern an), während Vorgänge ohne Speicherzugriff dies nicht tun (z. B. die Quellen und die Ziele sind Register). Während dieses Feld in einer Ausführungsform auch aus drei verschiedenen Arten zum Durchführen von Speicheradressenberechnungen auswählt, können alternative Ausführungsformen mehr, weniger oder andere Wege zum Durchführen von Speicheradressenberechnungen unterstützen.
  • Vergrößerungsvorgangsfeld 1550 – sein Inhalt unterscheidet, welcher aus einer Vielzahl von verschiedenen Vorgängen zusätzlich zu dem Basisvorgang durchgeführt werden soll. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Erfindung ist dieses Feld in ein Klassenfeld 1568, ein Alphafeld 1552 und ein Betafeld 1554 unterteilt. Das Vergrößerungsvorgangsfeld 1550 ermöglicht es gemeinsamen Gruppen von Vorgängen, in einem einzigen Befehl anstelle von in 2, 3 oder 4 Befehlen ausgeführt zu werden.
  • Skalenfeld 1560 – sein Inhalt ermöglicht das Skalieren des Inhalts des Indexfeldes für eine Speicheradressenerzeugung (z. B. für die Adressenerzeugung, die 2Skala·Index + Basis verwendet).
  • Verschiebungsfeld 1562A – sein Inhalt wird als Teil der Speicheradressenerzeugung verwendet (z. B. für eine Adressenerzeugung, die 2Skala·Index + Basis + Verschiebung verwendet).
  • Verschiebungsfaktorfeld 1562B (es gilt zu beachten, dass die direkte Gegenüberstellung von Verschiebungsfeld 1562A mit dem Verschiebungsfaktorfeld 1562B angibt, das eines oder das andere verwendet wird) – sein Inhalt wird als Teil der Adressenerzeugung verwendet; es gibt einen Verschiebungsfaktor an, der durch die Größe eines Speicherzugriffs (N) zu skalieren ist – wobei N die Anzahl von Bytes in dem Speicherzugriff ist (z. B. für eine Adressenerzeugung, die 2Skala·Index + Basis + skalierte Verschiebung verwendet). Redundante niedrige Bits werden ignoriert und somit wird der Inhalt des Verschiebungsfaktorfelds mit der Gesamtgröße der Speicheroperanden (N) multipliziert, um die endgültige Verschiebung zu erzeugen, die beim Berechnen einer effektiven Adresse zu verwenden ist. Der Wert von N wird von der Prozessorhardware bei Laufzeit, basierend auf dem vollen Opcode-Feld 1574 (hierin später beschrieben) und dem Datenmanipulationsfeld 1554C bestimmt. Das Verschiebungsfeld 1562A und das Verschiebungsfaktorfeld 1562B sind in dem Sinn optional, als dass sie nicht für die Befehlsvorlagen ohne Speicherzugriff 1505 verwendet werden und/oder verschiedene Ausführungsformen können nur eines oder keines der beiden umsetzen.
  • Datenelementbreitenfeld 1564 – sein Inhalt unterscheidet, welche aus einer Vielzahl von Datenelementbreiten zu verwenden ist (in manchen 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 benötigt wird, falls nur eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unter Verwendung einiger Aspekte der Opcodes unterstützt werden.
  • Schreibmaskenfeld 1570 – sein Inhalt steuert, auf einer Basis pro Datenelementposition, ob die Datenelementposition in dem Zielvektoroperanden das Ergebnis des Basisvorgangs und des Vergrößerungsvorgangs wiederspiegelt. Befehlsvorlagen der Klasse A unterstützen ein zusammenführendes Schreibmaskieren, während Befehlsvorlagen der Klasse B ein zusammenführendes sowie ein nullsetzendes Schreibmaskieren unterstützen. Bei einer Zusammenführung ermöglichen es die Vektormasken jedem Elementsatz in dem Ziel, während der Ausführung jedes Vorgangs (angegebenen durch den Basisvorgang und dem Vergrößerungsvorgang) vor Updates geschützt zu werden; in einer anderen Ausführungsform, den alten Wert jedes Elements des Ziels zu bewahren, wobei das entsprechende Maskenbit eine 0 aufweist. In Gegensatz dazu ermöglichen Vektormasken es jedem Satz aus Elementen in dem Ziel, während der Ausführung jedes Vorgangs (angegeben von dem Basisvorgang und dem Vergrößerungsvorgang) nullgesetzt zu werden; in einer Ausführungsform, wird ein Element des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen 0-Wert aufweist. Ein Teil dieser Funktionalität ist die Möglichkeit, die Vektorlänge des Vorgangs, der durchgeführt wird, zu steuern (d. h. die Spanne der Elemente, die modifiziert werden, vom ersten bis zum letzten); jedoch ist es nicht notwendig, dass die Elemente, die modifiziert werden, aufeinanderfolgend sind. Somit ermöglicht das Schreibmaskenfeld 1570 partielle Vektorvorgänge, einschließlich Laden, Speichern, arithmetische, logische etc. Während Ausführungsformen der Erfindung beschrieben sind, in denen der Inhalt des Schreibmaskenfelds 1570 eines aus einer Anzahl von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält (und somit identifiziert der Inhalt des Schreibmaskenfelds 1570 indirekt die durchzuführende Maskierung), ermöglichen es alternative Ausführungsformen stattdessen oder zusätzlich dazu, dass der Inhalt des Schreibmaskenfelds 1570 die durchzuführende Maskierung direkt angibt.
  • Immediatfeld 1572 – sein Inhalt ermöglicht die Angabe eines Immediaten. Dieses Feld ist in dem Sinn optional, dass es nicht in einer Ausführung des generischen vektorfreundlichen Formats vorhanden ist, das Immediate nicht überstützt und nicht bei Befehlen vorhanden ist, die keinen Immediaten verwenden.
  • Klassenfeld 1568 – sein Inhalt unterscheidet zwischen verschiedenen Klassen von Befehlen. Unter Bezugnahme auf 15A–B, wählen die Inhalte dieses Felds zwischen Befehlen der Klasse A und B aus. In 15A–B werden Quadrate mit abgerundeten Ecken verwendet, um einen speziellen Wert anzugeben, der in einem Feld präsentiert wird (z. B. Klasse A 1568A bzw. Klasse B 1568B für das Klassenfeld 1568 in 15A–B).
  • Befehlsvorlagen der Klasse A
  • Im Fall von Befehlsvorlagen der Klasse A ohne Speicherzugriff 1505 wird das Alphafeld 1552 als ein RS-Feld 1552A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Vergrößerungsvorgangstypen durchzuführen sind (z. B. Runden 1552A.1 bzw. Datentransformation 1552A.2 sind für einen Vorgang vom Rundungstyp ohne Speicherzugriff 1510 und Befehlsvorlagen für einen Vorgang vom Datentransformtyp ohne Speicherzugriff 1515 angegeben), während das Betafeld 1554 unterscheidet, welche der Vorgänge des angegebenen Typs durchzuführen sind. In den Befehlsvorlagen ohne Speicherzugriff 1505 sind das Skalenfeld 1560, das Verschiebungsfeld 1562A und das Verschiebungsskalenfeld 1562B nicht vorhanden.
  • Befehlsvorlagen ohne Speicherzugriff – Vorgang vom vollen Rundungssteuertyp
  • In der Befehlsvorlage für einen Vorgang vom vollen Rundungssteuertyp ohne Speicherzugriff 1510 wird das Betafeld 1554 als ein Rundungssteuerfeld 1554A interpretiert, dessen Inhalt(e) eine statische Rundung bereitstellen. Während das Rundungssteuerfeld 1554A in den beschriebenen Ausführungsformen der Erfindung ein Feld zum Unterdrücken aller Gleitkommaausnahmen (SAE) 1556 und ein Steuerfeld für einen Rundungsvorgang umfasst, können alternative Ausführungsformen diese beiden Konzepte in demselben Feld unterstützen oder verschlüsseln oder kann nur eines der beiden Konzepte/Felder aufweisen (kann z. B. nur das Rundungsvorgangssteuerfeld 1558 umfassen).
  • SAE-Feld 1556 – sein Inhalt unterscheidet, ob der Ausnahmeereignisbericht ausgeschaltet werden soll oder nicht; wenn der Inhalt des SAE-Felds 1556 angibt, dass die Unterdrückung aktiviert ist, berichtet ein gegebener Befehl nicht über jegliches Gleitkommaausnahme-Flag und aktiviert keinen Gleitkommaausnahme-Handler.
  • Rundungsvorgangssteuerfeld 1558 – sein Inhalt unterscheidet, welcher aus einer Gruppe von Rundungsvorgängen durchzuführen ist (z. B. Aufrunden, Abrunden, gegen Null runden und auf nächste Aufrunden). Somit ermöglicht das Rundungsvorgangssteuerfeld 1558 das Verändern des Rundungsmodus je nach Befehl. In einer Ausführungsform der Erfindung, in der ein Prozessor ein Steuerregister zum Angeben von Rundungsmodi umfasst, überschreibt der Inhalt des Rundungsvorgangssteuerfelds 1550 diesen Registerwert.
  • Befehlsvorlagen ohne Speicherzugriff – Vorgang vom Datentransformationstyp
  • In der Befehlsvorlage für den Vorgang vom Datentransformationstyp ohne Speicherzugriff 1515 wird das Betafeld 1554 als ein Datentransformationsfeld 1554B interpretiert, dessen Inhalt unterscheidet, welche aus einer Reihe von Datentransformationen durchzuführen ist (z. B. keine Datentransformation, Swizzle, Übertragung).
  • Im Fall einer Befehlsvorlage mit Speicherzugriff 1520 der Klasse A wird das Alphafeld 1552 als ein Leerungshinweisfeld 1552B interpretiert, dessen Inhalt unterscheidet, welcher der Leerungshinweise verwendet werden soll (in 15A werden temporäre 1552B.1 bzw. nichttemporäre 1552B.2 für den Speicherzugriff, temporäre 1525 Befehlsvorlage und den Speicherzugriff, nichttemporäre 1530 Befehlsvorlage angegeben), während das Betafeld 1554 als ein Datenmanipulationsfeld 1554C interpretiert wird, dessen Inhalt unterscheidet, welcher aus einer Reihe von Datenmanipulationsvorgängen (auch als Primitiven bekannt) durchgeführt werden soll (z. B. keine Manipulation; Übertragung; Hochkonvertieren einer Quelle; und Herunterkonvertieren eines Ziels). Die Befehlsvorlagen mit Speicherzugriff 1520 umfassen das Skalenfeld 1560 und gegebenenfalls das Verschiebungsfeld 1562A oder das Verschiebungsskalenfeld 1562B.
  • Vektorspeicherbefehle führen Vektorladungen aus und Vektorspeicherungen in den Speicher mit Konversionsunterstützung durch. Wie bei regulären Vektorbefehlen, übertragen Vektorspeicherbefehle Daten je nach Element vom/zum Speicher, wobei die Elemente, die tatsächlich übertragen werden, von den Inhalten der Vektormaske angegeben werden, die als die Schreibmaske ausgewählt wurde.
  • Befehlsvorlagen mit Speicherzugriff – temporär
  • Temporäre Daten werden wahrscheinlich sehr bald wiederverwendet werden, um das Caching auszunutzen. Dies ist jedoch ein Hinweis und verschiedene Prozessoren können ihn auf unterschiedliche Arten ausführen, einschließlich eines kompletten Ignorierens des Hinweises.
  • Befehlsvorlagen mit Speicherzugriff – nichttemporär
  • Nichttemporäre Daten werden wahrscheinlich nicht so bald wiederverwendet werden, um das Caching in dem Level-1-Cache auszunutzen und sollten Priorität beim Entleeren haben. Dies ist jedoch ein Hinweis und verschiedene Prozessoren können ihn auf unterschiedliche Arten ausführen, einschließlich eines kompletten Ignorierens des Hinweises.
  • Befehlsvorlagen der Klasse B
  • Im Fall der Befehlsvorlagen der Klasse B, wird das Alphafeld 1552 als ein Schreibmaskensteuer-(Z)Feld 1552C interpretiert, dessen Inhalt unterscheidet, ob das Schreibmaskieren, das von dem Schreibmaskenfeld 1570 gesteuert wird, zusammenführend oder nullsetzend sein soll.
  • Im Fall der Befehlsvorlagen ohne Speicherzugriff 1505 der Klasse B, wird ein Teil des Betafelds 1554 als ein RL-Feld 1557A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Vergrößerungsvorgangstypen durchgeführt werden soll (z. B. Rundung 1557A.1 bzw. Vektorlänge (VSIZE) 1557A.2 werden für die Befehlsvorlage für partiellen Vorgang ohne Speicherzugriff, Schreibmaskensteuerung, vom Rundungssteuerungstyp 1512 und die Befehlsvorlage für einen Vorgang ohne Speicherzugriff, Schreibmaskensteuerung, vom VSIZE-Typ 1517 angegeben), während der Rest des Betafelds 1554 unterscheidet, welcher der Vorgänge des angegebenen Typs durchzuführen ist. Bei den Befehlsvorlagen ohne Speicherzugriff 1505 sind das Skalenfeld 1560, das Verschiebungsfeld 1562A und das Verschiebungsskalenfeld 1562B nicht vorhanden.
  • In der Befehlsvorlage für einen Vorgang ohne Speicherzugriff, Schreibmaskensteuerung vom partiellen Rundungssteuerungstyp 1510 wird der Rest des Betafelds 1554 als ein Rundungsvorgangsfeld 1559A interpretiert und der Ausnahmeereignisbericht wird deaktiviert (ein gegebener Befehl berichtet nicht über einen Gleitkommaausnahme-Flag und aktiviert keinen Gleitkommaausnahme-Handler).
  • Rundungsvorgangsteuerfeld 1559A – genau wie bei Rundungsvorgangssteuerfeld 1558 unterscheidet dessen Inhalt, welcher au seiner Gruppe von Rundungsvorgängen durchgeführt werden soll (z. B. Aufrunden, Abrunden, gegen Null runden und auf nächste Runden). Somit ermöglicht das Rundungsvorgangssteuerfeld 1559A die Veränderung des Rundungsmodus je nach Befehl. In einer Ausführungsform der Erfindung, in der ein Prozessor ein Steuerregister zum Angeben der Rundungsmodi umfasst, überschreibt der Inhalt des Rundungsvorgangssteuerfelds 1550 diesen Registerwert.
  • In der Befehlsvorlage für einen Vorgang ohne Speicherzugriff, Schreibmaskensteuerung, vom VSIZE-Typ wird der Rest des Betafelds 1554 als ein Vektorlängenfeld 1559B interpretiert, dessen Inhalt unterscheidet, welche aus einer Reihe von Datenvektorlängen durchgeführt werden soll (z. B. 128, 256 oder 512 Byte).
  • Im Fall einer Befehlsvorlage mit Speicherzugriff 1520 der Klasse B, wird ein Teil des Betafelds 1554 als ein Übertragungsfeld 1557B interpretiert, dessen Inhalt unterscheidet, ob der Datenmanipulationsvorgang vom Übertragungstyp durchgeführt werden soll, während der Rest des Betafelds 1554 als Vektorlängenfeld 1559B interpretiert wird. Die Befehlsvorlagen mit Speicherzugriff 1520 umfassen das Skalenfeld 1560 und gegebenenfalls das Verschiebungsfeld 1562A oder das Verschiebungsskalenfeld 1562B.
  • In Bezug auf das generische vektorfreundliche Befehlsformat 1500 ist ein volles Opcodefeld 1574, einschließlich des Formatfelds 1540, des Basisvorgangsfelds 1542 und des Datenelementbreitenfelds 1564 dargestellt. Während eine Ausführungsform dargestellt ist, in der das volle Opcodefeld 1574 alle dieser Felder umfasst, umfasst das volle Opcodefeld 1574 weniger als alle dieser Felder in Ausführungsformen, die nicht alle davon unterstützen. Das volle Opcodefeld 1574 stellt den Vorgangscode (Opcode) bereit.
  • Das Vergrößerungsvorgangsfeld 1550, das Datenelementbreitenfeld 1564 und das Schreibmaskenfeld 1570 ermöglichen es diesen Merkmalen, je nach Befehl in dem generischen vektorfreundlichen Befehlsformat angegeben zu werden.
  • Die Kombination aus Schreibmaskenfeld und Datenelementbreitenfeld erzeugt typisierte Befehle dadurch, dass sie es der Maske ermöglichen, basierend auf verschiedenen Datenelementbreiten, angewandt zu werden.
  • Die verschiedenen Befehlsvorlagen die innerhalb von Klasse A und B gefunden werden, sind in unterschiedlichen Situationen von Vorteil. In manchen Ausführungsformen der Erfindung können verschiedene Prozessoren oder verschiedene Kerne innerhalb eines Prozessors nur Klasse A, nur Klasse B oder beide Klassen unterstützen. Beispielsweise kann ein Hochleistungs-Allzweckkern außerhalb der Reihenfolge, der für eine Allzweckberechnung gedacht ist, nur Klasse B unterstützen, ein Kern, der primär für Grafik- und/oder wissenschaftliche (Durchsatz) Berechnungen gedacht ist, kann nur Klasse A unterstützen und ein Kern, der für beides gedacht ist, kann beide unterstützen (natürlich liegt ein Kern, der eine gewisse Mischung aus Vorlagen und Befehlen aus beiden Klassen, aber nicht alle Vorlagen und Befehle aus beiden Klassen umfasst, innerhalb des Geltungsbereichs der Erfindung). Ein Einzelprozessor kann auch mehrere Kerne enthalten, von denen alle dieselbe Klasse unterstützen oder in dem verschiedene Kerne verschiedene Klassen unterstützen. Beispielsweise kann einer der Grafikkerne in einem Prozessor mit getrennten Grafik- und Allweckkernen, der primär für Grafik- und/oder wissenschaftliche Berechnungen gedacht ist, nur Klasse A unterstützen, während einer oder mehrere der Allweckkerne ein Hochleistungs-Allzweckkern mit einer Ausführung außerhalb der Reihenfolge und Registerumbenennung sein kann, der für Allzweckberechnungen gedacht ist, der nur Klasse B unterstützt. Ein weiterer Prozessor, der keinen getrennten Grafikkern aufweist, kann einen oder mehrere Allzweckkerne in Reihenfolge oder außerhalb der Reihenfolge aufweisen, die Klasse A sowie Klasse B unterstützen. Natürlich können Merkmale einer Klasse auch in verschiedenen Ausführungsformen in der anderen Klasse umgesetzt werden. Programme, die in einer höheren Sprache verfasst wurden, würden in eine Vielzahl von verschiedenen ausführbaren Formen gebracht werden (z. B. gerade rechtzeitig übersetzt oder statisch übersetzt), einschließlich: 1) einer Form nur mit Befehlen der Klasse(n), die von dem Zielprozessor zur Ausführung unterstützt werden; oder 2) einer Form mit alternativen Routinen, die unter Verwendung von verschiedenen Kombinationen der Befehle aller Klassen geschrieben wurden und einen Steuerungsflusscode aufweisen, der die auszuführenden Routinen basierend auf den Befehlen auswählt, die von dem Prozessor, der den Code gerade ausführt, unterstützt werden.
  • Beispielhaftes spezifisches vektorfreundliches Befehlsformat
  • 16 ist ein Blockschaltbild, das ein beispielhaftes vektorfreundliches Befehlsformat gemäß Ausführungsformen der Erfindung darstellt. 16 zeigt ein spezifisches vektorfreundliches Befehlsformat 1600, das in dem Sinn spezifisch ist, als dass es die Position, Größe, Interpretation und Reihenfolge der Felder sowie Werte für einige dieser Felder angibt. Das spezifische vektorfreundliche Befehlsformat 1600 kann verwendet werden, um den x86-Befehlssatz zu erweitern und somit ähneln einige der Felder oder sind dieselben wie die, die in dem x86-Befehlssatz und der Erweiterung davon (z. B. AVX) verwendet werden. Dieses Format stimmt weiterhin überein mit dem Präfixverschlüsselungsfeld dem echten Opcode-Byte-Feld, dem MOD-R/M-Feld, dem SIB-Feld, dem Verschiebungsfeld und Immediatenfeldern des existierenden x86-Befehlssatzes mit Erweiterungen. Die Felder aus 15, in denen die Felder aus 16 abgebildet sind, sind dargestellt.
  • Es gilt zu verstehen, dass, obwohl Ausführungsformen der Erfindung unter Bezugnahme auf das spezifische vektorfreundliche Befehlsformat 1600 zu Darstellungszwecken im Kontext des generischen vektorfreundlichen Befehlsformats 1500 beschrieben sind, die Erfindung nicht auf das spezifische vektorfreundliche Befehlsformat 1600 beschränkt ist, außer, wenn dies beansprucht ist. Beispielsweise berücksichtigt das generische vektorfreundliche Befehlsformat 1500 eine Vielzahl von möglichen Größen für die verschiedenen Felder, während das spezifische vektorfreundliche Befehlsformat 1600 als eines mit Feldern mit spezifischen Größen dargestellt ist. Während in einem speziellen Beispiel das Datenelementbreitenfeld 1564 als ein 1-Bit-Feld in dem spezifischen vektorfreundlichen Befehlsformat 1600 dargestellt ist, ist die Erfindung nicht darauf beschränkt (d. h. das generische vektorfreundliche Befehlsformat 1500 berücksichtigt andere Größen des Datenelementbreitenfelds 1564).
  • Das generische vektorfreundliche Befehlsformat 1500 umfasst die folgenden Felder, die unten in der in 16A dargestellten Reihenfolge angeführt sind.
  • EVEX-Präfix (Bytes 0-3) 1602 – wird in einer 4-Byte-Form verschlüsselt.
  • Formatfeld 1540 (EVEX-Byte 0, Bits [7:0]) – das erste Byte (EVEX-Byte 0) ist das Formatfeld und enthält 0x62 (der einzigartige Wert, der zum Unterscheiden des vektorfreundlichen Befehlsformats in einer Ausführungsform der Erfindung verwendet wird).
  • Die zweiten 4-Bytes (EVEX-Bytes 1-3) umfassen eine Reihe von Feldern, die eine spezielle Fähigkeit bereitstellt.
  • REX-Feld 1605 (EVEX-Byte 1, Bits [7-5]) – besteht aus einem EVEX.R-Bitfeld (EVEX-Byte 1, Bit [7] – R), EVEX.X-Bitfeld (EVEX-Byte 1, Bit [6] – X) und 1557BEX-Byte 1, Bit[5] – B). Die EVEX.R-, EVEX.X- und EVEX.B-Bitfelder stellen dieselbe Funktionalität bereit, wie die entsprechenden VEX-Bitfelder und werden unter Verwendung der 1s-Komplementform verschlüsselt, d. h. ZMM0 wird als 1111B verschlüsselt, ZMM15 wird als 0000B verschlüsselt. Andere Felder der Befehle verschlüsseln die drei niedrigeren Bits der Registerindizes wie auf dem Gebiet bekannt ist (rrr, xxx, and bbb), sodass Rrrr, Xxxx und Bbbb durch Hinzufügen von EVEX.R, EVEX.X und EVEX.B gebildet werden können.
  • REX'-Feld 1510 – dies ist der erste Teil des REX'-Felds 1510 und ist das EVEX.R'-Bitfeld (EVEX-Byte 1, Bit [4] – R'), das verwendet wird, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Registersatzes zu verschlüsseln. In einer Ausführungsform der Erfindung wird dieses Bit, zusammen mit anderen, wie unten angegeben, in einem Bitinvertierten Format gespeichert, um es von dem BOUND-Befehl (in dem bekannten x86-32-Bitmodus) zu unterschieden, dessen echtes Opocde-Byte 62 ist, akzeptiert jedoch in dem MOD-R/M-Feld (unten beschrieben) den Wert 11 in dem MOD-Feld nicht; alternative Ausführungsformen der Erfindung speichern dieses und die anderen unten in dem invertierten Format angegebenen Bits nicht. Ein Wert von 1 wird verwendet, um die niedrigeren 16-Register zu verschlüsseln. Anders ausgedrückt wird R'Rrrr durch Kombinieren von EVEX.R', EVEX.R und dem anderen RRR aus anderen Feldern gebildet.
  • Opcode-Kartenfeld 1615 (EVEX-Byte 1, Bits [3:0] – mmmm) – sein Inhalt verschlüsselt ein impliziertes führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelementbreitenfeld 1564 (EVEX-Byte 2, Bit [7] – W) – wird durch die Bezeichnung EVEX.W dargestellt. EVEX.W wird verwendet, um die Körnigkeit (Größe) des Datentyps zu definieren (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente).
  • EVEX.vvvv 1620 (EVEX-Byte 2, Bits [6:3]-vvvv)- die Rolle von EVEX.vvvv kann Folgendes umfassen: 1) EVEX.vvvv verschlüsselt den ersten Quellenregisteroperanden, der in invertierter (1s-Komplement-)Form angegeben ist und ist gültig für Befehle mit 2 oder mehreren Quellenoperanden; 2) EVEX.vvvv verschlüsselt den Zielregisteroperanden, der in 1s-Komplementform für bestimmte Vektorverschiebungen angegeben ist; oder 3) EVEX.vvvv verschlüsselt keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Somit verschlüsselt das EVEX.vvvv- Feld 1620 die 4 niedrigeren Bits der ersten Quellenregisterangabe, die in invertierter (1s-Komplement-)Form gespeichert ist. Abhängig von dem Befehl wird ein zusätzliches anderes EVEX-Bitfeld verwendet, um die Angabegröße auf 32 Register zu erweitern.
  • EVEX.U- 1568 Klassenfeld (EVEX-Byte 2, Bit [2]-U) – Falls EVEX.0 = 0, bedeutet dies Klasse A oder EVEX.U0; falls EVEX.0 = 1, bedeutet dies Klasse B oder EVEX.U1. Präfixverschlüsselungsfeld 1625 (EVEX-Byte 2, Bits [1:0]-pp) – stellt zusätzliche Bits für das Basisvorgangsfeld bereit. Zusätzlich zur Bereitstellung der Unterstützung für die Alt-SSE-Befehle in dem EVEX-Präfixformat, verfügt dies auch über den Vorteil, des Komprimierens des SIMD-Präfix (statt dass ein Byte erforderlich ist, um das SIMD-Präfix auszudrücken, erfordert das EVEX-Präfix nur 2 Bits). In einer Ausführungsform werden diese Alt-SIMD-Präfixe in das SIMD-Präfixverschlüsselungsfeld verschlüsselt, um Alt-SSE-Befehle zu unterstützen, die ein SIMD-Präfix (66H, F2H, F3H) im alten Format sowie in dem EVEX-Präfixformat verwenden; und werden bei Laufzeit in das Alt-SIMD-Präfix erweitert, bevor sie an dem PLA des Entschlüsslers bereitgestellt werden (so dass der PLA das Alt- sowie das EVEX-Format dieser Altbefehle ohne Modifikation ausführen kann). Obwohl neuere Befehle den Inhalt des EVEX-Präfixverschlüsselungsfeld direkt als eine Opcode-Erweiterung verwenden könnten, werden bestimmte Ausführungsformen aufgrund von mehr Konsistenz auf ähnliche Weise erweitert, ermöglichen jedoch, dass verschiedene Bedeutungen durch diese Alt-SIMD-Präfixe angegeben werden. Eine alternative Ausführungsform kann den PLA umstrukturieren, um die 2-Bit-SIMD-Präfixverschlüsselungen zu unterstützen und benötigen die Erweiterung somit nicht.
  • Alphafeld 1552 (EVEX-Byte 3, Bit [7] – EH; auch bekannt als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.write Schreibmaskensteuerung und EVEX.N; auch dargestellt als α) – wie bereits zuvor beschrieben ist dieses Feld kontextspezifisch.
  • Betafeld 1554 (EVEX-Byte 3, Bits [6:4]-SSS, auch bekannt als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB; auch dargestellt als βββ) – wie bereits zuvor beschrieben ist dieses Feld kontextspezifisch.
  • REX'-Feld 1510 – dies ist der Rest des REX'-Felds und ist das EVEX.V'-Bitfeld (EVEX-Byte 3, Bit [3] – V'), das verwendet werden kann, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Registersatzes zu verschlüsseln. Dieses Bit wird in invertiertem Format gespeichert. Ein Wert von 1 wird verwendet, um die niedrigeren 16 Register zu verschlüsseln. Anders ausgedrückt wird V'VVVV durch Kombinieren von EVEX.V', EVEX.vvvv gebildet.
  • Schreibmaskenfeld 1570 (EVEX-Byte 3, Bits [2:0]-kkk) – sein Inhalt gibt den Index eines Registers in den Schreibmaskenregistern wie bereits zuvor beschrieben an. In einer Ausführungsform der Erfindung wiest der spezielle Wert EVEX.kkk=000 ein bestimmtes Verhalten auf, das impliziert, dass keine Schreibmaske für den bestimmten Befehl verwendet wird (dies kann auf eine Vielzahl von Arten umgesetzt werden, einschließlich der Verwendung einer Schreibmaske, die mit allen oder einer Hardware festverdrahtet ist, die die Maskierungshardware umgeht).
  • Echtes Opcode-Feld 1630 (Byte 4) ist auch bekannt als Opcode-Byte. Ein Teil des Opcodes ist in diesem Feld angegeben.
  • MOD R/M-Feld 1640 (Byte 5) umfasst MOD-Feld 1642, Reg-Feld 1644 und R/M-Feld 1646. Wie bereits zuvor beschrieben, unterscheidet der Inhalt des MOD-Felds 1642 zwischen Vorgängen mit Speicherzugriff und ohne Speicherzugriff. Die Rolle des Reg-Felds 1644 kann in zwei Situationen zusammengefasst werden: es verschlüsselt entweder den Zielregisteroperanden oder einen Quellenregisteroperanden oder wird als eine Opcode-Erweiterung behandelt und nicht verwendet, um einen Befehlsoperanden zu verschlüsseln. Die Rolle des R/M-Felds 1646 kann Folgendes umfassen: es verschlüsselt den Befehlsoperanden, der eine Speicheradresse referenziert oder verschlüsselt entweder den Zielregisteroperanden oder einen Quellenregisteroperanden.
  • Skalen-, Index-, Basis-(SIB)Byte (Byte 6) – Wie bereits zuvor beschrieben wird der Inhalt des Skalenfelds 1550 für eine Speicheradressenerzeugung verwendet. SIB.xxx 1654 und SIB.bbb 1656 – die Inhalte dieser Felder wurden bereits zuvor unter Bezugnahme auf die Registerindizes Xxxx and Bbbb behandelt.
  • Verschiebungsfeld 1562A (Bytes 7–10) – wenn das MOD-Feld 1642 10 enthält, sind Bytes 7-10 das Verschiebungsfeld 1562A und es funktioniert auf dieselbe Art wie die alte 32-Bit-Verschiebung (disp32) und arbeitet mit Byte-Körnigkeit.
  • Verschiebungsfaktorfeld 1562B (Byte 7) – wenn das MOD-Feld 1642 01 enthält, ist Byte 7 das Verschiebungsfaktorfeld 1562B. Die Position dieses Feldes ist dieselbe wie jene der alten x86-Befehlssatz-8-Bit-Verschiebung (disp8), die bei Byte-Körnigkeit arbeitet. Da disp8 zeichenerweitert ist, kann es nur zwischen Abweichungen von –128 und 127 Bytes adressieren; In Bezug auf 64-Byte-Cachelines verwendet disp8 8 Bits, die auf nur vier wirklich nützliche Werte, –128, –64, 0 und 64, eingestellt werden können; da oftmals ein größerer Bereich benötigt wird, wird disp32 verwendet; jedoch erfordert disp32 4 Bytes. Im Gegensatz zu disp8 und disp32 ist das Verschiebungsfaktorfeld 1562B eine Neuinterpretation von disp8; wenn Verschiebungsfaktorfeld 1562B verwendet wird, wird die tatsächliche Verschiebung durch den Inhalt des Verschiebungsfaktorfelds, multipliziert mit der Größe des Speicheroperandenzugriffs (N) bestimmt. Diese Art von Verschiebung wird als disp8·N bezeichnet. Dies verringert die durchschnittliche Befehlslänge (ein einziges Byte wird für die Verschiebung verwendet, jedoch mit einem viel größeren Bereich). Eine solche komprimierte Verschiebung basiert auf der Annahme, dass die effektive Verschiebung ein Vielfaches der Körnigkeit des Speicherzugriffs ist und somit müssen die redundanten niedrigeren Bits der Adressenabweichung nicht verschlüsselt werden. Anders ausgedrückt ersetzt das Verschiebungsfaktorfeld 1562B die alte x86-Befehlssatz-8-Bit-Verschiebung. Somit wird das Verschiebungsfaktorfeld 1562B auf dieselbe Weise wie eine x89-Befehlssatz-8-Bit-Verschiebung verschlüsselt (also gibt es keine Änderungen in den ModRM/SIB-Verschlüsselungsregeln), mit der einzigen Ausnahme, dass disp8 auf disp8·N überschrieben wird. Anders ausgedrückt gibt es keine Änderungen an den Verschlüsselungsregeln oder den Verschlüsselungslängen, sondern nur an der Interpretation des Verschiebungswerts durch die Hardware (die die Verschiebung um die Größe des Speicheroperanden skalieren muss, um eine Adressenabweichung pro Byte zu erhalten).
  • Immediatfeld 1572 arbeitet wie bereits zuvor beschrieben.
  • Volles Opcode-Feld
  • 16B ist ein Blockschaltbild, das die Felder des spezifischen vektorfreundlichen Befehlsformats gemäß einer Ausführungsform der Erfindung darstellt, die das volle Opcode-Feld 1574 ausmachen. Im Speziellen umfasst das volle Opcode-Feld 1574 das Formatfeld 1540, das Basisvorgangsfeld 1542 und das Datenelementbreiten-(W)Feld 1564. Das Basisvorgangsfeld 1542 umfasst das Präfixverschlüsselungsfeld 1625, das Opcode-Kartenfeld 1615 und das echte Opcode-Feld 1630
  • Registerindexfeld
  • 16C ist ein Blockschaltbild, das die Felder des spezifischen vektorfreundlichen Befehlsformats 1600 gemäß einer Ausführungsform der Erfindung darstellt, das das Registerindexfeld 1544 ausmacht. Im Speziellen umfasst das Registerindexfeld 1544 das REX-Feld 1605, das REX'-Feld 1610, das MODR/M.reg-Feld 1644, das MODR/M.r/m-Feld 1646, das VVVV-Feld 1620, das xxx-Feld 1654 und das bbb-Feld 1656.
  • Vergrößerungsvorgangsfeld
  • 16D ist ein Blockschaltbild, das die Felder des spezifischen vektorfreundlichen Befehlsformats 1600 gemäß einer Ausführungsform der Erfindung darstellt, die das Vergrößerungsvorgangsfeld 1550 ausmachen. Wenn das Klassen-(U)Feld 1568 0 enthält, bedeutet das EVEX.U0 (Klasse A 1568A); wenn es 1 enthält, bedeutet es EVEX.U1 (Klasse B 1568B). Wenn U=0 und das MOD-Feld 1642 enthält 11 (was einen Vorgang ohne Speicherzugriff bedeutet), wird das Alphafeld 1552 (EVEX-Byte 3, Bit [7] – EH) als das rs-Feld 1552A interpretiert. Wenn das rs-Feld 1552A eine 1 enthält (Rundung 1552A.1), wird das Betafeld 1554 (EVEX-Byte 3, Bits [6:4]- SSS) als das Rundungssteuerfeld 1554A interpretiert. Das Rundungssteuerfeld 1554A umfasst ein 1-Bit-SAE-Feld 1556 und ein 2-Bit-Rundungssteuerfeld 1558. Wenn das rs-Feld 1552A eine 0 enthält (Datentransformation 1552A.2), wird das Betafeld 1554 (EVEX-Byte 3, Bits [6:4]- SSS) als ein 3-Bit-Datentransformationsfeld 1554B interpretiert. Wenn U=0 und das MOD-Feld 1642 enthält 00, 01 oder 10 (was einen Vorgang mit Speicherzugriff bedeutet), wird das Alphafeld 1552 (EVEX-Byte 3, Bit [7] – EH) als das Leerungshinweis-(EH)Feld 1552B interpretiert und das Betafeld 1554 (EVEX-Byte 3, Bits [6:4]- SSS) wird als ein 3-Bit-Datenmanipulationsfeld 1554C interpretiert.
  • Wenn U=1, wird das Alphafeld 1552 (EVEX-Byte 3, Bit [7] – EH) als das Schreibmaskensteuer-(Z)Feld 1552C interpretiert. Wenn U=1 und das MOD-Feld 1642 enthält 11 (was einen Vorgang ohne Speicherzugriff bedeutet), wird ein Teil des Betafelds 1554 (EVEX-Byte 3, Bit [4]-S0) als das RL-Feld 1557A interpretiert; wenn e seine 1 enthält (Rundung 1557A.1) wird der Rest des Betafelds 1554 (EVEX-Byte 3, bit [6-5]- S2-1) als das Rundungsvorgangsfeld 1559A interpretiert, während wenn das RL-Feld 1557A eine 0 enthält (VSIZE 1557.A2), wird der Rest des Betafelds 1554 (EVEX-Byte 3, Bit [6-5]- S2_1) als das Vektorlängenfeld 1559B interpretiert (EVEX-Byte 3, Bit [6-5]- L1-0). Wenn U=1 und das MOD-Feld 1642 enthält 00, 01 oder 10 (was einen Vorgang mit Speicherzugriff bedeutet), wird das Betafeld 1554 (EVEX-Byte 3, Bits [6:4]- SSS) als das Vektorlängenfeld 1559B (EVEX-Byte 3, Bit [6-5]- L1-0) und das Übertragungsfeld 1557B (EVE-Byte 3, Bit [4]- B) interpretiert.
  • Beispielhafte Registerarchitektur
  • 17 ist ein Blockschaltbild einer Registerarchitektur 1700 gemäß einer Ausführungsform der Erfindung. In der dargestellten Ausführungsform gibt es 32 Vektorregister 1710, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die niedrigeren 256 Bits der niedrigeren 16 zmm-Register werden über Register ymm0-16 überschrieben. Die niedrigeren 256 Bits der niedrigeren 16 zmm-Register (die niedrigeren 128 Bits der ymm-Register) werden über Register xmm0-15 überschrieben. Das spezifische vektorfreundliche Befehlsformat 1600 arbeitet auf dieser überschriebenen Registerdatei wie in den nachstehenden Tabellen dargestellt.
    Einstellbare Vektorlänge Klasse Vorgänge Register
    Befehlsvorlagen, die das Vektorlängenfeld nicht umfassen 1559B A (Figur 15A; U=0) 1510, 1515, 1525, 1530 zmm-Register (die Vektorlänge beträgt 64 Byte)
    B (Figur 15B; U=1) 1512 zmm-Register (die Vektorlänge beträgt 64 Byte)
    Befehlsvorlagen, die das Vektorlängenfeld umfassen 1559B B (Figur 15B; U=1) 1517, 1527 zmm-, ymm- oder xmm-Register (die Vektorlänge beträgt 64 Byte, 32 Byte oder 16 Byte) abhängig vom Vektorlängenfeld 1559B
  • Anders ausgedrückt wählt das Vektorlängenfeld 1559B zwischen einer maximalen Länge und einer oder mehreren kürzeren Längen aus, wobei jede einer solchen kürzeren Länge die Hälfte der Länge der vorangegangenen Länge ist; und Befehlsvorlagen ohne das Vektorlängenfeld 1559B arbeiten auf der maximalen Vektorlänge. Ferner arbeiten die Befehlsvorlagen der Klasse B des spezifischen vektorfreundlichen Befehlsformats 1600 in einer Ausführungsform auf gepackten Skalen-Einzel/Doppel-Präzisions-Gleitkommadaten oder gepackten oder Skalenintegerdaten. Skalenvorgänge sind Vorgänge, die auf der niedrigsten Datenelementposition in einem zmm/xmm/xmm-Register durchgeführt werden; die höheren Datenelementpositionen werden entweder so belassen, wie sie vor dem Befehl waren oder abhängig von der Ausführungsform nullgesetzt.
  • Schreibmaskenregister 1715 – in der dargestellten 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 1715 eine Größe von 16 Bits auf. Wie bereits zuvor beschrieben kann das Vektormaskenregister k0 in einer Ausführungsform der Erfindung nicht als eine Schreibmaske verwendet werden; wenn die Verschlüsselung, die normalerweise angeben k0 angeben wurde, für eine Schreibmaske verwendet würde, wählt es eine festverdrahtete Schreibmaske von 0xFFFF aus, wodurch ein Schreibmaskieren für diesen Befehl effektiv deaktiviert wird.
  • Allzweckregister 1725 – in der dargestellten Ausführungsform gibt es sechzehn 64-Bit-Allzweckregister, die zusammen mit den existierenden x68-Adressmodi zum Adressieren von Speicheroperanden verwendet werden. Diese Register werden mit den Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Skalengleitkommastapelregisterdatei (x87-Stapel) 1745, auf der die gepackte MMX-Flachintegerregisterdatei 1750 – in der dargestellten Ausführungsform – genannt ist, ist der x87-Stapel ein Stapel aus acht Elementen, der verwendet wird, um an 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung Skalengleitpunktvorgänge durchzuführen; während die MMX-Register verwendet werden, um Vorgänge auf gepackten 64-Bit-Integerdaten durchzuführen sowie um Operanden für einige Vorgänge, die zwischen dem MMX- und dem XMM-Registern durchgeführt werden, zu halten.
  • Alternative Ausführungsformen der Erfindung können breitere oder schmälere Register verwenden. Zusätzlich dazu können alternative Ausführungsformen der Erfindung mehrere, weniger oder andere Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf unterschiedliche Arten, zu unterschiedlichen Zwecken und in unterschiedlichen Prozessoren ausgeführt werden. Beispielsweise können Ausführungen solcher Kerne Folgendes umfassen: 1) einen Allzweckkern in Reihenfolge, der für Allzweckberechnungen gedacht ist; 2) einen Hochleistungs-Allzweckkern außerhalb der Reihenfolge, der für Allzweckberechnungen gedacht ist; 3) einen Spezialkern, der vor allem für Grafik- und/oder wissenschaftliche (Durchsatz-)Berechnungen gedacht ist. Ausführungen von unterschiedlichen Prozessoren können Folgende umfassen: 1) einen CPU, einschließlich eines oder mehrerer Allzweckkerne in Reihenfolge, die für Allzweckberechnungen gedacht sind und/oder eines oder mehrerer Allzweckkerne außerhalb der Reihenfolge, die für Allzweckberechnungen gedacht sind; und 2) einen Coprozessor, einschließlich eines oder mehrerer Spezialkerne, die vor allem für Grafik- und/oder wissenschaftliche (Durchsatz-)Berechnungen gedacht sind. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die die Folgenden umfassen können: 1) den Coprozessor auf einem von dem CPU getrennten Chip; 2) den Coprozessor auf einem getrennten Nacktchip in demselben Gehäuse wie ein CPU; 3) den Coprozessor auf demselben Nacktchip wie ein CPU (in dem Fall wird ein solcher Coprozessor manchmal als Speziallogik, wie eine integrierte Grafik- und/oder wissenschaftliche (Durchsatz-)Logik, oder als Spezialkerne bezeichnet); und 4) ein System auf einem Chip, der auf demselben Nacktchip den beschriebenen CPU umfassen kann (wird manchmal als der/die Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den oben beschriebenen Coprozessor und eine zusätzliche Funktionalität. Beispielhafte Kernarchitekturen werden als nächstes beschrieben, gefolgt von Beschreibungen von beispielhaften Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen
  • Kernblockdiagramm in Reihenfolge und außerhalb der Reihenfolge
  • 18A ist ein Blockschaltbild, das eine beispielhafte Pipeline in Reihenfolge sowie eine beispielhafte Registerumbenennungs-Pipeline mit einer Ausgabe/Ausführung außerhalb der Reihenfolge, gemäß Ausführungsformen der Erfindung darstellt. 18B ist ein Blockschaltbild, das eine beispielhafte Ausführungsform eines Architekturkerns in Reihenfolge und eines beispielhaften Registerumbenennungs-Architekturkerns mit einer Ausgabe/Ausführung außerhalb der Reihenfolge darstellt, der in einen Prozessor gemäß Ausführungsformen der Erfindung aufgenommen werden soll. Die durchgehenden Linien in 18A–B zeigen die Pipeline in Reihenfolge und den Kern in Reihenfolge, während das optionale Hinzufügen der Kästen mit gestrichelten Linien die Pipeline und den Kern zur Registerumbenennung mit einer Ausgabe/Ausführung außerhalb der Reihenfolge zeigt. Angesichts der Tatsache, dass der Aspekt in Reihenfolge ein Teilsatz des Aspekts außerhalb der Reihenfolge ist, wird der Aspekt außerhalb der Reihenfolge beschrieben.
  • In 18A umfasst eine Prozessorpipeline 1800 eine Abrufstufe 1802, eine Längenentschlüsselungsstufe 1804, eine Entschlüsselungsstufe 1806, eine Zuweisungsstufe 1808, eine Umbenennungsstufe 1810, eine Planungs-(auch bekannt als Verteilungs- oder Ausgabe-)Stufe 1812, eine Registerlesungs-/Speicherlesungsstufe 1814, eine Ausführungsstufe 1816, eine Rückschreib-/Speicherschreibstufe 1818, eine Ausnahmeverwaltungsstufe 1822 und eine Festlegungsstufe 1824.
  • 18B zeigt Prozesskern 1890, einschließlich einer Vorderendeinheit 1830, gekoppelt an eine Ausführungsengine-Einheit 1850 und beide sind an eine Speichereinheit 1870 gekoppelt. Der Kern 1890 kann ein reduzierter Befehlssatzberechnungs-(RISC)Kern, ein Komplexbefehlssatzberechnungs-(CISC)Kern, ein Kern mit sehr langem Befehlswort (VLIW) oder ein Hybrid- oder alternativer Kerntyp sein. Als noch eine weitere andere Option kann der Kern 1890 ein Spezialkern sein, wie z. B. ein Netzwerk- oder Kommunikationskern, eine Kompressionsengine, ein Coprozessor-Kern, ein Allzweckberechnungs-Grafikverarbeitungseinheits-(GPGPU)Kern, ein Grafikkern oder dergleichen.
  • Die Vorderendeinheit 1830 umfasst eine Zweigprognoseeinheit 1832, die an eine Befehlscache-Einheit 1834 gekoppelt ist, die an einen Befehlsadressenübersetzungspuffer (TLB) 1836 gekoppelt ist, der an eine Befehlsabrufeinheit 1838 gekoppelt ist, die an eine Entschlüsselungseinheit 1840 gekoppelt ist. Die Entschlüsselungseinheit 1840 (oder Entschlüssler) kann Befehle entschlüsseln und einen oder mehrere Mikrovorgänge, Mikrocodeeintrittspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale, die aus den originalen Befehlen entschlüsselt, abgeleitet sind oder die diese anderweitig wiedergeben, als Ausgabe erzeugen. Die Entschlüsselungseinheit 1840 kann unter Verwendung von mehreren verschiedenen Mechanismen ausgeführt werden. Beispiele für solche geeigneten Mechanismen umfassen, ohne darauf beschränkt zu sein, Verweistabellen, Hardware-Ausführungen, programmierbare Logikanordnungen (PLAs), Microcode Read Only Memories (ROMs) etc. In einer Ausführungsform umfasst der Kern 1890 einen Mikrocode-ROM oder ein anderes Medium, das Mikrocode für bestimmte Makrobefehle speichert (z. B. in Entschlüsselungseinheit 1840 oder anderweitig innerhalb der Vorderendeinheit 1830). Die Entschlüsselungseinheit 1840 ist an eine Umbenennungs-/Zuweisungseinheit 1852 in der Ausführungsengine-Einheit 1850 gekoppelt.
  • Die Ausführungsengine-Einheit 1850 umfasst die Umbenennungs-/Zuweisungseinheit 1852, die an eine Rückzugseinheit 1854 gekoppelt ist und einen Satz aus seiner oder mehreren Planungseinheit(en) 1856. Die Planungseinheit(en) 1856 stellen jede Anzahl von verschiedenen Planern dar, einschließlich Reservierungsstationen, zentrales Befehlsfenster etc. Die Planungseinheit(en) 1856 sind mit der/den physikalischen Registerdatei(en)-Einheit(en) 1858 gekoppelt. Jede der physikalischen Registerdatei(en)-Einheiten 1858 stellt eine oder mehrere physikalische Registerdateien dar, die sich von denen unterscheiden, die einen oder mehrere verschiedene Datentypen speichern, wie Skaleninteger, Skalengleitkomma, gepackter Integer, gepacktes Gleitkomma, Vektorinteger, Vektorgleitkomma, Status (z. B. ein Befehlsanzeiger, der die Adresse des nächsten auszuführenden Befehls ist) etc. In einer Ausführungsform umfasst die physikalische Registerdatei(en)-Einheit 1858 eine Vektorregistereinheit und eine Skalenregistereinheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister und Allzweckregister bereitstellen. Die physikalische Registerdatei(en)-Einheit(en) 1858 werden von der Rückzugseinheit 1854 überlagert, um verschiedene Arten darzustellen, auf die eine Registerumbenennung und eine Ausführung außerhalb der Reihenfolge umgesetzt werden kann (z. B. unter Verwendung von Umordnungspuffer(n) und Rückzugsregisterdatei(en); unter Verwendung von Zukunftsdatei(en), Verlaufspuffer(n) und von Rückzugsregisterdatei(en); unter Verwendung von Registerkarten und einem Pool aus Registern etc.). Die Rückzugseinheit 1854 und die physikalischen Registerdatei(en)-Einheit(en) 1858 sind an das/die Ausführungscluster 1860 gekoppelt. Das/die Ausführungscluster 1860 umfassen einen Satz aus einer oder mehreren Ausführungseinheiten 1862 und einen Satz aus einer oder mehreren Speicherzugriffseinheiten 1864. Die Ausführungseinheiten 1862 können verschiedene Vorgänge (z. B. Verschiebung, Addition, Subtraktion, Multiplikation) und auf verschiedenen Arten von Daten (z. B. Skalengleitkomma, gepacktem Integer, gepacktem Skalengleitkomma, Vektorinteger, Vektorgleitkomma) ausführen. Während manche Ausführungsformen eine Anzahl von Ausführungseinheiten umfassen können, die speziellen Funktionen oder Funktionssätzen zugewiesen sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten umfassen, die alle Funktionen durchführen. Die Planungseinheit(en) 1856, die physikalischen Registerdatei(en)-Einheit(en) 1858 und das/die Ausführungscluster 1860 sind in möglicher Mehrfachausführung dargestellt, da bestimmte Ausführungsformen für bestimmte Arten von Daten/Vorgängen getrennte Pipelines bilden (z. B. eine Skalenintegerpipeline, eine Skalengleitkomma-/gepackter Integer-/gepackter Gleitkomma-Nektorinteger-/Vektorgleitkommapipeline und/oder eine Speicherzugriffspipeline, wobei jede ihre eigene Planungseinheit, physikalische Registerdatei(en)-Einheit und/oder Ausführungscluster aufweist – und im Fall einer getrennten Speicherzugriffspipeline werden bestimmte Ausführungsformen ausgeführt, in denen nur das Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 1864 aufweist). Es gilt ebenfalls zu verstehen, dass wo getrennte Pipelines verwendet werden, eine oder mehrere dieser Pipelines eine Ausgabe/Ausführung außerhalb der Reihenfolge und den Rest in Reihenfolge aufweisen können.
  • Der Satz aus Speicherzugriffseinheiten 1864 ist an die Speichereinheit 1870 gekoppelt, die eine Daten-TLB-Einheit 1872 umfasst, die an eine Datencache-Einheit 1874 gekoppelt ist, die an eine Level-2-(L2)Cacheeinheit 1876 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 1864 eine Ladungseinheit, eine Speicheradresseinheit und eine Speicherdateneinheit umfassen, von denen jede an die Daten-TLB-Einheit 1872 in der Speichereinheit 1870 gekoppelt ist. Die Befehlscache-Einheit 1834 ist ferner an eine Level-2-(L2)Cacheeinheit 1876 in der Speichereinheit 1870 gekoppelt. Die L2-Cacheeinheit 1876 ist an ein oder mehrere andere Cache-Level und schlussendlich an einen Hauptspeicher gekoppelt.
  • Beispielsweise kann die beispielhafte Registerumbenennungs-Kernarchitektur mit einer Ausgabe/Ausführung außerhalb der Reihenfolge die Pipeline 1800 wie folgt ausführen: 1) Befehlsaufruf 1838 führt die Aufruf- und Längenentschlüsselungsstufen 1802 und 1804 durch; 2) die Entschlüsselungseinheit 1840 führt die Entschlüsselungsstufe 1806 durch; 3) die Umbenennungs-/Zuweisungseinheit 1852 führt die Zuweisungsstufe 1808 und die Umbenennungsstufe 1810 durch; 4) die Planungseinheit(en) 1856 führen die Planungsstufe 1812 durch; 5) die physikalischen Registerdatei(en)-Einheit(en) 1858 und die Speichereinheit 1870 führen die Registerlese-/Speicherlesestufe 1814 durch; das Ausführungscluster 1860 führt die Ausführungsstufe 1816 durch; 6) die Speichereinheit 1870 und die physikalischen Registerdatei(en)-Einheit(en) 1858 führen die Rückschreib-/Speicherschreibstufe 1818 durch; 7) verschiedene Einheiten können an der Ausnahmeverwaltungsstufe 1822 beteiligt sein; und 8) die Rückzugseinheit 1854 und die physikalischen Registerdatei(en)-Einheit(en) 1858 führen die Zuweisungsstufe 1824 durch.
  • Der Kern 1890 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies of Sunnyvale, KL; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) der ARM Holdings of Sunnyvale, KL), einschließlich des/der hierin beschriebenen Befehls/Befehle. In einer Ausführungsform umfasst der Kern 1890 eine Logik, um eine gepackte Datenbefehlssatzerweiterung zu unterstützen (z. B. AVX1, AVX2 und/oder eine Form des generischen vektorfreundlichen Befehlsformats (U=0 und/oder U=1), das zuvor beschrieben wurde), wodurch ermöglicht wird, dass Vorgänge, die von vielen Multimediaanwendungen verwendet werden, unter Verwendung von gepackten Daten durchgeführt werden.
  • Es gilt zu verstehen, dass der Kern ein Multithreading (Ausführen von zwei oder mehreren parallelen Sätzen von Vorgängen oder Threads) unterstützen kann und kann dies auf eine Vielzahl von Arten ausführen, einschließlich eines Zeitscheiben-Multithreading, eines gleichzeitigen Multithreading (wobei ein einziger physikalischer Kern einen logischen Kern für jeden der Threads bereitstellt, wobei der physikalische Kern gleichzeitig ein Multithreading durchführt) oder einer Kombination daraus (z. B. Zeitscheiben-Aufrufen und -Entschlüsseln und ein gleichzeitiges Multithreading danach wie in der Intel® Hyperthreading-Technologie).
  • Während eine Registerumbenennung im Kontext einer Ausführung außerhalb der Reihenfolge beschrieben ist, gilt zu verstehen, dass eine Registerumbenennung in einer Architektur in Reihenfolge verwendet werden kann. Während die dargestellte Ausführungsform des Prozessors auch getrennte Befehls- und Datencache-Einheiten 1834/1874 und eine gemeinsame L2-Cacheeinheit 1876 umfasst, können alternative Ausführungsformen einen einzigen internen Cache für Befehle sowie für Daten aufweisen wie z. B. einen internen Level-1-(L1)Cache oder mehrere Level eines internen Cache. In manchen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache umfassen, die sich außerhalb des Kerns und/oder des Prozessors befindet. Alternativ dazu kann der gesamte Cache außerhalb des Kerns und/oder des Prozessors sein.
  • Spezielle beispielhafte Kernarchitektur in Reihenfolge
  • 19A–B zeigen ein Blockschaltbild einer spezielleren, beispielhaften Kernarchitektur in Reihenfolge, wobei der Kern einer aus mehreren Logikblöcken (einschließlich anderer Kerne vom selben Typ und/oder verschiedenen Typen) in einem Chip wäre. Die Logikblöcke kommunizieren über ein Verbindungsnetzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit einer fixierten Funktionslogik, Speicher-I/O-Schnittstellen und einer anderen notwendigen I/O-Logik, abhängig von der Anwendung.
  • 19A ist ein Blockschaltbild eines einzigen Prozessorkerns zusammen mit seiner Verbindung mit dem Verbindungsnetzwerk auf dem Nacktchip 1902 und mit seinem lokalen Teilsatz des Level-2-(L2)Cache 1904, gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsentschlüssler 1900 den x86-Befehlssatz mit einer gepackten Datenbefehlssatzerweiterung. Ein L1-Cache 1906 ermöglicht Zugriffe mit geringer Latenz auf Skalen- und Vektoreinheiten in einem Cache-Speicher. Während eine Skaleneinheit 1908 und eine Vektoreinheit 1910 in einer Ausführungsform (um die Konstruktion zu vereinfachen) getrennte Registersätze (Skalenregister 1912 bzw. Vektorregister 1914) verwenden, und Daten, die zwischen ihnen übertragen werden auf einen Speicher geschrieben und dann von einem Level-1-(L1)Cache 1906 zurück eingelesen werden, können alternative Ausführungsformen der Erfindung einen anderen Ansatz verwenden (z. B. können sie einen einzigen Registersatz verwenden oder einen Kommunikationspfad umfassen, der ermöglicht, dass Daten zwischen zwei Registern übertragen werden, ohne geschrieben und zurückgelesen werden).
  • Der lokale Teilsatz des L2-Cache 1904 ist Teil eines globalen L2-Cache, der in getrennte lokale Teilsätze unterteilt ist, einer für jeden Prozessorkern. Jeder Prozessorkern weist einen direkten Zugriffspfad auf seinen eigenen lokalen Teilsatz des L2-Cache 1904 auf. Daten, die von einem Prozessorkern gelesen werden, werden in ihrem eigenen L2-Cache-Teilsatz 1904 gespeichert und es kann rasch, parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen, darauf zugegriffen werden. Daten, die von einem Prozessorkern geschrieben werden, werden in seinem eigenen L2-Cache-Teilsatz 1904 gespeichert und werden, falls notwendig, aus anderen Teilsätzen geleert. Das Ringnetzwerk stellt eine Kohärenz für gemeinsame Daten sicher. Das Ringnetzwerk ist bidirektional, um es Agenten wie Prozessorkernen, L2-Caches und anderen Logikblöcken zu ermöglichen, innerhalb des Chips mit einander zu kommunizieren. Jeder Ringdatenpfad ist pro Richtung 1012 Bits breit.
  • 19B ist eine vergrößerte Ansicht eines Teils des Prozessorkerns aus 19A gemäß Ausführungsformen der Erfindung. 19B umfasst einen L1-Datencache-Teil 1906A des L1-Cache 1904 sowie mehrere Details in Bezug auf die Vektoreinheit 1910 und die Vektorregister 1914. Im Speziellen ist die Vektoreinheit 1910 eine 16 Bits breite Vektorverarbeitungseinheit (VPU) (siehe die 16 Bit breite ALU 1928), die einen oder mehrere eines Integer-, eines Einzelpräzisionsgleitkomma- und Doppelpräzisionsgleitkommabefehls ausführt. Die VPU unterstützt ein Swizzeln der Registereingaben mit Swizzel-Einheit 1920, eine numerische Konvertierung mit numerischen Konvertierungseinheiten 1922A–B und eine Replikation mit Replikationseinheit 1924 auf der Speichereingabe. Schreibmaskenregister 1926 ermöglichen ein Prädizieren von resultierenden Vektorschreibvorgängen.
  • Prozessor mit integrierter Speichersteuerung und Grafiken
  • 20 ist ein Blockschaltbild eines Prozessors 2000, der mehr als einen Kern umfassen kann, mehr als eine integrierte Speichersteuerung umfassen kann und gemäß Ausführungsformen der Erfindung integrierte Grafiken umfassen kann. Die Kästen mit durchgehenden Linien in 20 zeigen einen Prozessor 2000 mit einem einzigen Kern 2002A, einem Systemagenten 2010, einem Satz aus einer oder mehreren Bussteuereinheiten 2016, während der optionale Zusatz der Kästen mit gestrichelten Linien einen alternativen Prozessor 2000 mit mehreren Kernen 2002–N, einem Satz aus einer oder mehreren integrierten Speichersteuereinheit(en) 2014 in der Systemagenteneinheit 2010 und einer Speziallogik 2008 darstellt.
  • Somit können verschiedene Ausführungen des Prozessors 2000 Folgendes umfassen: 1) einen CPU mit der Speziallogik 2008, die eine intergierte Grafik- und/oder wissenschaftliche (Durchsatz-)Logik sein kann (der einen oder mehrere Kerne umfassen kann) und wobei die Kerne 2002A–N einer oder mehrere Allzweckkerne sind (z. B. Allzweckkerne in Reihenfolge, Allzweckkerne außerhalb der Reihenfolge, eine Kombination der zwei); 2) einen Coprozessor, wobei die Kerne 2002A–N eine große Anzahl von Spezialkernen sind, die vor allem für Grafiken und/oder wissenschaftlichen (Durchsatz) gedacht sind; und 2) einen Coprozessor, wobei die Kerne 2002A–N eine große Anzahl von Allzweckkernen in Reihenfolge sind. Somit kann der Prozessor 2000 ein Allzweckprozessor, ein Coprozessor oder ein Spezialprozessor, wie z. B. ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsengine, ein Grafikprozessor, GPGPU (Allzweckgrafikverarbeitungseinheit), ein Coprozessor mit hohem Durchsatz und vielen integrierten Kernen (MIC) (einschließlich 30 oder mehr Kernen), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann auf einem oder mehreren Chips ausgeführt sein. Der Prozessor 2000 kann ein Teil eines oder mehrerer Substrate sein und/oder darauf ausgeführt sein, die jede aus einer Reihe von Prozesstechnologien, wie z. B. BiCMOS, CMOS oder NMOS verwenden.
  • Die Speicherhierarchie umfasst ein oder mehrere Levels eines Cache innerhalb der Kerne, einen Satz oder eine oder mehrere gemeinsame Cache-Einheiten 2006 und einen externen Speicher (nicht dargestellt), der an den Satz aus integrierten Speichersteuereinheiten 2014 gekoppelt ist. Der Satz aus gemeinsamen Cache-Einheiten 2006 kann einen oder mehrere Mid-Level-Caches wie Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Level eines Cache, einen Last-Level-Cache (LLC) und/oder Kombinationen daraus umfassen. Während eine ringbasierte Verbindungseinheit 2012 in einer Ausführungsform die integrierte Grafiklogik 2008, den Satz aus gemeinsamen Cache-Einheiten 2006 und die Systemagenteinheit 2010/die integrierten Speichersteuereinheit(en) 2014 verbindet, können alternative Ausführungsformen jegliche Anzahl von bekannten Verfahren zum Verbinden solcher Einheiten verwenden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cache-Einheiten 2006 und Kernen 2002A–N aufrechterhalten.
  • In manchen Ausführungsformen sind einer oder mehrere der Kerne 2002A–N zu einem Multithreading in der Lage. Der Systemagent 2010 umfasst jene Komponenten, die Kerne 2002A–N koordinieren und betreiben. Die Systemagenteinheit 2010 kann z. B. eine Leistungssteuereinheit (PCU) und eine Anzeigeeinheit umfassen. Die PCU kann eine Logik sein oder diese und Komponenten umfassen, die zum Regulieren des Leistungszustands der Kerne 2002A–N und der integrierten Grafiklogik 2008 benötigt werden. Die Anzeigeeinheit dient zum Betreiben einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 2002A–N können in Bezug auf den Architekturbefehlssatz homogen oder heterogen sein; d. h. zwei oder mehrere der Kerne 2002A–N können dazu in der Lage sein, denselben Befehlssatz auszuführen, während andere dazu in der Lage sein können nur einen Teilsatz dieses Befehlssatzes oder einen anderen Befehlssatz auszuführen.
  • Beispielhafte Computerarchitekturen
  • 2124 sind Blockschaltbilder von beispielhaften Computerarchitekturen. Andere Systemkonstruktionen und Konfigurationen, die auf dem Gebiet für Laptops, Desktops, tragbare PCs, persönliche digitale Assistenten, Ingenieursarbeitsplätzen, Server, Netzwerkvorrichtungen, Netzwerkknoten, Schalter, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Grafikvorrichtungen, Video spielvorrichtungen, Set-Top-Boxen, Mikrosteuereinheiten, Mobiltelefone, tragbare Medienabspielgeräte, Handheld-Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind ebenfalls geeignet. Im Allgemeinen ist eine große Vielzahl von Systemen oder elektronischen Vorrichtungen, die dazu in der Lage sind, einen Prozessor und/oder eine andere Ausführungslogik, wie hierin offenbart, auszuführen, geeignet.
  • Unter Bezugnahme auf 21 ist ein Blockschaltbild eines Systems 2100 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung dargestellt. Das System 2100 kann einen oder mehrere Prozessoren 2110, 2115 umfassen, die an einen Steuerknoten 2120 gekoppelt sind. In einer Ausführungsform umfasst der Steuerknoten 2120 einen Grafikspeichersteuerknoten (GMCH) 2190 und einen Eingangs-/Ausgangsknoten (IOH) 2150 (der sich auf getrennten Chips befinden kann); der GMCH 2190 umfasst Speicher- und Grafiksteuereinheiten, an die Speicher 2140 und ein Coprozessor 2145 gekoppelt sind; der IOH 2150 koppelt Eingangs-/Ausgangs-(I/O)Vorrichtungen 2160 an den GMCH 2190. Alternativ dazu ist eine oder sind beide der Speicher- und Grafiksteuereinheiten innerhalb des Prozessors integriert (wie hierin beschrieben), der Speicher 2140 und der Coprozessor 2145 sind direkt an den Prozessor 2110 gekoppelt, und der Steuerknoten 2120 befindet sich in einem einzigen Chip mit dem IOH 2150.
  • Die Möglichkeit von zusätzlichen Prozessoren 2115 ist in 21 mit unterbrochenen Linien dargestellt. Jeder Prozessor 2110, 2115 kann einen oder mehreren der Prozessorkerne, die hierin beschrieben sind umfassen und kann irgendeine Version des Prozessors 2000 sein.
  • Der Speicher 2140 kann z. B. ein Dynamic Random Access Memory (DRAM), ein Phase Change Memory (PCM) oder eine Kombination aus den beiden sein. In zumindest einer Ausführungsform kommuniziert der Steuerknoten 2120 über einen Multi-Drop-Bus, wie einem Vorderseitenbus (FSB), einer Punkt-zu-Punkt-Schnittstelle wie QuickPath Interconnect (QPI) oder einer ähnlichen Verbindung 2195 mit dem/den Prozessor(en) 2110, 2115.
  • In einer Ausführungsform ist der Coprozessor 2145 ein Spezialprozessor wie z. B. ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder ein Kommunikationsprozessor, eine Kompressionsengine, ein Grafikprozessor, GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann Steuerknoten 2120 einen integrierten Grafikbeschleuniger umfassen.
  • Es kann eine Vielzahl von Unterschieden in Bezug auf ein Metrikspektrum von Vorteilen, einschließlich architektonischer, mikroarchitektonischer, thermaler, Spannungsverbrauchs-Eigenschaften und dergleichen zwischen den physikalischen Ressourcen 2110, 2115 geben.
  • In einer Ausführungsform führt der Prozessor 2110 Befehle aus, die Datenverarbeitungsvorgänge von allgemeiner Art steuern. Coprozessorbefehle können in den Befehlen eingebettet sein. Der Prozessor 2110 erkennt diese Coprozessorbefehle als Befehle eines Typs an, die von dem angebrachten Coprozessor 2145 ausgeführt werden sollten. Dementsprechend gibt der Prozessor 2110 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle darstellen) auf einem Coprozessorbus oder einer anderen Verbindung an Coprozessor 2145 aus. Coprozessor(en) 2145 akzeptieren die empfangenen Coprozessorbefehle und führen diese aus.
  • Unter Bezugnahme auf 22 ist ein Blockschaltbild eines ersten, spezielleren beispielhaften Systems 2200 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung dargestellt. Wie in 22 gezeigt, ist das Multiprozessorsystem 2200 ein Punkt-zu-Punkt-Verbindungssystem und umfasst einen ersten Prozessor 2270 und einen zweiten Prozessor 2280, die über eine Punkt-zu-Punkt-Verbindung 2250 gekoppelt sind. Jeder der Prozessoren 2270 und 2280 kann irgendeine Version des Prozessors 2000 sein. In einer Ausführungsform der Erfindung sind Prozessor 2270 bzw. 2280 Prozessoren 2110 bzw. 2115, während Coprozessor 2238 Coprozessor 2145 ist. In einer weiteren Ausführungsform ist Prozessor 2270 bzw. 2280 Prozessor 2110 bzw. Coprozessor 2145.
  • Prozessoren 2270 und 2280 sind mit integrierten Speichersteuer-(IMC)Einheiten 2272 bzw. 2282 dargestellt. Prozessor 2270 umfasst als Teil seiner Bussteuereinheiten auch Punkt-zu-Punkt-(P-P)Schnittstellen 2276 bzw. 2278; ähnlich dazu umfasst der zweite Prozessor 2280 P-P-Schnittstellen 2286 und 2288. Prozessoren 2270, 2280 können Informationen über Punkt-zu-Punkt-(P-P)Schnittstellen 2250 unter Verwendung von P-P-Schnittstellenschaltungen 2278, 2288 austauschen. Wie in 22 dargestellt, kuppeln IMC 2272 und 2282 die Prozessoren an die jeweiligen Speicher, nämlich einen Speicher 2232 und einen Speicher 2234, die Teile des Hauptspeichers sein können, der lokal an die jeweiligen Prozessoren angebracht ist.
  • Prozessoren 2270, 2280 können Informationen über einzelne P-P-Schnittstellen 2252, 2254 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 2276, 2294, 2286, 2298 mit einem Chipsatz 2290 austauschen. Chipsatz 2290 kann gegebenenfalls Informationen über eine Hochleistungsschnittstelle 2239 mit dem Coprozessor 2238 austauschen. In einer Ausführungsform ist der Coprozessor 2238 ein Spezialprozessor wie z. B. ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsengine, ein Grafikprozessor, GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein gemeinsamer Cache (nicht dargestellt) kann in einen der Prozessoren oder außerhalb von beiden Prozessoren, jedoch verbunden mit den Prozessoren über eine P-P-Verbindung, aufgenommen werden, sodass lokale Cache-Informationen eines oder beider Prozessoren in dem gemeinsamen Cache gespeichert werden können, falls ein Prozessor in einen geringeren Leistungszustand versetzt wird.
  • Chipsatz 2290 kann über eine Schnittstelle 2296 an einen ersten Bus 2216 gekoppelt werden. In einer Ausführungsform kann erster Bus 2216 ein peripherer Komponentenverbindungs-(PCI)Bus oder ein Bus wie ein PCI-Express-Bus oder ein anderer I/O-Bus der dritten Generation sein, obwohl der Schutzumfang der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in 22 dargestellt können verschiedene I/O-Vorrichtungen 2214 an den ersten Bus 2216 gekoppelt werden, zusammen mit einer Bus-Brücke 2218, die den ersten Bus 2216 an einen zweiten Bus 2220 koppelt. In einer Ausführungsform werden ein oder mehrere zusätzliche Prozessor(en) 2215, wie Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie z. B. Grafikbeschleuniger oder digitale Signalverarbeitungs-(DSP)Einheiten), feldprogrammierbare Gatteranordnungen oder jeder andere Prozessor an den ersten Bus 2216 gekoppelt. In einer Ausführungsform kann der zweite Bus 2220 ein Low Pin Count (LPC) Bus sein. Verschiedene Vorrichtungen können in einer Ausführungsform an einen zweiten Bus 2220 gekoppelt werden, einschließlich z. B. einer Tastatur und/oder einer Maus 2222, Kommunikationsvorrichtungen 2227 und eine Speichereinheit 2228 wie ein Diskettenlaufwerk oder eine andere Massenspeichervorrichtung, die Befehle/Code und Daten 2230 umfassen kann. Ferner kann ein Audio-I/O 2224 an den zweiten Bus 2220 gekoppelt werden. Es gilt zu beachten, dass auch andere Architekturen möglich sind. Beispielsweise kann ein System anstelle der Punkt-zu-Punkt-Architektur aus 22 einen Multi-Drop-Bus oder eine andere solche Architektur ausführen.
  • Unter Bezugnahme auf 23 ist ein Blockschaltbild eines zweiten, spezielleren beispielhaften Systems 2300 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung dargestellt. Ähnliche Elemente in 22 und 23 tragen ähnliche Bezugsziffern, und bestimmte Aspekte aus 22 wurden in 23 ausgelassen, um ein Verschleiern von anderen Aspekten aus 23 zu verhindern.
  • 23 zeigt, dass die Prozessoren 2270, 2280 einen integrierten Speicher und eine I/O-Steuerlogik („CL”) 2272 bzw. 2282 umfassen können. Somit umfasst die CL 2272, 2282 integrierte Speichersteuereinheiten und umfasst eine I/O-Steuerlogik. 23 zeigt, dass nicht nur die Speicher 2232, 2234 an die CL 2272, 2282 gekoppelt sind, sondern dass auch I/O-Vorrichtungen 2314 auch an die Steuerlogik 2272, 2282 gekoppelt sind. Ältere I/O-Vorrichtungen 2315 sind an den Chipsatz 2290 gekoppelt.
  • Unter Bezugnahme auf 24 ist ein Blockschaltbild einer SoC 2400 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung dargestellt. Ähnliche Elemente tragen in 20 ähnliche Bezugsziffern. Zudem sind Kästen mit gestrichelten Linien optionale Merkmale von fortschrittlicheren SoCs. In 24 ist/sind (eine) Verbindungseinheit(en) 2402 an Folgende gekoppelt: einen Anwendungsprozessor 2410, der einen Satz aus einem oder mehreren Kernen 202A–N und gemeinsamen Cache-Einheit(en) 2006 umfasst; eine Systemagenteneinheit 2010; (eine) Bussteuereinheit(en) 2016; (eine) integrierte Speichersteuereinheit(en) 2014; einen Satz oder an einen oder mehrere Coprozessoren 2420, die eine integrierte Speichersteuerlogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor umfassen können; eine statische Random Access Memory (RAM) Einheit 2430; eine direkte Speicherzugriffs-(DMA)Einheit 2432; und eine Anzeigeeinheit 2440 zum Koppeln an eine oder mehrere externe Anzeigen. In einer Ausführungsform umfasst/umfassen der/die Coprozessor(en) 2420 einen Spezialprozessor, wie z. B. einen Netzwerk- oder Kommunikationsprozessor, eine Kompressionsengine, GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder dergleichen.
  • Ausführungsformen der hierin offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination aus solchen Ausführungsansätzen ausgeführt werden. Ausführungsformen der Erfindung können als Computerprogramme oder als Programmcode ausgeführt werden, der auf programmierbaren Systemen ausgeführt wird, die zumindest einen Prozessor, ein Speichersystem (einschließlich flüchtiger und nichtflüchtiger Speicher- und/oder Speicherelemente) oder zumindest eine Eingabevorrichtung und zumindest eine Ausgabevorrichtung umfassen.
  • Programmcode, wie Code 2230, der in 22 dargestellt ist, kann auf Eingabebefehle angewandt werden, um die hierin beschriebenen Funktionen auszuführen und um Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können auf bekannte Art und Weise auf eine oder mehrere Ausgabevorrichtungen angewandt werden. Zum Zweck dieser Anmeldung umfasst ein Prozesssystem jedes System, das einen Prozessor aufweist, z. B.; einen Digitalsignalprozessor (DSP), eine Mikrosteuereinheit, eine anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren Prozess- oder objektorientierten Programmiersprache ausgeführt sein, um mit einem Prozesssystem zu kommunizieren. Der Programmcode kann, falls gewünscht, auch in Montage- oder Maschinensprache ausgeführt werden. Tatsächlich sind die hierin beschriebenen Mechanismen in ihrem Umfang nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine Compilersprache oder eine interpretierte Sprache sein.
  • Ein oder mehrere Aspekte von zumindest einer Ausführungsform können durch jeweilige Befehle, die auf einem maschinenlesbaren Medium gespeichert sind, die innerhalb des Prozessors mehrere Logiken darstellen, ausgeführt werden, was dazu führt, dass wenn sie von einer Maschine gelesen werden, die Maschine eine Logik fabriziert, um die hierin beschriebenen Verfahren durchzuführen. Solche Darstellungen, bekannt als „IP-Kerne”, können auf einem konkreten, maschinenlesbaren Medium gespeichert werden und an verschiedene Kunden oder Herstellungseinrichtungen weitergeleitet werden, um diese in die Maschinenfabrikate zu laden, die die eigentliche Logik oder den Prozessor ausmachen.
  • Solche maschinenlesbaren Speichermedien können, ohne Beschränkung, nichtvorübergehende, konkrete Anordnungen von Fabrikaten umfassen, die von einer Maschine oder einer Vorrichtung hergestellt wurden, einschließlich Speichermedien wie Festplatten, jeder anderen Art von Datenscheiben wie Disketten, optische Disketten, Compact Disk Read-Only Memories (CD-ROMs), Compact Disk Rewritables (CD-RWs) und magnetoptische Disketten, Halbleitervorrichtungen wie Read-Only Memories (ROMs), Random Access Memories (RAMs) wie dynamische Random Access Memories (DRAMs), statische Random Access Memories (SRAMs), löschbare programmierbare Read-Only Memories (EPROMs), Phasenänderungsspeicher (PCM), magnetische oder optische Karten oder jede andere Art von Medium, das zum Speichern von elektronischen Befehlen geeignet ist.
  • Dementsprechend umfassen Ausführungsformen der Erfindung ebenfalls nichtvorübergehende, konkrete maschinenlesbare Medien, die Befehle oder Konstruktionsdaten enthalten, wie Hardware Description Language (HDL), die hierin beschriebene Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemeigenschaften definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich binärer Übersetzung, Code-Morphing etc.)
  • In manchen Fällen kann ein Befehlskonvertierer verwendet werden, um einen Befehl von einem Quellenbefehlssatz in einen Zielbefehlssatz zu konvertieren. Beispielsweise kann der Befehlskonvertierer einen Befehl in einen oder mehrere andere Befehle übersetzen (z. B. unter Verwendung einer statischen binären Übersetzung, einer dynamischen binären Übersetzung, einschließlich einer dynamischen Kompilation), morphen, nachbilden oder anderweitig konvertieren, die von dem Kern zu verarbeiten sind. Der Befehlskonvertierer kann in Software, Hardware, Firmware oder einer Kombination daraus ausgeführt werden. Der Befehlskonvertierer kann sich auf einem Prozessor, nicht auf einem Prozessor, teilweise auf und teilweise außerhalb eines Prozessors befinden.
  • 25 ist ein Blockschaltbild, das die gegensätzliche Verwendung eines Softwarebefehlskonvertierers zum Konvertieren von binären Befehlen in einem Quellenbefehlssatz sowie zu binären Befehlen in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung zeigt. In der dargestellten Ausführungsform ist der Befehlskonvertierer ein Softwarebefehlskonvertierer, obwohl der Befehlskonvertierer ohne weiteres in Software, Firmware, Hardware oder verschiedenen Kombinationen daraus ausgeführt sein kann. 25 zeigt, dass ein Programm in einer höheren Programmiersprache 2502 unter Verwendung eines x86-Kompilierers 2504 kompiliert werden kann, um binären x86-Code 2506 zu erzeugen, der alternativ von einem Prozessor mit zumindest einem x86-Befehlssatzkern 2516 ausgeführt werden kann. Der Prozessor mit zumindest einem x86-Befehlssatzkern 2516 stellt jeden Prozessor dar, der im Wesentlichen dieselben Funktionen wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern durch kompatibles Ausführen oder anderweitiges Verarbeiten (1) eines wesentlichen Teils des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) von Objektcodeversionen von Anwendungen oder anderer Software, die darauf ausgerichtet ist, auf einem Intel-Prozessor mit zumindest einem x86-Befehlssatzkern zu laufen, um im Wesentlichen dasselbe Ergebnis wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern zu erzielen, durchführen kann. Der x86-Kompilierer 2504 stellt einen Kompilierer dar, der ausgelegt ist, einen binären x86-Code 2506 (z. B. einen Objektcode) zu erzeugen, der, mit oder ohne zusätzlicher Verbindungsverarbeitung, auf dem Prozessor mit zumindest einem x86-Befehlssatzkern 2516 ausgeführt werden kann. Ähnlich dazu zeigt 25 das Programm in der höheren Programmiersprache 2502, das unter Verwendung eines alternativen Befehlssatzkompilierers 2508 kompiliert werden kann, um einen alternativen binären Befehlssatzcode 2510 zu erzeugen, der von einem Prozessor mit zumindest einem x86-Befehlssatzkern 2514 ohne weiteres ausgeführt werden kann (z. B. einem Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies of Sunnyvale, KF ausführen und/oder die den ARM-Befehlssatz der ARM Holdings of Sunnyvale, KF ausführen). Der Befehlskonvertierer 2512 wird verwendet, um den binären x86-Code 2506 zu Code zu konvertieren, der ohne weiteres von dem Prozessor ohne einem x86-Befehlssatzkern 2514 ausgeführt werden kann. Dieser konvertierte Code ist wahrscheinlich nicht derselbe wie der alternative binäre Befehlssatzkern 2510, da ein Befehlskonvertierer, der dazu in der Lage ist, schwer herzustellen ist; jedoch sichert der konvertierte Code den allgemeinen Betrieb und besteht aus Befehlen aus dem alternativen Befehlssatz. Somit stellt der Befehlskonvertierer 2512 Software, Firmware, Hardware oder eine Kombination daraus dar, die es einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen x86-Befehlssatzprozessor oder einen Kern aufweist, ermöglicht, den binären x86-Code 1706 durch Emulation, Simulation oder jeden anderen Vorgang auszuführen.
  • Komponenten, Merkmale und Details, die für jede der 34 beschrieben wurden, können gegebenenfalls auch in jeder der 12 verwendet werden. Komponenten, Merkmale und Details, die für jede der 613 beschrieben wurden, können gegebenenfalls auch in jeder der 1 oder 5 verwendet werden. Darüber hinaus können Komponenten, Merkmale und Details, die hierin für jede hierin beschriebene Vorrichtung beschrieben wurden, gegebenenfalls auch in jedem der hierin beschriebenen Verfahren verwendet und/oder darauf zutreffen, die in Ausführungsformen von und/oder mit einer solchen Vorrichtung durchgeführt werden können. Jeder der hierin beschriebenen Prozessoren kann in jedem der hierin offenbarten Computersysteme oder anderen Systemen aufgenommen werden. In manchen Ausführungsformen können die Befehle Merkmale oder Details der hierin offenbarten Befehlsformate aufweisen, obwohl dies nicht erforderlich ist.
  • In der Beschreibung und den Patentansprüchen können die Begriffe „gekoppelt” und/oder „verbunden”, zusammen mit ihren Ableitungen, verwendet worden sein. Diese Begriffe gelten nicht als Synonyme füreinander. Vielmehr kann „verbunden” in Ausführungsformen verwendet werden, um auszudrücken, dass zwei oder mehrere Elemente in direktem physikalischem und/oder elektrischem Kontakt miteinander stehen. Jedoch kann „gekoppelt” auch bedeuten, dass zwei oder mehrere Elemente nicht in direktem Kontakt miteinander stehen, aber noch immer miteinander arbeiten oder interagieren. Beispielsweise kann eine Ausführungseinheit durch eine oder mehrere Zwischenkomponenten an ein Register und/oder eine Entschlüsselungseinheit gekoppelt sein. In den Figuren werden Pfeile verwendet, um die Verbindungen und Kopplungen anzuzeigen.
  • Der Begriff „und/oder” kann verwendet worden sein. Wie hierin verwendet, bezieht sich der Begriff „und/oder” auf eines oder das andere oder beide (z. B. A und/oder B bedeutet A oder B oder A sowie B).
  • In der obigen Beschreibung wurden spezielle Details dargelegt, um ein umfassendes Verständnis der Ausführungsformen bereitzustellen. Jedoch können andere Ausführungsformen ohne einige dieser speziellen Details praktiziert werden. Der Schutzumfang der Erfindung wird nicht von den oben bereitgestellten speziellen Beispielen bestimmt, sondern nur von den nachstehenden Patentansprüchen. In anderen Fällen wurden bekannte Schaltungen, Strukturen, Vorrichtungen und Vorgänge in Form von Blockschaltbildern und/oder ohne Details dargestellt, um ein Erschweren des Verständnisses der Beschreibung zu verhindern. Wo angebracht, wurden Bezugsziffern oder Endteile von Bezugsziffern in den Figuren wiederholt, um entsprechende oder analoge Elemente zu beziffern, die gegebenenfalls ähnliche oder dieselben Eigenschaften aufweisen, sofern nicht anderweitig angegeben oder klar hervorgeht.
  • Bestimmte Vorgänge können von Hardwarekomponenten ausgeführt werden oder können in maschinenausführbaren oder schaltungsausführbaren Befehlen ausgeführt sein, die verwendet werden können, um zu erreichen, dass eine Maschine, eine Schaltung oder eine Hardwarekomponente (z. B. ein Prozessor, ein Teil eines Prozessors, eine Schaltung etc.), die mit dem Befehl programmiert wurde, die Vorgänge durchführt. Die Vorgänge können gegebenenfalls von einer Kombination aus Hardware und Software durchgeführt werden. Ein Prozessor, eine Maschine, eine Schaltung oder Hardware können spezielle oder bestimmte Schaltungsanordnungen oder eine andere Logik (z. B. Hardware, die potentiell mit Firmware und/oder Software kombiniert ist) umfassen, die ausgelegt ist, den Befehl auszuführen und/oder zu bearbeiten und ein Ergebnis als Antwort auf den Befehl zu speichern.
  • Manche Ausführungsformen umfassen ein Fabrikat (z. B. ein Computerprogrammprodukt), das ein maschinenlesbares Medium umfasst. Das Medium kann einen Mechanismus umfassen, der Informationen in einer Form bereitstellt, z. B. speichert, die von der Maschine gelesen werden kann. Das maschinenlesbare Medium kann einen Befehl oder eine Befehlssequenz bereitstellen oder diese darauf gespeichert haben, der/die, falls und/oder wenn von einer Maschine ausgeführt, ausgelegt sind, zu verursachen und/oder dazu zu (ihren, dass die Maschine einen oder mehrere hierin offenbarte Vorgänge, Verfahren oder Techniken durchführt. Das maschinenlesbare Medium kann eine oder mehrere Ausführungsformen der hierin offenbarten Befehle speichern oder anderweitig bereitstellen.
  • In manchen Ausführungsformen kann das maschinenlesbare Medium ein konkretes und/oder nichtvorübergehendes maschinenlesbares Speichermedium sein. Beispielsweise kann das konkrete und/oder nichtvorübergehende maschinenlesbare Speichermedium eine Diskette, ein optisches Speichermedium, eine optische Disk, eine optische Datenspeichervorrichtung, eine CD-ROM, eine Magnetdisk, eine magneto-optische Disk, einen Read Only Memory, einen programmierbaren ROM (PROM), einen löschbaren und programmierbaren ROM (EPROM), einen elektrisch löschbaren und programmierbaren ROM (EEPROM), einen Random Access Memory (RAM), einen statischen RAM (SRAM), einen dynamischen RAM (DRAM), einen Flash Memory, einen Phasenveränderungsspeicher, ein Phasenveränderungs-Datenspeichermaterial, einen nichtflüchtigen Speicher, eine nichtflüchtige Datenspeichervorrichtung, einen nichtvorübergehenden Speicher, eine nichtvorübergehende Datenspeichervorrichtung oder dergleichen umfassen. Das nichtvorübergehende maschinenlesbare Speichermedium besteht nicht aus einem vorübergehend verbreiteten Signal.
  • Beispiele für geeignete Maschinen umfassen, ohne jedoch darauf beschränkt zu sein, einen Allzweckprozessor, einen Spezialprozessor, eine Befehlsverarbeitungsvorrichtung, eine digitale Logikschaltung, eine integrierte Schaltung oder dergleichen. Noch weitere Beispiele für geeignete Maschinen umfassen eine Rechnervorrichtung oder andere elektronische Vorrichtungen, die einen Prozessor, eine Befehlsverarbeitungsvorrichtung, eine digitale Logikschaltung oder eine integrierte Schaltung umfassen. Beispiele für solche Rechnervorrichtungen und elektronische Vorrichtungen umfassen, ohne jedoch darauf beschränkt zu sein, Desktopcomputer, Laptopcomputer, Notebook-Computer, Tablet-Computer, Netbooks, Smartphones, Mobiltelefone, Server, Netzwerkvorrichtungen (z. B. Router und Schalter), Mobile Internet Devices (MIDs), Mediaplayer, Smart-Television, Nettops, Set-Top-Boxen und Videospielcontroller.
  • Hinweise in der Patentanmeldung auf „eine (1) Ausführungsform”, „eine Ausführungsform”, „eine oder mehrere Ausführungsformen”, „einige Ausführungsformen” etc. geben an, dass ein bestimmtes Merkmal in der Umsetzung der Erfindung enthalten sein kann, dies ist jedoch nicht notwendigerweise erforderlich. Ähnlich dazu sind die verschiedenen Merkmale in der Beschreibung manchmal in einer einzigen Ausführungsform, Figur oder Beschreibung davon zum Zweck der Vereinfachung der Offenbarung und der Unterstützung des Verständnissens von verschiedenen erfinderischen Aspekten zusammen gruppiert. Dieses Offenbarungsverfahren soll jedoch nicht eine Absicht wiederspiegeln, dass die Erfindung mehr Merkmale erfordert, als die, die ausdrücklich in jedem Patentanspruch dargelegt sind. Vielmehr liegen die erfinderischen Aspekte, wie es die nachfolgenden Patentansprüche angeben, in weniger als allen Merkmalen einer einzigen offenbarten Ausführungsform. Somit sind die Patentansprüche, die auf die Detaillierte Beschreibung folgen, hiermit ausdrücklich in diese Detaillierte Beschreibung aufgenommen, wobei jeder Patentanspruch als eine getrennte Ausführungsform der Erfindung steht.
  • BEISPIELHAFTE AUSFÜHRUNGSFORMEN
  • Die folgenden Beispiele betreffen weitere Ausführungsformen. Genaue Angaben in den Beispielen können auch andernorts in einer oder mehreren Ausführungsformen verwendet werden.
  • Beispiel 1 ist ein Prozessor einschließlich einer Vielzahl von Gepackte-Daten-Registern und einer Entschlüsselungseinheit zum Entschlüsseln eines Befehls. Der Befehl soll erste gepackte Quellendaten angeben, die einen ersten Satz aus zumindest vier Datenelementen umfassen sollen, soll zweite gepackte Quellendaten angeben, die einen zweiten Satz aus zumindest vier Datenelementen umfassen sollen und soll einen Zielspeicherort angeben. Eine Ausführungseinheit ist an die Gepackte-Daten-Register und die Entschlüsselungseinheit gekoppelt. Die Ausführungseinheit soll, als Antwort auf den Befehl, gepackte Ergebnisdaten in dem Zielspeicherort speichern. Die gepackten Ergebnisdaten sollen zumindest vier Indizes umfassen. Die Indizes sind in Positionen in den gepackten Ergebnisdaten zu speichern, die eine sortierte Reihenfolge von entsprechenden Datenelementen in den ersten und zweiten gepackten Quellendaten darstellen sollen.
  • Beispiel 2 umfasst den Prozessor aus Beispiel 1, in dem die Ausführungseinheit die gepackten Ergebnisdaten speichern soll, in denen jeder der Indizes eine entsprechende Datenelementposition in jeder der ersten und zweiten gepackten Quellendaten identifizieren soll. Ebenfalls soll die Ausführungseinheit, als Antwort auf den Befehl, eine Ergebnismaske speichern, die zumindest vier Maskenelemente aufweisen soll, wobei jedes Maskenelement einem anderen Index entsprechen soll. Ebenfalls soll jedes Maskenelement angeben, ob die Datenelementposition für den entsprechenden Index in den ersten gepackten Quellendaten oder den zweiten gepackten Quellendaten ist.
  • Beispiel 3 umfasst den Prozessor aus Beispiel 2, ferner umfassend ein Maskenregister, um die Ergebnismaske zu speichern. Der Befehl ist ein einem Befehlssatz enthalten, der einen zweiten Befehl umfasst, der dazu in der Lage ist, die Ergebnismaske als einen Prädikatoperanden anzugeben, um einen gepackten Datenvorgang zu prädizieren.
  • Beispiel 4 umfasst den Prozessor aus Beispiel 1, in dem die Ausführungseinheit die gepackten Ergebnisdaten speichern soll, in denen jeder der Indizes das entsprechende einzelne Datenelement in einen der ersten und zweiten gepackten Quellendaten identifizieren soll.
  • Beispiel 5 umfasst den Prozessor aus einem der Beispiele 1 bis 4, in dem die Ausführungseinheit, als Antwort auf den Befehl, zweite gepackte Ergebnisdaten in einem zweiten Zielspeicherort speichern soll, der von dem Befehl anzugeben ist. Die zweiten gepackten Ergebnisdaten sollen die Datenelemente aus den ersten und zweiten gepackten Quellendaten umfassen, die den Indizes entsprechen, die in Positionen der zweiten gepackten Ergebnisdaten gespeichert sind, die die sortierte Reihenfolge darstellen.
  • Beispiel 6 umfasst den Prozessor aus einem der Beispiele 1 bis 4, in dem die Entschlüsselungseinheit den Befehl entschlüsseln soll, der die ersten gepackten Quellendaten mit den zumindest vier Datenelementen angeben soll, von denen angenommen wird, dass sie sich für den Befehl in sortierter Reihenfolge befinden und der die zweiten gepackten Quellendaten mit den zumindest vier Datenelementen angeben soll, von denen angenommen wird, dass sie sich für den Befehl in sortierter Reihenfolge befinden.
  • Beispiel 7 umfasst den Prozessor aus einem der Beispiele 1 bis 4, in dem die Entschlüsselungseinheit den Befehl entschlüsseln soll, der die ersten gepackten Quellendaten mit den zumindest vier Datenelementen angeben soll, von denen nicht angenommen wird, dass sie sich für den Befehl in sortierter Reihenfolge befinden und soll die zweiten gepackten Quellendaten mit den zumindest vier Datenelementen angeben, von denen nicht angenommen wird, dass sie sich für den Befehl in sortierter Reihenfolge befinden.
  • Beispiel 8 umfasst den Prozessor aus einem der Beispiele 1 bis 4, in dem die Ausführungseinheit die gepackten Ergebnisdaten speichern soll, in denen die Indizes in den Positionen zu speichern sind, die die sortierte Reihenfolge der entsprechenden Datenelemente darstellt, die eine kleinste Hälfte aller Datenelemente der ersten und zweiten gepackten Quellendaten umfassen sollen.
  • Beispiel 9 umfasst den Prozessor aus einem der Beispiele 1 bis 4, in dem die Ausführungseinheit die gepackten Ergebnisdaten speichern soll, in denen die Indizes in den Positionen zu speichern sind, die die sortierte Reihenfolge der entsprechenden Datenelemente darstellt, die eine größte Hälfte aller Datenelemente der ersten und zweiten gepackten Quellendaten umfassen sollen.
  • Beispiel 10 umfasst den Prozessor aus einem der Beispiele 1 bis 4, in dem die Entschlüsselungseinheit den Befehl entschlüsseln soll, der die ersten gepackten Quellendaten angeben soll, die zumindest acht Datenelemente umfassen sollen, von denen jedes eines mit 32 Bits und 64 Bits umfassen soll.
  • Beispiel 11 ist ein Verfahren in einem Prozessor, das ein Empfangen eines Befehls umfasst. Der Befehl gibt erste gepackte Quellendaten, einschließlich eines ersten Satzes aus zumindest vier Datenelementen an und gibt zweite gepackte Quellendaten, einschließlich eines zweiten Satzes aus zumindest vier Datenelementen an und gibt einen Zielspeicherort an. Die gepackten Ergebnisdaten werden als Antwort auf den Befehl in dem Zielspeicherort gespeichert. Die gepackten Ergebnisdaten umfassen zumindest vier Indizes. Die Indizes identifizieren entsprechende Datenelementpositionen in den ersten und zweiten gepackten Quellendaten. Die Indizes sind in Positionen in den gepackten Ergebnisdaten gespeichert, die eine sortierte Reihenfolge von entsprechenden Datenelementen in den ersten und zweiten gepackten Quellendaten darstellt.
  • Beispiel 12 umfasst das Verfahren aus Beispiel 11, in dem ein Empfangen ein Empfangen des Befehls umfasst, der die ersten gepackten Quellendaten mit den zumindest vier Datenelementen in sortierter Reihenfolge angibt.
  • Beispiel 13 umfasst das Verfahren aus einem der Beispiele 11 bis 12, in denen ein Speichern der gepackten Ergebnisdaten ein Speichern der gepackten Ergebnisdaten umfasst, in denen jeder der Indizes das entsprechende einzelne Datenelement in einer der ersten und zweiten gepackten Quellendaten identifiziert.
  • Beispiel 14 ist ein Prozessor, einschließlich einer Vielzahl von Gepackte-Daten-Registern und einer Entschlüsselungseinheit zum Entschlüsseln eines Befehls. Der Befehl soll gepackte Quellendaten angeben, die zumindest vier Datenelemente umfassen sollen, die nicht in sortierter Reihenfolge sind und soll einen Zielspeicherort angeben. Eine Ausführungseinheit ist an die Gepackte-Daten-Register und die Entschlüsselungseinheit gekoppelt. Die Ausführungseinheit soll als Antwort auf den Befehl gepackte Ergebnisdaten in dem Zielspeicherort speichern. Die gepackten Ergebnisdaten sollen zumindest vier Indizes umfassen. Die Indizes sollen entsprechende Datenelemente in den gepackten Quellendaten identifizieren. Die Indizes sollen in Positionen in den gepackten Ergebnisdaten gespeichert werden, die die sortierte Reihenfolge der entsprechenden Datenelemente in den gepackten Quellendaten darstellen sollen.
  • Beispiel 15 umfasst den Prozessor aus Beispiel 14, in dem die Ausführungseinheit, als Antwort auf den Befehl, zweite gepackte Ergebnisdaten in einem zweiten Zielspeicherort speichern soll, der von dem Befehl anzugeben ist, die zweiten gepackten Ergebnisdaten sollen die entsprechenden Datenelemente umfassen, die in Positionen der zweiten gepackten Ergebnisdaten gespeichert sind, die die sortierte Reihenfolge darstellen.
  • Beispiel 16 umfasst den Prozessor aus einem der Beispiele 14 bis 15, in dem die gepackten Ergebnisdaten Indizes umfassen sollen, die allen Datenelementen in den gepackten Quellendaten entsprechen sollen.
  • Beispiel 17 umfasst den Prozessor aus einem der Beispiele 14 bis 15, in dem die Entschlüsselungseinheit den Befehl entschlüsseln los, der die gepackten Quellendaten angeben soll, die zumindest acht Datenelemente umfassen sollen, von denen jedes eines mit 32 Bit oder 64 Bit aufweisen soll.
  • Beispiel 18 ist ein Verfahren in einem Prozessor, einschließlich eines Empfangens eines Befehls, wobei der Befehl gepackte Quellendaten, einschließlich zumindest vier Datenelementen, angibt, die nicht in sortierter Reihenfolge sind und der einen Zielspeicherort angibt. Gepackte Ergebnisdaten werden als Antwort auf den Befehl in dem Zielspeicherort gespeichert. Die gepackten Ergebnisdaten umfassen zumindest vier Indizes. Die Indizes identifizieren entsprechende Datenelemente in den gepackten Quellendaten. Die Indizes werden in den Positionen in den gepackten Ergebnisdaten gespeichert, die die sortierte Reihenfolge der entsprechenden Datenelemente in den gepackten Quellendaten darstellen.
  • Beispiel 19 umfasst das Verfahren aus Beispiel 18, ferner umfassend ein Speichern von zweiten gepackten Ergebnisdaten in einem zweiten Zielspeicherort, der von dem Befehl angegeben wird, wobei die zweiten gepackten Ergebnisdaten die entsprechenden Datenelemente umfassen, die in Positionen gespeichert sind, die die sortierte Reihenfolge darstellen.
  • Beispiel 20 umfasst das Verfahren aus einem der Beispiele 18 bis 19, in dem ein Empfangen ein Empfangen des Befehls umfasst, der die gepackten Quellendaten mit zumindest acht Datenelementen angibt, von denen jedes eines mit 32 Bit und 64 Bit umfasst und in dem ein Speichern ein Speichern der gepackten Ergebnisdaten, einschließlich Indizes, die allen Datenelementen in den gepackten Quellendaten entsprechen, umfasst.
  • Beispiel 21 ist ein System zum Verarbeiten von Befehlen, einschließlich einer Verbindung und eines Prozessors, der an die Verbindung gekoppelt ist. Der Prozessor empfangt einen Befehl, wobei der Befehl erste gepackte Quellendaten angibt, die einen ersten Satz aus zumindest vier Datenelementen umfassen, der zweite gepackte Quellendaten angibt, die einen zweiten Satz aus zumindest vier Datenelementen umfassen sollen und der ein Zielspeicherregister angibt. Der Prozessor speichert als Antwort auf den Befehl gepackte Ergebnisdaten in dem Zielregister. Die gepackten Daten umfassen zumindest vier Indizes. Die Indizes sollen entsprechende Datenelementpositionen in den ersten und zweiten gepackten Quellendaten identifizieren. Die Indizes werden in Positionen in den gepackten Ergebnisdaten gespeichert, die eine sortierte Reihenfolge von entsprechenden Datenelementen in den ersten und zweiten gepackten Quellendaten angeben sollen. Ein dynamischer Random Access Memory (DRAM) ist an die Verbindung gekoppelt. Der DRAM speichert gegebenenfalls einen Algorithmus, um die Indizes der gepackten Ergebnisdaten zum Sortieren von Daten zu verwenden.
  • Beispiel 22 umfasst das System nach Anspruch 21, in dem der Prozessor die gepackten Ergebnisdaten speichert, in denen jeder der Indizes das entsprechende einzelne Datenelement in einer der ersten und zweiten gepackten Quellendaten identifizieren soll.
  • Beispiel 23 ist ein Fabrikat, einschließlich eines nichtvorübergehenden maschinenlesbaren Speichermediums, wobei das nichtvorübergehende maschinenlesbare Speichermedium einen Befehl speichert. Der Befehl soll erste gepackte Quellendaten angeben, die einen ersten Satz aus zumindest vier Datenelementen umfassen soll, zweite gepackte Quellendaten angeben, die einen zweiten Satz aus zumindest vier Datenelementen umfassen und einen Zielspeicherort angeben. Falls der Befehl von einer Maschine ausgeführt wird, soll dies die Maschine veranlassen, Vorgänge einschließlich eines Speicherns der gepackten Ergebnisdaten in dem Zielspeicherort als Antwort auf den Befehl, durchzuführen. Die gepackten Ergebnisdaten umfassen zumindest vier Indizes. Die Indizes identifizieren entsprechende Datenelementpositionen in den ersten und zweiten gepackten Quellendaten. Die Indizes werden in Positionen in den gepackten Ergebnisdaten gespeichert, die eine sortierte Reihenfolge von entsprechenden Datenelementen in den ersten und zweiten gepackten Quellendaten darstellen.
  • Beispiel 24 umfasst das Fabrikat nach Anspruch 23, in dem der Befehl die ersten gepackten Quellendaten mit den zumindest vier Datenelementen in sortierter Reihenfolge angibt.
  • Beispiel 25 ist ein Prozessor oder eine andere Vorrichtung, umfassend Mittel zum Durchführen des Verfahrens nach einem der Ansprüche 11–13.
  • Beispiel 26 ist ein Prozessor oder eine andere Vorrichtung umfassend Module, Einheiten, Logik, Schaltungsanordnungen, Mittel oder jede Kombination daraus, zum Durchführen des Verfahrens nach einem der Ansprüche 11–13.
  • Beispiel 27 ist ein Fabrikat, umfassend ein maschinenlesbares Medium, das gegebenenfalls ein nichtvorübergehendes maschinenlesbares Speichermedium ist, das einen Befehl bereitstellt, der falls und/oder wenn er von einem Prozessor, einem Computersystem oder einer anderen Maschine ausgeführt wird, ausgelegt ist, zu verursachen, dass die Maschine das Verfahren nach einem der Ansprüche 11–13 ausführt.
  • Beispiel 28 ist ein Computersystem oder eine andere elektronische Vorrichtung, umfassend eine Verbindung; einen Prozessor, der an die Verbindung gekoppelt ist; und zumindest eine Komponente, die an die Verbindung gekoppelt ist, die aus einem dynamischen Random Access Memory (DRAM), einem Grafikchip, einem drahtlosen Kommunikationschip, einem Phasenänderungsspeicher und einer Videokamera ausgewählt ist, wobei das Computersystem oder die andere elektronische Vorrichtung ausgelegt ist, das Verfahren nach einem der Ansprüche 11–13 auszuführen.
  • Beispiel 29 ist ein Prozessor oder eine andere Vorrichtung, umfassend Mittel zum Durchführen des Verfahrens nach einem der Ansprüche 18–20.
  • Beispiel 30 ist ein Prozessor oder eine andere Vorrichtung, umfassend Module, Einheiten, Logik, Schaltungsanordnungen, Mittel oder jeder Kombination daraus, zum Durchführen des Verfahrens nach einem der Ansprüche 18–20.
  • Beispiel 31 ist ein Fabrikat, umfassend ein maschinenlesbares Medium, das gegebenenfalls ein nichtvorübergehendes maschinenlesbares Speichermedium ist, das einen Befehl bereitstellt, der falls und/oder wenn er von einem Prozessor, einem Computersystem oder einer anderen Maschine ausgeführt wird, ausgelegt ist, zu verursachen, dass die Maschine das Verfahren nach einem der Ansprüche 18–20 durchführt.
  • Beispiel 32 ist ein Computersystem oder eine andere elektronische Vorrichtung umfassend eine Verbindung; einen Prozessor, der an die Verbindung gekoppelt ist; und zumindest eine Komponente, die an die Verbindung gekoppelt ist, die aus einem dynamischen Random Access Memory (DRAM), einem Grafikchip, einem drahtlosen Kommunikationschip, einem Phasenänderungsspeicher und einer Videokamera ausgewählt ist, wobei das Computersystem oder die andere elektronische Vorrichtung ausgelegt ist, das Verfahren nach einem der Ansprüche 18–20 durchzuführen.
  • Beispiel 33 ist ein Prozessor oder eine andere Vorrichtung, die ausgelegt ist, einen oder mehrere Vorgänge oder jedes Verfahren wie im Wesentlichen hierin beschrieben, auszuführen.
  • Beispiel 34 ist ein Prozessor oder jede andere Vorrichtung umfassend Mittel zum Durchführen eines oder mehrerer Vorgänge oder jedes Verfahren im Wesentlichen wie hierin beschrieben.
  • Beispiel 35 ist ein Prozessor oder eine andere Vorrichtung zum Durchführen jedes der Befehle im Wesentlichen wie hierin beschrieben.
  • Beispiel 36 ist ein Prozessor oder eine andere Vorrichtung umfassend Mittel zum Durchführen jedes der Befehle im Wesentlichen wie hierin beschrieben.
  • Beispiel 37 umfasst ein Verfahren, das ein Konvertieren eines ersten Befehls, der im Wesentlichen jeder der hierin offenbarten Befehle sein kann und der aus einem ersten Befehlssatz stammt, in einen oder mehreren Befehle aus einem zweiten Befehlssatz umfasst. Das Verfahren umfasst auch ein Entschlüsseln und Ausführen des einen oder mehrerer der Befehle des zweiten Befehlssatzes auf einem Prozessor. Das Ausführen umfasst ein Speichern eines Ergebnisses in einem Ziel. Das Ergebnis kann jedes der Ergebnisse, im Wesentlichen wie hierin für den ersten Befehl offenbart, umfassen.
  • Beispiel 38 umfasst einen Prozessor oder eine andere Vorrichtung, umfassend eine Entschlüsselungseinheit, die ausgelegt ist, Befehle aus einem ersten Befehlssatz zu entschlüsseln. Die Entschlüsselungseinheit soll einen oder mehrere Befehle empfangen, die einen ersten Befehl emulieren, der jeder der Befehle sein kann, wie im Wesentlichen hierin offenbart und der aus einem zweiten Befehlssatz stammt. Der Prozessor oder die andere Vorrichtung umfasst auch eine oder mehrere Ausführungseinheiten, die an die Entschlüsselungseinheit gekoppelt sind, um den einen oder mehrere der Befehle aus dem ersten Befehlssatz auszuführen. Die eine oder mehrere der Ausführungseinheiten führen den einen oder mehrere der Befehle aus dem ersten Befehlssatz aus. Die eine oder mehrere der Ausführungseinheiten sind ausgelegt, als Antwort auf den einen oder mehrere der Befehle, ein Ergebnis in einem Ziel zu speichern. Das Ergebnis kann jedes der Ergebnisse, im Wesentlichen wie hierin für den ersten Befehl, umfassen.
  • Beispiel 39 umfasst ein Computersystem oder eine andere elektronische Vorrichtung, die einen Prozessor mit einer Entschlüsselungseinheit, die ausgelegt ist, Befehle aus einem ersten Befehlssatz zu entschlüsseln und eine oder mehrere Ausführungseinheiten umfasst. Das Computersystem umfasst auch eine Speichervorrichtung, die an den Prozessor gekoppelt ist. Die Speichervorrichtung soll einen ersten Befehl speichern, der jeder der Befehle, wie im Wesentlichen hierin offenbart, sein kann und der aus einem zweiten Befehlssatz stammt. Die Speichervorrichtung soll ebenfalls Befehle speichern, um den ersten Befehl in einen oder mehrere Befehle des ersten Befehlssatzes zu konvertieren. Der eine oder mehrere der Befehle aus dem ersten Befehlssatz sind, wenn sie von dem Prozessor ausgeführt werden, ausgelegt, zu verursachen, dass der Prozessor ein Ergebnis in einem Ziel speichert. Das Ergebnis kann jedes der Ergebnisse, wie im Wesentlichen hierin für den ersten Befehl offenbart, umfassen.

Claims (25)

  1. Prozessor, der Folgendes umfasst: eine Vielzahl von Gepackte-Daten-Registern; eine Entschlüsselungseinheit zum Entschlüsseln eines Befehls, wobei der Befehl erste gepackte Quellendaten angibt, die einen ersten Satz aus zumindest vier Datenelementen umfassen, zweite gepackte Quellendaten angibt, die einen zweiten Satz aus zumindest vier Datenelementen umfassen und einen Zielspeicherort angibt; eine Ausführungseinheit, gekoppelt an die Gepackte-Daten-Register und die Entschlüsselungseinheit, wobei die Ausführungseinheit als Antwort auf den Befehl gepackte Ergebnisdaten in dem Zielspeicherort speichert, wobei die gepackten Ergebnisdaten zumindest vier Indizes umfassen, wobei die Indizes entsprechende Datenelementpositionen in den ersten und zweiten gepackten Quellendaten identifizieren und wobei die Indizes, die in Positionen in den gepackten Ergebnisdaten zu speichern sind, eine sortierte Reihenfolge aus entsprechenden Datenelementen in den ersten und zweiten gepackten Quellendaten angeben sollen.
  2. Prozessor nach Anspruch 1, worin die Ausführungseinheit die gepackten Ergebnisdaten speichern soll, in denen jeder der Indizes eine entsprechende Datenelementposition in jeden der ersten und zweiten gepackten Quellendaten identifizieren soll und worin die Ausführungseinheit als Antwort auf den Befehl eine Ergebnismaske speichern soll, die zumindest vier Maskenelemente aufweisen soll, worin jedes Maskenelement einem anderen Index entsprechen soll und worin jedes Maskenelement angeben soll, ob die Datenelementposition für den entsprechenden Index in den ersten gepackten Quellendaten oder in den zweiten gepackten Quellendaten ist.
  3. Prozessor nach Anspruch 2, ferner umfassend ein Maskenregister zum Speichern der Ergebnismaske und worin der Befehl in einem Befehlssatz enthalten ist, der einen zweiten Befehl umfasst, der dazu in der Lage ist, die Ergebnismaske als einen Prädikatoperanden anzugeben, um einen gepackten Datenvorgang zu prädizieren.
  4. Prozessor nach Anspruch 1, worin die Ausführungseinheit die gepackten Ergebnisdaten speichern soll, in denen jeder der Indizes das entsprechende einzelne Datenelement in einen der ersten und zweiten gepackten Quellendaten identifizieren soll.
  5. Prozessor nach einem der Ansprüche 1 bis 4, worin die Ausführungseinheit als Antwort auf den Befehl zweite gepackte Ergebnisdaten in einem zweiten Zielspeicherort speichern soll, die von dem Befehl angegeben wird, wobei die zweiten gepackten Ergebnisdaten Datenelemente aus den ersten und zweiten gepackten Quellendaten umfassen, die den Indizes entsprechen, die in Positionen der zweiten gepackten Ergebnisdaten gespeichert sind, die die sortierte Reihenfolge wiedergeben.
  6. Prozessor nach einem der Ansprüche 1 bis 4, worin die Entschlüsselungseinheit den Befehl entschlüsseln soll, der die ersten gepackten Quellendaten mit den zumindest vier Datenelementen angibt, von denen angenommen wird, dass sie sich in sortierter Reihenfolge für den Befehl befinden und die die zweiten gepackten Quellendaten mit den zumindest vier Datenelementen angeben soll, von denen angenommen wird, dass sie sich in sortierter Reihenfolge für den Befehl befinden.
  7. Prozessor nach einem der Ansprüche 1 bis 4, worin die Entschlüsselungseinheit ausgelegt ist, den Befehl zu entschlüsseln, der die ersten gepackten Quellendaten mit den zumindest vier Datenelementen angeben soll, von denen nicht angenommen wird, dass sie sich in sortierter Reihenfolge für den Befehl befinden, und die zweiten gepackten Quellendaten mit den zumindest vier Datenelementen angeben soll, von denen nicht angenommen wird, dass sie sich in einer sortierten Reihenfolge für den Befehl befinden.
  8. Prozessor nach einem der Ansprüche 1 bis 4, worin die Ausführungseinheit die gepackten Ergebnisdaten speichern soll, in denen die Indizes in den Positionen zu speichern sind, die die sortierte Reihenfolge der entsprechenden Datenelemente darstellen, die eine kleinste Hälfte aller Datenelemente der ersten und zweiten gepackten Datenelementen umfassen sollen.
  9. Prozessor nach einem der Ansprüche 1 bis 4, worin die Entschlüsselungseinheit die gepackten Ergebnisdaten speichern soll, in denen die Indizes in den Positionen zu speichern sind, die die sortierte Reihenfolge von entsprechenden Datenelementen darstellen, die eine größte Hälfte aller Datenelemente der ersten und zweiten gepackten Quellendaten umfassen sollen.
  10. Prozessor nach einem der Ansprüche 1 bis 4, worin die Entschlüsselungseinheit den Befehl entschlüsseln soll, der die ersten gepackten Quellendaten angeben soll, die zumindest acht Datenelemente umfassen sollen, von denen jedes eines mit 32 Bit und 64 Bit aufweisen soll.
  11. Verfahren in einem Prozessor, das Folgendes umfasst: Empfangen eines Befehls, wobei der Befehl erste gepackte Quellendaten einschließlich eines ersten Satzes aus zumindest vier Datenelementen angibt, zweite gepackte Quellendaten einschließlich eines zweiten Satzes aus zumindest vier Datenelementen angibt und einen Zielspeicherort angibt; und Speichern von gepackten Ergebnisdaten als Antwort auf den Befehl in dem Zielspeicherort, wobei die gepackten Ergebnisdaten zumindest vier Indizes umfassen, wobei die Indizes entsprechende Datenelementpositionen in den ersten und zweiten gepackten Quellendaten identifizieren und wobei die Indizes in Positionen in den gepackten Ergebnisdaten gespeichert sind, die eine sortierte Reihenfolge aus entsprechenden Datenelementen in den ersten und zweiten gepackten Quellendaten darstellen.
  12. Verfahren nach Anspruch 11, worin ein Empfangen ein Empfangen des Befehls umfasst, der die ersten gepackten Quellendaten mit den zumindest vier Datenelementen in sortierter Reihenfolge angibt.
  13. Prozessor, der Folgendes umfasst: eine Vielzahl von Gepackte-Daten-Registern; eine Entschlüsselungseinheit zum Entschlüsseln eines Befehls, wobei der Befehl gepackte Quellendaten angeben soll, die zumindest vier Datenelemente umfassen, die sich nicht in einer sortierten Reihenfolge befinden und einen Zielspeicherort angeben soll; eine Ausführungseinheit, gekoppelt mit den Gepackte-Daten-Registern und der Entschlüsselungseinheit, wobei die Ausführungseinheit als Antwort auf den Befehl gepackte Ergebnisdaten in dem Zielspeicherort speichern soll, wobei die gepackten Ergebnisdaten zumindest vier Indizes umfassen, wobei die Indizes entsprechende Datenelemente in den gepackten Quellendaten identifizieren sollen und wobei die Indizes in Positionen in den gepackten Ergebnisdaten zu speichern sind, die die sortiere Reihenfolge der entsprechenden Datenelemente in den gepackten Quellendaten darstellen.
  14. Prozessor nach Anspruch 13, worin die Ausführungseinheit zweite gepackte Ergebnisdaten als Antwort auf den Befehl in einem zweiten Zielspeicherort speichern soll, der von dem Befehl angegeben werden soll, wobei die zweiten gepackten Ergebnisdaten die entsprechenden Datenelemente umfassen, die in Positionen der zweiten gepackten Ergebnisdaten gespeichert sind, die die sortierte Reihenfolge angeben.
  15. Prozessor nach einem der Ansprüche 13 bis 14, worin die gepackten Ergebnisdaten Indizes umfassen sollen, die allen Datenelementen in den gepackten Quellendaten entsprechen.
  16. Prozessor nach einem der Ansprüche 13 bis 14, worin die Entschlüsselungseinheit den Befehl entschlüsseln soll, der die gepackten Quellendaten angibt, die zumindest acht Datenelemente umfassen sollen, von denen jedes eines von 32 Bit und 64 Bit aufweisen soll.
  17. Verfahren in einem Prozessor, das Folgendes umfasst: Empfangen eines Befehls, wobei der Befehl erste gepackte Quellendaten einschließlich zumindest vier Datenelemente angibt, die sich nicht in sortierter Reihenfolge befinden und einen Zielspeicherort angibt; und Speichern von gepackten Ergebnisdaten als Antwort auf den Befehl in dem Zielspeicherort, wobei die gepackten Ergebnisdaten zumindest vier Indizes umfassen, wobei die Indizes entsprechende Datenelementpositionen in den gepackten Quellendaten identifizieren und wobei die Indizes in Positionen in den gepackten Ergebnisdaten gespeichert sind, die die sortierte Reihenfolge der entsprechenden Datenelemente in den gepackten Quellendaten darstellen.
  18. Verfahren nach Anspruch 17, ferner umfassend ein Speichern von zweiten gepackten Ergebnisdaten in einem zweiten Zielspeicherort, der von dem Befehl angegeben wird, wobei die zweiten gepackten Ergebnisdaten die entsprechenden Datenelemente umfassen, die in Positionen gespeichert sind, die die sortierte Reihenfolge wiedergeben.
  19. System zum Verarbeiten von Befehlen, das Folgendes umfasst: eine Verbindungseinheit; einen Prozessor, der an die Verbindungseinheit gekoppelt ist, wobei der Prozessor einen Befehl empfängt, wobei der Befehl erste gepackte Quellendaten angibt, die einen ersten Satz aus zumindest vier Datenelementen umfasst, zweite gepackte Quellendaten angibt, die einen zweiten Satz aus zumindest vier Datenelementen umfasst und ein Zielregister angibt, wobei der Prozessor als Antwort auf den Befehl gepackte Ergebnisdaten in dem Zielregister speichert, wobei die gepackten Ergebnisdaten zumindest vier Indizes umfassen, wobei die Indizes entsprechende Datenelementpositionen in den ersten und zweiten gepackten Quellendaten identifizieren und wobei die Indizes in den Positionen in den gepackten Ergebnisdaten zu speichern sind, die eine sortierte Reihenfolge aus entsprechenden Datenelementen in den ersten und zweiten gepackten Quellendaten darstellen; und einen dynamischen Random Access Memory (DRAM), der an die Verbindungseinheit gekoppelt ist, wobei der DRAM einen Algorithmus speichert, um die Indizes der gepackten Ergebnisdaten zu verwenden, um die Daten zu sortieren.
  20. System nach Anspruch 19, worin der Prozessor die gepackten Ergebnisdaten speichert, in denen jeder der Indizes das entsprechende einzelne Datenelement in einer der ersten und zweiten gepackten Quellendaten identifiziert.
  21. Fabrikat, das ein nichtvorübergehendes, maschinenlesbares Speichermedium umfasst, wobei das nichtvorübergehende, maschinenlesbare Speichermedium einen Befehl speichert, wobei der Befehl erste gepackte Quellendaten angibt, die einen ersten Satz aus zumindest vier Datenelementen umfassen, zweite gepackte Quellendaten angibt, die einen zweiten Satz aus zumindest vier Datenelementen umfassen und der einen Zielspeicherort angibt und wobei der Befehl, falls er von einer Maschine ausgeführt wird, verursacht, dass die Maschine Vorgänge ausführt, die Folgendes umfassen: Speichern von gepackten Ergebnisdaten in dem Zielspeicherort als Antwort auf den Befehl, wobei die gepackten Ergebnisdaten zumindest vier Indizes umfassen, wobei die Indizes entsprechende Datenelementpositionen in den ersten und zweiten gepackten Quellendaten identifizieren und wobei die Indizes, die in Positionen in den gepackten Ergebnisdaten gespeichert sind, eine sortierte Reihenfolge aus entsprechenden Datenelementen in den ersten und zweiten gepackten Quellendaten darstellen.
  22. Fabrikat nach Anspruch 21, wobei der Befehl die ersten gepackten Quellendaten mit zumindest vier Datenelementen in sortierter Reihenfolge angibt.
  23. Prozessor, der Mittel zum Durchführen des Verfahrens nach einem der Ansprüche 11–12 umfasst.
  24. Fabrikat, das ein nicht-vorübergehendes, maschinenlesbares Speichermedium umfasst, das einen Befehl bereitstellt, der, falls er von einer Maschine ausgeführt wird, ausgelegt ist, zu verursachen, dass die Maschine das Verfahren nach einem der Ansprüche 11–12 ausführt.
  25. Prozessor, der Mittel zum Durchführen des Verfahrens nach einem der Ansprüche 17–18 umfasst.
DE102015002215.6A 2014-03-28 2015-02-20 Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle Pending DE102015002215A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/229,811 2014-03-28
US14/229,811 US9766888B2 (en) 2014-03-28 2014-03-28 Processor instruction to store indexes of source data elements in positions representing a sorted order of the source data elements

Publications (1)

Publication Number Publication Date
DE102015002215A1 true DE102015002215A1 (de) 2015-10-01

Family

ID=52630788

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102015002215.6A Pending DE102015002215A1 (de) 2014-03-28 2015-02-20 Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle

Country Status (7)

Country Link
US (2) US9766888B2 (de)
JP (2) JP6163171B2 (de)
KR (1) KR101787819B1 (de)
CN (2) CN104951401B (de)
DE (1) DE102015002215A1 (de)
GB (1) GB2524617B (de)
TW (1) TWI587215B (de)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11461096B2 (en) 2019-05-24 2022-10-04 Texas Instruments Incorporated Method and apparatus for vector sorting using vector permutation logic
US10198264B2 (en) * 2015-12-15 2019-02-05 Intel Corporation Sorting data and merging sorted data in an instruction set architecture
US10007519B2 (en) * 2015-12-22 2018-06-26 Intel IP Corporation Instructions and logic for vector bit field compression and expansion
US9996361B2 (en) * 2015-12-23 2018-06-12 Intel Corporation Byte and nibble sort instructions that produce sorted destination register and destination index mapping
GB2548600B (en) * 2016-03-23 2018-05-09 Advanced Risc Mach Ltd Vector predication instruction
US11204764B2 (en) * 2016-03-31 2021-12-21 Intel Corporation Processors, methods, systems, and instructions to Partition a source packed data into lanes
CN116009814A (zh) 2016-10-20 2023-04-25 英特尔公司 用于经融合的乘加的系统、装置和方法
US11740868B2 (en) 2016-11-14 2023-08-29 Google Llc System and method for sorting data elements of slabs of registers using a parallelized processing pipeline
US10515302B2 (en) * 2016-12-08 2019-12-24 Via Alliance Semiconductor Co., Ltd. Neural network unit with mixed data and weight size computation capability
US11176084B2 (en) * 2017-11-09 2021-11-16 International Business Machines Corporation SIMD instruction sorting pre-sorted source register's data elements into a first ascending order destination register and a second descending destination register
CN111105033B (zh) * 2017-12-14 2024-01-12 中科寒武纪科技股份有限公司 神经网络处理器板卡及相关产品
WO2019114842A1 (zh) 2017-12-14 2019-06-20 北京中科寒武纪科技有限公司 一种集成电路芯片装置
US10534881B2 (en) 2018-04-10 2020-01-14 Advanced Micro Devices, Inc. Method of debugging a processor
US20200050452A1 (en) * 2018-08-11 2020-02-13 Intel Corporation Systems, apparatuses, and methods for generating an index by sort order and reordering elements based on sort order
US10691412B2 (en) 2018-08-31 2020-06-23 International Business Machines Corporation Parallel sort accelerator sharing first level processor cache
US10579332B1 (en) 2018-08-31 2020-03-03 International Business Machines Corporation Hardware sort accelerator sharing first level processor cache
US10725738B2 (en) 2018-08-31 2020-07-28 International Business Machines Corporation Adaptive sort accelerator sharing first level processor cache
US10922080B2 (en) * 2018-09-29 2021-02-16 Intel Corporation Systems and methods for performing vector max/min instructions that also generate index values
US11163564B1 (en) * 2018-10-08 2021-11-02 Verisilicon Microelectronics (Shanghai) Co., Ltd. Vector compare and store instruction that stores index values to memory
US10831502B2 (en) 2018-11-06 2020-11-10 International Business Machines Corporation Migration of partially completed instructions
US10831478B2 (en) * 2018-11-06 2020-11-10 International Business Machines Corporation Sort and merge instruction for a general-purpose processor
US10831503B2 (en) * 2018-11-06 2020-11-10 International Business Machines Corporation Saving and restoring machine state between multiple executions of an instruction
CN111240682A (zh) * 2018-11-28 2020-06-05 深圳市中兴微电子技术有限公司 一种指令数据的处理方法及装置、设备、存储介质
US11593106B1 (en) 2021-09-24 2023-02-28 Apple Inc. Circuits and methods for vector sorting in a microprocessor

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0731588B2 (ja) 1984-12-12 1995-04-10 株式会社日立製作所 ベクトル処理装置
US5907842A (en) 1995-12-20 1999-05-25 Intel Corporation Method of sorting numbers to obtain maxima/minima values with ordering
US6036350A (en) 1995-12-20 2000-03-14 Intel Corporation Method of sorting signed numbers and solving absolute differences using packed instructions
US6041404A (en) 1998-03-31 2000-03-21 Intel Corporation Dual function system and method for shuffling packed data elements
US6636167B1 (en) 2000-10-31 2003-10-21 Intel Corporation Method of generating Huffman code length information
US7155601B2 (en) 2001-02-14 2006-12-26 Intel Corporation Multi-element operand sub-portion shuffle instruction execution
US7725678B2 (en) 2005-02-17 2010-05-25 Texas Instruments Incorporated Method and apparatus for producing an index vector for use in performing a vector permute operation
US7933405B2 (en) * 2005-04-08 2011-04-26 Icera Inc. Data access and permute unit
US7536532B2 (en) * 2006-09-27 2009-05-19 International Business Machines Corporation Merge operations of data arrays based on SIMD instructions
US20080104374A1 (en) 2006-10-31 2008-05-01 Motorola, Inc. Hardware sorter
US7908283B2 (en) 2007-08-29 2011-03-15 Red Hat, Inc. Finding superlatives in an unordered list
US7962718B2 (en) * 2007-10-12 2011-06-14 Freescale Semiconductor, Inc. Methods for performing extended table lookups using SIMD vector permutation instructions that support out-of-range index values
US20130212354A1 (en) * 2009-09-20 2013-08-15 Tibet MIMAR Method for efficient data array sorting in a programmable processor
DE102009047389A1 (de) 2009-12-02 2011-06-09 Robert Bosch Gmbh Verbindung zwischen einem ersten Bauteil und einem zweiten Bauteil
KR101662769B1 (ko) 2010-03-09 2016-10-05 삼성전자주식회사 고속 정렬 장치 및 방법
US8838935B2 (en) 2010-09-24 2014-09-16 Intel Corporation Apparatus, method, and system for implementing micro page tables
US8812516B2 (en) 2011-10-18 2014-08-19 Qualcomm Incorporated Determining top N or bottom N data values and positions
US10866807B2 (en) 2011-12-22 2020-12-15 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in numerical order that differ by a constant stride
US9632980B2 (en) * 2011-12-23 2017-04-25 Intel Corporation Apparatus and method of mask permute instructions

Also Published As

Publication number Publication date
GB2524617B (en) 2017-09-27
TW201602904A (zh) 2016-01-16
GB201500857D0 (en) 2015-03-04
CN104951401A (zh) 2015-09-30
KR20150112781A (ko) 2015-10-07
JP2017157244A (ja) 2017-09-07
US20150277912A1 (en) 2015-10-01
JP6163171B2 (ja) 2017-07-12
GB2524617A (en) 2015-09-30
CN104951401B (zh) 2018-08-03
JP2015191659A (ja) 2015-11-02
KR101787819B1 (ko) 2017-10-18
US20180004520A1 (en) 2018-01-04
US9766888B2 (en) 2017-09-19
CN109240744A (zh) 2019-01-18
TWI587215B (zh) 2017-06-11

Similar Documents

Publication Publication Date Title
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE102015007571B4 (de) Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren, -verfahren, -systeme und -befehle
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE102016006400A1 (de) Hardware-prozessoren und verfahren für eng-gekoppelte heterogene datenverarbeitung
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE112013005236T5 (de) Verfahren und Vorrichtung für Integralbild-Berechnungsbefehle
DE112012007063T5 (de) Zusammenfügen von benachbarten Sammel-/Streuoperationen
DE112013003741T5 (de) Systeme, Vorrichtungen und Verfahren zum Durchführen einer Konfliktdetektion unf einer Übertragung von Inhalten eines Registers an Datenelementpositionen eines anderen Registers
DE102019100009A1 (de) Vereinheitlichter Hardwarebeschleuniger für Verschlüsselungssysteme mit symmetrischen Schlüsseln
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE102019109845A1 (de) Vereinheitlichte Beschleunigung eines Blockgeheimcodes eines symmetrischen Schlüssels für AES-SMS4-Camellia
DE102014003644A1 (de) Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
DE112016004348T5 (de) Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle
DE112013005343T5 (de) Befehle für Codierungsalgorithemen mit gleitendem Fenster
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102018006744A1 (de) Bitmatrixmultiplikation
DE112016005909T5 (de) Einrichtung und verfahren zum beschleunigen von graphenanalyse
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern

Legal Events

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