DE102014003644A1 - Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich - Google Patents

Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich Download PDF

Info

Publication number
DE102014003644A1
DE102014003644A1 DE102014003644.8A DE102014003644A DE102014003644A1 DE 102014003644 A1 DE102014003644 A1 DE 102014003644A1 DE 102014003644 A DE102014003644 A DE 102014003644A DE 102014003644 A1 DE102014003644 A1 DE 102014003644A1
Authority
DE
Germany
Prior art keywords
packed
data
bit
result
source
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
DE102014003644.8A
Other languages
English (en)
Inventor
Shihjong J. Kuo
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 DE102014003644A1 publication Critical patent/DE102014003644A1/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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/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/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format

Abstract

Eine Vorrichtung umfasst gepackte Datenregister und eine Ausführungseinheit. Ein Befehl ist ausgestaltet, um erste gepackte Quelldaten, die ausgestaltet sind, um erste gepackte Datenelemente zu umfassen, zweite gepackte Quelldaten, die ausgestaltet sind, um zweite gepackte Datenelemente zu umfassen, und einen Zielspeicherort anzugeben. Die Ausführungseinheit ist ausgestaltet, um als Reaktion auf den Befehl ein gepacktes Datenergebnis, das ausgestaltet ist, um gepackte Ergebnisdatenelemente zu umfassen, im Zielspeicherort zu speichern. Jedes der Ergebnisdatenelemente ist ausgestaltet, um einem unterschiedlichen der Datenelemente der zweiten gepackten Quelldaten zu entsprechen. Jedes der Ergebnisdatenelemente ist ausgestaltet, um eine Mehrfach-Bit-Vergleichsmaske zu umfassen, die ausgestaltet ist, um ein unterschiedliches Vergleichsmaskenbit für jedes unterschiedliche entsprechende Datenelement der ersten gepackten Quelldaten zu umfassen, das mit dem entsprechenden Datenelement der zweiten gepackten Quelldaten verglichen wird.

Description

  • ALLGEMEINER STAND DER TECHNIK
  • Technisches Gebiet
  • Die hier beschriebenen Ausführungsformen betreffen allgemein Prozessoren. Insbesondere betreffen die hier beschriebenen Ausführungsformen allgemein Prozessoren zum Vergleichen von mehreren Datenelementen mit mehreren anderen Datenelementen als Reaktion auf Befehle.
  • Stand der Technik
  • Viele Prozessoren weisen Single Instruction, Multiple Data (SIMD) Architekturen auf. In SIMD-Architekturen kann ein gepackter Datenbefehl, Vektorbefehl oder SIMD-Befehl gleichzeitig oder parallel auf mehreren Datenelementen oder mehreren Paaren von Datenelementen arbeiten. Der Prozessor kann Parallelausführungshardware aufweisen, um als Reaktion auf den gepackten Datenbefehl die mehreren Operationen gleichzeitig oder parallel durchzuführen.
  • Mehrere Datenelemente können innerhalb eines Registers oder Speicherorts als gepackte Daten oder Vektordaten gepackt sein. In gepackten Daten können die Bits des Registers oder anderen Speicherorts logisch in eine Folge von Datenelementen unterteilt sein. Zum Beispiel kann ein 256 Bit breites gepacktes Datenregister vier 64 Bit breite Datenelemente, acht 32-Bit-Datenelemente, sechzehn 16-Bit-Datenelemente usw. aufweisen. Jedes der Datenelemente kann ein einzelnes Datenstück (z. B. eine Pixelfarbe usw.) darstellen, mit dem getrennt und/oder unabhängig von den anderen gearbeitet werden kann.
  • Der Vergleich von gepackten Datenelementen ist eine übliche und weit verbreitete Operation, die auf viele verschiedene Arten verwendet wird. Im Stand der Technik sind verschiedene Vektor-, gepackte Daten- oder SIMD-Befehle zum Durchführen von gepackten, Vektor- oder SIMD-Vergleichen von Datenelementen bekannt. Zum Beispiel umfasst die MMXTM Technologie in der Intel Architektur (IA) verschiedene gepackte Vergleichsbefehle. In jüngerer Zeit wurden mit den Intel® Streaming SIMD Extensions 4.2 (SSE4.2) verschiedene String- und Textverarbeitungsbefehle eingeführt.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Ein besseres Verständnis der Erfindung geht aus der folgenden Beschreibung und den begleitenden Zeichnungen hervor, die verwendet werden, um Ausführungsformen zu veranschaulichen. Es zeigen:
  • 1 ein Blockdiagramm einer Ausführungsform eines Prozessors, der einen Befehlssatz aufweist, der einen oder mehrere Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehle umfasst.
  • 2 ein Blockdiagramm einer Ausführungsform einer Befehlsverarbeitungsvorrichtung, die eine Ausführungseinheit zum Ausführen einer Ausführungsform eines Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehls aufweist.
  • 3 ein Blockablaufdiagramm einer Ausführungsform eines Verfahrens zum Verarbeiten einer Ausführungsform eines Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehls.
  • 4 ein Blockdiagramm, das beispielhafte Ausführungsformen von geeigneten gepackten Datenformaten veranschaulicht.
  • 5 ein Blockdiagramm, das eine Ausführungsform einer Operation veranschaulicht, die als Reaktion auf eine Ausführungsform eines Befehls durchgeführt werden kann.
  • 6 ein Blockdiagramm, das eine beispielhafte Ausführungsform einer Operation veranschaulicht, die auf 128 Bit breiten gepackten Quellen, die 16-Bit-Wort-Elemente aufweisen, als Reaktion auf eine Ausführungsform eines Befehls durchgeführt werden kann.
  • 7 ein Blockdiagramm, das eine beispielhafte Ausführungsform einer Operation veranschaulicht, die auf 128 Bit breiten gepackten Quellen, die 8-Bit-Byte-Elemente aufweisen, als Reaktion auf eine Ausführungsform eines Befehls durchgeführt werden kann.
  • 8 ein Blockdiagramm, das eine beispielhafte Ausführungsform einer Operation veranschaulicht, die als Reaktion auf eine Ausführungsform eines Befehls durchgeführt werden kann, der betriebsfähig ist, um eine Teilmenge von Vergleichsmasken zum Berichten in einem gepackten Datenergebnis auszuwählen.
  • 9 ein Blockdiagramm von Mikroarchitekturdetails, die für Ausführungsformen zweckmäßig sind.
  • 10 ein Blockdiagramm einer beispielhaften Ausführungsform einer zweckmäßigen Menge von gepackten Datenregistern.
  • 11A eine Veranschaulichung eines beispielhaften AVX-Befehlsformats, das ein VEX-Präfix, reales Opcode-Feld, Mod R/M Byte, SIB-Byte, Verschiebungsfeld und IMM8 umfasst.
  • 11B eine Veranschaulichung, welche Felder von 11A ein vollständiges Opcode-Feld und ein Basisoperationsfeld bilden.
  • 11C eine Veranschaulichung, welche Felder von 11A ein Registerindexfeld bilden.
  • 12A ein Blockdiagramm, das ein generisches vektorfreundliches Befehlsformat und Klasse-A-Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulicht.
  • 12B ein Blockdiagramm, das das generische vektorfreundliche Befehlsformat und Klasse-B-Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulicht.
  • 13A ein Blockdiagramm, das ein beispielhaftes spezifisches vektorfreundliches Befehlsformat gemäß Ausführungsformen der Erfindung veranschaulicht.
  • 13B ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats veranschaulicht, die das vollständige Opcode-Feld gemäß einer Ausführungsform der Erfindung bilden.
  • 13C ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats veranschaulicht, die das Registerindexfeld gemäß einer Ausführungsform der Erfindung bilden.
  • 13D ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats veranschaulicht, die das Erhöhungsoperationsfeld gemäß einer Ausführungsform der Erfindung bilden.
  • 14 ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform der Erfindung.
  • 15A ein Blockdiagramm, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Registerumbenennung, Out-Of-Order-Issue/Execution-Pipeline gemäß Ausführungsformen der Erfindung veranschaulicht.
  • 15B ein Blockdiagramm, das sowohl ein Ausführungsbeispiel eines In-Order-Architekturkerns als auch einer beispielhaften Registerumbenennung veranschaulicht, wobei der Out-Of-Order-Issue/Execution-Architekturkern ausgestaltet ist, um in einen Prozessor gemäß Ausführungsformen der Erfindung aufgenommen zu werden.
  • 16A ein Blockdiagramm eines einzelnen Prozessorkerns gemeinsam mit seiner Verbindung mit dem Zwischenverbindungsnetz auf dem Chip und mit seiner lokalen Teilmenge des Level 2 (L2) Caches gemäß Ausführungsformen der Erfindung.
  • 16B eine vergrößerte Ansicht eines Teils des Prozessorkerns in 16A gemäß Ausführungsformen der Erfindung.
  • 17 ein Blockdiagramm eines Prozessors, der mehr als einen Kern aufweisen kann, einen integrierten Speicher-Controller aufweisen kann und integrierte Grafik aufweisen kann, gemäß Ausführungsformen der Erfindung.
  • 18 ein Blockdiagramm eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 19 ein Blockdiagramm eines ersten spezifischeren Systembeispiels gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 20 ein Blockdiagramm eines zweiten spezifischeren Systembeispiels gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 21 ein Blockdiagramm eines SoC gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 22 ein Blockdiagramm, das die Verwendung eines Software-Befehlsumsetzers zum Umsetzen von Binärbefehlen in einem Quell-Befehlssatz mit Binärbefehlen in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt.
  • DETAILLIERTE BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
  • In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt (z. B. spezifische Befehlsoperationen, gepackte Datenformate, Typen von Masken, Arten der Angabe von Operanden, Prozessorkonfigurationen, Mikroarchitekturdetails, Folgen von Operationen usw.). Ausführungsformen können indes ohne diese spezifischen Details in der Praxis angewandt werden. In anderen Fällen wurden gut bekannte Schaltungen, Strukturen und Techniken nicht im Detail gezeigt, um zu vermeiden, dass das Verständnis der Beschreibung verschleiert wird.
  • Hier sind verschiedene Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehle, Prozessoren zum Ausführen der Befehle, durch die Prozessoren beim Verarbeiten oder Ausführen der Befehle durchgeführte Verfahren und Systeme, die einen oder mehrere Prozessoren zum Verarbeiten oder Ausführen der Befehle enthalten, offenbart. 1 ist ein Blockdiagramm einer Ausführungsform eines Prozessors 100, der einen Befehlssatz 102 aufweist, der einen oder mehrere Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehle 103 aufweist. In einigen Ausführungsformen kann der Prozessor ein Universalprozessor sein (z. B. ein Universalmikroprozessor des Typs, der in einem Desktop-, Laptop- und ähnlichen Rechnern verwendet wird). Alternativ kann der Prozessor ein Spezialprozessor sein. Beispiele für geeignete Spezialprozessoren umfassen Netzwerkprozessoren, Kommunikationsprozessoren, kryptographische Prozessoren, Grafikprozessoren, Coprozessoren, eingebettete Prozessoren, digitale Signalprozessoren (DSP) und Controller (z. B. Mikrocontroller), um nur einige Beispiele zu nennen, sind aber nicht darauf beschränkt. Der Prozessor kann irgendeiner von verschiedenen Complex Instruction Set Computing (CISC) Prozessoren, verschiedenen Reduced Instruction Set Computing (RISC) Prozessoren, verschiedenen Very Long Instruction Word (VLIW) Prozessoren, verschiedenen Hybriden davon oder ein vollständig anderer Typ von Prozessor sein.
  • Der Prozessor weist eine Befehlssatzarchitektur (Instruction Set Architecture – ISA) 101 auf. Die ISA stellt einen Teil der Architektur des Prozessors dar, die mit dem Programmieren verbunden ist und umfasst allgemein native Befehle, Architekturregister, Datentypen, Adressierungsarten, Speicherarchitektur und dergleichen des Prozessors. Die ISA wird von der Mikroarchitektur unterschieden, die allgemein die bestimmten Prozessorkonstruktionstechniken darstellt, die zum Ausführen der ISA ausgewählt wurden.
  • Die ISA umfasst sichtbare Architekturregister (z. B. eine Architekturregisterdatei) 107. Die Architekturregister können hier auch einfach als Register bezeichnet werden. Wenn nichts anderes angegeben oder ersichtlich ist, werden die Begriffe Architekturregister, Registerdatei und Register hier verwendet, um Register, die für die Software und/oder den Programmierer sichtbar sind, und/oder die Register zu bezeichnen, die durch Universal-Makrobefehle angegeben werden, um Operanden zu identifizieren. Diese Register werden mit anderen Nicht-Architektur- oder nicht sichtbaren Architekturregistern in einer gegebenen Mikroarchitektur verglichen (z. B. temporäre Register, die durch Befehle verwendet werden, Neuordnungspuffer, Retirement-Register usw.). Die Register stellen allgemein Prozessorspeicherorte auf dem Chip dar. Die veranschaulichten Register umfassen gepackte Datenregister 108, die betriebsfähig sind, um gepackte Daten, Vektordaten oder SIMD-Daten zu speichern. Die Architekturregister können auch Universalregister 109 umfassen, die in einigen Ausführungsformen wahlweise durch die Mehrfachelement-mit-Mehrfachelement-Vergleichsbefehle angegeben werden, um Quelloperanden bereitzustellen (z. B. um Teilmengen von Datendatenelementen anzugeben, um Versätze bereitzustellen, die Vergleichsergebnisse angeben, die in das Ziel aufzunehmen sind usw.).
  • Die veranschaulichte ISA umfasst einen Befehlssatz 102. Die Befehle des Befehlssatzes stellen Makrobefehle dar (z. B. Assemblersprache oder Befehle auf Maschinenebene, die dem Prozessor zur Ausführung bereitgestellt werden), im Gegensatz zu Mikrobefehlen oder Micro-Ops (z. B. diejenigen, die aus dem Decodieren der Makrobefehle resultieren). Der Befehlssatz umfasst ein oder mehrere Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehle 103. Verschiedene unterschiedliche Ausführungsformen von Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehlen werden in der Folge weiter erörtert. In einigen Ausführungsformen können die Befehle 103 einen oder mehrere Alle-Datenelement-mit-alle-Datenelement-Vergleichsbefehle 104 umfassen. In einigen Ausführungsformen können die Befehle 103 einen oder mehrere angegebene Teilmenge-mit-allen- oder Angegebene-Teilmenge-mit-angegebener-Teilmenge-Vergleichsbefehle 105 umfassen. In einigen Ausführungsformen können die Befehle 103 einen oder mehrere Mehrfachelement-mit-Mehrfachelement-Vergleichsbefehle umfassen, die betriebsfähig sind, um einen Abschnitt eines Vergleichs, der in einem Ziel zu speichern ist, auszuwählen (z. B. einen Versatz zu Auswahlen anzugeben).
  • Der Prozessor umfasst auch Ausführungslogik 110. Die Ausführungslogik ist betriebsfähig, um die Befehle des Befehlssatzes (z. B. die Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehle 103) auszuführen oder zu verarbeiten. In einigen Ausführungsformen kann die Ausführungslogik bestimmte Logik (z. B. bestimmte Schaltungen oder Hardware, die potenziell mit Firmware kombiniert wird) umfassen, um diese Befehle auszuführen.
  • 2 ist ein Blockdiagramm einer Ausführungsform einer Befehlsverarbeitungsvorrichtung 200, die eine Ausführungseinheit 210 aufweist, die betriebsfähig ist, um eine Ausführungsform eines Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehls 203 auszuführen. In einigen Ausführungsformen kann die Befehlsverarbeitungsvorrichtung ein Prozessor sein und/oder in einem Prozessor enthalten sein. Zum Beispiel kann die Befehlsverarbeitungsvorrichtung in einigen Ausführungsformen der Prozessor von 1 sein oder darin enthalten sein. Alternativ kann die Befehlsverarbeitungsvorrichtung in einem ähnlichen oder unterschiedlichen Prozessor enthalten sein. Darüber hinaus kann der Prozessor von 1 entweder eine ähnliche oder unterschiedliche Befehlsverarbeitungsvorrichtung umfassen.
  • Die Vorrichtung 200 kann den Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehl 203 empfangen. Zum Beispiel kann der Befehl von einer Befehlsabrufeinheit, einer Befehlswarteschlange oder dergleichen empfangen werden. Der Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehl kann einen Maschinencodebefehl, Assemblersprachbefehl, Makrobefehl oder ein Steuersignal einer ISA der Vorrichtung darstellen. Der Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehl kann erste gepackte Quelldaten 213 (z. B. in einem ersten gepackten Quelldatenregister 212) (z. B. durch ein oder mehrere Felder oder eine Menge von Bits) ausdrücklich angeben oder auf eine andere Weise darauf hinweisen (z. B. implizit darauf hinzuweisen), zweite gepackte Quelldaten 215 (z. B. in einem zweiten gepackten Quelldatenregister 214) angeben oder auf eine andere Weise darauf hinweisen und einen Zielspeicherort 216, an dem ein gepacktes Datenergebnis 217 zu speichern ist, angeben oder auf eine andere Weise darauf hinweisen (z. B. implizit darauf hinweisen).
  • Die veranschaulichte Befehlsverarbeitungsvorrichtung umfasst eine Befehlsdecodierungseinheit oder einen Decodierer 211. Der Decodierer kann den Maschinencode oder die Assemblersprachbefehle oder Makrobefehle mit relativ höherer Ebene empfangen und decodieren und eine/n oder mehrere Mikrobefehle, Mikrooperationen, Mikrocode-Eingangspunkte mit relativ niedrigerer Ebene oder andere Befehle oder Steuersignale mit relativ niedrigerer Ebene ausgeben, die die Befehle der höheren Ebenen widerspiegeln, darstellen und/oder davon abgeleitet sind. Der/das/die eine oder mehreren Befehl/e oder Steuersignal/e der niedrigeren Ebene können den Befehl der höheren Ebene durch eine oder mehrere Operationen der niedrigeren Ebene (z. B. auf Schaltungsebene oder Hardware-Ebene) ausführen. Der Decodierer kann unter Verwendung mehrerer unterschiedlicher Mechanismen ausgeführt werden, die Mikrocode-Nur-Lese-Speicher (ROMs), Verweistabellen, Hardware-Ausführungen, programmierbare logische Felder (Programmable Logic Arrays – PLAs) und andere Mechanismen, die verwendet werden, um im Stand der Technik bekannte Decodierer auszuführen, umfassen aber nicht darauf beschränkt sind.
  • In anderen Ausführungsformen kann ein Befehlsemulator, -übersetzer, -morpher, -interpretierer oder eine andere Befehlsumsetzungslogik verwendet werden. Im Stand der Technik sind mehrere unterschiedliche Typen von Befehlsumsetzungslogik bekannt und diese können in Software, Hardware, Firmware oder einer Kombination davon ausgeführt werden. Die Befehlsumsetzungslogik kann den Befehl empfangen und in ein/en oder mehrere entsprechende abgeleitete Befehle oder Steuersignale emulieren, übersetzen, morphen, interpretieren oder auf eine andere Weise umsetzen. In anderen Ausführungsformen können sowohl Befehlsumsetzungslogik als auch ein Decodierer verwendet werden. Zum Beispiel kann die Vorrichtung Befehlsumsetzungslogik, um einen empfangenen Maschinencodebefehl in einen oder mehrere Zwischenbefehle umzusetzen, und einen Decodierer aufweisen, um einen oder mehrere Zwischenbefehle in ein/en oder mehrere Befehle oder Steuersignale einer niedrigeren Ebene zu decodieren, die durch native Hardware der Vorrichtung (z. B. eine Ausführungseinheit) ausgeführt werden können. Ein Teil der oder die gesamte Befehlsumsetzungslogik kann sich außerhalb der Befehlsverarbeitungsvorrichtung, wie beispielsweise auf einem separaten Chip und/oder in einem Speicher, befinden.
  • Die Vorrichtung 200 umfasst auch eine Menge von gepackten Datenregistern 208. Jedes der gepackten Datenregister kann einen Speicherort auf dem Chip darstellen, der betriebsfähig ist, um gepackte Daten, Vektordaten oder SIMD-Daten zu speichern. In einigen Ausführungsformen können die ersten gepackten Quelldaten 213 in einem ersten gepackten Quelldatenregister 212 gespeichert werden, die zweiten gepackten Quelldaten 215 können im zweiten gepackten Quelldatenregister 214 gespeichert werden und das gepackte Datenergebnis 217 kann an einem Zielspeicherort 216 gespeichert werden, der ein drittes gepacktes Datenregister sein kann. Alternativ können Speicherorte oder andere Speicherungsorte für eines oder mehrere davon verwendet werden. Die gepackten Datenregister können auf unterschiedliche Arten in unterschiedlichen Mikroarchitekturen unter Verwendung gut bekannter Techniken ausgeführt werden und sind nicht auf irgendeine bestimmte Art von Schaltung begrenzt. Mehrere verschiedene Arten von Registern sind zweckmäßig. Beispiele von zweckmäßigen Arten von Registern umfassen dedizierte physikalische Register, dynamisch zugewiesene physikalische Register, die Registerumbenennung verwenden, und Kombinationen davon, sind aber nicht darauf beschränkt.
  • Erneut unter Bezugnahme auf 2 ist die Ausführungseinheit 210 mit dem Decodierer 211 und den gepackten Datenregistern 208 gekoppelt. Als Beispiel kann die Ausführungseinheit eine arithmetisch-logische Einheit, eine digitale Schaltung zum Durchführen arithmetischer und logischer Operationen, eine Logikeinheit, eine Ausführungseinheit oder eine Funktionseinheit umfassen, die Vergleichslogik zum Vergleichen von Datenelementen oder dergleichen umfasst. Die Ausführungseinheit kann ein/en oder mehrere decodierte oder auf eine andere Weise umgesetzte Befehl/e oder Steuersignale empfangen, der/das/die den Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehl 203 darstellt/darstellen und/oder davon abgeleitet ist/sind. Der Befehl kann die ersten gepackten Quelldaten 213 angeben oder auf eine andere Weise darauf hinweisen (z. B. das erste gepackte Datenregister 212 angeben oder auf eine andere Weise darauf hinweisen), die ausgestaltet sind, die ersten mehreren gepackten Datenelemente zu enthalten, die zweiten gepackten Quelldaten 215 angeben oder auf eine andere Weise darauf hinweisen (z. B. das zweite gepackte Datenregister 214 angeben oder auf eine andere Weise darauf hinweisen), die ausgestaltet sind, um die zweiten mehreren gepackten Datenelemente zu enthalten, und den Zielspeicherort 216 angeben oder auf eine andere Weise darauf hinweisen.
  • Die Ausführungseinheit ist betriebsfähig, um als Reaktion auf und/oder als ein Ergebnis des Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehls 203 das gepackte Datenergebnis 217 am Zielspeicherort 216 zu speichern. Die Ausführungseinheit und/oder die Befehlsverarbeitungsvorrichtung können spezifische oder bestimmte Logik (z. B. Schaltungen oder andere Hardware, die potenziell mit Firmware und/oder Software kombiniert ist) umfassen, die betriebsfähig ist, um den Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehl 203 auszuführen und das Ergebnis 217 als Reaktion auf den Befehl zu speichern (z. B. als Reaktion auf einen oder mehrere Befehle oder Steuersignale, die vom Befehl decodiert oder auf eine andere Weise abgeleitet werden).
  • Das gepackte Datenergebnis 217 kann mehrere gepackte Ergebnisdatenelemente umfassen. In einigen Ausführungsformen kann jedes der gepackten Ergebnisdatenelemente eine Mehrfach-Bit-Vergleichsmaske aufweisen. Zum Beispiel kann in einigen Ausführungsformen jedes der gepackten Ergebnisdatenelemente einem unterschiedlichen der gepackten Datenelemente der zweiten gepackten Quelldaten 215 entsprechen. In einigen Ausführungsformen kann jedes der gepackten Ergebnisdatenelemente eine Mehrfach-Bit-Vergleichsmaske umfassen, die ausgestaltet ist, um Ergebnisse von Vergleichen von gepackten Mehrfach-Datenelementen der ersten gepackten Quelldaten mit dem gepackten Datenelement der zweiten Quelle anzugeben, das ausgestaltet ist, um dem gepackten Ergebnisdatenelement zu entsprechen. In einigen Ausführungsformen kann jedes der gepackten Ergebnisdatenelemente eine Mehrfach-Bit-Vergleichsmaske umfassen, die Vergleichsergebnissen für das entsprechende gepackte Datenelement der zweiten gepackten Quelldaten 215 entspricht und diese angibt. In einigen Ausführungsformen kann jede Mehrfach-Bit-Vergleichsmaske ein unterschiedliches Vergleichsmasken-Bit für jedes unterschiedliche entsprechende gepackte Datenelement der ersten gepackten Quelldaten 213 umfassen, das mit dem zugehörigen/entsprechenden gepackten Datenelement der zweiten gepackten Quelldaten 215 zu vergleichen ist. In einigen Ausführungsformen kann jedes Vergleichsmasken-Bit ein Ergebnis eines entsprechenden Vergleichs angeben. In einigen Ausführungsformen gibt jede Maske an, wie viele Übereinstimmungen mit dem entsprechenden Datenelement von den zweiten gepackten Quelldaten vorhanden sind und an welchen Positionen in den ersten gepackten Quelldaten die Übereinstimmungen vorkommen.
  • In einigen Ausführungsformen kann die Mehrfach-Bit-Vergleichsmaske innerhalb eines gegebenen gepackten Ergebnisdatenelements angeben, welches der gepackten Datenelemente von den ersten gepackten Quelldaten 213 gleich dem gepackten Datenelement der zweiten gepackten Quelldaten 215 ist, das dem gegebenen gepackten Ergebnisdatenelement entspricht. In einigen Ausführungsformen kann der Vergleich im Hinblick auf die Gleichheit erfolgen und jedes Vergleichsmasken-Bit kann entweder einen ersten Binärwert aufweisen (z. B. gemäß einer möglichen Konvention auf binär Eins eingestellt sein), um anzugeben, dass die verglichenen Datenelemente gleich sind, oder einen zweiten Binärwert aufweisen (z. B. auf binär Null zurückgestellt sein), um anzugeben, dass die verglichenen Datenelemente nicht gleich sind. In anderen Ausführungsformen können wahlweise andere Vergleiche (z. B. größer als, kleiner als usw.) verwendet werden.
  • In einigen Ausführungsformen kann das gepackte Datenergebnis Ergebnisse von Vergleichen von allen Datenelementen der ersten gepackten Quelldaten mit allen der Datenelemente der zweiten gepackten Quelldaten angeben. In anderen Ausführungsformen kann das gepackte Datenergebnis Ergebnisse von Vergleichen von lediglich einer Teilmenge von Datenelementen von einem der gepackten Quelldatenteile mit entweder allen oder lediglich einer Teilmenge der Datenelemente von einem anderen der gepackten Quelldatenteile angeben. In einigen Ausführungsformen kann der Befehl die zu vergleichende/n Teilmenge oder Teilmengen angeben oder auf eine andere Weise darauf hinweisen. Zum Beispiel kann der Befehl in einigen Ausführungsformen wahlweise ausdrücklich oder implizit eine erste Teilmenge 218, zum Beispiel in einem impliziten Register der Universalregister 209, und wahlweise eine zweite Teilmenge 219, zum Beispiel in einem impliziten Register der Universalregister 209, angeben, die zum Begrenzen der Vergleiche auf lediglich eine Teilmenge der ersten und/oder der zweiten gepackten Quelldaten zu verwenden ist/sind.
  • Um die Beschreibung nicht unverständlich zu machen, wurde eine relativ einfache Befehlsverarbeitungsvorrichtung 200 gezeigt und beschrieben. In anderen Ausführungsformen kann die Vorrichtung wahlweise andere gut bekannte Bauteile umfassen, die in Prozessoren angetroffen werden können. Beispiele solcher Bauteile umfassen eine Sprungvorhersageeinheit, eine Befehlsabrufeinheit, Befehls- und Daten-Caches, Befehls- und Daten-Übersetzungspuffer (Translation Lookaside Buffer), Prefetch-Puffer, Mikrobefehlswarteschlangen, Mikrobefehls-Sequenzer, eine Registerumbenennungseinheit, eine Befehlsplanungseinheit, Bus-Schnittstelleneinheiten, Caches zweiter oder höherer Ebenen, eine Retirement-Einheit, andere in Prozessoren enthaltene Bauteile und verschiedene Kombinationen davon, sind aber nicht darauf beschränkt. Es sind buchstäblich zahlreiche unterschiedliche Kombinationen und Ausgestaltungen von Bauteilen in Prozessoren vorhanden und die Ausführungsformen sind nicht auf irgendeine bestimmte Kombination oder Ausgestaltung beschränkt. Ausführungsformen können in Prozessoren enthalten sein, die mehrere Kerne, logische Prozessoren oder Ausführungsmaschinen aufweisen, von denen mindestens eines Ausführungslogik aufweist, die betriebsfähig ist, um eine Ausführungsform eines hier offenbarten Befehls auszuführen.
  • 3 ist ein Blockablaufdiagramm einer Ausführungsform eines Verfahrens 325 zum Verarbeiten einer Ausführungsform eines Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehls. In verschiedenen Ausführungsformen kann das Verfahren durch einen Universal- oder Spezialprozessor oder eine andere Befehlsverarbeitungsvorrichtung oder ein anderes digitales logisches Gerät durchgeführt werden. In einigen Ausführungsformen können die Operationen und/oder das Verfahren von 3 durch den und/oder innerhalb des Prozessors von 1 und/oder die Vorrichtung von 2 durchgeführt werden. Die Bauteile, Merkmale und spezifischen wahlfreien Details, die hier für den Prozessor und die Vorrichtung von 1 bis 2 beschrieben werden, gelten wahlfrei auch für die Operationen und/oder das Verfahren von 3. Alternativ können die Operationen und/oder das Verfahren von 3 durch einen/eine und/oder innerhalb eines/einer ähnlichen oder vollständig unterschiedlichen Prozessors oder Vorrichtung durchgeführt werden. Ferner können der Prozessor von 1 und/oder die Vorrichtung von 2 Operationen und/oder Verfahren wie, ähnlich wie oder vollständig unterschiedlich von denjenigen von 3 durchführen.
  • Das Verfahren umfasst das Empfangen des Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehls am Block 326. In verschiedenen Gesichtspunkten kann der Befehl an einem Prozessor, einer Befehlsverarbeitungsvorrichtung oder einem Teil davon (z. B. einer Befehlsabrufeinheit, einem Decodierer, einem Befehlsumsetzer usw.) empfangen werden. In verschiedenen Gesichtspunkten kann der Befehl von einer Quelle außerhalb des Chips (z. B. vom Hauptspeicher, einer Platte oder einer Zwischenverbindung) oder von einer Quelle auf dem Chip (z. B. einem Befehlscache) empfangen werden. Der Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehl kann erste gepackte Quelldaten, die erste mehrere gepackte Datenelemente umfassen, zweite gepackte Quelldaten, die zweite mehrere gepackte Datenelemente aufweisen, und einen Zielspeicherort angeben oder auf eine andere Weise darauf hinweisen.
  • Ein gepacktes Datenergebnis, das mehrere gepackte Ergebnisdatenelemente umfasst, kann als Reaktion auf und/oder als Ergebnis des Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehls am Block 327 im Zielspeicherort gespeichert werden. Typischerweise kann eine Ausführungseinheit, eine Befehlsverarbeitungsvorrichtung oder ein Universal- oder Spezialprozessor die durch den Befehl angegebene Operation durchführen und das gepackte Datenergebnis speichern. In einigen Ausführungsformen kann jedes der gepackten Ergebnisdatenelemente einem unterschiedlichen der gepackten Datenelemente der zweiten gepackten Quelldaten entsprechen. In einigen Ausführungsformen kann jedes der gepackten Ergebnisdatenelemente eine Mehrfach-Bit-Vergleichsmaske umfassen. In einigen Ausführungsformen kann jede Mehrfach-Bit-Vergleichsmaske ein unterschiedliches Masken-Bit für jedes unterschiedliche entsprechende gepackte Datenelement der ersten gepackten Quelldaten umfassen, das mit dem gepackten Datenelement der zweiten Quelle verglichen wurde, das dem gepackten Ergebnisdatenelement entspricht. In einigen Ausführungsformen kann jedes Masken-Bit ein Ergebnis eines entsprechenden Vergleichs angeben. Andere wahlfreie Details, die vorhergehend in Verbindung mit 2 erwähnt wurden, können wahlweise auch in dem Verfahren enthalten sein, das wahlweise denselben Befehl verarbeiten und/oder wahlweise innerhalb derselben Vorrichtung durchgeführt werden kann.
  • Das veranschaulichte Verfahren bezieht sichtbare Architekturoperationen ein (z. B. diejenigen die aus einer Software-Perspektive sichtbar sind). In anderen Ausführungsformen kann das Verfahren wahlweise eine oder mehrere Mikroarchitekturoperationen umfassen. Als Beispiel kann der Befehl abgerufen, decodiert, potenziell out-of-order geplant werden, es kann auf Quelloperanden zugegriffen werden, Ausführungslogik kann aktiviert werden, um Mikroarchitekturoperationen durchzuführen, um den Befehl auszuführen, die Ausführungslogik kann die Mikroarchitekturoperationen durchführen, Ergebnisse können wahlweise in Programmreihenfolge neu geordnet werden usw. Es werden unterschiedliche Arten der Durchführung der Operation in der Mikroarchitektur ins Auge gefasst. Zum Beispiel können in einigen Ausführungsformen wahlweise Vergleichsmasken-Bit-Nullerweiterungsoperationen, gepackte logische Linksverschiebungsoperationen und logische ODER-Operationen, wie zum Beispiel diejenigen, die in Verbindung mit 9 beschrieben werden, durchgeführt werden. In anderen Ausführungsformen kann irgendeine von diesen Mikroarchitekturoperationen wahlweise zum Verfahren von 3 hinzugefügt werden, obgleich das Verfahren auch durch andere, unterschiedliche Mikroarchitekturoperationen ausgeführt werden kann.
  • 4 ist ein Blockdiagramm, das mehrere beispielhafte Ausführungsformen von geeigneten gepackten Datenformaten veranschaulicht. Ein gepacktes 128-Bit-Byte-Format 428 ist 128 Bits breit und umfasst sechzehn 8 Bit breite Datenelemente, die in der Veranschaulichung von der niedrigstwertigen zur höchstwertigen Bit-Position als B1 bis B16 benannt sind. Ein gepacktes 256-Bit-Wortformat 429 ist 256 Bits breit und umfasst sechzehn 16 Bit breite Wort-Datenelemente, die in der Veranschaulichung von der niedrigstwertigen zur höchstwertigen Bit-Position als W1 bis W16 benannt sind. Das 256-Bit-Format ist als in zwei Teile geteilt gezeigt, damit es auf die Seite passt, obwohl in einigen Ausführungsformen das gesamte Format in einem einzigen physikalischen Register oder logischen Register enthalten sein kann. Dabei handelt es sich lediglich um einige wenige veranschaulichende Beispiele.
  • Auch andere gepackte Datenformate sind zweckmäßig. Zum Beispiel umfassen andere gepackte 128-Bit-Datenformate ein gepacktes 128-Bit-16-Bit-Wort-Format und ein gepacktes 128-Bit-32-Bit-Doppelwortformat. Andere zweckmäßige gepackte 256-Bit-Datenformate umfassen ein gepacktes 256-Bit-8-Bit-Byte-Wort-Format und ein gepacktes 256-Bit-32-Bit-Doppelwortformat. Gepackte Datenformate, die kleiner als 128-Bits sind, sind auch zweckmäßig, wie beispielsweise ein 64 Bit breites gepacktes 8-Bit-Byte-Datenformat. Gepackte Datenformate, die größer als 256-Bits sind, sind auch zweckmäßig, wie beispielsweise 512 Bit breite oder breitere gepackte 8-Bit-Byte-, 16-Bit-Wort- oder 32-Bit-Doppelwortformate. Allgemein ist die Anzahl der gepackten Datenelemente in dem gepackten Datenoperand gleich der Größe des gepackten Datenoperanden in Bits geteilt durch die Größe der gepackten Datenelemente in Bits.
  • 5 ist ein Blockdiagramm, das eine Ausführungsform einer Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsoperation 539 veranschaulicht, die als Reaktion auf eine Ausführungsform eines Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehls durchgeführt werden kann. Der Befehl kann erste gepackte Quelldaten 513, die eine erste Menge von N gepackten Datenelementen 540-1 bis 540-N umfassen, angeben oder auf eine andere Weise darauf hinweisen und kann zweite gepackte Quelldaten 515, die eine zweite Menge von N gepackten Datenelementen 541-1 bis 541-N umfassen, angeben oder auf eine andere Weise darauf hinweisen. Im veranschaulichten Beispiel speichert in den ersten gepackten Quelldaten 513, ein niedrigstwertiges Datenelement 540-1 Daten, die den Wert A darstellen, ein zweites Datenelement 540-2 speichert Daten, die den Wert B darstellen, ein drittes Datenelement 540-3 speichert Daten, die den Wert C darstellen, und ein Ntes höchstwertiges Datenelement 540-N speichert Daten, die den Wert B darstellen. Im veranschaulichten Beispiel speichert in den zweiten gepackten Quelldaten 515, ein erstes niedrigstwertiges Datenelement 541-1 Daten, die den Wert B darstellen, ein zweites Datenelement 541-2 speichert Daten, die den Wert A darstellen, ein drittes Datenelement 541-3 speichert Daten, die den Wert B darstellen, und ein Ntes höchstwertiges Datenelement 541-3 speichert Daten, die den Wert A darstellen.
  • Die Anzahl N kann gleich der Größe der gepackten Quelldaten in Bits geteilt durch die Größe der gepackten Datenelemente in Bits sein. Für gewöhnlich kann die Anzahl N eine Ganzzahl sein, die häufig in einem Bereich von etwa vier bis zu einer Größenordnung von etwa vierundsechzig oder sogar größer liegen kann. Spezifische Beispiele von N umfassen vier, acht, sechzehn, zweiunddreißig und vierundsechzig, sind aber nicht darauf beschränkt. In verschiedenen Ausführungsformen kann die Breite der gepackten Quelldaten 64 Bits, 128 Bits, 256 Bits, 512 Bits oder sogar breiter sein, obgleich der Schutzbereich der Erfindung nicht auf lediglich diese Breiten beschränkt ist. In verschiedenen Ausführungsformen kann die Breite der gepackten Datenelemente 8-Bit-Bytes, 16-Bit-Wörter oder 32-Bit-Doppelwörter umfassen, wobei der Schutzbereich der Erfindung nicht auf lediglich diese Breiten beschränkt ist. Für gewöhnlich können in Ausführungsformen, wo der Befehl für String- und/oder Textfragmentvergleiche verwendet wird, die Breiten der Datenelemente entweder 8-Bit-Bytes oder 16-Bit-Wörter sein, da die meisten alphanumerischen Werte von Interesse in 8-Bit-Bytes oder zumindest in 16-Bit-Wörtern dargestellt werden können, obgleich breitere Formate (z. B. 32-Bit-Doppelwortformate) verwendet werden können, falls gewünscht (z. B. zur Kompatibilität mit anderen Operationen, zum Vermeiden von Formatkonvertierungen, für die Effizienz usw.). In einigen Ausführungsformen können die Datenelemente in den ersten und zweiten gepackten Quelldaten entweder Ganzzahlen mit Vorzeichen oder ohne Vorzeichen sein.
  • Als Reaktion auf den Befehl kann ein Prozessor oder eine andere Vorrichtung betriebsfähig sein, um ein gepacktes Datenergebnis 517 an einem Zielspeicherort 516 zu erzeugen und zu speichern, der durch den Befehl angegeben oder auf den auf eine andere Weise durch ihn hingewiesen wird. In einigen Ausführungsformen kann der Befehl bewirken, dass der Prozessor oder die andere Vorrichtung eine Alle-Datenelement-mit-Alle-Datenelement-Vergleichsmaske 542 als ein Zwischenergebnis erzeugt. Die Alle-mit-Alle-Vergleichsmaske 542 kann N × N Vergleichsergebnisse für N × N Vergleiche umfassen, die zwischen jedem/allen der N Datenelemente der ersten gepackten Quelldaten und jedem/allen der N Datenelemente der zweiten gepackten Quelldaten durchgeführt werden können. Das heißt, es kann ein Alle-Datenelement-mit-alle-Datenelement-Vergleich durchgeführt werden.
  • In einigen Ausführungsformen kann jedes Vergleichsergebnis in der Maske ein Ergebnis eines Vergleichs der verglichenen Datenelemente im Hinblick auf die Gleichheit angeben und jedes Vergleichsergebnis kann ein Einzelbit sein, das entweder einen ersten Binärwert aufweisen kann (z. B. auf binär Eins oder logisch wahr eingestellt), um anzugeben, dass die verglichenen Datenelemente gleich sind, oder einen zweiten Binärwert aufweisen kann (z. B. um auf binär Null oder logisch falsch zurückgestellt zu werden), um anzugeben, dass die verglichenen Datenelemente nicht gleich sind. Die andere Konvention ist auch möglich. Wie gezeigt, ist eine Binär-0 in der oberen rechten Ecke der Alle-mit-alle-Vergleichsmaske für den Vergleich des ersten Datenelements 540-1 (das den Wert von ”A” darstellt) der ersten gepackten Quelldaten 513 mit den ersten Datenelementen 541-1 (die den Wert von ”B” darstellen) der zweiten gepackten Quelldaten 515 gezeigt, da diese Werte ungleich sind. Im Gegensatz dazu ist eine Binär-1 an einer Position links von dieser Position in der Alle-mit-alle-Vergleichsmaske für den Vergleich des ersten Datenelements 540-1 (das den Wert von darstellt) der ersten gepackten Quelldaten 513 mit den zweiten Datenelementen 541-2 (die den Wert von ”A” darstellen) der zweiten gepackten Quelldaten 515 gezeigt, da diese Werte gleich sind. Folgen von übereinstimmenden Werten erscheinen in der Alle-mit-Alle-Vergleichsmaske als Binär-1en entlang einer Diagonale, wie durch die eingekreiste Menge diagonaler Einsen gezeigt. Die Alle-mit-alle-Vergleichsmaske ist ein Mikroarchitekturgesichtspunkt, der wahlfrei in einigen Ausführungsformen erzeugt wird aber dessen Erzeugung in anderen Ausführungsformen nicht erforderlich ist. Stattdessen kann das Ergebnis im Ziel ohne das Zwischenergebnis erzeugt und gespeichert werden.
  • Erneut unter Bezugnahme auf 5 kann in einigen Ausführungsformen das gepackte Datenergebnis 517, das am Zielspeicherort 516 zu speichern ist, eine Menge von N N-Bit-Vergleichsmasken umfassen. Zum Beispiel kann das gepackte Datenergebnis eine Menge von N gepackten Ergebnisdatenelementen 544-1 bis 544-N umfassen. In einigen Ausführungsformen kann jedes der N gepackten Ergebnisdatenelemente 544-1 bis 544-N einem der N gepackten Datenelemente 541-1 bis 541-N der zweiten gepackten Quelldaten 515 an einer entsprechenden jeweiligen Position entsprechen. Zum Beispiel kann ein erstes gepacktes Ergebnisdatenelement 544-1 einem ersten gepackten Datenelement 541-1 der zweiten Quelle entsprechen, ein drittes gepacktes Ergebnisdatenelement 544-3 kann einem dritten gepackten Datenelement 541-3 der zweiten Quelle entsprechen und so weiter. In einigen Ausführungsformen kann jedes der N gepackten Ergebnisdatenelemente 544 eine N-Bit-Vergleichsmaske aufweisen. In einigen Ausführungsformen kann jede N-Bit-Vergleichsmaske dem entsprechenden gepackten Datenelement 541 der zweiten gepackten Quelldaten 515 entsprechen und Vergleichsergebnisse dafür angeben. In einigen Ausführungsformen kann jede N-Bit-Vergleichsmaske ein unterschiedliches Vergleichsmasken-Bit für jedes der N unterschiedlichen gepackten Datenelemente der ersten gepackten Quelldaten 513 umfassen, die (gemäß dem Befehl, der umfasst, ob der Befehl eine Teilmenge umfasst, die zu vergleichen ist) mit dem zugehörigen/entsprechenden gepackten Datenelement der zweiten gepackten Quelldaten 515 zu vergleichen sind.
  • In einigen Ausführungsformen kann jedes Vergleichsmaskenbit ein Ergebnis eines entsprechenden Vergleichs angeben (z. B. Binär-1 sein, wenn die verglichenen Werte gleich sind, oder Binär-0 sein, wenn sie nicht gleich sind). Zum Beispiel kann ein Bit k von einer N-Bit-Vergleichsmaske ein Vergleichsergebnis für einen Vergleich eines kten Datenelements von ersten gepackten Quelldaten mit einem Datenelement der zweiten gepackten Quelldaten darstellen, dem die gesamte N-Bit-Vergleichsmaske entspricht. Zumindest konzeptuell kann jedes Maskenbit eine Folge von Maskenbits von einer einzigen Spalte der Alle-mit-alle-Vergleichsmaske 542 darstellen. Zum Beispiel umfasst das erste gepackte Ergebnisdatenelement 544-1 die Werte (von rechts nach links) ”0, 1, 0, ... 1”, wodurch angegeben werden kann, dass der Wert ”B” im ersten Datenelement 541-1 (dem die N-Bit-Maske entspricht) der zweiten Quelle 515 nicht gleich dem Wert ”A” im ersten Datenelement 540-1 der ersten Quelle ist, gleich dem Wert ”B” im zweiten Datenelement 540-2 der ersten Quelle ist, nicht gleich dem Wert ”C” im dritten Datenelement 540-3 der ersten Quelle ist und gleich dem Wert ”B” im Nten Datenelement 540-N der ersten Quelle ist. In einigen Ausführungsformen gibt jede Maske an, wie viele Übereinstimmungen mit dem entsprechenden Datenelement von den zweiten gepackten Quelldaten vorhanden sind und an welchen Positionen in den ersten gepackten Quelldaten die Übereinstimmungen vorkommen.
  • 6 ist ein Blockdiagramm, das eine beispielhafte Ausführungsform einer Vergleichsoperation 639 veranschaulicht, die auf 128 Bit breiten gepackten Quellen, die 16 Bit-Wort-Elemente aufweisen, als Reaktion auf eine Ausführungsform eines Befehls durchgeführt werden kann. Der Befehl kann erste gepackte, 128 Bit breite Quelldaten 613, die eine erste Menge von acht gepackten 16-Bit-Wort-Datenelementen 640-1 bis 640-8 umfassen, angeben oder auf eine andere Weise darauf hinweisen, und kann zweite gepackte, 128-Bit breite Quelldaten 615, die eine zweite Menge von acht gepackten 16-Bit-Wort-Datenelementen 641-1 bis 641-8 umfassen, angeben oder auf eine andere Weise darauf hinweisen.
  • In einigen Ausführungsformen kann der Befehl wahlweise eine wahlfreie dritte Quelle 647 (z. B. ein implizites Universalregister) zum Angeben, wie viele (z. B. eine Teilmenge) der Datenelemente der ersten gepackten Quelldaten zu vergleichen sind, und/oder eine wahlfreie vierte Quelle 648 (z. B. ein implizites Universalregister) zum Angeben, wie viele (z. B. eine Teilmenge) der Datenelemente der zweiten gepackten Quelldaten zu vergleichen sind, angeben oder auf eine andere Weise darauf hinweisen. Alternativ kann/können ein oder mehr Direktwerte des Befehls verwendet werden, um diese Informationen bereitzustellen. Im veranschaulichten Beispiel stellt die dritte Quelle 647 bereit, dass nur die niedrigstwertigen fünf von den acht Datenelementen der ersten gepackten Quelldaten zu vergleichen sind und die vierte Quelle 648 stellt bereit, dass alle acht Datenelemente der zweiten gepackten Quelldaten zu vergleichen sind, obwohl dies lediglich ein veranschaulichendes Beispiel ist.
  • Als Reaktion auf den Befehl kann ein Prozessor oder eine andere Vorrichtung betriebsfähig sein, um ein gepacktes Datenergebnis 617 an einem Zielspeicherort 616 zu speichern, der durch den Befehl angegeben oder auf den auf eine andere Weise durch ihn hingewiesen wird. In einigen Ausführungsformen, in denen eine oder mehrere Teilmengen durch die dritte Quelle 647 und/oder die vierte Quelle 648 angegeben werden, kann der Befehl bewirken, dass der Prozessor oder die andere Vorrichtung eine Alle-gültigen-Datenelement-mit-alle-gültigen-Datenelement-Vergleichsmaske 642 als ein Zwischenergebnis erzeugt. Die Alle-gültigen-mit-alle-gültigen-Vergleichsmaske 642 kann Vergleichsergebnisse für die Teilmenge der Vergleiche umfassen, die gemäß den Werten in der dritten und der vierten Quelle durchzuführen sind. In diesem bestimmten Beispiel werden vierzig Vergleichsergebnisse (d. h. 8 × 5) erzeugt. In einigen Ausführungsformen können Bits der Vergleichsmaske, für die die Vergleiche nicht durchzuführen sind (z. B. diejenigen für die höchstwertigen drei Datenelemente der ersten Quelle) auf einen vorbestimmten Wert gezwungen, zum Beispiel auf Binär-0 gezwungen werden, wie in der Veranschaulichung mit ”F0” gezeigt.
  • In einigen Ausführungsformen kann das gepackte Datenergebnis 617, das am Zielspeicherort 616 zu speichern ist, eine Menge von acht 8-Bit-Vergleichsmasken umfassen. Zum Beispiel kann das gepackte Datenergebnis eine Menge von acht gepackten Ergebnisdatenelementen 644-1 bis 644-N umfassen. In einigen Ausführungsformen kann jedes dieser acht gepackten Ergebnisdatenelemente 644-1 einem der acht gepackten Datenelemente 641 der zweiten gepackten Quelldaten 615 an einer entsprechenden jeweiligen Position entsprechen. In einigen Ausführungsformen kann jedes der acht gepackten Ergebnisdatenelemente 644 eine 8-Bit-Vergleichsmaske aufweisen. In einigen Ausführungsformen kann jede 8-Bit-Vergleichsmaske dem entsprechenden gepackten Datenelement 641 der zweiten gepackten Quelldaten 615 entsprechen und Vergleichsergebnisse dafür angeben. In einigen Ausführungsformen kann jede 8-Bit-Vergleichsmaske ein unterschiedliches Vergleichsmasken-Bit für jedes gültige der acht unterschiedlichen entsprechenden gepackten Datenelemente der ersten gepackten Quelldaten 613 umfassen, die (z. B. gemäß dem Wert in der dritten Quelle) mit dem zugehörigen/entsprechenden gepackten Datenelement der zweiten gepackten Quelldaten 615 zu vergleichen sind. Die anderen der 8-Bits können erzwungene (z. B. F0) Bits sein. Wie zuvor kann zumindest konzeptuell jede 8-Bit-Maske eine Folge von Maskenbits von einer einzigen Spalte der Maske 642 darstellen.
  • 7 ist ein Blockdiagramm, das eine beispielhafte Ausführungsform einer Vergleichsoperation 739 veranschaulicht, die auf 128 Bit breiten gepackten Quellen, die 8 Bit-Byte-Elemente aufweisen, als Reaktion auf eine Ausführungsform eines Befehls durchgeführt werden kann. Der Befehl kann erste gepackte, 128 Bit breite Quelldaten 713, die eine erste Menge von sechzehn gepackten 8-Bit-Byte-Datenelementen 740-1 bis 740-16 umfassen, angeben oder auf eine andere Weise darauf hinweisen, und kann zweite gepackte, 128-Bit breite Quelldaten 715, die eine zweite Menge von sechzehn gepackten 8-Bit-Byte-Datenelementen 741-1 bis 741-16 umfassen, angeben oder auf eine andere Weise darauf hinweisen.
  • In einigen Ausführungsformen kann der Befehl wahlweise eine wahlfreie dritte Quelle 747 (z. B. ein implizites Universalregister) zum Angeben, wie viele (z. B. eine Teilmenge) der Datenelemente der ersten gepackten Quelldaten zu vergleichen sind, angeben oder auf eine andere Weise darauf hinweisen und/oder der Befehl kann wahlfrei eine wahlfreie vierte Quelle 748 (z. B. ein implizites Universalregister) angeben oder auf eine andere Weise darauf hinweisen, um anzugeben, wie viele (z. B. eine Teilmenge) der Datenelemente der zweiten gepackten Quelldaten zu vergleichen sind. Im veranschaulichten Beispiel stellt die dritte Quelle 747 bereit, dass nur die niedrigstwertigen vierzehn von den sechzehn Datenelementen der ersten gepackten Quelldaten zu vergleichen sind und die vierte Quelle 748 stellt bereit, dass nur mindestens fünfzehn der sechzehn Datenelemente der zweiten gepackten Quelldaten zu vergleichen sind, obwohl dies lediglich ein veranschaulichendes Beispiel ist. In anderen Ausführungsformen können wahlfrei auch höchstwertige oder Zwischenbereiche verwendet werden. Diese Werte können auf unterschiedliche Arten, wie beispielsweise als Nummern, Positionen, Indizes, Zwischenbereiche usw. angegeben werden.
  • Als Reaktion auf den Befehl kann ein Prozessor oder eine andere Vorrichtung betriebsfähig sein, um ein gepacktes Datenergebnis 717 an einem Zielspeicherort 716 zu speichern, der durch den Befehl angegeben oder auf den auf eine andere Weise durch ihn hingewiesen wird. In einigen Ausführungsformen, in denen eine oder mehrere Teilmengen durch die dritte Quelle 747 und/oder die vierte Quelle 748 angegeben werden, kann der Befehl bewirken, dass der Prozessor oder die andere Vorrichtung eine Alle-gültigen-Datenelement-mit-alle-gültigen-Datenelement-Vergleichsmaske 742 als ein Zwischenergebnis erzeugt. Diese kann ähnlich wie die vorhergehend beschriebenen oder unterschiedlich sein.
  • In einigen Ausführungsformen kann das gepackte Datenergebnis 717 eine Menge von sechzehn 16-Bit-Vergleichsmasken umfassen. Zum Beispiel kann das gepackte Datenergebnis eine Menge von sechzehn gepackten Ergebnisdatenelementen 744-1 bis 744-16 umfassen. In einigen Ausführungsformen kann der Zielspeicherort ein 256-Bit-Register oder einen anderen Speicherort darstellen, der zwei Mal so breit wie jedes von den ersten und zweiten gepackten Quelldaten ist. In einigen Ausführungsformen kann ein implizites Zielregister verwendet werden. In anderen Ausführungsformen kann das Zielregister zum Beispiel unter Verwendung eines Intel Architecture Vector Extensions (VEX) Codierungsschemas angegeben werden. Als eine andere Auswahlmöglichkeit können wahlweise zwei 128-Bit-Register oder andere Speicherorte verwendet werden. In einigen Ausführungsformen kann jedes dieser sechzehn gepackten Ergebnisdatenelemente 744 einem der sechzehn gepackten Datenelemente 741 der zweiten gepackten Quelldaten 715 an einer entsprechenden jeweiligen Position entsprechen. In einigen Ausführungsformen kann jedes der sechzehn gepackten Ergebnisdatenelemente 744 eine 16-Bit-Vergleichsmaske aufweisen. In einigen Ausführungsformen kann jede 16-Bit-Vergleichsmaske dem entsprechenden gepackten Datenelement 741 der zweiten gepackten Quelldaten 715 entsprechen und Vergleichsergebnisse dafür angeben. In einigen Ausführungsformen kann jede 16-Bit-Vergleichsmaske ein unterschiedliches Vergleichsmasken-Bit für jedes gültige der sechzehn unterschiedlichen gepackten Datenelemente der ersten gepackten Quelldaten 713 umfassen, die (z. B. gemäß dem Wert in der dritten Quelle) mit jedem gültigen zugehörigen/entsprechenden gepackten Datenelement der zweiten gepackten Quelldaten 715 zu vergleichen sind (z. B. gemäß dem Wert in der vierten Quelle). Die anderen der 16-Bits können erzwungene (z. B. F0) Bits sein.
  • Es können noch andere Ausführungsformen ins Auge gefasst werden. Zum Beispiel können in einigen Ausführungsformen die ersten gepackten Quelldaten acht gepackte 8-Bit-Datenelemente aufweisen, die zweiten gepackten Quelldaten können acht gepackte 8-Bit-Datenelemente aufweisen und das gepackte Datenergebnis kann acht gepackte 8-Bit-Ergebnisdatenelemente aufweisen. In noch anderen Ausführungsformen können die ersten gepackten Quelldaten zweiunddreißig gepackte 8-Bit-Datenelemente aufweisen, die zweiten gepackten Quelldaten können zweiunddreißig gepackte 8-Bit-Datenelemente aufweisen und das gepackte Datenergebnis kann zweiunddreißig gepackte 32-Bit-Ergebnisdatenelemente aufweisen. Das heißt, in einigen Ausführungsformen können im Ziel so viele Masken wie Quelldatenelemente in jedem Quelloperand vorhanden sein und jede Maske kann so viele Bits aufweisen wie Quelldatenelemente in jedem Quelloperand vorhanden sind.
  • In einem Gesichtspunkt kann der nachfolgende Pseudocode den Betrieb des Befehls von 7 darstellen. In diesem Pseudocode sind EAX und EDX implizite Universalregister, die verwendet werden, um Teilmengen der ersten beziehungsweise zweiten Quelle anzugeben.
  • Figure DE102014003644A1_0002
  • 8 ist ein Blockdiagramm, das eine beispielhafte Ausführungsform einer Vergleichsoperation 839 veranschaulicht, die auf 128 Bit breiten gepackten Quellen, die 8-Bit-Byte-Elemente aufweisen, als Reaktion auf eine Ausführungsform eines Befehls durchgeführt werden kann, in der der Befehl betriebsfähig ist, um einen Versatz 850 anzugeben oder darauf hinzuweisen, um eine Teilmenge von Vergleichsmasken auszuwählen, die in einem gepackten Datenergebnis 818 zu berichten sind. Die Operation ist ähnlich wie diejenige, die für 7 gezeigt und beschrieben ist und die wahlfreien Details und Gesichtspunkte, die für 7 beschrieben werden, können wahlfrei mit der Ausführrungsform von 8 verwendet werden. Um zu vermeiden, dass die Beschreibung unverständlich wird, werden die unterschiedlichen oder zusätzlichen Gesichtspunkte ohne Wiederholung der wahlfreien Ähnlichkeiten beschrieben.
  • Wie in 7 ist jede von der ersten und der zweiten Quelle 128 Bits breit und umfasst jeweils sechzehn 8-Bit-Byte-Datenelemente. Ein Alle-mit-alle-Vergleich dieser Operanden würde 256 Bits Vergleichsbits (d. h. 16 × 16) erzeugen. In einem Gesichtspunkt kann dies als sechzehn 16-Bit-Vergleichsmasken angeordnet werden, wie hier an anderer Stelle beschrieben.
  • In einigen Ausführungsformen, zum Beispiel zur Verwendung eines 128-Bit-Registers oder eines anderen Speicherorts anstatt eines 256-Bit-Registers oder eines anderen Speicherorts, kann der Befehl wahlfrei einen wahlfreien Versatz 850 angeben oder auf andere Weise darauf hinweisen. In einigen Ausführungsformen kann der Versatz durch einen Quelloperanden (z. B. durch ein implizites Register) oder einen Direktwert des Befehls oder auf eine andere Art und Weise angegeben werden. In einigen Ausführungsformen kann der Versatz eine Teilmenge oder einen Abschnitt eines vollständigen Alle-mit-alle-Vergleichsergebnisses auswählen, das in gepackten Ergebnisdaten zu berichten ist. In einigen Ausführungsformen kann der Versatz einen Ausgangspunkt angeben. Zum Beispiel kann er eine erste Vergleichsmaske angeben, die in das gepackte Datenergebnis aufzunehmen ist. Wie in der veranschaulichten beispielhaften Ausführungsform gezeigt, kann der Versatz einen Wert von zwei angeben, um anzugeben, dass die ersten zwei Vergleichsmasken zu überspringen sind und nicht im Ergebnis zu melden sind. Wie gezeigt, kann auf der Grundlage dieses Versatzes von zwei das gepackte Datenergebnis 818 eine dritte 744-3 bis zehnte 744-10 von sechzehn möglichen 16-Bit-Vergleichsmasken speichern. In einigen Ausführungsformen kann die dritte 16-Bit-Vergleichsmaske 744-3 dem dritten gepackten Datenelement 741-3 der zweiten Quelle entsprechen und die zehnte 16-Bit-Vergleichsmaske 744-10 kann dem zehnten gepackten Datenelement 741-10 der zweiten Quelle entsprechen. In einigen Ausführungsformen ist das Ziel ein implizites Register, obgleich dies nicht erforderlich ist.
  • 9 ist ein Blockdiagramm, das eine Ausführungsform eines Mikroarchitekturansatzes veranschaulicht, der wahlweise verwendet werden kann, um Ausführungsformen auszuführen. Ein Abschnitt der Ausführungslogik 910 ist gezeigt. Die Ausführungslogik umfasst Alle-gültigen-mit-alle-gültigen-Elementvergleichslogik 960. Die Alle-gültigen-mit-alle-gültigen-Elementvergleichslogik ist betriebsfähig, um alle gültigen Elemente mit allen anderen gültigen Elementen zu vergleichen. Diese Vergleiche können parallel, in Reihe oder teilweise parallel und teilweise in Reihe vorgenommen werden. Jeder dieser Vergleiche kann unter Verwendung von im Wesentlichen herkömmlicher Vergleichslogik vorgenommen werden, zum Beispiel ähnlich mit derjenigen, die für Vergleiche verwendet wird, die in gepackten Vergleichsbefehlen durchgeführt werden. Die Alle-gültigen-mit-alle-gültigen-Elementvergleichslogik kann eine Alle-gültigen-mit-alle-gültigen-Vergleichsmaske 942 erzeugen. Als Beispiel kann der Abschnitt der Maske 942 die zwei am weitesten rechts gelegenen Spalten der Maske 642 von 6 darstellen. Die Alle-gültigen-mit-alle-gültigen-Elementvergleichslogik kann auch eine Ausführungsform von Alle-gültigen-mit-alle-gültigen-Vergleichsmaskenerzeugungslogik darstellen.
  • Die Ausführungslogik umfasst auch Masken-Bit-Nullerweiterungslogik 962, die mit der Vergleichslogik 960 gekoppelt ist. Die Masken-Bit-Nullerweiterungslogik kann betriebsfähig sein, um eine Nullerweiterung von jedem der Einzelbit-Vergleichsergebnisse der Alle-gültigen-mit-alle-gültigen-Elementvergleichsmaske 942 vorzunehmen. Wie gezeigt, können in diesem Fall, indem letztendlich 8-Bit-Masken erzeugt werden, in einigen Ausführungsformen jedes der höherwertigen 7 Bits mit Nullen gefüllt werden. Die Einzelbit-Masken-Bits von der Maske 942 belegen nun das niedrigstwertige Bit, wobei alle höherwertigeren Bits Nullen sind.
  • Die Ausführungslogik umfasst auch logische Masken-Bit-Ausrichtungslogik zur logischen Linksverschiebung 964, die mit der Masken-Bit-Nullerweiterungslogik 962 gekoppelt ist. Die logische Linksverschiebungs-Masken-Bit-Ausrichtungslogik kann betriebsfähig sein, um die mit Nullen erweiterten Maskenbits logisch nach links zu verschieben. Wie gezeigt, können in einigen Ausführungsformen die nullerweiterten Maskenbits um unterschiedliche Verschiebungsbeträge logisch nach links verschoben werden, um beim Erreichen der Ausrichtung zu helfen. Insbesondere kann die erste Zeile um 7 Bits, die zweite Zeile um 6 Bits, die dritte Zeile um 5 Bits, die vierte Zeile um 4 Bits, die fünfte Zeile um 3 Bits und so weiter logisch nach links verschoben werden. Die verschobenen Elemente können am niedrigstwertigen Ende für alle herausgeschobenen Bits mit Nullen erweitert werden. Dies hilft beim Erzielen der Ausrichtung der Maskenbits für die Ergebnismasken.
  • Die Ausführungslogik umfasst auch die Spalten-ODER-Logik 966, die mit der logischen Linksverschiebungsmasken-Bit-Ausrichtungslogik 964 gekoppelt ist. Die Spalten-ODER-Logik kann betriebsfähig sein, um ein logisches ODER einer Spalte der logisch nach links verschobenen und ausgerichteten Elemente von der Ausrichtungslogik 964 vorzunehmen. Diese Spalten-ODER-Operation kann alle der Einzel-Masken-Bits von jeder der unterschiedlichen Zeilen innerhalb der Spalte in ihre nun ausgerichteten Positionen in einem einzigen Ergebnisdatenelement kombinieren, das in diesem Fall eine 8-Bit-Maske ist. Diese Operation ”transponiert” die eingestellten Masken-Bits in den Spalten der ursprünglichen Vergleichsmaske 942 wirksam in unterschiedliche Vergleichsergebnismasken-Datenelemente.
  • Es versteht sich, dass dies lediglich ein veranschaulichendes Beispiel einer zweckmäßigen Mikroarchitektur ist. Andere Ausführungsformen können andere Operationen verwenden, um eine ähnliche Datenverarbeitung oder Neuanordnung zu erzielen. Zum Beispiel kann eine Operation des Typs einer Matrixtransposition wahlweise durchgeführt werden oder Bits können lediglich an die beabsichtigten Stellen geleitet werden.
  • Die hier offenbarten Befehle sind Universal-Vergleichsbefehle. Der Fachmann kann verschiedene Verwendungen dieser Befehle für eine große Vielfalt von Zwecken/Algorithmen ersinnen. In einigen Ausführungsformen können die hier offenbarten Befehle verwendet werden, um die Beschleunigung der Identifikation einer Untermusterbeziehung zwischen zwei strukturellen Mustern zu unterstützen.
  • Vorteilhafterweise können Ausführungsformen der hier offenbarten Befehle zumindest in bestimmten Fällen zur Erkennung von Untermustern im Vergleich zu anderen, im Stand der Technik bekannten Befehlen nützlicher sein. Zur weiteren Veranschaulichung wird ein hilfreiches Beispiel herangezogen. Es wird auf die vorhergehend für 6 gezeigte und beschriebene Ausführungsform Bezug genommen. In dieser Ausführungsform ist für diese Daten Folgendes vorhanden: (1) eine Präfixübereinstimmung mit der Länge 3 an der Stelle 1; (2) eine Mittelteilübereinstimmung mit der Länge 3 an der Position 5; (3) eine Präfixübereinstimmung mit der Länge 1 an der Position 7; und (4) eine zusätzliche Nicht-Präfixübereinstimmung mit der Länge 1. Wenn dieselben Daten durch den SSE4.2-Befehl PCMPESTRM verarbeitet würden, würden weniger Übereinstimmungen erkannt. Zum Beispiel kann PCMPESTRM nur eine Präfixübereinstimmung mit der Länge 1 an der Position 7 erkennen. Damit PCMPESTM in der Lage ist, das Untermuster von (1) zu erkennen, kann es erforderlich sein, den src2 um eins zu verschieben, neu in das Register zu laden und einen weiteren PCMESTRM-Befehl auszuführen. Damit PCMPESTM in der Lage ist, das Untermuster von (2) zu erkennen, kann es erforderlich sein, den src1 um ein Byte zu verschieben, neu zu laden und einen weiteren PCMESTRM-Befehl auszuführen. Allgemeiner kann für eine Nadel, die m-Bytes aufweist, und einen Heuhaufen in einem Register mit n-Bytes, wo m < n, PCMPESTRM lediglich Folgendes erkennen: (1) m-Byte-Übereinstimmung an der Position 0 bis einschließlich n – m – 1 beziehungsweise (2) an der Position n-m bis einschließlich n – 1, Teilpräfixübereinstimmung mit Längen von m – 1.. 1. Im Gegensatz dazu sind verschiedene hier gezeigte und beschriebene Ausführungsformen in der Lage, mehr, und, in einigen Ausführungsformen, alle möglichen Kombinationen zu erkennen. Folglich können Ausführungsformen der hier offenbarten Befehle die Erhöhung der Geschwindigkeit und Effizienz von mehreren unterschiedlichen im Stand der Technik bekannten Muster- und/oder Teilmustererkennungsalgorithmen steigern. In einigen Ausführungsformen können die hier offenbarten Befehle zum Vergleichen molekularer und/oder biologischer Sequenzen verwendet werden. Beispiele solcher Sequenzen umfassen DNA-Sequenzen, RNA-Sequenzen, Proteinsequenzen, Aminosäuresequenzen, Nuldeotidsequenzen und dergleichen, sind aber nicht darauf beschränkt. Protein-, DNA-, RNA- und andere derartige Sequenzierungen neigen allgemein dazu, eine rechenintensive Aufgabe zu sein. Eine solche Sequenz beinhaltet häufig das Durchsuchen von genetischen Sequenzdatenbanken oder Bibliotheken in Bezug auf ein/e Ziel- oder Referenz-DNA/RNA/Proteinsequenz/Fragment/Stichwort von Aminosäuren oder Nukleotiden. Der Abgleich eines Genfragments/Stichworts mit Millionen von bekannten Sequenzen in den Datenbanken beginnt gewöhnlich mit der Entdeckung der räumlichen Beziehungen zwischen einem Eingabemuster und einer archivierten Sequenz. Ein Eingabemuster einer gegebenen Größe wird typischerweise als eine Sammlung von Teilmustern von Alphabeten behandelt. Die Teilmuster von Alphabeten können eine ”Nadel” darstellen. Diese Alphabete können in ersten gepackten Quelldaten der hier offenbarten Befehle enthalten sein. Verschiedene Abschnitte der Datenbank/Bibliothek können in verschiedenen Instanzen der Befehle in den zweiten gepackten Quelldatenoperanden enthalten sein.
  • Die Bibliothek oder Datenbank kann einen ”Heuhaufen” darstellen, der als Teil eines Algorithmus durchsucht wird, um zu versuchen, die Nadel im Heuhaufen zu finden. Verschiedene Instanzen des Befehls können dieselbe Nadel und verschiedene Abschnitte des Heuhaufens verwenden, bis der gesamte Heuhaufen beim Versuch des Findens der Nadel durchsucht wurde. Die Abgleichspunktzahl einer gegebenen räumlich abgeglichenen Beziehung wird auf der Grundlage der übereinstimmenden und nicht übereinstimmenden Teilmuster der Eingabe gegenüber jeder Archivsequenz bewertet. Sequenzabgleichswerkzeuge können Ergebnisse der Vergleiche als Teil der Bewertung der Funktion, Struktur und Entwicklung zwischen großen Familien von DNA/RNA und anderen Aminosäuresequenzen verwenden. In einem Gesichtspunkt können die Abgleichswerkzeuge Abgleichspunktzahlen ausgehend von Teilmustern von lediglich einigen wenigen Alphabeten bewerten. Die doppelt verschachtelten Schleifen können zweidimensionale Suchräume bei einer gewissen Granularität, wie beispielsweise Byte-Granularität, abdecken. Vorteilhafterweise können die hier offenbarten Befehle dabei helfen, eine solche Suche/Sequenzierung erheblich zu beschleunigen. Zum Beispiel wird gegenwärtig davon ausgegangen, dass Befehle, die denjenigen von 7 ähnlich sind, bei der Verkleinerung der Struktur der Verschachtelungsschleife um die Größenordnung von 16 × 16 helfen, und dass Befehle, die denjenigen von 8 ähnlich sind, bei der Verkleinerung der Struktur der Verschachtelungsschleife um eine Größenordnung von 16 × 8 helfen.
  • Die hier offenbarten Befehle können ein Befehlsformat aufweisen, das einen Operationscode oder Opcode umfasst. Der Opcode kann mehrere Bits oder ein oder mehrere Felder darstellen, die betriebsfähig sind, um den/die auszuführenden Befehl und/oder Operation zu identifizieren. Das Befehlsformat kann auch ein oder mehrere Quellspezifikationssymbole und ein Zielspezifikationssymbol umfassen. Als Beispiel kann jedes dieser Spezifikationssymbole Bits oder ein oder mehrere Felder umfassen, um eine Adresse eines Registers, Speicherorts oder eines anderen Speicherungsorts anzugeben. In anderen Ausführungsformen können anstatt eines ausdrücklichen Spezifikationssymbols eine Quelle oder ein Ziel stattdessen implizit im Befehl enthalten sein. In anderen Ausführungsformen können Informationen, die in einem Quellregister oder einem anderen Quellspeicherort angegeben sind, stattdessen durch einen Direktwert des Befehls angegeben werden.
  • 10 ist ein Blockdiagramm einer beispielhaften Ausführungsform einer geeigneten Menge von gepackten Datenregistern 1008. Die veranschaulichten gepackten Datenregister umfassen zweiunddreißig gepackte 512-Bit-Daten oder Vektorregister. Diese zweiunddreißig 512-Bit-Register sind mit ZMM0 bis ZMM31 benannt. In der veranschaulichten Ausführungsform sind die 256 Bits niedrigerer Ordnung der unteren sechzehn dieser Register, nämlich ZMM0 bis ZMM15, auf entsprechenden gepackten 256-Bit-Daten oder Vektorregistern gealiast oder überlagert, die mit YMM0 bis YMM15 benannt sind, obgleich dies nicht erforderlich ist. Auf ähnliche Weise sind in der veranschaulichten Ausführungsform die 128 Bits niedrigerer Ordnung von YMM0 bis YMM15 auf entsprechenden gepackten 128-Bit-Daten oder Vektorregistern gealiast oder überlagert, die mit XMM0 bis XMM1 benannt sind, obgleich auch dies nicht erforderlich ist. Die 512-Bit-Register ZMM0 bis ZMM31 sind betriebsfähig, um gepackte 512-Bit-Daten, gepackte 256-Bit-Daten oder gepackte 128-Bit-Daten zu halten. Die 256-Bit-Register YMM0 bis YMM15 sind betriebsfähig, um gepackte 256-Bit-Daten oder gepackte 128-Bit-Daten zu halten. Die 128-Bit-Register XMM0 bis XMM1 sind betriebsfähig, um gepackte 128-Bit-Daten zu halten. Jedes der Register kann verwendet werden, um entweder gepackte Gleitkommadaten oder gepackte Ganzzahldaten zu speichern. Es werden unterschiedliche Datenelementgrößen, einschließlich mindestens 8-Bit-Byte-Daten, 16-Bit-Wort-Daten, 32-Bit-Doppelwort- oder Einzelpräzisionsgleitkommadaten und 64-Bit-Vierfachwort oder Doppelpräzisionsgleitkommadaten unterstützt. Alternative Ausführungsformen von gepackten Datenregistern können unterschiedliche Anzahlen von Registern und unterschiedliche Größen von Registern umfassen und können größere Register auf kleinere Register aliasen oder nicht.
  • Ein Befehlssatz umfasst ein oder mehrere Befehlsformate. Ein gegebenes Befehlsformat definiert verschiedene Felder (Anzahl von Bits, Ort der Bits), um unter anderem die durchzuführende Operation (Opcode) und den/die Operanden anzugeben, auf dem/denen die Operation durchzuführen ist. Einige Befehlsformate werden durch die Definition von Befehlsvorlagen oder (Teilformaten) weiter aufgegliedert. Zum Beispiel können die Befehlsvorlagen eines gegebenen Befehlsformats definiert werden, um unterschiedliche Teilmengen der Felder der Befehlsformate aufzuweisen (die enthaltenen Felder sind typischerweise in derselben Reihenfolge aber zumindest einige weisen unterschiedliche Bit-Positionen auf, weil weniger Felder enthalten sind), und/oder definiert werden, um ein gegebenes Feld aufzuweisen, das unterschiedlich interpretiert wird. So wird jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats (und, wenn definiert, in einer gegebenen der Befehlsvorlagen dieses Befehlsformats) ausgedrückt und umfasst Felder zum Angeben der Operation und der Operanden. Zum Beispiel weist ein beispielhafter ADD-Befehl einen spezifischen Opcode und ein Befehlsformat auf, das ein Opcode-Feld umfasst, um diese Opcode- und Operandenfelder zum Auswählen von Operanden (Quellel/Ziel und Quelle2) anzugeben; und ein Auftreten dieses ADD-Befehls in einem Befehlsstrom wird spezifische Inhalte in den Operandenfeldern aufweisen, die spezifische Operanden auswählen. Eine Menge von SIMD-Erweiterungen, die als Advanced Vector Extensions (AVX) (AVX1 und AVX2) bezeichnet werden und das Vector Extensions (VEX) Codierungsschema verwenden, wurde herausgegeben und/oder veröffentlicht (z. B. siehe Intel® 64 and IA-32 Architectures Software Developers Manual, Oktober 2011; und siehe Intel® Advanced Vector Extensions Programming Reference, Juni 2011).
  • Beispielhafte Befehlsformate
  • Ausführungsformen des/der Befehl/e, der/die hier beschrieben wird/werden, können in unterschiedlichen Formaten ausgeführt sein. Zusätzlich werden beispielhafte Systeme, Architekturen und Pipelines unten im Detail beschrieben. Ausführungsformen des Befehls oder der Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf die im Detail beschriebenen beschränkt.
  • VEX-Befehlsformat
  • VEX-Codierung ermöglicht Befehle, die mehr als zwei Operanden aufweisen, und ermöglicht SIMD-Vektorregister, die länger sind als 128 Bit. Die Verwendung eines VEX-Präfix stellt Syntax mit drei (oder mehr) Operanden bereit. Zum Beispiel führten die vorhergehenden Befehle mit zwei Operanden Operationen durch, wie beispielsweise A = A + B, wodurch ein Quelloperand überschrieben wird. Die Verwendung eines VEX-Präfix ermöglicht es den Operanden, nicht löschende Operationen durchzuführen, wie beispielsweise A = B + C.
  • 11A veranschaulicht ein beispielhaftes AVX-Befehlsformat, das ein VEX-Präfix 1102, reales Opcode-Feld 1130, Mod R/M Byte 1140, SIB-Byte 1150, Verschiebungsfeld 1162 und IMM8 1172 umfasst. 11B veranschaulicht, welche Felder von 11A ein vollständiges Opcode-Feld 1174 und ein Basisoperationsfeld 1142 bilden. 11C veranschaulicht, welche Felder von 11A ein Registerindexfeld 1144 bilden.
  • Das VEX-Präfix (Bytes 0 bis 2) 1102 ist in einer Drei-Byte-Form codiert. Das erste Byte ist das Formatfeld 1140 (VEX Byte 0, Bits [7:0]), das einen expliziten C4-Byte-Wert enthält (der einzige Wert, der zum Unterscheiden des C4-Befehlsformats verwendet wird). Die zweiten bis dritten Bytes (VEX Bytes 1 bis 2) umfassen eine Anzahl von Bitfeldern, die spezifische Fähigkeiten bereitstellen. Insbesondere besteht das REX-Feld 1105 (VEX Byte 1, Bits [7-5]) aus einem VEX.R-Bit-Feld (VEX Byte 1, Bit [7] – R), VEX.X-Bit-Feld (VEX Byte 1, Bit [6] – X) und VEX.B-Bit-Feld (VEX-Byte 1, Bit [5] – B). Andere Felder der Befehle codieren die niedrigeren drei Bits der Registerindizes, wie im Fach bekannt (rrr, xxx und bbb), derart, dass Rrrr, Xxxx und Bbbb durch Hinzufügen von VEX.R, VEX.X und VEX.B gebildet werden können. Das Opcode-Map-Feld 1115 (VEX Byte 1, Bits [4:0] – mmmmm) umfasst Inhalt zum Codieren eines implizierten Führungs-Opcode-Bytes. Das W Feld 1164 (VEX Byte 2, Bit [7] – W) – ist durch die Schreibweise VEX.W dargestellt und stellt je nach Befehl unterschiedliche Funktionen bereit. Die Rolle von VEX.vvvv 1120 (VEX Byte 2, Bits [6:3]-vvvv) kann Folgendes umfassen: 1) VEX.vvvv codiert den ersten Quellregisteroperanden, der in invertierter Form (1s Komplement) angegeben ist und für Befehle mit 2 oder mehr Quelloperanden gültig ist; 2) VEX.vvvv codiert den Zielregisteroperanden, der in 1s Komplementform für bestimmte Vektorverschiebungen angegeben ist; oder 3) VEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Wenn das Feld VEX.L Größe 1168 (VEX Byte 2, Bit [2]-L) = 0 ist, gibt es einen 128-Bit-Vektor an; wenn VEX.L = 1, gibt es einen 256-Bit-Vektor an. Das Präfix-Codierungsfeld 1125 (VEX Byte 2, Bits [1:0]-pp) stellt zusätzliche Bits für das Basisoperationsfeld bereit.
  • Das reale Opcode Feld 1130 (Byte 3) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes wird in diesem Feld angegeben.
  • Das MOD R/M Feld 1140 (Byte 4) umfasst das MOD-Feld 1142 (Bits [7-6]), Reg-Feld 1144 (Bits [5-3]), und R/M Feld 1146 (Bits [2-0]). Die Rolle des Reg-Felds 1144 kann Folgendes umfassen: Codieren von entweder dem Zielregisteroperanden oder eines Quellregisteroperanden (das rrr von Rrrr), oder als eine Opcode-Erweiterung zu behandeln, die nicht zum Codieren irgendeines Befehlsoperanden verwendet wird. Die Rolle des R/M-Felds 1146 kann Folgendes umfassen: Codieren des Befehlsoperanden, der auf eine Speicheradresse verweist, oder Codieren von entweder dem Zielregisteroperanden oder eines Quellregisteroperanden.
  • Scale, Index, Base (SIB) – Der Inhalt des Skalenfelds 1150 (Byte 5) umfasst SS1152 (Bits [7-6]), das zur Speicheradressenerzeugung verwendet wird. Auf die Inhalte von SIB.xxx 1154 (Bits [5-3]) und SIB.bbb 1156 (Bits [2-0]) wurde vorhergehend in Bezug auf die Registerindizes Xxxx und Bbbb verwiesen.
  • Das Verschiebungsfeld 1162 und das Direktwert-Feld (IMM8) 1172 enthalten Adressdaten.
  • Generisches vektorfreundliches Befehlsformat
  • Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das sich für Vektorbefehle eignet (z. B. sind bestimmte Felder für Vektoroperationen spezifisch). Obgleich Ausführungsformen beschrieben werden, in denen sowohl Vektor- als auch Skalaroperationen durch das vektorfreundliche Befehlsformat unterstützt werden, verwenden alternative Ausführungsformen nur Vektoroperationen des vektorfreundlichen Befehlsformats.
  • 12A bis 12B sind Blockdiagramme, die ein generisches vektorfreundliches Befehlsformat und Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulichen. 12A ist ein Blockdiagramm, das ein generisches vektorfreundliches Befehlsformat und Klasse-A-Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulicht; während 12B ein Blockdiagramm ist, das das generische vektorfreundliche Befehlsformat und Klasse-B-Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulicht. Insbesondere ein generisches vektorfreundliches Befehlsformat 1200, für das Klasse-A- und Klasse-B-Befehlsvorlagen definiert sind, die beide Befehlsvorlagen für Nichtspeicherzugriff 1205 und Befehlsvorlagen für Speicherzugriff 1220 umfassen. Der Begriff generisch bedeutet im Zusammenhang mit dem vektorfreundlichen Befehlsformat, dass das Befehlsformat nicht an irgendeinen spezifischen Befehlssatz gebunden ist.
  • Obgleich Ausführungsformen der Erfindung beschrieben werden, in denen das vektorfreundliche Befehlsformat Folgendes unterstützt: eine 64-Byte-Vektoroperandenlänge (oder Größe) mit 32 Bit (4 Byte) oder 64 Bit (8 Byte) Datenelementbreiten (oder Größen) (und somit besteht ein 64-Byte-Vektor aus entweder 16 Elementen mit Doppelwortgröße oder alternativ 8 Elementen mit Vierfachwortgröße); eine 64-Byte-Vektoroperandenlänge (oder Größe) mit 16 Bit (2 Byte) oder 8 Bit (1 Byte) Datenelementbreiten (oder Größen); einer 32-Byte-Vektoroperandenlänge (oder Größe) mit 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte) Datenelementbreiten (oder Größen); und einer 16-Byte-Vektoroperandenlänge (oder Größe) mit 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte) Datenelementbreiten (oder Größen); alternative Ausführungsformen können mehr, weniger und/oder unterschiedliche Vektoroperandengrößen (z. B. 256 Byte-Vektoroperanden) mit größeren, kleineren oder unterschiedlichen Datenelementbreiten unterstützen (z. B. 128 Bit (16 Byte) Datenelementbreiten).
  • Die Klasse-A-Befehlsvorlagen in 12A umfassen Folgendes: 1) innerhalb der Nichtspeicherzugriff-Befehlsvorlagen 1205 sind ein Nichtspeicherzugriff, eine Befehlsvorlage eines vollständigen Rundungssteuerungsoperationstyps 1210 und eine Befehlsvorlage eines Nichtspeicherzugriff-Datentransformationsoperationstyps 1215 gezeigt; und 2) innerhalb der Speicherzugriff-Befehlsvorlagen 1220 sind eine temporale Speicherzugriff-Befehlsvorlage 1225 und eine nicht temporale Speicherzugriff-Befehlsvorlage 1230 gezeigt. Die Klasse-B-Befehlsvorlagen in 12B umfassen Folgendes: 1) innerhalb der Nicht-Speicherzugriff-Befehlsvorlagen 1205 sind eine Nichtspeicherzugriff-Schreibmaskensteuerungs-Teilrundungssteuerungstyp-Operationsbefehlsvorlage 1212 und eine Befehlsvorlage des Nichtspeicherzugriff-Schreibmaskensteuerungs-VSIZE-Operationstyps 1217 gezeigt; und 2) innerhalb der Speicherzugriffs-Befehlsvorlagen 1220 ist eine Speicherzugriff-Schreibmaskensteuerungsbefehlsvorlage 1227 gezeigt.
  • Das generische vektorfreundliche Befehlsformat 1200 umfasst die folgenden Felder, die unten in der Reihenfolge aufgelistet sind, die in 12A bis 12B veranschaulicht ist.
  • Formatfeld 1240 – ein spezifischer Wert (ein Befehlsformat-Kennungswert) in diesem Feld identifiziert das vektorfreundliche Befehlsformat und somit das Vorkommen von Befehlen im vektorfreundlichen Befehlsformat in Befehlsströmen eindeutig. An sich ist dieses Feld wahlfrei in dem Sinne, dass es nicht für einen Befehlssatz benötigt wird, das nur das generische vektorfreundliche Befehlsformat aufweist.
  • Basisoperationsfeld 1242 – sein Inhalt unterscheidet unterschiedliche Basisoperationen.
  • Registerindexfeld 1244 – sein Inhalt gibt, direkt oder durch Adresserzeugung, die Orte der Quell- und Zieloperanden an, sei es in Registern oder im Speicher. Diese umfassen eine Anzahl von Bits, die ausreicht, um N Register von einer P × Q (z. B. 32 × 512, 16 × 128, 32 × 1024, 64 × 1024) Registerdatei auszuwählen. Obgleich in einer Ausführungsform N bis zu drei Quellen und ein Zielregister sein kann, können alternative Ausführungsformen mehr oder weniger Quellen und Zielregister unterstützen (z. B. können sie bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel wirkt, können bis zu drei Quellen unterstützen, wo eine dieser Quellen auch als das Ziel wirkt, können bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifikatorfeld 1246 – sein Inhalt unterscheidet das Auftreten von Befehlen in dem generischen Vektorbefehlsformat, die Speicherzugriff angeben, von denjenigen, bei denen dies nicht der Fall ist; das heißt, zwischen Nichtspeicherzugriff-Befehlsvorlagen 1205 und Speicherzugriff-Befehlsvorlagen 1220. Speicherzugriffsoperationen lesen und/oder Schreiben in die Speicherhierarchie (wobei in einigen Fällen die Quell- und/oder Zieladressen unter Verwendung von Werten in Registern angegeben werden), wohingegen dies bei Nichtspeicherzugriffsoperationen nicht der Fall ist (z. B. sind die Quelle und das Ziel Register). Obgleich in einer Ausführungsform dieses Feld auch zwischen drei unterschiedliche Arten des Durchführens von Speicheradressberechnungen auswählt, können alternative Ausführungsformen mehr, weniger oder unterschiedliche Arten des Durchführens von Speicheradressberechnungen durchführen.
  • Erhöhungsoperationsfeld 1250 – sein Inhalt unterscheidet, welche von einer Vielzahl von unterschiedlichen Operationen zusätzlich zur Basisoperation durchzuführen sind. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Erfindung ist dieses Feld in ein Klassenfeld 1268, ein Alpha-Feld 1252 und ein Beta-Feld 1254 unterteilt. Das Erhöhungsoperationsfeld 1250 ermöglicht das Durchführen gemeinsamer Gruppen von Operationen in einem einzigen anstatt in 2, 3 oder 4 Befehlen.
  • Skalenfeld 1260 – sein Inhalt ermöglicht das Skalieren des Inhalts des Indexfelds zur Speicheradressenerzeugung (z. B. zur Adressenerzeugung, die 2Skala* Index + Basis verwendet).
  • Verschiebungsfeld 1262A – sein Inhalt wird als Teil der Speicheradressenerzeugung verwendet (z. B. zur Adressenerzeugung, die 2Skala* Index + Basis + Verschiebung verwendet).
  • Verschiebungsfaktorfeld 1262B (es sei erwähnt, dass die Nebeneinanderstellung des Verschiebungsfelds 1262A direkt über dem Verschiebungsfaktorfeld 1262B angibt, dass das eine oder das andere verwendet wird) – sein Inhalt wird als Teil der Adressenerzeugung verwendet; es gibt einen Verschiebungsfaktor an, der mit der Größe des Speicherzugriffs (N) zu skalieren ist – wo N die Anzahl von Bytes im Speicherzugriff ist (z. B. zur Adressenerzeugung, die 2Skala* Index + Basis + skalierte Verschiebung verwendet). Redundante Bits niedriger Ordnung werden ignoriert und deshalb wird der Inhalt des Verschiebungsfaktorfelds mit der Gesamtgröße (N) des Speicheroperanden multipliziert, um die endgültige Verschiebung zu erzeugen, die beim Berechnen einer tatsächlichen Adresse zu verwenden ist. Der Wert von N wird durch die Prozessor-Hardware in Laufzeit auf der Grundlage des vollständigen Opcode-Felds 1274 (unten beschrieben) und des Datenbearbeitungsfelds 1254C bestimmt. Das Verschiebungsfeld 1262A und das Verschiebungsfaktorfeld 1262B sind wahlfrei in dem Sinne, dass sie nicht für die Nicht-Speicherzugriff-Befehlsvorlagen 1205 verwendet werden und/oder unterschiedliche Ausführungsformen nur eines oder keines von beiden ausführen können.
  • Datenelementbreite-Feld 1264 – sein Inhalt unterscheidet, welche von einer Anzahl von Datenelementbreiten zu verwenden ist (in einigen Ausführungsformen für alle Befehle; in anderen Ausführungsformen für nur einige der Befehle). Dieses Feld ist wahlfrei in dem Sinne, dass es nicht benötigt wird, wenn nur eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unter Verwendung eines Gesichtspunkts der Opcodes unterstützt werden.
  • Schreibmaskenfeld 1270 – sein Inhalt steuert auf der Grundlage der jeweiligen Datenelementposition, ob die Datenelementposition im Zielvektoroperand das Ergebnis der Basisoperation und Erhöhungsoperation widerspiegelt. Befehlsvorlagen der Klasse A unterstützen Vereinigen und Schreibmaskieren während Befehlsvorlagen der Klasse B sowohl Vereinigen als auch Nullsetzung-Schreibmaskierung unterstützen. Beim Vereinigen ermöglichen Vektormasken den Schutz irgendeiner Menge von Elementen im Ziel vor Aktualisierungen während der Ausführung irgendeiner Operation (die in der Basisoperation und der Erhöhungsoperation angegeben wird); in einer anderen Ausführungsform das Schützen des alten Werts von jedem Element des Ziels, wo die entsprechende Bitmaske eine 0 aufweist. Im Gegensatz dazu ermöglicht das Nullsetzen von Vektormasken das Nullsetzen von irgendeiner Menge von Elementen im Ziel während der Ausführung irgendeiner Operation (die durch die Basisoperation und die Erhöhungsoperation angegeben wird); in einer Ausführungsform wird ein Wert des Ziels auf 0 eingestellt, wenn das entsprechende Maskenbit einen 0-Wert aufweist. Eine Teilmenge dieser Funktionalität ist die Fähigkeit, die Vektorlänge der Operation, die durchgeführt wird (das heißt, die Spanne von Elementen, die geändert werden, vom ersten bis zum letzten) zu steuern; es ist indes nicht notwendig, dass die Elemente, die verändert werden, aufeinanderfolgend sind. Daher ermöglicht das Schreibmaskenfeld 1270 partielle Vektoroperationen, einschließlich, Lade-, Speicher-, arithmetische, logische Operationen usw. Obgleich Ausführungsformen der Erfindung beschrieben sind, in denen der Inhalt des Schreibmaskenfelds 1270 eine von einer Anzahl von Schreibmaskenregistern auswählt, die die zu verwendende Schreibmaske umfasst (und daher der Inhalt des Schreibmaskenfelds 1270 indirekt identifiziert, dass Maskierung durchzuführen ist), ermöglichen alternative Ausführungsformen dem Inhalt des Schreibmaskenfelds 1270 stattdessen oder zusätzlich das direkte Angeben der durchzuführenden Maskierung.
  • Direktwert-Feld 1272 – Sein Inhalt ermöglicht die Angabe eines Direktwerts. Dieses Feld ist wahlfrei in dem Sinne, dass es nicht in einer Ausführung des generischen vektorfreundlichen Formats vorhanden ist, das keinen Direktwert unterstützt und nicht in Befehlen vorhanden ist, die keinen Direktwert verwenden.
  • Klassenfeld 1268 – sein Inhalt unterscheidet zwischen unterschiedlichen Klassen von Befehlen. Unter Bezugnahme auf 12A bis B wählen die Inhalte dieses Felds zwischen Befehlen der Klasse A und der Klasse B. In 12A bis B werden Quadrate mit abgerundeten Ecken verwendet, um anzugeben, dass ein spezifischer Wert in einem Feld vorhanden ist (z. B. Klasse A 1268A und Klasse B 1268B für das Klassenfeld 1268 in 12A beziehungsweise B).
  • Befehlsvorlagen der Klasse A
  • Im Falle der Nichtspeicherzugriff-Befehlsvorlagen 1205 der Klasse A wird das Alpha-Feld 1252 als ein RS-Feld 1252A interpretiert, dessen Inhalt unterscheidet, welcher der unterschiedlichen Erhöhungsoperationstypen durchzuführen ist (z. B. werden Rundung 1252A.1 beziehungsweise Datentransformation 1252A.2 für die Nichtspeicherzugriffsrundungstyp-Operations- 1210 und die Nichtspeicherzugriff-Datentransformationstyp-Operations-Befehlsvorlagen 1215 angegeben), während das Beta-Feld 1254 unterscheidet, welche der Operationen des angegebenen Typs durchzuführen ist. In den Nichtspeicherzugriff-Befehlsvorlagen 1205 sind das Skalenfeld 1260, das Verschiebungsfeld 1262A und das Verschiebungsskalenfeld 1262B nicht vorhanden.
  • Nichtspeicherzugriffsbefehlsvorlagen – Vollständige Rundungssteuertypenoperation
  • In der Nichtspeicherzugriffsbefehlsvorlage für die Operation des vollständigen Rundungstyps 1210 wird das Beta-Feld 1254 als ein Rundungssteuerungsfeld 1254A interpretiert, dessen Inhalt/e statische Rundung bereitstellt/bereitstellen. Obgleich in den beschriebenen Ausführungsformen der Erfindung das Rundungssteuerungsfeld 1254A ein Feld 1256 zum Unterdrücken aller Gleitkommaausnahmen (Suppress All floating point Exceptions – SAE) und ein Rundungsoperationssteuerungsfeld 1258 umfasst, können alternative Ausführungsformen beide dieser Konzepte unterstützen und in dasselbe Feld codieren oder nur das eine oder das andere dieser Konzepte/Felder aufweisen (z. B. nur das Rundungsoperationssteuerungsfeld 1258 aufweisen).
  • SAE-Feld 1256 – sein Inhalt unterscheidet, ob das Berichten von Ausnahmeereignissen zu aktivieren ist oder nicht; wenn der Inhalt des SAE-Felds SAE 1256 angibt, dass die Unterdrückung aktiviert ist, berichtet ein gegebener Befehl keine Art von Gleitkommaausnahme-Flag und ruft keinen Gleitkomma-Ausnahmebehandler auf.
  • Rundungsoperationssteuerungsfeld 1258 – sein Inhalt unterscheidet, welche von einer Gruppe von Rundungsoperationen durchzuführen ist (z. B. Aufrundung, Abrundung, Runden auf Null und Runden auf die nächste Zahl). Daher ermöglicht es das Rundungsoperationssteuerungsfeld 1258, den Rundungsmodus Befehl für Befehl zu ändern. In einer Ausführungsform der Erfindung, wo ein Prozessor ein Steuerregister zum Angeben von Rundungsmodi umfasst, setzt der Inhalt des Rundungsoperationssteuerungsfelds 1250 diesen Registerwert außer Kraft.
  • Nichtspeicherzugriff-Befehlsvorlagen – Datentransformationstyp-Operation
  • In der Nichtspeicherzugriff-Datentransformationstyp-Operationsbefehlsvorlage 1215 wird das Beta-Feld 1254 als ein Datentransformationsfeld 1254B interpretiert, dessen Inhalt unterscheidet, welche von einer Anzahl von Datentransformationen durchzuführen ist (z. B. keine Datentransformation, Swizzle, Broadcast).
  • Im Fall einer Speicherzugriff-Befehlsvorlage 1220 der Klasse A wird das Alpha-Feld 1252 als ein Räumungshinweisfeld 1252B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise zu verwenden ist (in 12A werden der temporale 1252B.1 und nicht temporale Wert 1252B.2 für die temporale Speicherzugriff-Befehlsvorlage 1225 beziehungsweise die nicht temporale Speicherzugriff-Befehlsvorlage 1230 angegeben), während das Beta-Feld 1254 als ein Datenbearbeitungsfeld 1254C interpretiert wird, dessen Inhalt unterscheidet, welche von einer Anzahl von Datenbearbeitungsoperationen (die auch als Primitive bekannt sind) durchzuführen ist (z. B. keine Bearbeitung; Broadcast; Aufwärtsumwandlung einer Quelle; und Abwärtsumwandlung eines Ziels). Die Speicherzugriff-Befehlsvorlagen 1220 umfassen das Skalenfeld 1260 und wahlweise das Verschiebungsfeld 1262A oder das Verschiebungsskalenfeld 1262B.
  • Vektorspeicherbefehle führen Vektorladevorgänge von und Vektorspeichervorgänge in den Speicher mit Umsetzungsunterstützung durch. Wie bei regulären Vektorbefehlen übertragen Vektorspeicherbefehle Daten datenelementweise von/in Speicher, wobei die Elemente, die tatsächlich übertragen werden, durch die Inhalte der Vektormaske bestimmt sind, die als die Schreibmaske ausgewählt ist.
  • Speicherzugriffsbefehlsvorlagen – temporal
  • Die Wahrscheinlichkeit, dass temporale Daten bald genug wiederverwendet werden, ist hoch, derart, dass die Vorteile von Caching genutzt werden können. Dies ist jedoch nur ein Hinweis und unterschiedliche Prozessoren können dies auf unterschiedliche Arten durchführen, in denen der Hinweis vollständig einbezogen oder ignoriert wird.
  • Speicherzugriffsbefehlsvorlagen – nicht temporal
  • Die Wahrscheinlichkeit, dass nicht temporale Daten bald genug wiederverwendet werden, um die Vorteile von Caching im Cache der 1. Ebene zu nutzen, ist gering und daher sollte die Priorität der Räumung gelten. Dies ist jedoch nur ein Hinweis und unterschiedliche Prozessoren können dies auf unterschiedliche Arten durchführen, die das vollständige Ignorieren des Hinweises umfassen.
  • Befehlsvorlagen der Klasse B
  • Im Fall der Befehlsvorlagen der Klasse B wird das Alpha-Feld 1252 als ein Schreibmaskensteuerungsfeld (Z) 1252C interpretiert, dessen Inhalt unterscheidet, ob die Schreibmaskierung, die durch das Schreibmaskenfeld 1270 gesteuert wird, ein Vereinigen oder ein Nullsetzen sein sollte.
  • Im Falle der Nichtspeicherzugriff-Befehlsvorlagen 1205 der Klasse B wird ein Teil des Beta-Felds 1254 als ein RL-Feld 1252A interpretiert, dessen Inhalt unterscheidet, welcher der unterschiedlichen Erhöhungsoperationstypen durchzuführen ist (z. B. werden Rundung 1257A.1 beziehungsweise Vektorlänge (VSIZE) 1257A.2 für die Nichtspeicherzugriff-Schreibmaskensteuerungs-Teilrundungssteuerungstyp-Operationsbefehlsvorlage 1212 und die Nichtspeicherzugriff-Schreibmaskensteuerungs-VSIZE-Typ-Operations-Befehlsvorlage 1217 angegeben), während der Rest des Beta-Felds 1254 unterscheidet, welche der Operationen des angegebenen Typs durchzuführen ist. In den Nichtspeicherzugriff-Befehlsvorlagen 1205 sind das Skalenfeld 1260, das Verschiebungsfeld 1262A und das Verschiebungsskalenfeld 1262B nicht vorhanden.
  • In der Nichtspeicherzugriff-Schreibmaskensteuerungs-Teilrundungssteuerungstyp-Operationsbefehlsvorlage 1210 wird der Rest des Beta-Felds 1254 als ein Rundungsoperationsfeld 1259A interpretiert und das Berichten von Ausnahmeereignissen wird deaktiviert (ein gegebener Befehl berichtet keine Art von Gleitkommaausnahme-Flag und ruft keinen Gleitkomma-Ausnahmebehandler auf).
  • Rundungsoperationssteuerungsfeld 1259A – sein Inhalt unterscheidet, genau wie das Rundungsoperationssteuerungsfeld 1258, welche von einer Gruppe von Rundungsoperationen durchzuführen ist (z. B. Aufrundung, Abrundung, Runden auf Null und Runden auf die nächste Zahl). Daher ermöglicht es das Rundungsoperationssteuerungsfeld 1259A, den Rundungsmodus Befehl für Befehl zu ändern. In einer Ausführungsform der Erfindung, wo ein Prozessor ein Steuerregister zum Angeben von Rundungsmodi umfasst, setzt der Inhalt des Rundungsoperationssteuerungsfelds 1250 diesen Registerwert außer Kraft.
  • In der Nichtspeicherzugriff-Schreibmaskensteuerungs-VSIZE-Typ-Operationsbefehlsvorlage 1217 wird der Rest des Beta-Felds 1254 als ein Vektorlängenfeld 1259B interpretiert, dessen Inhalt unterscheidet, auf welcher von einer Anzahl von Datenvektorlängen zu arbeiten ist (z. B. 128, 256 oder 512 Byte).
  • Im Fall einer Speicherzugriff-Befehlsvorlage 1220 der Klasse B wird ein Teil des Beta-Felds 1254 als ein Broadcast-Feld 1257B interpretiert, dessen Inhalt unterscheidet, ob die Datenbearbeitungsoperation des Broadcast-Typs durchzuführen ist oder nicht, während der Rest des Beta-Felds 1254 als das Vektorlängenfeld 1259B interpretiert wird. Die Speicherzugriff-Befehlsvorlagen 1220 umfassen das Skalenfeld 1260 und wahlweise das Verschiebungsfeld 1262A oder das Verschiebungsskalenfeld 1262B.
  • In Bezug auf das generische vektorfreundliche Befehlsformat 1200 ist ein vollständiges Opcode-Feld 1274 gezeigt, das das Format-Feld 1240, das Basisoperationsfeld 1242 und das Datenelementbreitefeld 1264 umfasst. Obgleich eine Ausführungsform gezeigt ist, in der das vollständige Opcode-Feld 1274 alle diese Felder umfasst, umfasst das vollständige Opcode-Feld 1274 in Ausführungsformen, die nicht alle diese Felder unterstützen, weniger als alle dieser Felder. Das vollständige Opcode-Feld 1274 stellt den Operationscode (Opcode) bereit.
  • Das Erhöhungsoperationsfeld 1250, das Datenelementbreitefeld 1264 und das Schreibmaskenfeld 1270 ermöglichen das Angeben aller dieser Merkmale Befehl für Befehl im generischen vektorfreundlichen Befehlsformat.
  • Die Kombination aus Schreibmaskenfeld und Datenelementbreitefeld erzeugt Befehle mit Typen, da sie das Anwenden der Maske auf der Grundlage von unterschiedlichen Datenelementbreiten ermöglichen.
  • Die verschiedenen Befehlsvorlagen, die in Klasse A und Klasse B gefunden werden, sind in unterschiedlichen Situationen von Vorteil. In einigen Ausführungsformen der Erfindung können unterschiedliche Prozessoren oder unterschiedliche Kerne innerhalb eines Prozessors lediglich die Klasse A, lediglich die Klasse B oder beide Klassen unterstützen. Zum Beispiel kann ein Hochleistungs-Universal-Out-of-Order-Kern, der für Universalrechner bestimmt ist, nur die Klasse B unterstützen, ein Kern, der hauptsächlich für Grafik- und/oder wissenschaftliche Berechnungen (Durchsatz) bestimmt sind, kann nur Klasse A unterstützen und ein Kern, der für beides bestimmt ist, kann beides unterstützen (selbstverständlich liegt ein Kern, der irgendeine Mischung aus Vorlagen und Befehlen von beiden Klassen aber nicht alle Vorlagen und Befehle von beiden Klassen aufweist, im Geltungsbereich der Erfindung). Auch kann ein einziger Prozessor mehrere Kerne umfassen, die alle dieselbe Klasse unterstützen oder in denen unterschiedliche Kerne unterschiedliche Klassen unterstützen. Zum Beispiel kann in einem Prozessor mit getrennten Grafik- und Universalkernen, in dem einer der Grafikkerne hauptsächlich für Grafik und/oder wissenschaftliche Berechnungen bestimmt ist, nur Klasse A unterstützen, während einer oder mehrere der Universalkerne Hochleistungs-Universalkerne mit Out-of-Order-Ausführung und Registerumbenennung sein können, die für Universalrechner bestimmt sind, die nur Klasse B unterstützen. Ein anderer Prozessor, der keinen separaten Grafikkern aufweist, kann Kerne umfassen, die eher für Universal-In-Order- oder Out-of-Order-Anwendungen bestimmt sind und sowohl Klasse A als auch Klasse B unterstützen. Selbstverständlich können Merkmale von einer Klasse in unterschiedlichen Ausführungsformen der Erfindung auch in der anderen Klasse ausgeführt sein. Programme, die in einer höheren Sprache geschrieben sind, würden (z. B. benutzersynchron kompiliert oder statisch kompiliert) in eine Vielzahl unterschiedlicher ausführbarer Formen gebracht, die Folgendes umfassen: 1) eine Form, die lediglich Befehle der Klasse/n aufweist, die durch den Zielprozessor für die Ausführung unterstützt wird/werden; oder 2) eine Form, die alternative Routinen aufweist, die unter Verwendung unterschiedlicher Kombinationen der Befehle aller Klassen geschrieben sind und Steuerflusscode aufweisen, der die auszuführenden Routinen auf der Grundlage der Befehle auswählt, die durch den Prozessor unterstützt werden, der den Code gegenwärtig ausführt.
  • Beispielhaftes spezifisches vektorfreundliches Befehlsformat
  • 13A ist ein Blockdiagramm, das ein beispielhaftes spezifisches vektorfreundliches Befehlsformat gemäß Ausführungsformen der Erfindung veranschaulicht. 13A zeigt ein spezifisches vektorfreundliches Befehlsformat 1300, das spezifisch ist in dem Sinne, dass es den Ort, die Größe, die Interpretation und die Reihenfolge der Felder sowie Werte für einige dieser Felder angibt. Das spezifische vektorfreundliche Befehlsformat 1300 kann verwendet werden, um den x86-Befehlssatz zu erweitern und so sind einige Felder denjenigen ähnlich oder gleich, die im bestehenden x86-Befehlssatz und Erweiterungen davon (z. B. AVX) verwendet werden. Dieses Format bleibt mit dem Präfix-Codierungsfeld, dem realen Opcode-Byte-Feld, MOD R/M Feld, SIB-Feld, Verschiebungsfeld und Direktwert-Feldern des bestehenden x86-Befehlssatzes mit Erweiterungen konsistent. Die Felder von 12, in die die Felder von 13A abbilden, werden veranschaulicht.
  • Es versteht sich, dass, obgleich Ausführungsformen der Erfindung unter Bezugnahme auf das spezifische vektorfreundliche Befehlsformat 1300 im Zusammenhang des generischen vektorfreundlichen Befehlsformats 1200 zu veranschaulichenden Zwecken beschrieben werden, die Erfindung nicht auf das spezifische vektorfreundliche Befehlsformat 1300 beschränkt ist, außer dort, wo dies beansprucht wird. Zum Beispiel fasst das generische vektorfreundliche Befehlsformat 1200 eine Vielzahl möglicher Größen für die verschiedenen Felder ins Auge, während das gezeigte spezifische vektorfreundliche Befehlsformat 1300 Felder mit spezifischen Größen aufweist. Als spezifisches Beispiel ist, obgleich das Datenelementbreitefeld 1264 im spezifischen vektorfreundlichen Befehlsformat 1300 als ein Ein-Bit-Feld gezeigt ist, die Erfindung nicht darauf beschränkt (das heißt das generische vektorfreundliche Befehlsformat 1200 fasst andere Größen des Datenelementbreitefelds 1264 ins Auge).
  • Das generische vektorfreundliche Befehlsformat 1200 umfasst die folgenden Befehle, die unten in der Reihenfolge aufgelistet sind, die in 13A veranschaulicht ist.
  • EVEX-Präfix (Bytes 0 bis 3) 1302 – ist in einer Vier-Byte-Form codiert.
  • Das Formatfeld 1240 (EVEX Byte 0, Bits [7:0]) – das erste Byte (EVEX Byte 0) ist das Formatfeld 1240 und es enthält 0 × 62 (den eindeutigen Wert, der zum Unterscheiden des vektorfreundlichen Befehlsformats in einer Ausführungsform der Erfindung verwendet wird).
  • Die zweiten bis vierten Bytes (EVEX Bytes 1 bis 3) umfassen eine Anzahl von Bitfeldern, die spezifische Fähigkeiten bereitstellen.
  • Das REX-Feld 1305 (EVEX Byte 1, Bits [7-5]) – besteht aus einem EVEX.R-Bit-Feld (EVEX Byte 1, Bit [7] – R), EVEX.X-Bitfeld (EVEX Byte 1, Bit [6] – X) und 1257 BEX Byte 1, Bit[5] – B). Die EVEX.R, EVEX.X und EVEX.B-Bit-Felder stellen dieselbe Funktionalität bereit, wie die entsprechenden VEX-Bit-Felder und werden unter Verwendung von 1s-Komplementform codiert, d. h. ZMM0 wird als 1111B codiert, ZMM15 wird als 0000B codiert. Andere Felder der Befehle codieren die niedrigeren drei Bits der Registerindizes, wie im Fach bekannt (rrr, xxx und bbb), derart, dass Rrrr, Xxxx und Bbbb durch Hinzufügen von EVEX.R, VEEX.X und EVEX.B gebildet werden können.
  • REX'-Feld 1210 – dies ist der erste Teil des REX'-Felds 1210 und ist das EVEX.R'-Bit-Feld (EVEX Byte 1, Bit [4] – R'), das verwendet wird, um entweder die oberen 16 oder unteren 16 des erweiterten 32-Registersatzes zu codieren. In einer Ausführungsform der Erfindung wird dieses Bit gemeinsam mit anderen, wie unten angegeben, in bitinvertiertem Format gespeichert, um (im gut bekannten x86 32-Bit-Modus) vom BOUND-Befehl zu unterscheiden, dessen reales Opcode-Byte 62 ist, aber nicht den Wert 11 im MOD-Feld im MOD R/M-Feld akzeptiert (unten beschrieben); alternative Ausführungsformen der Erfindung speichern dieses und die anderen angegebenen Bits nicht im invertierten Format. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, R'Rrrr wird durch Kombinieren von EVEX.R', EVEX.R und dem anderen RRR von anderen Feldern gebildet.
  • Opcode-Map-Feld 1315 (EVEX Byte 1, Bits [3:0] – mmmm) – sein Inhalt codiert ein implizites Führungs-Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelementbreitenfeld 1264 (EVEX Byte 2, Bit [7] – W) – wird durch die Schreibweise EVEX.W dargestellt. EVEX.W wird verwendet, um die Granularität (Größe) des Datentyps (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente) zu definieren.
  • EVEX.vvvv 1320 (EVEX Byte 2, Bits [6:3]-vvvv) – die Rolle von EVEX.vvvv kann Folgendes umfassen: 1) EVEX.vvvv codiert den ersten Quellregisteroperanden, der in invertierter Form (1s Komplement) angegeben ist und für Befehle mit 2 oder mehr Quelloperanden gültig ist; 2) EVEX.vvvv codiert den Zielregisteroperanden, der in 1s Komplementform für bestimmte Vektorverschiebungen angegeben ist; oder 3) EVEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Daher codiert das EVEX.vvvv-Feld 1320 die 4 Bits niedrigerer Ordnung des ersten Quellregister-Spezifikationssymbols, das in der invertierten Form (1s Komplement) gespeichert ist. In Abhängigkeit vom Befehl wird ein zusätzliches unterschiedliches EVEX-Bitfeld verwendet, um die Größe des Spezifikationssymbols auf 32 Register zu erweitern.
  • EVEX.U 1268 Klasse-Feld (EVEX Byte 2, Bit [2]-U) – Wenn EVEX.U = 0, gibt es die Klasse A oder EVEX.U0 an; wenn EVEX.U = 1, gibt es die Klasse B oder EVEX.U1 an.
  • Präfix-Codierungsfeld 1325 (EVEX Byte 2, Bits [1:0]-pp) – stellt zusätzliche Bits für das Basisoperationsfeld bereit. Zusätzlich zum Bereitstellen von Unterstützung für die alten SSE-Befehle im EVEX-Präfixformat hat dies auch den Vorteil, dass das SIMD-Präfix kompakter wird (anstatt ein Byte zu erfordern, um das SIMD-Präfix auszudrücken, erfordert das EVEX-Präfix lediglich 2 Bits). In einer Ausführungsform werden zur Unterstützung alter SSE-Befehle, die ein SIMD-Präfix (66H, F2H, F3H) in sowohl dem alten als auch in dem EVEX-Präfixformat verwenden, diese alten SIMD-Präfixe in das SIMD-Präfix-Codierungsfeld codiert; und werden in Laufzeit in das alte SIMD-Präfix erweitert, bevor sie dem PLA des Decodierers bereitgestellt werden (so kann das PLA sowohl das alte als auch das EVEX-Format dieser alten Befehle ohne Abwandlung ausführen). Obgleich neuere Befehle den Inhalt des EVEX-Präfix-Codierungsfelds direkt als eine Opcode-Erweiterung verwenden könnten, erweitern bestimmte Ausführungsformen auf eine ähnliche Weise aus Gründen der Konsistenz, ermöglichen aber das Angeben unterschiedlicher Bedeutungen durch diese alten SIMD-Präfixe. Eine alternative Ausführungsform kann das PLA umgestalten, um die 2-Bit-SIMD-Präfix-Codierungen zu unterstützen und benötigen daher die Erweiterung nicht.
  • Alpha-Feld 1252 (EVEX Byte 3, Bit [7] – EH; auch bekannt als EVEX.EH, EVEX.rs, EVEX.RL, EVEX. Schreibmaskensteuerung und EVEX.N; auch veranschaulicht mit a) – wie vorhergehend beschrieben, ist dieses Feld kontextspezifisch.
  • Beta-Feld 1254 (EVEX Byte 3, Bits [6:4]-SSS, auch bekannt als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB; auch veranschaulicht mit βββ) – wie vorhergehend beschrieben, ist dieses Feld kontextspezifisch.
  • REX'-Feld 1210 – dies ist der Rest des REX'-Felds und ist das EVEX.V'-Bit-Feld (EVEX Byte 3, Bit [3] – V'), das verwendet werden kann, um entweder die oberen 16 oder unteren 16 des erweiterten 32-Registersatzes zu codieren. Dieses Bit ist in einem bitinvertierten Format gespeichert. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, V'VVVV wird durch Kombinieren von EVEX.V', EVEX.vvvv gebildet.
  • Schreibmaskenfeld 1270 (EVEX Byte 3, Bits [2:0]-kkk) – sein Inhalt gibt den Index eines Registers in den Schreibmaskenregistern an, wie vorhergehend beschrieben. In einer Ausführungsform der Erfindung weist der spezifische Wert EVEX.kkk = 000 ein besonderes Verhalten auf, das beinhaltet, dass keine Schreibmaske für den bestimmten Befehl verwendet wird (dies kann auf eine Vielzahl von Arten ausgeführt werden, die die Verwendung einer Schreibmaske umfassen, die fest mit allen oder Hardware verdrahtet ist, die die Maskierungs-Hardware umgeht).
  • Das reale Opcode Feld 1330 (Byte 4) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes wird in diesem Feld angegeben.
  • Das MOD R/M Feld 1340 (Byte 5) umfasst das MOD-Feld 1342, Reg-Feld1344 und R/M-Feld 1346. Wie vorhergehend beschrieben, unterscheidet der Inhalt des MOD-Felds 1342 zwischen Speicherzugriff- und Nichtspeicherzugriffoperationen. Die Rolle des Reg-Felds 1344 kann auf zwei Situationen zusammengefasst werden: Codieren von entweder dem Zielregisteroperanden oder eines Quellregisteroperanden oder als eine Opcode-Erweiterung zu behandeln, die nicht zum Codieren irgendeines Befehlsoperanden verwendet wird. Die Rolle des R/M-Felds 1346 kann Folgendes umfassen: Codieren des Befehlsoperanden, der auf eine Speicheradresse verweist, oder Codieren von entweder dem Zielregisteroperanden oder eines Quellregisteroperanden.
  • Scale, Index, Base (SIB) Byte (Byte 6) – Wie vorhergehend beschrieben, wird der Inhalt des Skalenfelds 1250 zur Speicheradressenerzeugung verwendet. SIB.xxx 1354 und SIB.bbb 1356 – auf die Inhalte dieser Felder wurde vorhergehend unter Bezugnahme auf die Registerindizes Xxxx und Bbbb Bezug genommen.
  • Verschiebungsfeld 1262A (Bytes 7-10) – wenn das MOD-Feld 1342 10 enthält, sind die Bytes 7-10 das Verschiebungsfeld 1262A und es funktioniert wie die alte 32-Bit-Verschiebung (disp32) und arbeitet mit Byte-Granularität.
  • Verschiebungsfaktorfeld 1262B (Byte 7) – wenn das MOD-Feld 1342 01 enthält, ist Byte 7 das Verschiebungsfaktorfeld 1262B. Der Ort dieses Felds ist derselbe wie die 8-Bit-Verschiebung (disp8) des alten x86-Befehlssatzes, die mit Byte-Granularität arbeitet. Da disp8 vorzeichenerweitert ist, kann es zwischen –128 und 127 Bytes Versätze adressieren; in Bezug auf 64-Byte-Cache-Zeilen verwendet disp8 8 Bits, die auf nur vier wirklich nützliche Werte –128, –64, 0 und 64 eingestellt werden können; da häufig ein größerer Bereich erforderlich ist, wird disp32 verwendet; disp32 erfordert indes 4 Bytes. Im Gegensatz zu disp8 und disp32 ist das Verschiebungsfaktorfeld 1262B eine Neuinterpretation von disp8; wenn das Verschiebungsfaktorfeld 1262B verwendet wird, wird die tatsächliche Verschiebung durch den Inhalt des Verschiebungsfaktorfelds, multipliziert mit der Größe des Speicheroperandzugriffs (N) bestimmt. Diese Art von Verschiebung wird als disp8·N bezeichnet. Dies verringert die durchschnittliche Befehlslänge (ein einziges Byte bei Verwendung für die Verschiebung aber mit einem viel größeren Bereich). Eine solche komprimierte Verschiebung gründet auf der Annahme, dass die tatsächliche Verschiebung ein Vielfaches der Granularität des Speicherzugriffs ist und somit müssen die redundanten Bits niedriger Ordnung des Adressversatzes nicht codiert werden. Mit anderen Worten, das Verschiebungsfaktorfeld 1262B ersetzt die 8-Bit-Verschiebung des alten x86-Befehlssatzes. Daher wird das Verschiebungsfaktorfeld 1262B auf dieselbe Weise codiert wie, eine 8-Bit-Verschiebung des x86-Befehlssatzes (also keine Änderung bei den ModRM/SIB-Codierungsregeln), mit der einzigen Ausnahme, dass disp8 auf disp8·N überladen wird. Mit anderen Worten gibt es keine Änderungen an den Codierungsregeln oder Codierungslängen sondern nur in der Interpretation des Verschiebungswerts durch Hardware (die die Verschiebung um die Größe des Speicheroperanden skalieren muss, um einen byte-weisen Adressversatz zu erhalten).
  • Das Direktwert-Feld 1272 arbeitet wie vorhergehend beschrieben.
  • Vollständiges Opcode-Feld
  • 13B ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats 1300 veranschaulicht, die das vollständige Opcode-Feld 1274 gemäß einer Ausführungsform der Erfindung bilden. Genauer gesagt, umfasst das vollständige Opcode-Feld 1274 das Formatfeld 1240, das Basisoperationsfeld 1242 und das Datenelementbreite (W) Feld 1264. Das Basisoperationsfeld 1242 umfasst das Präfix-Codierungsfeld 1325, das Opcode-Map-Feld 1315, und das reale Opcode-Feld 1330.
  • Registerindexfeld
  • 13C ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats 1300 veranschaulicht, die das vollständige Registerindexfeld 1244 gemäß einer Ausführungsform der Erfindung bilden. Genauer gesagt, umfasst das Registerindexfeld 1244 das REX-Feld 1305, das REX'-Feld 1310, das MODR/M.reg-Feld 1344, das MODR/M.r/m-Feld 1346, das VVVV-Feld 1320, xxx-Feld 1354 und das bbb-Feld 1356.
  • Erhöhungsoperationsfeld
  • 13D ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats 1300 veranschaulicht, die das Erhöhungsoperationsfeld 1250 gemäß einer Ausführungsform der Erfindung bilden. Wenn das Klasse (U) Feld 1268 0 enthält, bedeutet es EVEX.U0 (Klasse A 1268A); wenn es 1 enthält, bedeutet es EVEX.U1 (Klasse B 1268B). Wenn U = 0 und das MOD-Feld 1342 11 enthält (was eine Nichtspeicherzugriffsoperation bedeutet), wird das Alpha-Feld 1252 (EVEX Byte 3, Bit [7] – EH) als das rs-Feld 1252A interpretiert. Wenn das rs-Feld 1252A eine 1 enthält (Rundung 1252A.1), wird das Beta-Feld 1254 (EVEX Byte 3, Bits [6:4]-SSS) als das Rundungssteuerungsfeld 1254A interpretiert. Das Rundungssteuerungsfeld 1254A umfasst ein Ein-Bit-SAE-Feld 1256 und ein Zwei-Bit-Rundungsoperationsfeld 1258. Wenn das rs-Feld 1252A eine 0 enthält (Datentransformation 1252A.2), wird das Beta-Feld 1254 (EVEX Byte 3, Bits [6:4]-SSS) als ein Drei-Bit-Datentransformationsfeld 1254B interpretiert. Wenn U = 0 und das MOD-Feld 1342 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bedeutet), wird das Alpha-Feld 1252 (EVEX Byte 3, Bit [7] – EH) als das Räumungshinweisfeld (EH) 1252B interpretiert und das Beta-Feld 1254 (EVEX Byte 3, Bits [6:4]-SSS) wird als ein Drei-Bit-Datenbearbeitungsfeld 1254C interpretiert.
  • Wenn U = 1 wird das Alpha-Feld 1252 (EVEX Byte 3, Bit [7] – EH) als das Schreibmaskensteuerungsfeld (Z) 1252C interpretiert. Wenn U = 1 und das MOD-Feld 1342 11 enthält (was eine Nichtspeicherzugriffsoperation bedeutet), wird ein Teil des Beta-Felds 1254 (EVEX-Byte 3, Bit [4]- S0) als das RL-Feld 1257A interpretiert; wenn es eine 1 enthält (Rundung 1257A.1), wird der Rest des Beta-Felds 1254 (EVEX Byte 3, Bit [6-5]- S2-1) als das Rundungsoperationsfeld 1259A interpretiert, während, wenn das RL-Feld 1257A eine 0 enthält (VSIZE 1257.A2), der Rest des Beta-Felds 1254 (EVEX Byte 3, Bit [6-5]- S2-1) als das Vektorlängenfeld 1259B (EVEX Byte 3, Bit [6-5]- L1-0) interpretiert wird. Wenn U = 1 und das MOD-Feld 1342 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bedeutet), wird das Beta-Feld 1254 (EVEX Byte 3, Bits [6:4]- SSS) als das Vektorlängenfeld 1259B (EVEX Byte 3, Bit [6-5]- L1-0) und das Broadcast-Feld 1257B (EVEX Byte 3, Bit [4]- B) interpretiert.
  • Beispielhafte Registerarchitektur
  • 14 ist ein Blockdiagramm einer Registerarchitektur 1400 gemäß einer Ausführungsform der Erfindung. In der veranschaulichten Ausführungsform sind 32 Vektorregister 1410 vorhanden, die 512 Bits breit sind; auf diese Register wird mit zmm0 bis einschließlich zmm31 verwiesen. Die 256 Bits niedrigerer Ordnung der unteren 16 zmm-Register werden auf den Registern ymm0-16 überdeckt. Die 128 Bits niedrigerer Ordnung der unteren 16 zmm-Register (die 128 Bits niedrigerer Ordnung der ymm-Register) werden auf den Registern xmm0-15 überdeckt. Das spezifische vektorfreundliche Befehlsformat 1300 arbeitet auf dieser überdeckten Registerdatei, wie in den Tabellen unten veranschaulicht.
    Einstellbare Vektorlänge Klasse Operationen Register
    Befehlsvorlagen, die nicht das Vektorlängenfeld 1259B umfassen. A (Figur 12A; U = 0) 1210, 1215, 1225, 1230 zmm-Register (die Vektorlänge beträgt 64 Bytes)
    B (Figur 12B; U = 1) 1212 zmm-Register (die Vektorlänge beträgt 64 Bytes)
    Befehlsvorlagen, die das Vektorlängenfeld 1259B umfassen. B (Figur 12B; U = 1) 1217, 1227 zmm-, ymm- oder mm-Register (die Vektorlänge beträgt 64 Byte, 32 Byte, oder 16 Byte), in Abhängigkeit vom Vektorlängenfeld 1259B
  • Mit anderen Worten, das Vektorlängenfeld 1259B wählt zwischen einer Höchstlänge und einer oder mehreren anderen kürzeren Längen aus, wo jede solche kürzere Länge der Hälfte der Länge der vorhergehenden Länge entspricht; und Befehlsvorlagen ohne das Vektorlängenfeld 1259B arbeiten auf der maximalen Vektorlänge. Ferner arbeiten in einer Ausführungsform die Befehlsvorlagen der Klasse B des spezifischen vektorfreundlichen Befehlsformats 1300 auf gepackten oder skalaren Einfach/Doppelpräzisionsgleitkommadaten und gepackten oder skalaren Ganzzahldaten. Skalare Operationen sind Operationen, die auf der Datenelementposition der niedrigsten Ordnung in einem zmm/ymm/mm-Register durchgeführt werden; die höheren Datenelementpositionen werden entweder gelassen, wie sie vor dem Befehl waren, oder werden in Abhängigkeit von der Ausführungsform nullgesetzt.
  • Schreibmaskenregister 1415 – in der veranschaulichten Ausführungsform sind 8 Schreibmaskenregister (k0 bis k7) mit einer Größe von jeweils 64 Bits vorhanden. In einer alternativen Ausführungsform beträgt die Größe der Schreibmaskenregister 1415 16 Bits. Wie vorhergehend beschrieben, kann in einer Ausführungsform der Erfindung das Vektormaskenregister k0 nicht als eine Schreibmaske verwendet werden; wenn die Codierung, die normalerweise k0 angeben würde, für eine Schreibmaske verwendet wird, wählt sie eine fest verdrahtete Schreibmaske von 0xFFFF aus, wodurch die Schreibmaskierung für diesen Befehl wirksam deaktiviert wird.
  • Universalregister 1425 – in der veranschaulichten Ausführungsform sind sechzehn 64-Bit-Universalregister vorhanden, die gemeinsam mit den bestehenden x86-Adressierungsmodi verwendet werden, um Speicheroperanden zu adressieren. Auf diese Register wird mit den Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 Bezug genommen.
  • Skalare Gleitkommastapelregisterdatei (x87-Stapel) 1445 auf der die gepackte flache MMX-Ganzzahlregisterdatei 1450 gealiast wird – in der veranschaulichten Ausführungsform ist der x87-Stapel ein aus acht Elementen bestehender Stapel, der verwendet wird, um skalare Gleitkommaoperationen auf 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung durchzuführen; während die MMX-Register verwendet werden, um Operationen auf gepackten 64-Bit-Ganzzahldaten durchzuführen sowie Operanden für einige Operationen zu halten, die zwischen den MMX- und XMM-Registern durchgeführt werden.
  • Alternative Ausführungsformen der Erfindung können breitere oder schmalere Register verwenden. Zusätzlich können alternative Ausführungsformen der Erfindung mehr, weniger oder unterschiedliche Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Rechnerarchitekturen
  • Prozessorkerne können auf unterschiedliche Arten, für unterschiedliche Zwecke und in unterschiedlichen Prozessoren ausgeführt werden. Zum Beispiel können Ausführungen solcher Kerne Folgendes umfassen: 1) einen Universal-in-order-Kern, der für Universalrechner bestimmt ist; 2) einen Hochleistungs-out-of-order-Kern, der für Universalrechner bestimmt ist; 3) einen Spezialkern, der hauptsächlich für Grafik und/oder wissenschaftliche Berechnungen (Durchsatz) bestimmt ist. Ausführungen unterschiedlicher Prozessoren können Folgendes umfassen: 1) eine Zentraleinheit (CPU), die einen oder mehrere Universal-in-order-Kerne, die für Universalrechner bestimmt sind, und/oder einen oder mehrere Universal-out-of-order-Kerne umfasst, der/die für Universalrechner bestimmt ist/sind; und 2) einen Coprozessor, der einen oder mehrere Spezialkerne umfasst, die hauptsächlich für Grafik und/oder wissenschaftliche Zwecke (Durchsatz) bestimmt ist. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die Folgendes umfassen können: 1) den Coprozessor auf einem von der CPU getrennten Chip; 2) den Coprozessor auf einem separaten Chip im selben Paket wie die CPU; 3) den Coprozessor auf demselben Chip wie die CPU (in diesem Fall wird so ein Coprozessor manchmal als Speziallogik, wie beispielsweise integrierte Grafik- und/oder wissenschaftliche (Durchsatz) Logik, oder als Spezialkerne bezeichnet); und 4) ein System auf einem Chip, das gleichzeitig die beschriebene CPU (die manchmal als der/die Anwendungskern/e oder Anwendungsprozessor/en bezeichnet wird)), den vorhergehend beschriebenen Coprozessor und zusätzliche Funktionalität umfassen kann. Beispielhafte Kernarchitekturen werden als nächstes, gefolgt von Beschreibungen von beispielhaften Prozessoren und Rechnerarchitekturen beschrieben.
  • Beispielhafte Kernarchitekturen
  • In-order- und Out-of-order-Kern-Blockdiagramm
  • 15A ist ein Blockdiagramm, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Registerumbenennungs-Out-Of-Order-Issue/Execution-Pipeline gemäß Ausführungsformen der Erfindung veranschaulicht. 15B ist ein Blockdiagramm, das sowohl ein Ausführungsbeispiel eines In-Order-Architekturkerns als auch eines beispielhaften Registerumbenennungs-Out-Of-Order-Issue/Execution-Architekturkerns veranschaulicht, der ausgestaltet ist, um in einen Prozessor gemäß Ausführungsformen der Erfindung aufgenommen zu werden. Die Kästchen mit durchgezogener Linie in 15A bis B veranschaulichen die In-order-Pipeline und den In-order-Kern, während die wahlfreie Hinzufügung der Kästchen mit gestrichelten Linien die Registerumbenennung, Out-of-order-Issue/Execution-Pipeline und Kern veranschaulicht. Unter der Annahme, dass der In-order-Gesichtspunkt eine Teilmenge des Out-of-order-Gesichtspunkts ist, wird der Out-of-order-Gesichtspunkt beschrieben.
  • In 15A umfasst eine Prozessor-Pipeline 1500 eine Abrufstufe 1502, eine Längendecodierungsstufe 1504, eine Decodierungsstufe 1506, eine Zuweisungsstufe 1508, eine Umbenennungsstufe 1510, eine Planungsstufe (auch als Abfertigungs- oder Ausgabestufe bekannt) 1512, eine Registerlese/Speicherlesestufe 1514, eine Ausführungsstufe 1516, eine Rückschreib/Speicherschreibstufe 1518, eine Ausnahmebehandlungsstufe 1522 und eine Commit-Stufe 1524.
  • 15B zeigt den Prozessorkern 1590, der eine Frontend-Einheit 1530 umfasst, die an eine Ausführungsmaschineneinheit 1550 gekoppelt ist und beide sind an eine Speichereinheit 1570 gekoppelt. Der Kern 1590 kann ein Reduced Instruction Set Computing (RISC) Kern, ein Complex Instruction Set Computing (CISC) Kern, ein Very Long Instruction Word (VLIW) Kern oder ein hybrider oder alternativer Kerntyp sein. Als noch eine andere Möglichkeit kann der Kern 1590 ein Spezialkern sein, wie beispielsweise ein Netz- oder Kommunikationskern, eine Komprimierungsmaschine, ein Coprozessorkern, ein Grafikprozessorkern (General Purpose Computing Graphics Processing Unit – GPGPU), Grafikkern oder dergleichen sein.
  • Die Frontend-Einheit 1530 umfasst eine Sprungvorhersageeinheit 1532, die an eine Befehls-Cache-Einheit 1534 gekoppelt ist, die an einen Übersetzungspuffer (Translation Lookaside Buffer – TLB) 1536 gekoppelt ist, der an eine Befehlsabrufeinheit 1538 gekoppelt ist, die an eine Decodierungseinheit 1540 gekoppelt ist. Die Decodierungseinheit 1540 (oder der Decodierer) kann Befehle decodieren und als Ausgang eine/n oder mehrere Mikrooperationen, Mikrocode-Eingangspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale erzeugen, die von den ursprünglichen Befehlen decodiert werden oder diese auf eine andere Weise widerspiegeln. Die Decodierungseinheit 1540 kann unter Verwendung verschiedener unterschiedlicher Mechanismen ausgeführt werden. Beispiele für zweckmäßige Mechanismen umfassen Verweistabellen, Hardware-Ausführungen, programmierbare logische Felder (Programmable Logic Arrays – PLAs), Mikrocode-Nurlesespeicher (ROMs) usw., sind aber nicht darauf beschränkt. In einer Ausführungsform umfasst der Kern 1590 einen Mikrocode-ROM oder ein anderes Medium, das Mikrocode für bestimmte Makrobefehle speichert (z. B. in der Decodierungseinheit 1540 oder auf eine andere Weise innerhalb der Frontend-Einheit 1530). Die Decodierungseinheit 1540 ist an eine Umbenennungs/Zuweisungseinheit 1552 in der Ausführungsmaschineneinheit 1550 gekoppelt.
  • Die Ausführungsmaschineneinheit 1550 umfasst die Umbenennungs/Zuweisungseinheit 1552, die an eine Retirement-Einheit 1554 und an eine Menge von einer oder mehreren Scheduler-Einheit/en 1556 gekoppelt ist. Die Scheduler-Einheit/en 1556 stellt/stellen irgendeine Anzahl von unterschiedlichen Schedulern, einschließlich Reservierungsstationen, zentrales Befehlsfenster usw. dar. Die Scheduler-Einheit/en 1556 ist/sind an die physikalischen Registerdatei-Einheit/en 1558 gekoppelt. Jede der Einheiten 1558 der physikalischen Registerdatei/en stellt eine oder mehrere physikalische Registerdateien dar, von denen unterschiedliche einen oder mehrere unterschiedliche Datentypen, wie beispielsweise skalare Ganzzahl, skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. speichern. In einer Ausführungsform umfasst die Einheit 1558 der physikalischen Registerdatei/en, eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Universalregister bereitstellen. Die Einheit/en der physikalischen Registerdatei/en 1558 wird/werden durch die Retirement-Einheit 1554 überlappt, um verschiedene Arten zu veranschaulichen, auf die die Registerumbenennung und Out-of-order-Ausführung ausgeführt werden können (z. B. unter Verwendung eines/von Neuordnungspuffers/Neuordnungspuffern und (einer) Retirement-Registerdatei/en; unter Verwendung (einer) zukünftigen/zukünftiger Datei/en, von einem oder mehreren Verlauf-Puffer/n und (einer) Retirement-Registerdatei/en; unter Verwendung von (einer) Register-Map/s und einem Pool von Registern; usw.). Die Retirement-Einheit 1554 und die Einheit/en der physikalischen Registerdatei/en 1558 ist/sind an den/die Ausführungs-Cluster 1560 gekoppelt. Der/die Ausführungscluster 1560 umfasst/umfassen eine Menge von einer oder mehreren Ausführungseinheiten 1562 und eine Menge von einer oder mehreren Speicherzugriffseinheiten 1564. Die Ausführungseinheiten 1562 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und auf verschiedenen Typen von Daten (z. B. skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma) durchführen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten umfassen kann, die für bestimmte Funktionen oder Mengen von Funktionen bestimmt sind, können andere Ausführungsformen lediglich eine Ausführungseinheit oder mehrere Ausführungseinheiten umfassen, die alle sämtliche Funktionen durchführen. Die Scheduler-Einheit/en 1556, Einheit/en der physikalischen Registerdatei/en 1558 und der/die Ausführungs-Cluster 1560 sind als möglicherweise mehrere gezeigt, da bestimmte Ausführungsformen separate Pipelines für bestimmte Typen von Daten/Operationen erzeugen (z. B. eine skalare Ganzzahl-Pipeline, eine skalare Gleitkomma/gepackte Ganzzahl/gepackte Gleitkomma/Vektorganzzahl/Vektorgleitkomma-Pipeline und/oder eine Speicherzugriff-Pipeline, die jeweils ihre/seine eigenen Scheduler-Einheit, Einheit für physikalische Registerdatei/en und/oder Ausführungs-Cluster aufweisen – und im Fall einer separaten Speicherzugriffs-Pipeline werden bestimmte Ausführungsformen ausgeführt, in denen lediglich der Ausführungs-Cluster dieser Pipeline den/die Speicherzugriffseinheit/en 1564 aufweist). Es versteht sich auch, dass dort, wo separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-order-Issue/Execution und der Rest In-order sein können.
  • Die Menge von Speicherzugriffseinheiten 1564 ist an die Speichereinheit 1570 gekoppelt, die eine Daten-TLB-Einheit 1572 umfasst, die an eine Daten-Cache-Einheit 1574 gekoppelt ist, die an eine Cache-Einheit 1576 des Levels 2 (L2) gekoppelt ist. In einem Ausführungsbeispiel können die Speicherzugriffseinheiten 1564 eine Ladeeinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit umfassen, die jeweils an die Daten-TLB-Einheit 1572 in der Speichereinheit 1570 gekoppelt sind. Die Befehls-Cache-Einheit 1534 ist ferner an eine Cache-Einheit 1576 des Levels 2 (L2) in der Speichereinheit 1570 gekoppelt. Die L2-Cache-Einheit 1576 ist an eine oder mehrere Cache-Ebenen und gegebenenfalls an einen Hauptspeicher gekoppelt.
  • Als Beispiel kann die beispielhafte Registerumbenennungs-, Out-of-order-Issue/Execution-Kernarchitektur die Pipeline 1500 wie folgt ausführen: 1) der Befehlsabruf 1538 führt die Abruf- und Längendecodierungsstufen 1502 und 1504 durch; 2) die Decodierungseinheit 1540 führt die Decodierungsstufe 1506 durch; 3) die Umbenennungs/Zuweisungseinheit 1552 führt die Zuweisungsstufe 1508 und die Umbenennungsstufe 1510 durch; 4) die Scheduler-Einheit/en 1556 führt/führen die Planungsstufe 1512 durch; 5) die Einheit/en mit der/den physikalischen Datei/en 1558 und die Speichereinheit 1570 führt/führen die Registerlese/Speicherlesestufe 1514 durch; der Ausführungs-Cluster 1560 führt die Ausführungsstufe 1516 durch; 6) die Speichereinheit 1570 und die Einheit/en 1558 mit der/den physikalischen Registerdatei/en führen die Rückschreib/Speicherschreibstufe 1518 durch; 7) verschiedene Einheiten können an der Ausnahmebehandlungsstufe 1522 beteiligt sein; und 8) die Retirement-Einheit 1554 und die Einheit/en 1558 der/den physikalischen Datei/en führen die Commit-Stufe 1524 durch.
  • Der Kern 1590 kann einen oder mehrere Befehlssätze (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, CA; den ARM-Befehlssatz (mit zusätzlichen Erweiterungen, wie beispielsweise NEON) von ARM Holdings aus Sunnyvale, CA) einschließlich des Befehls/der Befehle, der/die hier beschrieben wird/werden, unterstützen. In einer Ausführungsform umfasst der Kern 1590 Logik zum Unterstützen einer gepackten Datenbefehlssatzerweiterung (z. B. AVX1, AVX2), wodurch die Operationen ermöglicht werden, die durch viele Multimedia-Anwendungen verwendet werden, die unter Verwendung gepackter Daten durchzuführen sind.
  • Es versteht sich, dass der Kern Multithreading (das Ausführen von zwei oder mehr parallelen Mengen von Operationen oder Threads) unterstützen kann und dies auf eine Vielzahl von Arten tun kann, die Zeitscheiben-Multithreading, simultanes Multithreading (wo ein einziger physikalischer Kern einen logischen Kern für jeden der Threads bereitstellt, für die dieser physikalische Kern simultanes Multithreading ausführt) oder eine Kombination davon (z. B. Abrufen mit Zeitschlitz und danach Decodieren und simultanes Multithreading, wie beispielsweise in der Intel® Hyperthreading-Technologie).
  • Obgleich die Registerumbenennung im Zusammenhang mit der Out-of-order-Ausführung beschrieben wird, versteht sich, dass die Registerumbenennung in einer In-order-Architektur verwendet werden kann. Während die veranschaulichte Ausführungsform des Prozessors auch separate Befehls- und Daten-Cache-Einheiten 1534/1574 und eine gemeinsam verwendete L2-Cache-Einheit 1576 umfasst, können alternative Ausführungsformen einen einzigen internen Cache für beide Befehle und Daten aufweisen, wie zum Beispiel einen internen Level 1 (L1) Cache oder mehrere Ebenen von internem Cache. In einigen Ausführungsformen kann das System eine Kombination aus internem Cache und externem Cache umfassen, die extern zum Kern und/oder Prozessor ist. Alternativ kann der gesamte Cache extern zum Kern und/oder zum Prozessor sein.
  • Spezifische beispielhafte In-order-Kernarchitektur
  • 16A bis B veranschaulichen ein Blockdiagramm einer spezifischeren beispielhaften In-order-Kernarchitektur, deren Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne desselben Typs und/oder unterschiedlicher Typen) in einem Chip wäre. Die Logikblöcke kommunizieren in Abhängigkeit von der Anwendung über ein Zwischenverbindungsnetz mit hoher Bandbreite (z. B. ein Ringnetz) mit irgendeiner festen Funktionslogik, Speicher-E/A-Schnittstellen und anderer notwendiger E/A-Logik.
  • 16A ist ein Blockdiagramm eines einzelnen Prozessorkerns gemeinsam mit seiner Verbindung mit dem Zwischenverbindungsnetz 1602 auf dem Chip und mit seiner lokalen Teilmenge des Level 2 (L2) Caches 1604 gemäß Ausführungsformen der Erfindung.
  • In einer Ausführungsform unterstützt ein Befehlsdecodierer 1600 den x86-Befehlssatz mit einer gepackten Datenbefehlssatzerweiterung. Ein L1-Cache 1606 ermöglicht Zugriffe mit geringer Latenz auf Cache-Speicher in die skalaren und Vektoreinheiten. Während in einer Ausführungsform (zum Vereinfachen der Konstruktion) eine skalare Einheit 1608 und eine Vektoreinheit 1610 separate Registersätze (skalare Register 1612 beziehungsweise Vektorregister 1614) verwenden und Daten, die zwischen ihnen übertragen werden, in Speicher geschrieben und dann von einem Level 1 (L1) Cache 1606 zurückgelesen werden, können alternative Ausführungsformen der Erfindung einen unterschiedlichen Ansatz verwenden (z. B. einen einzigen Registersatz verwenden oder einen Kommunikationsweg umfassen, der die Übertragung von Daten zwischen den zwei Registerdateien ermöglicht, ohne dass sie geschrieben und zurückgelesen werden).
  • Die lokale Teilmenge des L2-Caches 1604 ist Teil eines globalen L2-Caches, der in separate lokale Teilmengen, eine pro Prozessorkern, unterteilt ist. Jeder Prozessorkern weist einen direkten Zugriffspfad auf seine eigene lokale Teilmenge des L2-Caches 1604 auf. Daten, die durch einen Prozessorkern gelesen werden, werden in seiner L2-Cache-Teilmenge 1604 gespeichert und es kann schnell parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilmengen zugreifen, auf sie zugegriffen werden. Durch einen Prozessorkern geschriebene Daten werden in seiner eigenen L2-Cache-Teilmenge 1604 gespeichert und von anderen Teilmengen gelöscht, falls notwendig. Das Ringnetz gewährleistet die Kohärenz für geteilte Daten. Das Ringnetz ist bidirektional, um es Agenten, wie beispielsweise Prozessorkernen, L2-Caches und anderen Logikblöcken zu ermöglichen, miteinander oder innerhalb des Chips zu kommunizieren. Jeder Ringdatenpfad ist pro Richtung 1012-Bit breit.
  • 16B ist eine vergrößerte Ansicht eines Teils des Prozessorkerns in 16A gemäß Ausführungsformen der Erfindung. 16B umfasst einen L1-Datencache 1606A, der Teil des L1-Caches 1604 ist, sowie mehr Details in Bezug auf die Vektoreinheit 1610 und die Vektorregister 1614. Insbesondere ist die Vektoreinheit 1610 eine 16-breite Vektorverarbeitungseinheit (Vector Processing Unit – VPU) (siehe 16-breite ALU 1628), die einen oder mehrere von Ganzzahl-, Einfachpräzisions- und Doppelpräzisionsgleitkommabefehlen ausführt. Die VPU unterstützt das Swizzling der Registereingänge mit der Swizzle-Einheit 1620, numerische Umsetzung mit numerischen Umsetzungseinheiten 1622A bis B und Replikation mit der Replikationseinheit 1624 auf dem Speichereingang. Die Schreibmaskenregister 1626 ermöglichen das Prädizieren von resultierenden Vektorschreiboperationen.
  • Prozessor mit integriertem Speicher-Controller und Grafik
  • 17 ist ein Blockdiagramm eines Prozessors 1700, der mehr als einen Kern aufweisen kann, einen integrierten Speicher-Controller aufweisen kann und integrierte Grafik aufweisen kann, gemäß Ausführungsformen der Erfindung. Die Kästchen aus durchgezogenen Linien in 17 veranschaulichen einen Prozessor 1700 mit einem einzigen Kern 1702A, einem Systemagenten 1710, einer Menge von einer oder mehreren Bus-Controller-Einheiten 1716, während die wahlfreie Hinzufügung von Kästchen aus gestrichelten Linien einen alternativen Prozessor 1700 mit mehreren Kernen 1702A bis N, eine Menge von einer oder mehreren integrierten Speicher-Controller-Einheit/en 1714 in der Systemagenteinheit 1710 und Speziallogik 1708 veranschaulicht.
  • Daher können die unterschiedlichen Ausführungen des Prozessors 1700 Folgendes umfassen: 1) eine CPU mit der Speziallogik 1708, die integrierte Grafik und/oder wissenschaftliche (Durchsatz) Logik ist (die einen oder mehrere Kerne umfassen kann) und die Kerne 1702A bis N, die einer oder mehrere Spezialkerne sind (z. B. Universal-in-order-Kerne, Universal-out-of-order-Kerne oder eine Kombination der beiden); 2) einen Coprozessor mit den Kernen 1702A bis N, die eine große Anzahl von Universalkernen sind, die hauptsächlich für Grafik und/oder wissenschaftliche Anwendungen (Durchsatz) bestimmt sind; und 3) einen Coprozessor mit den Kernen 1702A bis N, die eine große Anzahl von Universal-in-order-Kernen sind. So kann der Prozessor 1700 ein Universalprozessor, Coprozessor oder Spezialprozessor, wie beispielsweise ein Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor (General Purpose Graphics Processing Unit – GPGPU), ein Many Integrated Core (MIC) Coprozessor mit hohem Durchsatz (der 30 oder mehr Kerne umfasst), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann auf einem oder mehreren Chips ausgeführt sein. Der Prozessor 1700 kann ein Teil von und/oder auf einem oder mehreren Substraten ausgeführt sein, die irgendeine von einer Anzahl von Verfahrenstechnologien, wie beispielsweise BiCMOS, CMOS oder NMOS verwenden.
  • Die Speicherhierarchie umfasst eine oder mehrere Cache-Ebenen innerhalb der Kerne, eine Menge oder eine oder mehrere gemeinsam verwendete Cache-Einheiten 1706 und externen Speicher (nicht gezeigt), der an eine Menge von integrierten Speicher-Controller-Einheiten 1714 gekoppelt ist. Die Menge der gemeinsam verwendeten Cache-Einheiten 1706 kann einen oder mehrere Caches auf mittlerer Ebene, wie beispielsweise Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Ebenen, einen Last Level Cache (LLC) und/oder Kombinationen davon umfassen. Obwohl in einer Ausführungsform eine ringbasierte Zwischenverbindungseinheit 1712 die integrierte Grafiklogik 1708, die Menge der gemeinsam verwendeten Cache-Einheiten 1706 und die System-Agent-Einheit 1710/integrierte Speicher-Controller-Einheit/en 1714 untereinander verbindet, können alternative Ausführungsformen irgendeine Anzahl von gut bekannten Techniken zur Zwischenverbindung solcher Einheiten verwenden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cache-Einheiten 1706 und Kernen 1702A bis N beibehalten.
  • In einigen Ausführungsformen weist/weisen einer oder mehrere der Kerne 1702A bis N Multithreading-Fähigkeit auf. Der Systemagent 1710 umfasst diejenigen Komponenten, die die Kerne 1702A bis N koordinieren und betreiben. Die Systemagenteinheit 1710 kann zum Beispiel eine Leistungssteuereinheit (Power Control Unit – PCU) und eine Anzeigeeinheit umfassen. Die PCU kann aus Logik und Bauteilen bestehen oder umfassen, die zum Regeln des Leistungszustands der Kerne 1702A bis N und der integrierten Grafiklogik 1708 erforderlich sind. Die Anzeigeeinheit dient dem Antreiben von einer oder mehreren extern verbundenen Anzeigen.
  • Die Kerne 1702A bis N können im Hinblick auf den Architekturbefehlssatz homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 1702A bis N können in der Lage sein, denselben Befehlssatz auszuführen, während andere in der Lage sein können, lediglich eine Teilmenge dieses Befehlssatzes oder einen unterschiedlichen Befehlssatz auszuführen.
  • Beispielhafte Rechnerarchitekturen
  • 18 bis 21 sind Blockdiagramme von beispielhaften Rechnerarchitekturen. Andere Systemkonstruktionen und Ausgestaltungen, die im Fach für Laptops, Desktops, Hand-PC, persönliche digitale Assistenten, Ingenieurarbeitsplätze, Server, Netzgeräte, Netz-Hubs, Schalter, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Grafikgeräte, Videospielgeräte, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Medienspieler, Handgeräte und viele andere elektronische Geräte bekannt sind, sind auch geeignet. Im Allgemeinen sind eine große Vielzahl von Systemen oder elektronischen Geräten, die in der Lage sind, einen Prozessor und/oder andere Ausführungslogik aufzunehmen, wie hier offenbart, allgemein geeignet.
  • Nun mit Bezug auf 18 ist ein Blockdiagramm eines Systems 1800 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 1800 kann einen oder mehrere Prozessoren 1810, 1815 umfassen, die an einen Controller-Hub 1820 gekoppelt sind. In einer Ausführungsform umfasst der Controller-Hub 1820 einen Grafikspeicher-Controller-Hub (Graphics Memory Controller Hub – GMCH) 1890 und einen Input/Output Hub (IOH) 1850 (die sich auf separaten Chips befinden können); der GMCH 1890 umfasst Speicher- und Grafik-Controller, mit denen der Speicher 1840 und ein Coprozessor 1845 gekoppelt sind; der IOH 1850 koppelt die Eingangs/Ausgangsvorrichtungen (E/A) 1860 an den GMCH 1890. Alternativ ist/sind einer oder beide von den Speicher- und Grafik-Controllern innerhalb des Prozessors integriert (wie hier beschrieben), der Speicher 1840 und der Coprozessor 1845 sind direkt an den Prozessor 1810 gekoppelt und der Controller-Hub 1820 befindet sich in einem einzigen Chip mit dem IOH 1850.
  • Die Tatsache, dass die zusätzlichen Prozessoren 1815 wahlfrei sind, wird in 18 mit gestrichelten Linien angegeben. Jeder Prozessor 1810, 1815 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne umfassen und kann irgendeine Version des Prozessors 1700 sein.
  • Der Speicher 1840 kann zum Beispiel ein dynamischer Speicher mit wahlfreiem Zugriff (Dynamic Random Access Memory – DRAM), ein Phasenwechselspeicher (Phase Change Memory – PCM) oder eine Kombination der zwei sein. Für mindestens eine Ausführungsform kommuniziert der Controller-Hub 1820 mit dem/den Prozessor/en 1810, 1815 über einen Multi-Drop-Bus, wie beispielsweise einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie beispielsweise QuickPath Interconnect (QPI) oder eine ähnliche Verbindung 1895.
  • In einer Ausführungsform ist der Coprozessor 1845 ein Spezialprozessor, wie beispielsweise ein MIC-Prozessor mit hohem Durchsatz, ein Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Controller-Hub 1820 einen integrierten Grafikbeschleuniger umfassen.
  • Zwischen den physikalischen Ressourcen 1810, 1815 kann in Bezug auf ein Spektrum von Leistungsmetriken eine Vielzahl von Unterschieden bestehen, die Eigenschaften der Architektur, Mikroarchitektur, die thermischen und Stromverbrauchseigenschaften und dergleichen umfassen.
  • In einer Ausführungsform führt der Prozessor 1810 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. Innerhalb der Befehle können Coprozessorbefehle eingebettet sein. Der Prozessor 1810 erkennt diese Coprozessorbefehle als einen Typ, der durch den verbundenen Coprozessor 1845 ausgeführt werden sollte. Dementsprechend gibt der Prozessor 1810 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle darstellen) auf einem Coprozessorbus oder einer anderen Zwischenverbindung an den Coprozessor 1845 aus. Der/die Coprozessor/en 1845 nehmen die empfangenen Coprozessorbefehle entgegen und führen sie aus.
  • Nun wird unter Bezugnahme auf 19 ein Blockdiagramm eines ersten spezifischeren Systembeispiels gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 19 gezeigt, ist das Mehrprozessorsystem 1900 ein Punkt-zu-Punkt-Zwischenverbindungssystem und umfasst einen ersten Prozessor 1970 und einen zweiten Prozessor 1980, die über eine Punkt-zu-Punkt-Zwischenverbindung 1950 gekoppelt sind. Jeder der Prozessoren 1970 und 1980 kann irgendeine Version des Prozessors 1700 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 1970 und 1980 die Prozessoren 1810 beziehungsweise 1815, während der Coprozessor 1938 der Coprozessor 1845 ist. In einer anderen Ausführungsform sind die Prozessoren 1970 und 1980 der Prozessor 1810 beziehungsweise der Coprozessor 1845.
  • Die gezeigten Prozessoren 1970 und 1980 umfassen integrierte Speicher-Controller-Einheiten (Integrated Memory Controller – IMC) 1972 beziehungsweise 1982. Der Prozessor 1970 umfasst auch die Punkt-zu-Punkt-Schnittstellen (P-P) 1976 und 1978 als Teil seiner Bus-Controller-Einheiten; auf ähnliche Weise weist der zweite Prozessor 1980 P-P-Schnittstellen 1986 und 1988 auf. Die Prozessoren 1970, 1980 können Informationen über eine Punkt-zu-Punkt-Schnittstelle (P-P) 1950 unter Verwendung von P-P-Schnittstellenschaltungen 1978, 1988 austauschen. Wie in 19 gezeigt, koppeln die IMCs 1972 und 1982 die Prozessoren mit entsprechenden Speichern, nämlich einem Speicher 1932 und einem Speicher 1934, die Abschnitte von Hauptspeicher sind, die lokal mit den entsprechenden Prozessoren verbunden sind.
  • Die Prozessoren 1970, 1980 können jeweils Informationen mit einem Chipsatz 1990 über individuelle P-P-Schnittstellen 1952, 1954 unter Verwendung der Punkt-zu-Punkt-Schnittstellenschaltungen 1976, 1994, 1986, 1998 austauschen. Der Chipsatz 1990 kann wahlweise Informationen mit dem Coprozessor 1938 über eine Hochleistungsschnittstelle 1939 austauschen. In einer Ausführungsform ist der Coprozessor 1938 ein Spezialprozessor, wie beispielsweise ein MIC-Prozessor mit hohem Durchsatz, ein Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein gemeinsam verwendeter Cache (nicht gezeigt) kann in jedem Prozessor oder außerhalb von beiden Prozessoren enthalten sein und doch mit den Prozessoren über die P-P-Zwischenverbindung verbunden sein, derart, dass Informationen des lokalen Caches von einem oder beiden Prozessoren im gemeinsam verwendeten Cache gespeichert werden können, wenn ein Prozessor in einen Modus mit niedriger Leistung versetzt wird.
  • Der Chipsatz 1990 kann über eine Schnittstelle 1996 an einen ersten Bus 1916 gekoppelt sein. In einer Ausführungsform kann der erste Bus ein Peripheral Component Interconnect (PCI) Bus oder ein Bus, wie beispielsweise ein PCI Express Bus oder ein anderer E/A-Zwischenverbindungsbus der dritten Generation sein, obgleich der Schutzbereich der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in 19 gezeigt, können verschiedene E/A-Vorrichtungen 1914 an den ersten Bus 1916 gekoppelt sein, gemeinsam mit einer Bus-Brücke 1918, die den ersten Bus 1916 an einen zweiten Bus 1920 koppelt. In einer Ausführungsform kann/können einer oder mehrere zusätzliche/r Prozessor/en 1915, wie beispielsweise Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie z. B. Grafikbeschleuniger oder digitale Signalverarbeitungseinheiten (Digital Signal Processing – DSP), feldprogrammierbare Gate-Arrays (Field Programmable Gate Array – FPGA) oder irgendein anderer Prozessor an den ersten Bus 1916 gekoppelt sein. In einer Ausführungsform kann der zweite Bus 1920 ein Low Pin Count (LPC) Bus sein. Verschiedene Vorrichtungen können an einen zweiten Bus 1920 gekoppelt werden, der zum Beispiel in einer Ausführungsform eine Tastatur und/oder Maus 1922, Kommunikationsvorrichtungen 1927 und eine Speichereinheit 1928, wie beispielsweise ein Plattenlaufwerk oder eine Massenspeichervorrichtung umfassen kann, die Befehle/Code und Daten 1930 umfassen kann. Ferner kann ein Audio-E/A 1924 an den zweiten Bus 1920 gekoppelt sein. Es sei erwähnt, dass andere Architekturen möglich sind. Zum Beispiel kann anstatt der Punkt-zu-Punkt-Architektur von 19 ein System einen Multi-Drop-Bus oder eine andere solche Architektur ausführen.
  • Nun wird unter Bezugnahme auf 20 ein Blockdiagramm eines zweiten spezifischeren Systembeispiels 2000 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in 19 und 20 tragen dieselben Bezugszeichen und bestimmte Gesichtspunkte von 19 wurden bei 20 weggelassen, um zu vermeiden, dass andere Gesichtspunkte von 20 unverständlich werden.
  • 20 veranschaulicht, dass die Prozessoren 1970, 1980 integrierte Speicher und E/A-Steuerlogik (”CL”) 1972 beziehungsweise 1982 aufweisen können. So umfasst die CL 1972, 1982 integrierte Speicher-Controller-Einheiten und umfasst E/A-Steuerlogik. 20 veranschaulicht, dass nicht nur die Speicher 1932, 1934 an die CL 1972, 1982 gekoppelt sind, sondern dass auch die E/A-Vorrichtungen 2014 an die Steuerlogik 1972, 1982 gekoppelt sind. Alte E/A-Vorrichtungen 2015 sind an den Chipsatz 1990 gekoppelt.
  • Nun mit Bezug auf 21 ist ein Blockdiagramm eines SoC 2100 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleichartige Elemente in 17 tragen dieselben Bezugszeichen. Auch sind die Kästchen mit gestrichelten Linien wahlfreie Merkmale auf fortgeschritteneren SoCs. In 21 ist/sind (eine) Zwischenverbindungseinheit/en 2102 an Folgendes gekoppelt: einen Anwendungsprozessor 2110, der eine Menge von einem oder mehreren Kernen 202A bis N und gemeinsam verwendete Cache-Einheit/en 1706 umfasst; eine Systemagenteinheit 1710; (eine) Bus-Controller-Einheit/en 1716; (eine) integrierte Speicher-Controller-Einheit/en 1714; eine Menge von einem oder mehreren Coprozessoren 2120, die integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Video-Prozessor umfassen können; eine statische Speichereinheit mit wahlfreiem Zugriff (Static Random Access Memory – SRAM) 2130; eine direkte Speicherzugriffseinheit (Direct Memory Access – DMA) 2132; und eine Anzeigeeinheit 2140 zum Koppeln an eine oder mehrere externe Anzeigen. In einer Ausführungsform umfasst/umfassen der/die Coprozessoren 2120 einen Spezialprozessor, wie beispielsweise einen Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, eine GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteter Prozessor oder dergleichen.
  • Ausführungsformen der Mechanismen, die hier offenbart werden, können in Hardware, Software, Firmware oder einer Kombination solcher Ausführungsansätze ausgeführt werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode ausgeführt werden, der auf programmierbaren Systemen ausgeführt wird, die mindestens einen Prozessor, ein Speichersystem (einschließlich flüchtigem und nichtflüchtigem Speicher und/oder Speicherelementen), mindestens eine Eingabevorrichtung und mindestens eine Ausgabevorrichtung umfassen.
  • Programmcode, wie beispielsweise der Code 1930, der in 19 veranschaulicht ist, kann auf Eingangsbefehle angewandt werden, um die hier beschriebenen Funktionen durchzuführen und Ausgangsinformationen zu erzeugen. Die Ausgangsinformationen können auf bekannte Weise auf eine oder mehrere Ausgabevorrichtungen angewandt werden. Für die Zwecke dieser Anmeldung umfasst ein Verarbeitungssystem irgendein System, das einen Prozessor aufweist, wie zum Beispiel: einen digitalen Signalprozessor (DSP), einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (Application Specific Integrated Circuit – ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren verfahrens- oder objektorientierten Programmiersprache ausgeführt sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann falls gewünscht auch in Assembler- oder Maschinensprache ausgeführt sein. Tatsächlich ist der Schutzbereich der hier beschriebenen Mechanismen nicht auf irgendeine bestimmte Programmiersprache beschränkt. Auf jeden Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Einer oder mehrere Gesichtspunkte von mindestens einer Ausführungsform kann/können durch repräsentative Befehle ausgeführt sein, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logiken innerhalb des Prozessors darstellt, die, wenn sie durch eine Maschine gelesen werden, bewirken, dass die Maschine Logik zum Durchführen der hier beschriebenen Techniken erzeugt. Solche Darstellungen, die als ”IP-Kerne” bekannt sind, können auf einem greifbaren, maschinenlesbaren Medium gespeichert sein und mehreren Kunden oder Herstellungseinrichtungen geliefert werden, um in die Herstellungsmaschinen geladen zu werden, die tatsächlich die Logik oder den Prozessor herstellen.
  • Solche maschinenlesbaren Speichermedien können ohne Einschränkung nichtflüchtige greifbare Anordnungen von Erzeugnissen umfassen, die durch eine Maschine oder Vorrichtung hergestellt werden, einschließlich Speichermedien, wie beispielsweise Festplatten, irgendwelche anderen Plattentypen, einschließlich Disketten, optische Platten, Compact-Disk-Nurlesespeicher (Compact Disk Read-Only Memory – CD-ROM), wiederbeschreibbare Compact Disk (Compact Disk Rewritables – CD-RWs) und magneto-optische Platten, Halbleitervorrichtungen wie beispielsweise Nurlesespeicher (Read Only Memory – ROM), Speicher mit wahlfreiem Zugriff (Random Access Memories – RAMs), wie beispielsweise dynamische Speicher mit wahlfreiem Zugriff (DRAMs), statische Speicher mit wahlfreiem Zugriff (SRAMs), löschbare programmierbare Nurlesespeicher (Erasable Programmable Read-Only Memory – EPROMs)), Flash-Speicher, elektrisch löschbare programmierbare Nurlesespeicher (EEPROMs), Phasenwechselspeicher (Phase Change Memory – PCM), magnetische oder optische Karten oder irgendwelche anderen Medientypen, die zum Speichern elektronischer Befehle geeignet sind.
  • Somit umfassen Ausführungsformen der Erfindung auch nichtflüchtige, greifbare maschinenlesbare Medien, die Befehle enthalten oder Konstruktionsdaten enthalten, wie beispielsweise Hardwarebeschreibungssprache (Hardware Description Language – HDL), die Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemstrukturen definiert, die hier beschrieben sind. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich Binärübersetzung, Codemorphing usw.)
  • In einigen Fällen kann ein Befehlsumsetzer verwendet werden, um einen Befehl von einem Quellbefehlssatz in einen Zielbefehlssatz umzusetzen. Zum Beispiel kann der Befehlsumsetzer einen Befehl übersetzen (z. B. unter Verwendung statischer Binärübersetzung, dynamischer Binärübersetzung einschließlich dynamischer Kompilation), morphen, emulieren oder auf eine andere Weise in einen oder mehrere andere Befehle umsetzen, die durch den Kern zu verarbeiten sind. Der Befehlsumsetzer kann in Software, Hardware, Firmware oder einer Kombination davon ausgeführt werden. Der Befehlsumsetzer kann auf einem Prozessor, außerhalb eines Prozessors oder teilweise auf und teilweise außerhalb des Prozessors sein.
  • 22 ist ein Blockdiagramm, das die Verwendung eines Software-Befehlsumsetzers zum Umsetzen von Binärbefehlen in einem Quell-Befehlssatz mit Binärbefehlen in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt. In der veranschaulichten Ausführungsform ist der Befehlsumsetzer ein Software-Befehlsumsetzer, obgleich der Befehlsumsetzer alternativ in Software, Firmware, Hardware oder verschiedenen Kombinationen davon ausgeführt sein kann. 22 zeigt ein Programm in einer höheren Sprache 2202, das unter Verwendung eines x86-Compilers 2204 kompiliert werden kann, um x86-Binärcode 2206 zu erzeugen, der nativ durch einen Prozessor mit mindestens einem x86-Befehlssatzkern 2216 ausgeführt werden kann. Der Prozessor mit mindestens einem x86-Befehlssatzkern 2216 stellt irgendeinen Prozessor dar, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern durchführen kann, indem er (1) einen wesentlichen Teil des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die auf das Ausführen auf einem Intel-Prozessor mit mindestens einem x86-Befehlssatzkern abzielt, kompatibel ausführt oder auf andere Weise verarbeitet, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern zu erzielen. Der x86-Compiler 2204 stellt einen Compiler dar, der betriebsfähig ist, um x86-Binärcode 2206 (beispielsweise Objektcode) zu erzeugen, der mit oder ohne zusätzliche Verbindungsverarbeitung auf dem Prozessor mit mindestens einem x86-Befehlssatzkern 2216 ausgeführt werden kann. Auf ähnliche Weise zeigt 22, dass das Programm in der höheren Sprache 2202 unter Verwendung eines alternativen Befehlssatzcompilers 2208 kompiliert werden kann, um einen alternativen Befehlssatz-Binärcode 2210 zu erzeugen, der durch einen Prozessor ohne mindestens einen x86-Befehlssatzkern 2214 (z. B. einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS-Technologies aus Sunnyvale, CA, ausführen und/oder die den ARM-Befehlssatz von ARM-Holdings aus Sunnyvale, CA, ausführen) nativ ausgeführt werden kann. Der Befehlsumsetzer 2212 wird verwendet, um den x86-Binärcode 2206 in Code umzusetzen, der nativ durch den Prozessor ohne einen x86-Befehlssatzkern 2214 ausgeführt werden kann. Dieser umgesetzte Code ist wahrscheinlich nicht der gleiche wie der alternative Befehlssatz-Binärcode 2210, da das Herstellen eines Befehlsumsetzers, der dazu in der Lage ist, schwierig ist; der umgesetzte Code wird indes den allgemeinen Betrieb ermöglichen und aus Befehlen aus dem alternativen Befehlssatz bestehen. Somit stellt der Befehlsumsetzer 2212 Software, Firmware, Hardware oder eine Kombination davon dar, die es durch Emulation, Simulation oder irgendeinen anderen Prozess einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen x86-Befehlssatzprozessor oder -kern aufweist, ermöglicht, den x86-Binärcode 2206 auszuführen.
  • Komponenten, Merkmale und Details, die für irgendeine der 4 bis 9 beschrieben sind, können auch wahlfrei in irgendeiner der 1 bis 3 verwendet werden. Die Formate von 4 können durch irgendeine/n der hier offenbarten Befehle oder Ausführungsformen verwendet werden. Die Register von 10 können durch irgendeine/n der hier offenbarten Befehle oder Ausführungsformen verwendet werden. Darüber hinaus können Komponenten, Merkmale und Details, die hier für irgendeine der Vorrichtungen beschrieben werden, auch wahlfrei in irgendeinem der hier beschriebenen Verfahren verwendet werden, das in Ausführungsformen durch und/oder mit einer solchen Vorrichtung ausgeführt werden kann.
  • BEISPIELHAFTE AUSFÜHRUNGSFORMEN
  • Die folgenden Beispiele betreffen weitere Ausführungsformen. Details in den Beispielen können irgendwo in einer oder mehreren Ausführungsformen verwendet werden.
  • Beispiel 1 ist eine Vorrichtung zum Verarbeiten von Befehlen. Die Vorrichtung umfasst mehrere gepackte Datenregister. Die Vorrichtung umfasst auch eine Ausführungseinheit, die mit den gepackten Datenregistern gekoppelt ist, wobei die Ausführungseinheit als Reaktion auf einen Mehrfachelement-mit-Mehrfachelement-Vergleichsbefehl, der ausgestaltet ist, um erste gepackte Quelldaten, die ausgestaltet sind, um erste mehrere gepackte Datenelemente zu umfassen, zweite gepackte Quelldaten, die ausgestaltet sind, um zweite mehrere gepackte Datenelemente zu umfassen, und einen Zielspeicherort anzugeben, der betriebsfähig ist, um ein gepacktes Datenergebnis, das ausgestaltet ist, um mehrere gepackte Ergebnisdatenelemente zu umfassen, in dem Zielspeicherort zu speichern. Jedes der Ergebnisdatenelemente ist ausgestaltet, um einem unterschiedlichen von den Datenelementen der zweiten gepackten Quelldaten zu entsprechen, jedes der Ergebnisdatenelemente ist ausgestaltet, um eine Mehrfach-Bit-Vergleichsmaske zu umfassen, die ausgestaltet ist, um ein unterschiedliches Vergleichsmaskenbit für jedes unterschiedliche entsprechende Datenelement der ersten gepackten Quelldaten zu umfassen, das mit dem Datenelement der zweiten gepackten Quelldaten verglichen wird, das dem Ergebnisdatenelement entspricht, wobei jede Vergleichsmaskenbit ausgestaltet ist, um ein Ergebnis eines entsprechenden Vergleichs anzuzeigen.
  • Beispiel 2 umfasst den Gegenstand von Beispiel 1, und wobei die Ausführungseinheit wahlweise ausgestaltet ist, um als Reaktion auf den Befehl das gepackte Datenergebnis zu speichern, das ausgestaltet ist, um Ergebnisse von Vergleichen von allen Datenelementen der ersten gepackten Quelldaten mit allen Datenelementen der zweiten gepackten Quelldaten anzugeben.
  • Beispiel 3 umfasst den Gegenstand von Beispiel 1, und wobei die Ausführungseinheit wahlweise ausgestaltet ist, um als Reaktion auf den Befehl eine Mehrfachbit-Vergleichsmaske in einem gegebenen gepackten Ergebnisdatenelement zu speichern, das ausgestaltet ist, um anzugeben, welches der gepackten Datenelemente der ersten gepackten Quelldaten gleich einem gepackten Datenelement der zweiten Quelle ist, das dem gegebenen gepackten Ergebnisdatenelement entspricht.
  • Beispiel 4 umfasst den Gegenstand von irgendeinem der Beispiele 1 bis 3, und wobei die ersten gepackten Quelldaten wahlweise ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl das gepackte Datenergebnis zu speichern, das ausgestaltet ist, um N gepackte N-Bit-Ergebnisdatenelemente zu umfassen.
  • Beispiel 5 umfasst den Gegenstand von Beispiel 4, wobei die ersten gepackten Quelldaten wahlweise ausgestaltet sind, um acht gepackte 8-Bit-Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten ausgestaltet sind, um acht gepackte 8-Bit-Datenelemente aufzuweisen, und wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl das gepackte Datenergebnis zu speichern, das ausgestaltet ist, um acht gepackte 8-Bit-Ergebnisdatenelemente zu umfassen.
  • Beispiel 6 umfasst den Gegenstand von Beispiel 4, und wobei die ersten gepackten Quelldaten wahlweise ausgestaltet sind, um sechzehn gepackte 8-Bit-Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten ausgestaltet sind, um sechzehn gepackte 8-Bit-Datenelemente aufzuweisen, und wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl das gepackte Datenergebnis zu speichern, das ausgestaltet ist, um sechzehn gepackte 16-Bit-Ergebnisdatenelemente zu umfassen.
  • Beispiel 7 umfasst den Gegenstand von Beispiel 4, und wobei die ersten gepackten Quelldaten wahlweise ausgestaltet sind, um zweiunddreißig gepackte 8-Bit-Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten ausgestaltet sind, um zweiunddreißig gepackte 8-Bit-Datenelemente aufzuweisen, und wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl das gepackte Datenergebnis zu speichern, das ausgestaltet ist, um zweiunddreißig gepackte 32-Bit-Ergebnisdatenelemente zu umfassen.
  • Beispiel 8 umfasst den Gegenstand von einem der Beispiele 1 bis 3, und wobei die ersten gepackten Quelldaten wahlweise ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, wobei der Befehl ausgestaltet ist, um einen Versatz anzugeben, wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl das gepackte Datenergebnis zu speichern, das ausgestaltet ist, um N/2 gepackte N-Bit-Ergebnisdatenelemente zu umfassen, und wobei das niedrigstwertige der N/2 gepackten N-Bit-Ergebnisdatenelemente ausgestaltet ist, um einem gepackten Datenelement der zweiten Quelle zu entsprechen, die durch den Versatz anzugeben ist.
  • Beispiel 9 umfasst den Gegenstand von einem der Beispiele 1 bis 3, und wobei die Ausführungseinheit wahlweise ausgestaltet ist, um als Reaktion auf den Befehl ein gepacktes Ergebnisdatenelement zu speichern, das ausgestaltet ist, um eine Mehrfach-Bit-Vergleichsmaske zu umfassen, in der jedes Maskenbit ausgestaltet ist, um einen Wert von binär Eins, um anzugeben, dass das entsprechende gepackte Datenelement der ersten gepackten Quelldaten gleich einem gepackten Datenelement der zweiten Quelle ist, das dem gepackten Ergebnisdatenelement entspricht, und einen Wert von binär Null aufzuweisen, um anzugeben, dass das entsprechende gepackte Datenelement der ersten gepackten Quelldaten nicht gleich dem gepackten Datenelement der zweiten Quelle ist, das dem gepackten Ergebnisdatenelement entspricht.
  • Beispiel 10 umfasst den Gegenstand von irgendeinem der Beispiele 1 bis 3, und wobei die Ausführungseinheit wahlweise ausgestaltet ist, um als Reaktion auf den Befehl Mehrfach-Bit-Vergleichsmasken zu speichern, die ausgestaltet sind, um die Ergebnisse der Vergleiche von lediglich einer Teilmenge von Datenelementen von einem von den ersten und den zweiten gepackten Quelldaten mit Datenelementen von anderen von den ersten und den zweiten gepackten Quelldaten anzugeben.
  • Beispiel 11 umfasst den Gegenstand von irgendeinem der Beispiele 1 bis 3, wobei der Befehl wahlweise ausgestaltet ist, um eine Teilmenge von Datenelementen von einem von den ersten und den zweiten gepackten Quelldaten anzugeben, die zu vergleichen sind.
  • Beispiel 12 umfasst den Gegenstand von irgendeinem der Beispiele 1 bis 3, wobei der Befehl wahlweise ausgestaltet ist, um implizit den Zielspeicherort anzugeben.
  • Beispiel 13 ist ein Verfahren zum Verarbeiten eines Befehls. Das Verfahren umfasst das Empfangen eines Mehrfachelement-mit-Mehrfachelement-Vergleichsbefehls, wobei der Mehrfachelement-mit-Mehrfachelement-Vergleichsbefehl erste gepackte Quelldaten, die erste mehrere gepackte Datenelemente aufweisen, zweite gepackte Quelldaten, die zweite mehrere gepackte Datenelemente aufweisen, und einen Zielspeicherort angeben. Das Verfahren umfasst auch das Speichern von einem gepackten Datenergebnis, das mehrere der gepackten Ergebnisdatenelemente umfasst, im Zielspeicherort als Reaktion auf den Mehrfachelement-mit-Mehrfachelement-Vergleichsbefehl. Wobei jedes der gepackten Ergebnisdatenelemente einem unterschiedlichen der gepackten Datenelemente von den zweiten gepackten Quelldaten entspricht, wobei jedes der gepackten Ergebnisdatenelemente eine Mehrfach-Bit-Vergleichsmaske umfasst, die ein unterschiedliches Maskenbit für jedes unterschiedliche entsprechende gepackte Datenelement der ersten gepackten Quelldaten umfasst, das mit dem gepackten Datenelement der zweiten Quelle verglichen wurde, das dem gepackten Ergebnisdatenelement entspricht, um ein Ergebnis von einem Vergleich anzugeben.
  • Beispiel 14 umfasst den Gegenstand von Beispiel 13, und wobei das Speichern wahlweise das Speichern eines gepackten Datenergebnisses umfasst, das Ergebnisse des Vergleichens von allen Datenelementen der ersten gepackten Quelldaten mit allen Datenelementen der zweiten gepackten Quelldaten angibt.
  • Beispiel 15 umfasst den Gegenstand von Beispiel 13, und wobei das Empfangen wahlweise das Empfangen des Befehls umfasst, der die ersten gepackten Quelldaten angibt, die N gepackte Datenelemente aufweisen, und die zweiten gepackten Quelldaten N gepackte Datenelemente aufweisen, und wobei das Speichern das Speichern des gepackten Datenergebnisses umfasst, das N gepackte N-Bit-Ergebnisdatenelemente umfasst.
  • Beispiel 16 umfasst den Gegenstand von Beispiel 15, und wobei das Empfangen wahlweise das Empfangen des Befehls umfasst, der die ersten gepackten Quelldaten angibt, die sechzehn gepackte 8-Bit-Datenelemente aufweisen, und die zweiten gepackten Quelldaten sechzehn gepackte 8-Bit-Datenelemente aufweisen, und wobei das Speichern das Speichern des gepackten Datenergebnisses umfasst, das sechzehn gepackte 16-Bit-Ergebnisdatenelemente umfasst.
  • Beispiel 17 umfasst den Gegenstand von Beispiel 13, und wobei das Empfangen wahlweise das Empfangen des Befehls, der die ersten gepackten Quelldaten angibt, die N gepackte Datenelemente aufweisen, das Angeben der zweiten gepackten Quelldaten, die N gepackte Datenelemente aufweisen, und das Angeben eines Versatzes umfasst, und wobei das Speichern das Speichern des gepackten Datenergebnisses umfasst, das N/2 gepackte N-Bit-Ergebnisdatenelemente umfasst, wobei ein niedrigstwertiges von den N/2 gepackten N-Bit-Ergebnisdatenelementen einem gepackten Datenelement der zweiten Quelle entspricht, das durch den Versatz angegeben wird.
  • Beispiel 18 umfasst den Gegenstand von Beispiel 13, und wobei das Empfangen wahlweise das Empfangen des Befehls, der die ersten gepackten Quelldaten angibt, die N gepackte Datenelemente aufweisen, das Angeben der zweiten gepackten Quelldaten, die N gepackte Datenelemente aufweisen, und das Angeben eines Versatzes umfasst, und wobei das Speichern das Speichern des gepackten Datenergebnisses umfasst, das N/2 gepackte N-Bit-Ergebnisdatenelemente umfasst, wobei ein niedrigstwertiges von den N/2 gepackten N-Bit-Ergebnisdatenelementen einem gepackten Datenelement der zweiten Quelle entspricht, das durch den Versatz angegeben wird.
  • Beispiel 19 umfasst den Gegenstand von Beispiel 13, und wobei das Empfangen wahlweise das Empfangen des Befehls, der die ersten gepackten Quelldaten angibt, die eine erste biologische Sequenz darstellen, und das Angeben von zweiten gepackten Quelldaten umfasst, die eine zweite biologische Sequenz darstellen.
  • Beispiel 20 ist ein System zum Verarbeiten von Befehlen. Das System umfasst eine Zwischenverbindung. Das System umfasst auch einen Prozessor, der mit der Zwischenverbindung gekoppelt ist. Das System umfasst auch einen dynamischen RAM-Speicher (Dynamic Random Access Memory – DRAM), der mit der Zwischenverbindung gekoppelt ist, wobei der DRAM einen Mehrfachelement-mit-Mehrfachelement-Vergleichsbefehl speichert, wobei der Befehl ausgestaltet ist, um erste gepackte Quelldaten, die ausgestaltet sind, um erste mehrere gepackte Datenelemente zu umfassen, zweite gepackte Quelldaten, die ausgestaltet sind, um zweite mehrere gepackte Datenelemente zu umfassen, und einen Zielspeicherort anzugeben. Der Befehl ist betriebsfähig, um, wenn er durch den Prozessor ausgeführt wird, zu bewirken, dass der Prozessor Operationen durchführt, die das Speichern eines gepackten Datenergebnisses, das ausgestaltet ist, um mehrere gepackte Ergebnisdatenelemente zu umfassen, am Zielspeicherort umfassen, wobei jedes der gepackten Ergebnisdatenelemente ausgestaltet ist, um einem unterschiedlichen der gepackten Datenelemente der zweiten gepackten Quelldaten zu entsprechen. Jedes der gepackten Ergebnisdatenelemente ist ausgestaltet, um eine Mehrfach-Bit-Vergleichsmaske zu umfassen, die ausgestaltet ist, um Ergebnisse von Vergleichen von gepackten Mehrfach-Datenelementen der ersten gepackten Quelldaten mit dem gepackten Datenelement der zweiten Quelle anzugeben, das ausgestaltet ist, um dem gepackten Ergebnisdatenelement zu entsprechen.
  • Beispiel 21 umfasst den Gegenstand von Beispiel 20 und wobei der Befehl wahlweise betriebsfähig ist, um, wenn er durch den Prozessor ausgeführt wird, zu bewirken, dass der Prozessor das gepackte Datenergebnis speichert, das ausgestaltet ist, um Ergebnisse von Vergleichen von allen gepackten Datenelementen der ersten gepackten Quelldaten mit allen Datenelementen der zweiten gepackten Quelldaten anzugeben.
  • Beispiel 22 umfasst den Gegenstand von irgendeinem der Beispiele 20 bis 21, und wobei der Befehl wahlweise ausgestaltet ist, um die ersten gepackten Quelldaten, die ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten anzugeben, die ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und wobei die Ausführungseinheit betriebsfähig ist, um, wenn sie durch den Prozessor ausgeführt wird, zu bewirken, dass der Prozessor das gepackte Datenergebnis speichert, das ausgestaltet ist, um N gepackte N-Bit-Ergebnisdatenelemente zu umfassen.
  • Beispiel 23 ist ein Erzeugnis zum Bereitstellen von Befehlen. Das Erzeugnis umfasst ein nichtflüchtiges, maschinenlesbares Speichermedium, das einen Befehl speichert. Das Erzeugnis umfasst auch den Befehl zum Angeben erster gepackter Quelldaten, die ausgestaltet sind, um erste mehrere gepackte Datenelemente aufzuweisen, zweiter gepackter Quelldaten, die ausgestaltet sind, um zweite mehrere gepackte Datenelemente aufzuweisen, und eines Zielspeicherorts, und wobei der Befehl, wenn er durch eine Maschine ausgeführt wird, betriebsfähig ist, um zu bewirken, dass die Maschine Operationen durchführt, die das Speichern eines gepackten Datenergebnisses, das ausgestaltet ist, um mehrere gepackte Ergebnisdatenelemente zu umfassen, in dem Zielspeicherort umfassen, wobei jedes der gepackten Ergebnisdatenelemente ausgestaltet ist, um einem unterschiedlichen der gepackten Datenelemente der zweiten gepackten Quelldaten zu entsprechen, wobei jedes der gepackten Ergebnisdatenelemente ausgestaltet ist, um eine Mehrfach-Bit-Vergleichsmaske zu umfassen, wobei jede Mehrfach-Bit-Vergleichsmaske ausgestaltet ist, um Ergebnisse von Vergleichen von mehreren gepackten Datenelementen der ersten gepackten Quelldaten mit dem gepackten Datenelement der zweiten Quelle anzugeben, das ausgestaltet ist, um dem gepackten Ergebnisdatenelement zu entsprechen, das die Mehrfach-Bit-Vergleichsmaske aufweist.
  • Beispiel 24 umfasst den Gegenstand von Beispiel 23, und wobei der Befehl wahlweise ausgestaltet ist, um die ersten gepackten Quelldaten, die ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten anzugeben, die ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und wobei der Befehl betriebsfähig ist, um, wenn er durch die Maschine ausgeführt wird, zu bewirken, dass die Maschine das gepackte Datenergebnis speichert, das ausgestaltet ist, um N gepackte N-Bit-Ergebnisdatenelemente zu umfassen.
  • Beispiel 25 umfasst den Gegenstand der Beispiele 23 bis 24 und wobei das nichtflüchtige maschinenlesbare Speichermedium wahlweise eines von einem nichtflüchtigen Speicher, DRAM und einer CD-ROM umfasst, und wobei der Befehl betriebsfähig ist, um, wenn er durch die Maschine ausgeführt wird, zu bewirken, dass die Maschine das gepackte Datenergebnis speichert, das ausgestaltet ist, um anzugeben, welche unter allen gepackten Datenelementen der ersten gepackten Quelldaten mit welchem unter allen Datenelementen der zweiten gepackten Quelldaten gleich sind.
  • Beispiel 26 umfasst eine Vorrichtung zum Durchführen des Verfahrens von irgendeinem der Beispiele 13 bis 19.
  • Beispiel 27 umfasst eine Vorrichtung, die Mittel zum Durchführen des Verfahrens von irgendeinem der Beispiele 13 bis 19 umfasst.
  • Beispiel 28 umfasst eine Vorrichtung, die Decodierungs- und Ausführungsmittel zum Durchführen des Verfahrens von irgendeinem der Beispiele 13 bis 19 umfasst.
  • Beispiel 29 umfasst ein maschinenlesbares Speichermedium, das einen Befehl speichert, der ausgestaltet ist, um, wenn er durch eine Maschine ausgeführt wird, zu bewirken, dass die Maschine das Verfahren nach irgendeinem der Beispiele 13 bis 19 ausführt.
  • Beispiel 30 umfasst eine Vorrichtung zum Durchführen eines Verfahrens im Wesentlichen wie hier beschrieben.
  • Beispiel 31 umfasst eine Vorrichtung zum Ausführen eines Befehls im Wesentlichen wie hier beschrieben.
  • Beispiel 32 umfasst eine Vorrichtung, die Mittel zum Durchführen eines Verfahrens im Wesentlichen wie hier beschrieben umfasst.
  • In der Beschreibung und in den Ansprüchen wurden die Begriffe ”gekoppelt” und/oder ”verbunden” gemeinsam mit davon abgeleiteten Wörtern verwendet. Es versteht sich, dass diese Begriffe nicht als Synonyme füreinander beabsichtigt sind. Stattdessen kann ”verbunden” in bestimmten Ausführungsformen verwendet werden, um anzugeben, dass zwei oder mehr Elemente sich in direktem physikalischem oder elektrischem Kontakt miteinander befinden. ”Gekoppelt” kann bedeuten, dass zwei oder mehr Elemente sich in direktem physikalischem oder elektrischem Kontakt befinden. ”Gekoppelt” kann indes auch bedeuten, dass zwei oder mehr Elemente sich nicht in direktem Kontakt miteinander befinden aber immer noch miteinander zusammenwirken oder interagieren. Zum Beispiel kann eine Ausführungseinheit mit einem Register oder einem Decodierer durch ein oder mehrere eingreifende/s Bauelemente gekoppelt sein. In den Figuren werden Pfeile verwendet, um Verbindungen und Kopplungen zu zeigen.
  • In der Beschreibung und in den Ansprüchen kann es sein, dass der Begriff ”Logik” verwendet wurde. So wie er hier verwendet wird, kann Logik Hardware, Firmware, Software oder verschiedene Kombinationen davon umfassen. Beispiele für Logik umfassen integrierte Schaltungen, anwendungsspezifische integrierte Schaltungen, analoge Schaltungen, digitale Schaltungen, programmierte Logikbausteine, Speichervorrichtungen, die Befehle umfassen, usw. In einigen Ausführungsformen kann Hardware-Logik Transistoren und/oder Gates potenziell gemeinsam mit anderen Schaltungsbauelementen umfassen.
  • In der vorhergehenden Beschreibung wurden spezifische Details dargelegt, um ein eingehendes Verständnis der Ausführungsformen bereitzustellen. Es können indes andere Ausführungsformen ohne einige dieser spezifischen Details in der Praxis angewandt werden. Der Schutzbereich der Erfindung ist nicht durch die spezifischen Beispiele, die vorhergehend bereitgestellt werden, sondern lediglich durch die folgenden Ansprüche zu bestimmen. Alle gleichwertigen Beziehungen zu denjenigen, die in den Zeichnungen veranschaulicht und in der Beschreibung beschrieben sind, sind in den Ausführungsformen enthalten. In anderen Fällen wurden gut bekannte Schaltungen, Strukturen, Vorrichtungen und Operationen in Blockdiagrammform oder ohne Details gezeigt, um zu vermeiden, dass das Verständnis der Beschreibung verschleiert wird. In einigen Fällen, wo mehrere Bauelemente gezeigt und beschrieben wurden, können sie zusammen in einem einzigen Bauelement integriert sein. Wo ein einziges Bauelement gezeigt und beschrieben wurde, kann dieses einzige Bauelement in einigen Fällen in zwei oder mehr Bauelemente getrennt werden.
  • Es wurden verschiedene Operationen und Verfahren beschrieben. Einige der Verfahren wurden in einer relativ grundlegenden Form in den Ablaufdiagrammen beschrieben, aber zu/von den Verfahren können Operationen wahlweise hinzugefügt und/oder entfernt werden. Außerdem ist, obgleich die Ablaufdiagramme eine bestimmte Reihenfolge der Operationen gemäß den beispielhaften Ausführungsformen zeigen, diese bestimmte Reihenfolge beispielhaft. Alternative Ausführungsformen können wahlweise die Operationen in einer unterschiedlichen Reihenfolge durchführen, bestimmte Operationen kombinieren, bestimmte Operationen überlappen usw.
  • Bestimmte Operationen können durch Hardware-Bauelemente durchgeführt werden, oder können in durch Maschinen ausführbare oder durch Schaltungen ausführbare Befehle ausgeführt sein, die verwendet werden können, um in einer Maschine, Schaltung oder einem Hardware-Bauelement (z. B. einem Prozessor, Abschnitt eines Prozessors, einer Schaltung usw.), das mit den Befehlen programmiert ist, zu bewirken und/oder als Ergebnis zu haben, dass sie/es die Operationen durchführt. Die Operationen können auch wahlweise durch eine Kombination von Hardware und Software durchgeführt werden. Ein Prozessor, eine Maschine, Schaltung oder Hardware kann spezifische oder besondere Schaltungen oder andere Logik (z. B. Hardware, die potenziell mit Firmware und/oder Software kombiniert wird) umfassen, die betriebsfähig ist, um den Befehl auszuführen und/oder zu verarbeiten und ein Ergebnis als Reaktion auf den Befehl zu speichern.
  • Einige Ausführungsformen umfassen ein Erzeugnis (z. B. ein Computerprogrammprodukt), das ein maschinenlesbares Medium umfasst. Das Medium kann einen Mechanismus umfassen, der Informationen in einer Form, die durch die Maschine lesbar ist, bereitstellt, zum Beispiel speichert. Das maschinenlesbare Medium kann einen Befehl oder eine Folge von Befehlen bereitstellen oder darauf gespeichert haben, die, wenn er/sie durch eine Maschine ausgeführt wird/werden, betriebsfähig ist/sind, um zu bewirken und/oder als Ergebnis zu haben, dass die Maschine eine/s der hier offenbarten Operationen, Verfahren oder Techniken durchführt. Das maschinenlesbare Medium kann eine oder mehrere der Ausführungsformen der hier offenbarten Befehle bereitstellen, zum Beispiel speichern.
  • In einigen Ausführungsformen kann das maschinenlesbare Medium ein greifbares und/oder nichtflüchtiges maschinenlesbares Speichermedium umfassen. Zum Beispiel kann das greifbare und/oder nichtflüchtige maschinenlesbare Speichermedium eine Floppy-Diskette, ein optisches Speichermedium, eine optische Platte, eine optische Datenspeichervorrichtung, eine CD-ROM, eine Magnetplatte, eine magneto-optische Platte, einen Nurlesespeicher (ROM), einen programmierbaren ROM (PROM), einen lösch- und programmierbaren ROM (EPROM) einen elektrisch lösch- und programmierbaren ROM (EEPROM), einen Speicher mit wahlfreiem Zugriff (RAM), einen statischen RAM (SRAM), einen dynamischen RAM (DRAM), einen Flash-Speicher, einen Phasenwechselspeicher, ein Phasenwechseldatenspeichermaterial, einen nichtflüchtigen Speicher, eine nichtflüchtige Datenspeichervorrichtung, einen nichtflüchtigen Speicher, eine nichtflüchtige Datenspeichervorrichtung oder dergleichen umfassen. Das nichtflüchtige maschinenlesbare Speichermedium besteht nicht aus einem flüchtigen ausgebreiteten Signal. In einer anderen Ausführungsform kann das maschinenlesbare Medium ein flüchtiges maschinenlesbares Kommunikationsmedium umfassen, zum Beispiel die elektrischen, optischen, akustischen oder anderen Formen von ausgebreiteten Signalen, wie beispielsweise Trägerwellen, Infrarotsignale, digitale Signale oder dergleichen.
  • Beispiele zweckmäßiger Maschinen umfassen Universalprozessoren, Spezialprozessoren, Befehlsverarbeitungsvorrichtungen, digitale Logikschaltungen, integrierte Schaltungen und dergleichen, sind aber nicht darauf beschränkt. Noch weitere Beispiele für zweckmäßige Maschinen umfassen Rechenvorrichtungen und andere elektronische Vorrichtungen, die solche Prozessoren, Befehlsverarbeitungsvorrichtungen, digitale Logikschaltungen oder integrierte Schaltungen umfassen. Beispiele für solche Rechenvorrichtungen und elektronische Vorrichtungen umfassen Desktop-Rechner, Laptop-Rechner, Notebook-Rechner, Tablet-Rechner, Netbooks, Smartphones, Mobiltelefone, Server, Netzvorrichtungen (z. B. Router und Schalter), mobile Internetgeräte (Mobile Internet Devices – MID), Medienspieler, Smart-TV, Nettops, Set-Top-Boxen und Videospiel-Controller, sind aber nicht darauf beschränkt.
  • Wenn über die gesamte Beschreibung hinweg von ”einer Ausführungsform”, ”der Ausführungsform”, ”einer oder mehreren Ausführungsformen”, ”einigen Ausführungsformen” die Rede ist, bedeutet dies zum Beispiel, dass ein bestimmtes Merkmal in der praktischen Anwendung der Erfindung enthalten ist, dies aber nicht notwendigerweise erforderlich ist. Auf ähnliche Weise werden in der Beschreibung verschiedene Merkmale manchmal zusammen in einer einzigen Ausführungsform, Figur oder der Beschreibung davon zum Zweck der Straffung der Offenbarung und zur Unterstützung des Verständnisses verschiedener erfinderischer Gesichtspunkte zusammengefasst. Dieses Verfahren der Offenbarung ist indes nicht derart auszulegen, dass es eine Absicht widerspiegelt, dass die Erfindung mehr Merkmale erfordert als ausdrücklich in jedem Anspruch angegeben. Stattdessen liegen erfinderische Gesichtspunkte in weniger als allen Merkmalen einer einzigen offenbarten Ausführungsform, wie durch die folgenden Ansprüche widergespiegelt. Daher werden die Ansprüche, die auf die detaillierte Beschreibung folgen, hiermit ausdrücklich in diese detaillierte Beschreibung aufgenommen, wobei jeder Anspruch alleine für eine separate Ausführungsform der Erfindung steht.

Claims (25)

  1. Vorrichtung zum Verarbeiten von Befehlen, die Folgendes umfasst: mehrere gepackte Datenregister; und eine Ausführungseinheit, die mit den gepackten Datenregistern gekoppelt ist, wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf einen Mehrfachelement-mit-Mehrfachelement-Vergleichsbefehl, der ausgestaltet ist, um erste gepackte Quelldaten, die ausgestaltet sind, um erste mehrere gepackte Datenelemente zu umfassen, zweite gepackte Quelldaten, die ausgestaltet sind, um zweite mehrere gepackte Datenelemente zu umfassen, und einen Zielspeicherort anzugeben, der betriebsfähig ist, um ein gepacktes Datenergebnis, das ausgestaltet ist, um mehrere gepackte Ergebnisdatenelemente zu umfassen, am Zielspeicherort zu speichern, wobei jedes der Ergebnisdatenelemente ausgestaltet ist, um einem unterschiedlichen von den Datenelementen der zweiten gepackten Quelldaten zu entsprechen, wobei jedes der Ergebnisdatenelemente ausgestaltet ist, um eine Mehrfach-Bit-Vergleichsmaske zu umfassen, die ausgestaltet ist, um ein unterschiedliches Vergleichsmaskenbit für jedes unterschiedliche entsprechende Datenelement der ersten gepackten Quelldaten zu umfassen, das mit dem Datenelement der zweiten gepackten Quelldaten verglichen wird, das dem Ergebnisdatenelement entspricht, wobei jedes Vergleichsmaskenbit ausgestaltet ist, um ein Ergebnis eines entsprechenden Vergleichs anzugeben.
  2. Vorrichtung nach Anspruch 1, wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl das gepackte Datenergebnis zu speichern, das ausgestaltet ist, um Ergebnisse von Vergleichen von allen Datenelementen der ersten gepackten Quelldaten mit allen Datenelementen der zweiten gepackten Quelldaten anzugeben.
  3. Vorrichtung nach Anspruch 1 oder 2, wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl eine Mehrfachbit-Vergleichsmaske in einem gegebenen gepackten Ergebnisdatenelement zu speichern, das ausgestaltet ist, um anzugeben, welches der gepackten Datenelemente der ersten gepackten Quelldaten gleich einem gepackten Datenelement der zweiten Quelle ist, das dem gegebenen gepackten Ergebnisdatenelement entspricht.
  4. Vorrichtung nach einem der Ansprüche 1 bis 3, wobei die ersten gepackten Quelldaten ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl das gepackte Datenergebnis zu speichern, das ausgestaltet ist, um N gepackte N-Bit-Ergebnisdatenelemente zu umfassen.
  5. Vorrichtung nach Anspruch 4, wobei die ersten gepackten Quelldaten ausgestaltet sind, um acht gepackte 8-Bit-Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten ausgestaltet sind, um acht gepackte 8-Bit-Datenelemente aufzuweisen, und wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl das gepackte Datenergebnis zu speichern, das ausgestaltet ist, um acht gepackte 8-Bit-Ergebnisdatenelemente zu umfassen.
  6. Vorrichtung nach Anspruch 4, wobei die ersten gepackten Quelldaten ausgestaltet sind, um sechzehn gepackte 8-Bit-Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten ausgestaltet sind, um sechzehn gepackte 8-Bit-Datenelemente aufzuweisen, und wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl das gepackte Datenergebnis zu speichern, das ausgestaltet ist, um sechzehn gepackte 16-Bit-Ergebnisdatenelemente zu umfassen.
  7. Vorrichtung nach Anspruch 4, wobei die ersten gepackten Quelldaten ausgestaltet sind, um zweiunddreißig gepackte 8-Bit-Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten ausgestaltet sind, um zweiunddreißig gepackte 8-Bit-Datenelemente aufzuweisen, und wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl das gepackte Datenergebnis zu speichern, das ausgestaltet ist, um zweiunddreißig gepackte 32-Bit-Ergebnisdatenelemente zu umfassen.
  8. Vorrichtung nach Anspruch 1, wobei die ersten gepackten Quelldaten ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, wobei der Befehl ausgestaltet ist, um einen Versatz anzugeben, wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl das gepackte Datenergebnis zu speichern, das ausgestaltet ist, um N/2 gepackte N-Bit-Ergebnisdatenelemente zu umfassen, und wobei ein niedrigstwertiges der N/2 gepackten N-Bit-Ergebnisdatenelemente ausgestaltet ist, um einem gepackten Datenelement der zweiten Quelle zu entsprechen, das durch den Versatz anzugeben ist.
  9. Vorrichtung nach einem der Ansprüche 1 bis 8, wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl ein gepacktes Ergebnisdatenelement zu speichern, das ausgestaltet ist, um eine Mehrfach-Bit-Vergleichsmaske zu umfassen, in der jedes Maskenbit ausgestaltet ist, um eines von Folgendem aufzuweisen: einen Wert von binär Eins, um anzugeben, dass das entsprechende gepackte Datenelement der ersten gepackten Quelldaten gleich einem gepackten Datenelement der zweiten Quelle ist, das dem gepackten Ergebnisdatenelement entspricht; und einen Wert von binär Null, um anzugeben, dass das entsprechende gepackte Datenelement der ersten gepackten Quelldaten nicht gleich dem gepackten Datenelement der zweiten Quelle ist, das dem gepackten Ergebnisdatenelement entspricht.
  10. Vorrichtung nach Anspruch 1, wobei die Ausführungseinheit ausgestaltet ist, um als Reaktion auf den Befehl Mehrfach-Bit-Vergleichsmasken zu speichern, die ausgestaltet sind, um die Ergebnisse der Vergleiche von lediglich einer Teilmenge von Datenelementen von den ersten und den zweiten gepackten Quelldaten mit Datenelementen von anderen von den ersten und den zweiten gepackten Quelldaten anzugeben.
  11. Vorrichtung nach Anspruch 1, wobei der Befehl ausgestaltet ist, um eine Teilmenge von Datenelementen von einem von den ersten und den zweiten gepackten Quelldaten anzugeben, die zu vergleichen sind.
  12. Vorrichtung nach einem der Ansprüche 1 bis 11, wobei der Befehl ausgestaltet ist, um implizit den Zielspeicherort anzugeben.
  13. Verfahren zum Verarbeiten eines Befehls, das Folgendes umfasst: Empfangen eines Mehrfachelement-mit-Mehrfachelement-Vergleichsbefehls, wobei der Mehrfachelement-mit-Mehrfachelement-Vergleichsbefehl erste gepackte Quelldaten, die erste mehrere gepackte Datenelemente aufweisen, zweite gepackte Quelldaten, die zweite mehrere gepackte Datenelemente aufweisen, und einen Zielspeicherort angibt; und Speichern eines gepackten Datenergebnisses, das mehrere gepackte Ergebnisdatenelemente umfasst, im Zielspeicherort als Reaktion auf den Mehrfach-Datenelement-mit-Mehrfach-Datenelement-Vergleichsbefehl, wobei jedes der gepackten Ergebnisdatenelemente einem unterschiedlichen der gepackten Datenelemente von den zweiten gepackten Quelldaten entspricht, wobei jedes der gepackten Ergebnisdatenelemente eine Mehrfach-Bit-Vergleichsmaske umfasst, die ein unterschiedliches Maskenbit für jedes unterschiedliche entsprechende gepackte Datenelement der ersten gepackten Quelldaten umfasst, das mit dem gepackten Datenelement der zweiten Quelle verglichen wurde, das dem gepackten Ergebnisdatenelement entspricht, um ein Ergebnis eines Vergleichs anzugeben.
  14. Verfahren nach Anspruch 13, wobei das Speichern das Speichern eines gepackten Datenergebnisses umfasst, das Ergebnisse des Vergleichens von allen Datenelementen der ersten gepackten Quelldaten mit allen Datenelementen der zweiten gepackten Quelldaten angibt.
  15. Verfahren nach Anspruch 13 oder 14, wobei das Empfangen das Empfangen des Befehls umfasst, der die ersten gepackten Quelldaten angibt, die N gepackte Datenelemente aufweisen, und die zweiten gepackten Quelldaten N gepackte Datenelemente aufweisen, und wobei das Speichern das Speichern des gepackten Datenergebnisses umfasst, das N gepackte N-Bit-Ergebnisdatenelemente umfasst.
  16. Verfahren nach Anspruch 15, wobei das Empfangen das Empfangen des Befehls umfasst, der die ersten gepackten Quelldaten angibt, die sechzehn gepackte 8-Bit-Datenelemente aufweisen, und die zweiten gepackten Quelldaten sechzehn gepackte 8-Bit-Datenelemente aufweisen, und wobei das Speichern das Speichern des gepackten Datenergebnisses umfasst, das sechzehn gepackte 16-Bit-Ergebnisdatenelemente umfasst.
  17. Verfahren nach Anspruch 13, wobei das Empfangen das Empfangen des Befehls, der die ersten gepackten Quelldaten angibt, die N gepackte Datenelemente aufweisen, das Angeben der zweiten gepackten Quelldaten, die N gepackte Datenelemente aufweisen, und das Angeben eines Versatzes umfasst, und wobei das Speichern das Speichern des gepackten Datenergebnisses umfasst, das N/2 gepackte N-Bit-Ergebnisdatenelemente umfasst, wobei ein niedrigstwertiges von den N/2 gepackten N-Bit-Ergebnisdatenelementen einem gepackten Datenelement der zweiten Quelle entspricht, das durch den Versatz angegeben wird.
  18. Verfahren nach Anspruch 13, wobei das Speichern das Speichern von Mehrfach-Bit-Vergleichsmasken umfasst, die die Ergebnisse der Vergleiche von lediglich einer Teilmenge von Datenelementen von den ersten und den zweiten gepackten Quelldaten mit Datenelementen von einem von einem anderen von den ersten und den zweiten gepackten Quelldaten angeben.
  19. Verfahren nach einem der Ansprüche 13 bis 18, wobei das Empfangen das Empfangen des Befehls, der die ersten gepackten Quelldaten angibt, die eine erste biologische Sequenz darstellen, und das Angeben von zweiten gepackten Quelldaten umfasst, die eine zweite biologische Sequenz darstellen.
  20. System zum Verarbeiten von Befehlen, das Folgendes umfasst: eine Zwischenverbindung; einen Prozessor, der mit der Zwischenverbindung gekoppelt ist; und einen dynamischen RAM-Speicher (Dynamic Random Access Memory – DRAM), der mit der Zwischenverbindung gekoppelt ist, wobei der DRAM einen Mehrfachelement-mit-Mehrfachelement-Vergleichsbefehl speichert, wobei der Befehl ausgestaltet ist, um erste gepackte Quelldaten, die ausgestaltet sind, um erste mehrere gepackte Datenelemente zu umfassen, zweite gepackte Quelldaten, die ausgestaltet sind, um zweite mehrere gepackte Datenelemente zu umfassen, und einen Zielspeicherort anzugeben, und der Befehl betriebsfähig ist, um, wenn er durch den Prozessor ausgeführt wird, zu bewirken, dass der Prozessor Operationen durchführt, die Folgendes umfassen: Speichern eines gepackten Datenergebnisses, das ausgestaltet ist, um mehrere gepackte Ergebnisdatenelemente zu umfassen, im Zielspeicherort, wobei jedes der gepackten Ergebnisdatenelemente ausgestaltet ist, um einem unterschiedlichen der gepackten Datenelemente von den zweiten gepackten Quelldaten zu entsprechen, wobei jedes der gepackten Ergebnisdatenelemente ausgestaltet ist, um eine Mehrfach-Bit-Vergleichsmaske zu umfassen, die ausgestaltet ist, um Ergebnisse von Vergleichen von gepackten Mehrfach-Datenelementen der ersten gepackten Quelldaten mit dem gepackten Datenelement der zweiten Quelle anzugeben, das ausgestaltet ist, um dem gepackten Ergebnisdatenelement zu entsprechen.
  21. System nach Anspruch 20, wobei der Befehl betriebsfähig ist, um, wenn er durch den Prozessor ausgeführt wird, zu bewirken, dass der Prozessor das gepackte Datenergebnis speichert, das ausgestaltet ist, um Ergebnisse von Vergleichen von allen gepackten Datenelementen der ersten gepackten Quelldaten mit allen Datenelementen der zweiten gepackten Quelldaten anzugeben.
  22. System nach Anspruch 20 oder 21, wobei der Befehl ausgestaltet ist, um die ersten gepackten Quelldaten, die ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten anzugeben, die ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und wobei die Ausführungseinheit betriebsfähig ist, um, wenn sie durch den Prozessor ausgeführt wird, zu bewirken, dass der Prozessor das gepackte Datenergebnis speichert, das ausgestaltet ist, um N gepackte N-Bit-Ergebnisdatenelemente zu umfassen.
  23. Erzeugnis zum Bereitstellen von Befehlen, das Folgendes umfasst: ein nichtflüchtiges maschinenlesbares Speichermedium, das einen Befehl speichert, wobei der Befehl ausgestaltet ist, um erste gepackte Quelldaten, die ausgestaltet sind, um erste mehrere gepackte Datenelemente aufzuweisen, ein zweites gepacktes Quelldatenelement, das ausgestaltet ist, um zweite mehrere gepackte Datenelemente aufzuweisen, und einen Zielspeicherort anzugeben, und der Befehl betriebsfähig ist, um, wenn er durch eine Maschine ausgeführt wird, zu bewirken, dass die Maschine Operationen durchführt, die Folgendes umfassen: Speichern eines gepackten Datenergebnisses, das ausgestaltet ist, um mehrere gepackte Ergebnisdatenelemente zu umfassen, im Zielspeicherort, wobei jedes der gepackten Ergebnisdatenelemente ausgestaltet ist, um einem unterschiedlichen der gepackten Datenelemente von den zweiten gepackten Quelldaten zu entsprechen, wobei jedes der gepackten Ergebnisdatenelemente ausgestaltet ist, um eine Mehrfach-Bit-Vergleichsmaske zu umfassen, wobei jede Mehrfach-Bit-Vergleichsmaske ausgestaltet ist, um Ergebnisse von Vergleichen von gepackten Mehrfach-Datenelementen der ersten gepackten Quelldaten mit dem gepackten Datenelement der zweiten Quelle anzugeben, das ausgestaltet ist, um dem gepackten Ergebnisdatenelement zu entsprechen, das die Mehrfachbit-Vergleichsmaske aufweist.
  24. Erzeugnis nach Anspruch 23, wobei der Befehl ausgestaltet ist, um die ersten gepackten Quelldaten, die ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und die zweiten gepackten Quelldaten anzugeben, die ausgestaltet sind, um N gepackte Datenelemente aufzuweisen, und wobei der Befehl betriebsfähig ist, um, wenn er durch die Maschine ausgeführt wird, zu bewirken, dass die Maschine das gepackte Datenergebnis speichert, das ausgestaltet ist, um N gepackte N-Bit-Ergebnisdatenelemente zu umfassen.
  25. Erzeugnis nach Anspruch 23 oder 24, wobei das nichtflüchtige maschinenlesbare Speichermedium eines von einem nichtflüchtigen Speicher, DRAM und einer CD-ROM umfasst, und wobei der Befehl betriebsfähig ist, um, wenn er durch die Maschine ausgeführt wird, zu bewirken, dass die Maschine das gepackte Datenergebnis speichert, das ausgestaltet ist, um anzugeben, welche unter allen gepackten Datenelementen der ersten gepackten Quelldaten mit welchem unter allen Datenelementen der zweiten gepackten Quelldaten gleich sind.
DE102014003644.8A 2013-03-14 2014-03-13 Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich Pending DE102014003644A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/828,274 US20140281418A1 (en) 2013-03-14 2013-03-14 Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions
US13/828,274 2013-03-14

Publications (1)

Publication Number Publication Date
DE102014003644A1 true DE102014003644A1 (de) 2014-09-18

Family

ID=50440412

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102014003644.8A Pending DE102014003644A1 (de) 2013-03-14 2014-03-13 Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich

Country Status (6)

Country Link
US (1) US20140281418A1 (de)
JP (1) JP5789319B2 (de)
KR (2) KR101596118B1 (de)
CN (1) CN104049954B (de)
DE (1) DE102014003644A1 (de)
GB (1) GB2512728B (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3001307B1 (de) * 2014-09-25 2019-11-13 Intel Corporation Bit-Shuffle-Prozessoren, Verfahren, Systeme und Anweisungen
KR102321941B1 (ko) * 2014-12-17 2021-11-05 인텔 코포레이션 스핀-루프 점프를 수행하기 위한 장치 및 방법
US9891913B2 (en) * 2014-12-23 2018-02-13 Intel Corporation Method and apparatus for performing conflict detection using vector comparison operations
US10203955B2 (en) 2014-12-31 2019-02-12 Intel Corporation Methods, apparatus, instructions and logic to provide vector packed tuple cross-comparison functionality
KR20160139823A (ko) 2015-05-28 2016-12-07 손규호 두 키 값과 바이트 중첩을 이용한 다중 자료형 데이터 패킹 또는 패킹 복원 방법
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
GB2540944B (en) * 2015-07-31 2018-02-21 Advanced Risc Mach Ltd Vector operand bitsize control
US10503502B2 (en) 2015-09-25 2019-12-10 Intel Corporation Data element rearrangement, processors, methods, systems, and instructions
US10423411B2 (en) * 2015-09-26 2019-09-24 Intel Corporation Data element comparison processors, methods, systems, and instructions
GB2543303B (en) * 2015-10-14 2017-12-27 Advanced Risc Mach Ltd Vector data transfer instruction
WO2018022528A1 (en) * 2016-07-27 2018-02-01 Intel Corporation System and method for multiplexing vector compare
US10838720B2 (en) * 2016-09-23 2020-11-17 Intel Corporation Methods and processors having instructions to determine middle, lowest, or highest values of corresponding elements of three vectors
CN111475203B (zh) * 2020-04-03 2023-03-14 小华半导体有限公司 一种用于处理器的指令读取方法以及相应的处理器

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07262010A (ja) * 1994-03-25 1995-10-13 Hitachi Ltd 演算処理装置および演算処理方法
IL116210A0 (en) * 1994-12-02 1996-01-31 Intel Corp Microprocessor having a compare operation and a method of comparing packed data in a processor
GB9509989D0 (en) * 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Manipulation of data
AU6677896A (en) * 1995-08-31 1997-03-19 Intel Corporation A set of instructions for operating on packed data
JP3058248B2 (ja) * 1995-11-08 2000-07-04 キヤノン株式会社 画像処理制御装置及び画像処理制御方法
JP3735438B2 (ja) * 1997-02-21 2006-01-18 株式会社東芝 Risc計算機
US6230253B1 (en) * 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
JP3652518B2 (ja) * 1998-07-31 2005-05-25 株式会社リコー Simd方式の演算器及び演算処理装置
EP1044407B1 (de) * 1998-10-09 2014-02-26 Koninklijke Philips N.V. Vektordatenprozessor mit geschützten befehlen
JP2001265592A (ja) * 2000-03-17 2001-09-28 Matsushita Electric Ind Co Ltd 情報処理装置
US7441104B2 (en) * 2002-03-30 2008-10-21 Hewlett-Packard Development Company, L.P. Parallel subword instructions with distributed results
JP3857614B2 (ja) * 2002-06-03 2006-12-13 松下電器産業株式会社 プロセッサ
EP1387255B1 (de) * 2002-07-31 2020-04-08 Texas Instruments Incorporated Test- und Übersprungbefel mit mindestens einem Registeroperand
CA2414334C (en) * 2002-12-13 2011-04-12 Enbridge Technology Inc. Excavation system and method
US7730292B2 (en) * 2003-03-31 2010-06-01 Hewlett-Packard Development Company, L.P. Parallel subword instructions for directing results to selected subword locations of data processor result register
WO2004114191A2 (en) * 2003-06-20 2004-12-29 Helix Genomics Pvt. Ltd. Method and apparatus for object based biological information, manipulation and management
US7873716B2 (en) * 2003-06-27 2011-01-18 Oracle International Corporation Method and apparatus for supporting service enablers via service request composition
US7134735B2 (en) * 2003-07-03 2006-11-14 Bbc International, Ltd. Security shelf display case
GB2409066B (en) 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
US7565514B2 (en) * 2006-04-28 2009-07-21 Freescale Semiconductor, Inc. Parallel condition code generation for SIMD operations
US7676647B2 (en) * 2006-08-18 2010-03-09 Qualcomm Incorporated System and method of processing data using scalar/vector instructions
US9069547B2 (en) * 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
US7849482B2 (en) * 2007-07-25 2010-12-07 The Directv Group, Inc. Intuitive electronic program guide display
US8373007B2 (en) * 2008-03-28 2013-02-12 Takeda Pharmaceutical Company Ltd. Stable vinamidinium salt and nitrogen-containing heterocyclic ring synthesis using the same
US8321422B1 (en) * 2009-04-23 2012-11-27 Google Inc. Fast covariance matrix generation
US8549264B2 (en) * 2009-12-22 2013-10-01 Intel Corporation Add instructions to add three source operands
US8605015B2 (en) * 2009-12-23 2013-12-10 Syndiant, Inc. Spatial light modulator with masking-comparators
US8972698B2 (en) * 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions

Also Published As

Publication number Publication date
GB2512728B (en) 2019-01-30
GB201402940D0 (en) 2014-04-02
GB2512728A (en) 2014-10-08
JP2014179076A (ja) 2014-09-25
CN104049954B (zh) 2018-04-13
JP5789319B2 (ja) 2015-10-07
US20140281418A1 (en) 2014-09-18
KR101596118B1 (ko) 2016-02-19
CN104049954A (zh) 2014-09-17
KR20140113545A (ko) 2014-09-24
KR20150091031A (ko) 2015-08-07

Similar Documents

Publication Publication Date Title
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102014003644A1 (de) Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich
DE102015007571B4 (de) Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren, -verfahren, -systeme und -befehle
US11650820B2 (en) Processors, methods, systems, and instructions to generate sequences of integers in numerical order that differ by a constant stride
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE102013021221A1 (de) Befehle und Logik zur Vektorisierung von bedingten Schleifen
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE112017003336T5 (de) Vorrichtungen, verfahren und systeme zum elementsortieren von vektoren
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE102014003795A1 (de) Verfahren und Vorrichtungen für Fusionsbefehle zur Bereitstellung der OR-Test- und AND-Test-Funktionalität auf mehreren Testquellen
DE112011105121T5 (de) Systeme, Vorrichtungen und Verfahren zum Schrittmustersammeln von Datenelementen und Schrittmusterstreuen von Datenelementen
DE112011105666T5 (de) Befehl und Logik zum Bereitstellen von Vektor-Lade-OP/Speicher-OP mit Schritt-Funktionalität
DE112016004348T5 (de) Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE112011105665T5 (de) Befehl und Logik zum Liefern von Vektorladen und -speichern mit Schritt- und Maskierfunktionalität
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
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
DE112017001709T5 (de) Prozessoren, verfahren, systeme, und instruktionen zum partitionieren von quellpackdaten in spuren
DE112013003713T5 (de) Befehlssatz für SKEIN256 SHA3-Algorithmus auf einem 128-Bit-Prozessor

Legal Events

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