DE112016004348T5 - Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle - Google Patents

Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle Download PDF

Info

Publication number
DE112016004348T5
DE112016004348T5 DE112016004348.1T DE112016004348T DE112016004348T5 DE 112016004348 T5 DE112016004348 T5 DE 112016004348T5 DE 112016004348 T DE112016004348 T DE 112016004348T DE 112016004348 T5 DE112016004348 T5 DE 112016004348T5
Authority
DE
Germany
Prior art keywords
packed
result data
operand
data item
source data
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
DE112016004348.1T
Other languages
English (en)
Inventor
Christopher J. Hughes
Jong Soo Park
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 DE112016004348T5 publication Critical patent/DE112016004348T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Ein Prozessor enthält eine Decodiereinheit, um einen Befehl zu decodieren, der einen gepackten Quelldatenoperanden angibt, der Quelldatenelemente aufweist, und einen Zielspeicherort angibt. Jedes der Quelldatenelemente weist einen Quelldatenelementwert und eine Quelldatenelementposition auf. Eine Ausführungseinheit speichert in Reaktion auf den Befehl einen gepackten Ergebnisdatenoperanden, der Ergebnisdatenelemente aufweist, wovon jedes einen Ergebnisdatenelementwert und eine Ergebnisdatenelementposition aufweist. Jeder Ergebnisdatenelementwert ist eines der Folgenden: (1) gleich einer Quelldatenelementposition eines Quelldatenelements am nächsten an einem Ende des Quelloperanden, der einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist; und (2) ein Ersatzwert, wenn kein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist.

Description

  • HINTERGRUND
  • Technisches Gebiet
  • Die hier beschriebenen Ausführungsformen beziehen sich im Allgemeinen auf Prozessoren. Insbesondere beziehen sich die hier beschriebenen Ausführungsformen im Allgemeinen auf Prozessoren, um gepackte Daten zu verarbeiten.
  • Hintergrundinformationen
  • Viele Prozessoren weisen Einzelbefehls-Mehrfachdaten-Architekturen (SIMD-Architekturen) auf. In den SIMD-Architekturen kann ein Befehl für gepackte Daten, ein Vektorbefehl oder ein SIMD-Befehl auf mehrere Datenelemente wirken, die innerhalb eines Registers oder eines Speicherortes als gepackte Daten, Vektordaten oder SIMD-Daten gepackt sind. Repräsentativ können die Bits des Registers logisch in eine Folge von Datenelementen aufgeteilt sein. Ein 128 Bits breites Register für gepackte Daten kann z. B. sechzehn 8 Bit-Datenelemente, acht 16-Bit-Datenelemente, vier 32-Bit-Datenelemente oder zwei 64-Bit-Datenelemente aufweisen. Jedes der Datenelemente kann ein separates einzelnes Stück der Daten (z. B. eine Bildpunktfarbe, eine Komponente einer komplexen Zahl usw.) repräsentieren, auf die separat und/oder unabhängig von den anderen gewirkt werden kann. Der Prozessor kann Parallelausführungs-Hardware aufweisen, um in Reaktion auf den Befehl für gepackte Daten gleichzeitig und/oder parallel auf die Datenelemente zu wirken.
  • Figurenliste
  • Die Erfindung kann unter Bezugnahme auf die folgende Beschreibung und die beigefügten Zeichnungen, die verwendet werden, um die Ausführungsformen zu veranschaulichen, am besten verstanden werden. In den Zeichnungen:
    • 1 ist ein Blockschaltplan einer Ausführungsform eines Prozessors.
    • 2 ist ein Blockschaltplan einer beispielhaften Ausführungsform einer Sammeln-durch-Indizes-zu-Register-Operation.
    • 3 ist ein Blockschaltplan einer Ausführungsform eines Prozessors, der betriebsfähig ist, um eine Ausführungsform eines Streuen-durch-Indizes-zu-Register-Befehls auszuführen.
    • 4 ist ein Blockschaltplan einer beispielhaften Ausführungsform einer Streuen-durch-Indizes-zu-Register-Operation.
    • 5 ist ein Blockschaltplan einer ausführlichen beispielhaften Ausführungsform einer Streuen-durch-Indizes-zu-Register-Ausführungseinheit.
    • 6 ist ein Ablaufplan einer Ausführungsform eines Verfahrens zum Ausführen einer Ausführungsform eines Streuen-durch-Indizes-zu-Register-Befehls.
    • 7 ist ein Blockschaltplan einer Ausführungsform eines Prozessors, der betriebsfähig ist, um eine Ausführungsform eines Datenumordnungsbefehls auszuführen.
    • 8 ist ein Blockschaltplan einer ersten beispielhaften Ausführungsform einer Datenelement-Umordnungsoperation.
    • 9 ist ein Blockschaltplan einer ausführlichen beispielhaften Ausführungsform einer Datenelementumordnungs-Ausführungseinheit.
    • 10 ist ein Blockschaltplan einer zweiten beispielhaften Ausführungsform einer Datenelement-Umordnungsoperation.
    • 11 ist ein Ablaufplan einer beispielhaften Ausführungsform eines Verfahrens in einem Prozessor zum Ausführen einer Streuen-durch-Indizes-zu-Register-Routine.
    • 12A-12C sind Blockschaltpläne, die ein generisches vektorfreundliches Befehlsformat und dessen Befehlsschablonen gemäß den Ausführungsformen der Erfindung veranschaulichen.
    • 13A-B ist ein Blockschaltplan, der ein beispielhaftes spezifisches vektorfreundliches Befehlsformat und ein Opcode-Feld gemäß den Ausführungsformen der Erfindung veranschaulicht.
    • 14A-D ist ein Blockschaltplan, der ein beispielhaftes spezifisches vektorfreundliches Befehlsformat und dessen Felder gemäß den Ausführungsformen der Erfindung veranschaulicht.
    • 15 ist ein Blockschaltplan einer Ausführungsform einer Registerarchitektur.
    • 16A ist ein Blockschaltplan, der eine Ausführungsform einer In-Order-Pipeline und einer Out-of-Order-Ausgabe-/Ausführungspipeline mit Registerumbenennung veranschaulicht.
    • 16B ist ein Blockschaltplan einer Ausführungsform eines Prozessorkerns, der eine Front-End-Einheit enthält, die an eine Ausführungsmaschineneinheit gekoppelt ist, wobei beide an eine Speichereinheit gekoppelt sind.
    • 17A ist ein Blockschaltplan einer Ausführungsform eines einzigen Prozessorkerns zusammen mit seiner Verbindung zu dem Zusammenschaltungsnetz auf dem Die und zusammen mit seiner lokalen Teilmenge des Ebene-2-Caches (L2-Caches).
    • 17B ist ein Blockschaltplan einer Ausführungsform einer erweiterten Ansicht eines Teils des Prozessorkerns nach 17A.
    • 18 ist ein Blockschaltplan einer Ausführungsform eines Prozessors, der mehr als einen Kern aufweisen kann, einen integrierten Speicher-Controller aufweisen kann und eine integrierte Graphik aufweisen kann.
    • 19 ist ein Blockschaltplan einer ersten Ausführungsform einer Computerarchitektur.
    • 20 ist ein Blockschaltplan einer zweiten Ausführungsform einer Computerarchitektur.
    • 21 ist ein Blockschaltplan einer dritten Ausführungsform einer Computerarchitektur.
    • 22 ist ein Blockschaltplan einer vierten Ausführungsform einer Computerarchitektur.
    • 23 ist ein Blockschaltplan der Verwendung eines Software-Befehlsumsetzers, um binäre Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß den Ausführungsformen der Erfindung umzusetzen.
  • AUSFÜHRLICHE BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
  • Hier sind Befehle, Prozessoren, um die Befehle auszuführen, Verfahren, die durch die Prozessoren ausgeführt werden, wenn sie die Befehle verarbeiten oder ausführen, Systeme, die einen oder mehrere Prozessoren umfassen, um die Befehle zu verarbeiten oder auszuführen, und maschinenlesbare Medien, die Befehle speichern, offenbart. In der folgenden Beschreibung sind zahlreiche spezifische Einzelheiten (z. B. spezifische Befehlsoperationen, Mikroarchitekturen, um Befehle zu implementieren, Datenformate, Prozessorkonfigurationen, Folgen von Operationen usw.) dargelegt. Die Ausführungsformen können jedoch ohne diese spezifischen Einzelheiten praktiziert werden. In anderen Fällen sind wohlbekannte Schaltungen, Strukturen und Techniken nicht ausführlich gezeigt worden, um es zu vermeiden, das Verstehen der Beschreibung undeutlich zu machen.
  • 1 ist ein Blockschaltplan einer Ausführungsform eines Prozessors 100. In einigen Ausführungsformen kann der Prozessor ein Universalprozessor (z. B. ein Universalmikroprozessor oder eine Zentraleinheit (CPU) des Typs, der in einem Desktop, einem Laptop oder in anderen Computern verwendet wird) sein. Alternativ kann der Prozessor ein Spezialprozessor sein. Beispiele geeigneter Spezialprozessoren enthalten Netzprozessoren, Kommunikationsprozessoren, kryptographische Prozessoren, Graphikprozessoren, Coprozessoren, eingebettete Prozessoren, digitale Signalprozessoren (DSPs) und Controller (z. B. Mikrocontroller), sind aber nicht auf diese eingeschränkt.
  • Der Prozessor weist eine Befehlssatzarchitektur (ISA) auf. Die ISA repräsentiert einen Teil der Architektur des Prozessors, die auf die Programmierung bezogen ist, und enthält üblicherweise die nativen Befehle, die Architekturregister, die Datentypen, die Adressierungsmodi, die Speicherarchitektur und dergleichen des Prozessors. Die ISA ist von der Mikroarchitektur unterschieden, die im Allgemeinen die speziellen Prozessorentwurfstechniken repräsentiert, die ausgewählt werden, um die ISA zu implementieren. Der Prozessor kann irgendeine der verschiedenen Architekturen der Berechnung mit komplexem Befehlssatz (CISC-Architekturen), der Architekturen der Berechnung mit verringertem Befehlssatz (RISC-Architekturen), der Architekturen mit sehr langen Befehlswörtern (VLIW-Architekturen), der Hybridarchitekturen oder anderer Typen von Architekturen aufweisen oder kann eine Kombination aus verschiedenen Architekturen aufweisen (verschiedene Kerne können z. B. verschiedene Architekturen aufweisen).
  • Die ISA enthält architektonisch sichtbare Register (z. B. eine Architekturregisterdatei) 110. Die Architekturregister können hier außerdem einfach als Register bezeichnet werden. Wenn es nicht anderweitig spezifiziert oder offensichtlich ist, werden die Redewendungen Architekturregister, Registerdatei und Register hier verwendet, um auf Register, die für die Software und/oder einen Programmierer sichtbar sind, und/oder auf die Register, die durch Makrobefehle spezifiziert werden, um Operanden zu identifizieren, zu verweisen. Diese Register werden anderen Nichtarchitekturregistern oder nicht architektonisch sichtbaren Registern in einer gegebenen Mikroarchitektur (z. B. temporäre Register, Umordnungspuffer, Stilllegungsregister usw.) gegenübergestellt. Die Register repräsentieren im Allgemeinen Prozessorspeicherorte auf dem Die. Wie gezeigt ist, können die Register Register 112 für gepackte Daten enthalten, die betriebsfähig sind, um gepackte Daten, Vektordaten oder SIMD-Daten zu speichern. In einigen Ausführungsformen können die Register außerdem Operationsmaskenregister 114 für gepackte Daten enthalten. Die optionalen Operationsmaskenregister für gepackte Daten werden Folgenden weiter erörtert.
  • Der Prozessor weist außerdem einen Befehlssatz 102 auf und unterstützt einen Befehlssatz 102. Der Befehlssatz kann Makrobefehle, Assemblersprachenbefehle oder Befehle auf Maschinenebene repräsentieren, die der Prozessor nativ ausführen kann. Wie gezeigt ist, kann der Prozessor eine Decodiereinheit 116, die betriebsfähig ist, um die Befehle des Befehlssatzes in Mikrobefehle, Mikro-Ops oder andere decodierte Befehle oder Steuersignale zu decodieren, und eine oder mehrere Ausführungseinheiten 118, die betriebsfähig sind, um die decodierten Befehle oder Steuersignale auszuführen oder durchzuführen, aufweisen.
  • In 1 kann der Befehlssatz in einigen Ausführungsformen optional wenigstens einen Sammeln-durch-Indizes-zu-Register-Befehl 104 enthalten. Der Sammeln-durch-Indizes-zu-Register-Befehl kann in der Technik außerdem manchmal als ein Permutationsbefehl und/oder ein Mischbefehl bezeichnet werden. Der Sammeln-durch-Indizes-zu-Register-Befehl kann betriebsfähig sein, um die Indizes zu verwenden, um Quelldatenelemente in einem Ergebnisregister zu sammeln. In einigen Ausführungsformen kann der Sammeln-durch-Indizes-zu-Register-Befehl z. B. einen gepackten Quelldatenoperanden angeben, der Datenelemente aufweist, einen gepackten Quellindizesoperanden angeben, der Indizes aufweist, wobei der Sammeln-durch-Indizes-zu-Register-Befehl, wenn er ausgeführt wird, die Datenelemente des gepackten Quelldatenoperanden mit den Indizes auswählen und die ausgewählten Quelldatenelemente in den entsprechenden Ergebnisdatenelementen speichern kann, die den Indizes an denselben relativen Positionen innerhalb der Operanden entsprechen.
  • In einigen Ausführungsformen kann der Befehlssatz optional wenigstens einen Streuen-durch-Indizes-zu-Register-Befehl 106 enthalten. Der Streuen-durch-Indizes-zu-Register-Befehl kann betriebsfähig sein, um die Indizes zu verwenden, um die Quelldatenelemente zu einem Ergebnisregister zu streuen. In einigen Ausführungsformen kann der Streuen-durch-Indizes-zu-Register-Befehl einen gepackten Quelldatenoperanden angeben, der Datenelemente aufweist, einen gepackten Quellindizesoperanden angeben, der Indizes aufweist, wobei der Streuen-durch-Indizes-zu-Register-Befehl, wenn er ausgeführt wird, das Ergebnisdatenelement eines gepackten Ergebnisdatenoperanden mit den Indizes auswählen und die entsprechenden Datenelemente, die den Indizes an denselben relativen Positionen innerhalb der Operanden entsprechen, in den ausgewählten Ergebnisdatenelementen speichern kann.
  • Wie leicht gesehen werden kann, können der Sammeln-durch-Indizes-zu-Register-Befehl und der Streuen-durch-Indizes-zu-Register-Befehl die Indizes in verschiedenen Weisen verwenden. In einigen Ausführungsformen kann der Befehlssatz optional wenigstens einen Datenelement-Umordnungsbefehl 108 enthalten, der für das Umordnen der Streuindizes in die Sammelindizes und/oder der Sammelindizes in die Streuindizes geeignet ist. Der Datenelement-Umordnungsbefehl kann z. B. betriebsfähig sein, um die Indizes eines gepackten Quellindizesoperanden, die in einem Streumuster angeordnet sind, in die Indizes eines gepackten Ergebnisindizesoperanden, die in einem Sammelmuster angeordnet sind, umzuordnen. Alternativ kann der Datenelement-Umordnungsbefehl betriebsfähig sein, um die Indizes eines gepackten Quellindizesoperanden, die in einem Sammelmuster angeordnet sind, in die Indizes eines gepackten Ergebnisindizesoperanden, die in einem Streumuster angeordnet sind, umzuordnen. Es soll erkannt werden, dass in verschiedenen Ausführungsformen der Befehlssatz so wenig wie wenigstens einen der Befehle 104, 106, 108 oder zwei oder mehr derartige Befehle (z. B. entweder desselben Typs und/oder unterschiedlicher Typen) oder alle derartigen Befehle enthalten kann.
  • Vorteilhaft kann jeder der Befehle 104, 106, 108 entweder allein oder in Kombination dazu tendieren, es zu unterstützen, die Leistung der verschiedenen unterschiedlichen Typen von Algorithmen zu verbessern. Überdies kann das Einbeziehen einer Kombination dieser Befehle vorteilhaft sein. Falls z. B. ein Befehlssatz einen Sammeln-durch-Indizes-zu-Register-Befehl (z. B. einen Permutationsbefehl, einen Mischbefehl usw.) enthält, kann es das Einbeziehen wenigstens eines Streuen-durch-Indizes-zu-Register-Befehls und/oder wenigstens eines Streuindizes-zu-Sammelindizes-Umordnungsbefehls in den Befehlssatz unterstützen, eine Symmetrie bezüglich des Sammeln-durch-Indizes-zu-Register-Befehls zu ergänzen und/oder bereitzustellen. Umgekehrt kann das Nichtvorhandensein wenigstens eines dieser Befehle in dem Befehlssatz dazu tendieren, eine Asymmetrie oder einen Mangel zu zeigen, die bzw. der dazu tendieren kann, es zu verursachen, dass bestimmte Algorithmen aufwendig zu vektorisieren und/oder anderweitig zu implementieren sind.
  • 2 ist ein Blockschaltplan, der eine beispielhafte Ausführungsform einer Sammeln-durch-Indizes-zu-Register-Operation 220 veranschaulicht, die in Reaktion auf eine Ausführungsform eines Sammeln-durch-Indizes-zu-Register-Befehls ausgeführt werden kann. Die Operation kann durch irgendeinen der hier offenbarten verschiedenen Prozessoren ausgeführt werden.
  • Der Befehl kann einen gepackten Quelldatenoperanden 222, der mehrere gepackte Datenelemente aufweist, spezifizieren (z. B. explizit spezifizieren) oder anderweitig angeben (z. B. implizit angeben). In der Veranschaulichung sind die Datenelemente, wenn sie von rechts nach links gelesen werden, als die Datenelemente A, B, C und D bezeichnet. Ohne Einschränkung können die Datenelemente A, B, C und D ganze Zahlen, Festkommaelemente, Gleitkommaelemente oder andere Datentypen repräsentieren.
  • Oben ist für jedes der Datenelemente A, B, C und D eine Datenelement-Positionskennung gezeigt. In der Veranschaulichung befindet sich das niedrigstwertige Datenelement (d. h., das Datenelement A) auf der rechten Seite, während sich das höchstwertige Datenelement (d. h., das Datenelement D) auf der linken Seite befindet. Spezifisch belegt das Datenelement A die niedrigstwertige Datenelementposition null (0), belegt das Datenelement B eine Datenelementposition eins (1) unmittelbar neben der niedrigstwertigen Datenelementposition, belegt das Datenelement C eine Datenelementposition zwei (2) unmittelbar neben der höchstwertigen Datenelementposition und belegt das Datenelement D eine höchstwertige Datenelementposition drei (3).
  • Der Befehl kann außerdem einen gepackten Quellindizesoperanden 224, der mehrere gepackte Indizes aufweist, spezifizieren oder anderweitig angeben. In dem veranschaulichten Beispiel weisen die Indizes die Werte 2, 1, 0 und 2 auf, wenn sie von rechts nach links gelesen werden. Diese Werte sind lediglich Beispiele. Es können stattdessen andere Kombinationen von Werten verwendet werden. In einigen Ausführungsformen können die Indizes ganzzahlige Werte repräsentieren. In einigen Ausführungsformen können die Indizes in einem Sammelmuster oder in einer Sammelanordnung angeordnet sein. Wie im Folgenden weiter erklärt wird, kann in einigen Ausführungsformen der gepackte Quellindizesoperand 224 ein Ergebnis eines Streuindizes-zu-Sammelindizes-Umordnungsbefehls repräsentieren, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist.
  • In der veranschaulichten Ausführungsform gibt es nur vier Datenelemente und nur vier Indizes. In anderen Ausführungsformen können jedoch optional mehr Datenelemente und/oder mehr Indizes verwendet werden. Üblicherweise kann die Anzahl der Datenelemente oder der Indizes in jedem gepackten Quelldatenoperanden gleich der Größe in Bits des gepackten Quelldatenoperanden, geteilt durch die Größe eines einzigen Datenelements öder Index sein. In verschiedenen Ausführungsformen können die Größen oder Breiten jedes der gepackten Quelldatenoperanden 64 Bits, 128 Bits, 256 Bits, 512 Bits oder 1024 Bits sein, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. In verschiedenen Ausführungsformen können die Größen oder Breiten jedes Datenelements oder Index 8 Bits, 16 Bits, 32 Bits oder 64 Bits betragen, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. Andere Größen der gepackten Datenoperanden, der Datenelementgrößen und Indexgrößen sind außerdem geeignet. In verschiedenen Ausführungsformen kann es wenigstens vier, wenigstens acht, wenigstens sechzehn, wenigstens zweiunddreißig, wenigstens vierundsechzig oder wenigstens einhundertachtundzwanzig Datenelemente oder Indizes in jedem der gepackten Quelldatenoperanden geben.
  • Ein gepackter Ergebnisdatenoperand 226, der gesammelte Quelldatenelemente aufweist, kann in Reaktion auf den Sammeln-durch-Indizes-Befehl und/oder die Sammeln-durch-Indizes-Operation (z. B. durch eine Ausführungseinheit) erzeugt und in einem Zielregister für gepackte Daten 221 gespeichert werden. Das Zielregister für gepackte Daten kann durch den Befehl spezifiziert oder anderweitig angegeben werden.
  • In dem Fall eines Sammeln-durch-Indizes-Befehls und/oder einer Sammeln-durch-Indizes-Operation werden die Indizes des gepackten Quellindizesoperanden 224 verwendet, um die Quelldatenelemente des gepackten Quelldatenoperanden 222 auszuwählen oder zu sammeln und um die ausgewählten oder gesammelten Quelldatenelemente in den entsprechenden Ergebnisdatenelementen des gepackten Ergebnisdatenoperanden 226 zu speichern. Ein erster Satz von Pfeilen 227, die die Indizes mit den Quelldatenelementen in dem gepackten Quelldatenoperanden verbinden, zeigt, dass die Indizes verwendet werden, um die Quelldatenelementpositionen in dem gepackten Quelldatenoperanden auszuwählen. In einigen Ausführungsformen kann der Wert jedes Index eine Datenelement-Positionskennung repräsentieren, um eine gegebene Datenelementposition in dem gepackten Quelldatenoperanden zu identifizieren. Wie z. B. durch die Pfeile 227 gezeigt ist, wählt der Indexwert „2“ das Quelldatenelement C an der Datenelementposition zwei (2) aus, indexiert der Indexwert „2“ das Quelldatenelement C an der Datenelementposition zwei (2) oder gibt der Indexwert „2“ das Quelldatenelement C an der Datenelementposition zwei (2) anderweitig an (d. h., sowohl für den niedrigstwertigen Index als auch den höchstwertigen Index), wählt der Indexwert „1“ das Quelldatenelement B an der Datenelementposition eins (1) aus, indexiert der Indexwert „1“ das Quelldatenelement B an der Datenelementposition eins (1) oder gibt der Indexwert „1“ das Quelldatenelement B an der Datenelementposition eins (1) anderweitig an und wählt der Indexwert „0“ das Quelldatenelement A an der Datenelementposition null (0) aus, indexiert der Indexwert „0“ das Quelldatenelement A an der Datenelementposition null (0) oder gibt der Indexwert „0“ das Quelldatenelement A an der Datenelementposition null (0) anderweitig an. In anderen Ausführungsformen kann es mehr Datenelementpositionen (z. B. wenigstens 16, 32, 64 oder 128) geben und kann jeder Index irgendeine der Datenelementpositionen (z. B. irgendeine von 16, 32, 64 oder 128) auswählen.
  • Ein zweiter Satz von Pfeilen 228, die die Indizes mit den Ergebnisdatenelementen in dem gepackten Ergebnisdatenoperanden verbinden, zeigt, dass die Indizes und die Ergebnisdatenelemente an denselben relativen Positionen innerhalb der Operanden einander entsprechen. Diese Übereinstimmung kann impliziert oder inhärent anstatt explizit spezifiziert sein. Der niedrigstwertige Index kann z. B. dem niedrigstwertigen Ergebnisdatenelement implizit entsprechen, der Index unmittelbar neben dem niedrigstwertigen Index kann dem Ergebnisdatenelement unmittelbar neben dem niedrigstwertigen Ergebnisdatenelement implizit entsprechen, der Index unmittelbar neben dem höchstwertigen Index kann dem Ergebnisdatenelement unmittelbar neben dem höchstwertigen Ergebnisdatenelement implizit entsprechen und der höchstwertige Index kann dem höchstwertigen Ergebnisdatenelement implizit entsprechen.
  • Die durch die Indizes ausgewählten oder gesammelten Quelldatenelemente können in den Ergebnisdatenelementen, die den Indizes entsprechen, gespeichert werden. Das durch den niedrigstwertigen Indexwert „2“ ausgewählte Quelldatenelement C kann z. B. in dem entsprechenden niedrigstwertigen Ergebnisdatenelement gespeichert werden, das durch den Indexwert „1“ unmittelbar neben dem niedrigstwertigen Indexwert ausgewählte Quelldatenelement B kann in dem entsprechenden Ergebnisdatenelement unmittelbar neben dem niedrigstwertigen Ergebnisdatenelement gespeichert werden, das durch den Indexwert „0“ unmittelbar neben dem höchstwertigen Indexwert ausgewählte Quelldatenelement A kann in dem entsprechenden Ergebnisdatenelement unmittelbar neben dem höchstwertigen Ergebnisdatenelement gespeichert werden und das durch den höchstwertigen Indexwert „2“ ausgewählte Quelldatenelement C kann in dem entsprechenden höchstwertigen Ergebnisdatenelement gespeichert werden.
  • Entsprechend werden in dem Fall eines Sammeln-durch-Indizes-zu-Register-Befehl und/oder einer Sammeln-durch-Indizes-zu-Register-Operation die Indizes verwendet, um die Quelldatenelemente auszuwählen oder zu sammeln und um die ausgewählten oder gesammelten Quelldatenelemente in den implizit entsprechenden Ergebnisdatenelementen an denselben relativen Positionen bei den Indizes zu speichern. Wie in der Wolke 230 im Allgemeinen gezeigt ist, kann ein i-ter positionierte Index ein Quelldatenelement auswählen oder anderweitig angeben, das in einem entsprechenden i-ten positionierten Ergebnisdatenelement gespeichert werden soll.
  • 3 ist ein Blockschaltplan einer Ausführungsform eines Prozessors 300, der betriebsfähig ist, um eine Ausführungsform eines Streuen-durch-Indizes-zu-Register-Befehls 306 auszuführen. In den Ausführungsformen kann der Prozessor 300 der Prozessor 100 nach 1 sein oder in dem Prozessor 100 nach 1 enthalten sein. Die hier für den Prozessor 100 beschriebenen Komponenten, Merkmale und spezifischen optionalen Einzelheiten gelten außerdem optional für den Prozessor 300. Alternativ kann der Prozessor 300 ein ähnlicher Prozessor wie der oder ein anderer Prozessor als der Prozessor 100 sein oder in einem ähnlichen Prozessor wie dem oder einem anderen Prozessor als den Prozessor 100 enthalten sein. Überdies kann der Prozessor 100 entweder ein ähnlicher Prozessor wie der oder ein anderer Prozessor als der Prozessor 300 sein oder einen ähnlichen Prozessor wie den oder einen anderen Prozessor als den Prozessor 300 enthalten.
  • Während des Betriebs kann der Prozessor 300 einen Streuen-durch-Indizes-zu-Register-Befehl 306 empfangen. Der Befehl kann z. B. von einem Speicher über einen Bus oder eine andere Zusammenschaltung empfangen werden. Der Befehl kann einen Makrobefehl, einen Assemblersprachenbefehl, einen Maschinencodebefehl oder einen anderen Befehl oder ein Steuersignal eines Befehlssatzes des Prozessors repräsentieren. Der Streuen-durch-Indizes-zu-Register-Befehl kann in einigen Ausführungsformen explizit (z. B. durch ein oder mehrere Felder oder einen Satz von Bits) einen gepackten Quelldatenoperanden 332 spezifizieren oder anderweitig angeben (z. B. implizit angeben), der mehrere gepackte Datenelemente aufweist, kann einen gepackten Quellindizesoperanden 334 spezifizieren oder anderweitig angeben; der mehrere gepackte Indizes aufweist, und kann ein gepacktes Zieldatenregister 335 spezifizieren oder anderweitig angeben, wo ein gepackter Ergebnisdatenoperand 336 gespeichert werden soll. Als ein Beispiel kann der Befehl Quell- und/oder Zieloperanden-Spezifikationsfelder aufweisen, um Register für gepackte Daten oder andere Speicherorte für die Quell- und/oder Zieloperanden zu spezifizieren. Alternativ können einer oder mehrere dieser Operanden optional für den Befehl implizit sein (z. B. für einen Opcode des Befehls implizit sein). In einem Aspekt können die Daten der Quelloperanden von einer Eingabe-/Ausgabevorrichtung (z. B. einer Netzschnittstelle, einer Videoeingabevorrichtung, einer drahtlosen Schnittstelle, einer Audioeingabevorrichtung usw.) empfangen worden sein.
  • In 3 enthält der Prozessor eine Decodiereinheit 316. Die Decodiereinheit wird außerdem manchmal als ein Decodierer bezeichnet. Die Decodiereinheit kann den Streuen-durch-Indizes-zu-Register-Befehl 306 empfangen und decodieren. Die Decodiereinheit kann einen oder mehrere Befehle auf einer relativ tieferen Ebene oder ein oder mehrere Steuersignale (z. B. einen oder mehrere Mikrobefehle, eine oder mehrere Mikrooperationen, eine oder mehrere Mikrocode-Einsprungstellen, einen oder mehrere decodierte Befehle oder ein oder mehrere Steuersignale usw.) ausgeben, die den Streuen-durch-Indizes-zu-Register-Befehl auf einer relativ höheren Ebene widerspiegeln, repräsentieren und/oder von diesem abgeleitet sind. In einigen Ausführungsformen kann die Decodiereinheit eine oder mehrere Eingangsstrukturen (z. B. einen Anschluss (Anschlüsse), eine Zusammenschaltung(en), eine Schnittstelle), um den Streuen-durch-Indizes-zu-Register-Befehl zu empfangen, eine Befehlserkennungs- und -decodierlogik, die damit gekoppelt ist, um den Streuen-durch-Indizes-zu-Register-Befehl zu erkennen und zu decodieren, und ein oder mehrere Ausgangsstrukturen (z. B. einen Anschluss (Anschlüsse), eine Zusammenschaltung(en), eine Schnittstelle), die damit gekoppelt sind, um den (die) Befehl(e) auf einer tieferen Ebene oder das (die) Steuersignal(e) auszugeben, enthalten. Die Decodiereinheit kann unter Verwendung verschiedener unterschiedlicher Mechanismen, einschließlich Mikrocode-Festwertspeichern (Mikrocode-ROMs), Nachschlagtabellen, Hardware-Implementierungen, programmierbarer Logikanordnungen (PLAs) und anderer Mechanismen, die geeignet sind, um Decodiereinheiten zu implementieren, aber nicht eingeschränkt auf diese, implementiert sein.
  • In einigen Ausführungsformen kann anstelle des Streuen-durch-Indizes-zu-Register-Befehls, der der Decodiereinheit direkt bereitgestellt wird, ein Befehlsemulator, -übersetzer, -morpher, -interpreter oder ein anderes Befehlsumsetzungsmodul optional verwendet werden. Verschiedene Typen von Befehlsumsetzungsmodulen können in Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. In einigen Ausführungsformen kann sich das Befehlsumsetzungsmodul außerhalb des Prozessors befinden, wie z. B. auf einem separaten Die und/oder in einem Speicher (z. B. als ein statisches, dynamisches oder Laufzeit-Emulationsmodul). Beispielhaft kann das Befehlsumsetzungsmodul den Streuen-durch-Indizes-zu-Register-Befehl empfangen, der von einem ersten Befehlssatz sein kann, wobei es den Streuen-durch-Indizes-zu-Register-Befehl emulieren, übersetzen, morphen, interpretieren oder anderweitig in einen oder mehrere entsprechende Zwischenbefehle oder Steuersignale umsetzen kann, die von einem zweiten, anderen Befehlssatz sein können. Der eine oder die mehreren Zwischenbefehle oder das eine oder die mehreren Steuersignale des zweiten Befehlssatzes können einer Decodiereinheit (z. B. der Decodiereinheit 316) bereitgestellt werden, die sie dann in einen oder mehrere Befehle auf einer tieferen Ebene oder ein oder mehrere Steuersignale decodieren kann, die durch die native Hardware des Prozessors (z. B. eine oder mehrere Ausführungseinheiten) ausführbar sind.
  • In 3 enthält der Prozessor 300 außerdem einen Satz von Registern 310 für gepackte Daten. Jedes der Register für gepackte Daten kann einen Speicherort auf dem Die repräsentieren, der betriebsfähig ist, um gepackte Daten, Vektordaten oder Einzelbefehls-Mehrfachdaten-Daten (SIMD-Daten) zu speichern. Die Register für gepackte Daten können architektonisch sichtbare oder Architekturregister repräsentieren, die für die Software und/oder einen Programmierer sichtbar sind, und/oder sind die Register, die durch die Befehle des Befehlssatzes des Prozessors angegeben werden, um die Operanden zu identifizieren. Diese Architekturregister werden anderen Nicht-Architekturregistern in einer gegebenen Mikroarchitektur (z. B. den temporären Registern, den Umordnungspuffern, den Stilllegungsregistern usw.) gegenübergestellt. Die Register für gepackte Daten können in verschiedenen Weisen in verschiedenen Mikroarchitekturen implementiert sein und sind nicht auf einen speziellen Entwurfstyp eingeschränkt. Beispiele geeigneter Typen der Register enthalten dedizierte physische Register, dynamisch zugewiesene physische Register unter Verwendung der Registerumbenennung und Kombinationen daraus, sind aber nicht auf diese eingeschränkt.
  • Wie gezeigt ist, kann in einigen Ausführungsformen der gepackte Quelldatenoperand 332 optional in einem ersten Register für gepackte Daten gespeichert sein, kann der gepackte Quellindizesoperand 334 optional in einem zweiten Register für gepackte Daten gespeichert sein und kann das Zielregister 335 für gepackte Daten optional ein drittes noch anderes Register für gepackte Daten sein. Alternativ können Datenspeicherorte oder andere Speicherorte optional für einen oder mehrere Quelloperanden verwendet werden. Überdies kann in einigen Ausführungsformen ein für einen Quelloperanden verwendetes Register für gepackte Daten optional als ein Ziel für den gepackten Ergebnisdatenoperanden wiederverwendet werden. In einem Aspekt kann ein Quell-/Zielregister einmal explizit spezifiziert werden und implizit oder impliziert verstanden werden, um sowohl für einen gepackten Quelloperanden als auch als das Ziel, um den gepackten Ergebnisdatenoperand zu speichern, verwendet zu werden.
  • In 3 ist die Ausführungseinheit 318 mit der Decodiereinheit 316 gekoppelt und mit den Registern 310 für gepackte Daten gekoppelt. Die Ausführungseinheit kann den einen bzw. das eine oder die mehreren decodierten oder anderweitig umgesetzten Befehle oder Steuersignale empfangen, die den Streuen-durch-Indizes-zu-Register-Befehl repräsentieren und/oder von dem Streuen-durch-Indizes-zu-Register-Befehl abgeleitet sind. Die Ausführungseinheit kann außerdem den gepackten Quelldatenoperanden 332 und den gepackten Quellindizesoperanden 334 empfangen. Die Ausführungseinheit ist in Reaktion auf den und/oder im Ergebnis des Streuen-durch-Indizes-zu-Register-Befehls (z. B. in Reaktion auf einen oder mehrere Befehle oder ein oder mehrere Steuersignale, die aus dem Befehl decodiert worden sind) betriebsfähig, um den gepackten Ergebnisdatenoperanden 336 in dem Zielregister 335 für gepackte Daten, das durch den Befehl angegebenen wird, zu speichern. Der gepackte Ergebnisdatenoperand kann mehrere (z. B. wenigstens vier, acht, sechzehn, zweiunddreißig oder optional mehr) Ergebnisdatenelemente enthalten.
  • In einigen Ausführungsformen kann jedes Ergebnisdatenelement einen Wert von einem der Quelldatenelemente des gepackten Quelldatenoperanden aufweisen, dessen entsprechender Index (der sich z. B. an derselben relativen Position in dem gepackten Quellindizesoperanden befindet) die Datenelementposition des Ergebnisdatenelements in dem gepackten Ergebnisdatenoperanden angibt. In einigen Ausführungsformen können nicht alle der Quelldatenelementwerte in dem gepackten Ergebnisdatenoperanden (z. B. in dem Fall doppelter Indizes) gespeichert werden. Falls in einigen Ausführungsformen keiner der Indizes eine gegebene Ergebnisdatenelementposition angibt, kann entweder ein Nullwert oder ein verschmolzener Wert (z. B. ein Wert, der sich anfangs in dem Register für gepackte Daten vor der Ausführung des Befehls befindet) optional an der gegebenen Ergebnisdatenelementposition gespeichert werden. In einigen Ausführungsformen kann das Ergebnis irgendeines von jenen sein, die in den 4-5 gezeigt und beschrieben sind, einschließlich irgendwelcher der dafür erwähnten Variationen, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist.
  • Die Ausführungseinheit und/oder der Prozessor können eine spezifische oder spezielle Logik (z. B. Transistoren, eine integrierte Schaltungsanordnung oder andere Hardware, die potentiell mit Firmware (z. B. in einem nichtflüchtigen Speicher gespeicherten Anweisungen) und/oder Software kombiniert ist) enthalten, die betriebsfähig ist, um den Streuen-durch-Indizes-zu-Register-Befehl auszuführen und/oder das Ergebnis in Reaktion auf den und/oder im Ergebnis des Streuen-durch-Indizes-zu-Register-Befehls (z. B. in Reaktion auf einen oder mehrere Befehle oder ein oder mehrere Steuersignale, die aus dem Streuen-durch-Indizes-zu-Register-Befehl decodiert worden sind) zu speichern. In einigen Ausführungsformen kann die Ausführungseinheit eine oder mehrere Eingangsstrukturen (z. B. einen Anschluss (Anschlüsse), eine Zusammenschaltung(en), eine Schnittstelle), um die Quelloperanden zu empfangen, eine Schaltungsanordnung oder eine Logik, die damit gekoppelt ist, um die Quelloperanden zu empfangen und zu verarbeiten und um den Ergebnisoperanden zu erzeugen, und eine oder mehrere Ausgangsstrukturen (z. B. einen Anschluss (Anschlüsse), eine Zusammenschaltung(en), eine Schnittstelle), die damit gekoppelt sind, um den Ergebnisoperanden auszugeben, enthalten. In einigen Ausführungsformen kann die Ausführungseinheit die Schaltungsanordnung oder Logik, die in 5 gezeigt und beschrieben ist, enthalten, die ein veranschaulichendes Beispiel geeigneter mikroarchitektonischer Anordnungen ist, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist.
  • Vorteilhaft können die Streuen-durch-Indizes-zu-Register-Operationen optional ausgeführt werden. Beispielhaft tendieren derartige Operationen oft dazu, bei Sortieralgorithmen, Vereinigungsmengenalgorithmen, Algorithmen der dünnbesetzten linearen Algebra, den Algorithmen des maschinellen Lernens und ähnlichen Algorithmen nützlich zu sein, obwohl die hier offenbarten Befehle Universalbefehle sind, die für andere allgemeine Zwecke verwendet werden können. In einem Aspekt können derartige Befehle es unterstützen, einen vorhandenen Sammeln-durch-Indizes-zu-Register-Befehl und/oder eine vorhandene Sammeln-durch-Indizes-zu-Register-Mikroarchitektur zu ergänzen, und es dadurch unterstützen, eine Symmetrie bereitzustellen, die dazu tendieren kann, es zu verursachen, dass einige Algorithmen leichter zu implementieren und/oder zu vektorisieren sind. Eine weitere mögliche Weise, um eine Streuen-durch-Indizes-zu-Register-Operation auszuführen, ist die Verwendung einer Folge von Befehlen. Stattdessen kann die Verwendung eines Architekturbefehls jedoch eine Hardware-Beschleunigung bereitstellen, um eine bessere Leistung zu erreichen, als normalerweise mit einer Software-Implementierung möglich sein würde.
  • Um es zu vermeiden, die Beschreibung undeutlich zu machen, ist ein relativ einfacher Prozessor 300 gezeigt und beschrieben worden. Der Prozessor kann jedoch optional andere Prozessorkomponenten enthalten. Verschiedene unterschiedliche Ausführungsformen können z. B. verschiedene unterschiedliche Kombinationen und Konfigurationen der Komponenten enthalten, die in irgendeiner der 12-14 gezeigt und beschrieben sind. Alle der Komponenten des Prozessors, die miteinander wechselwirken, können miteinander gekoppelt sein, um ihnen zu ermöglichen, zu arbeiten, wie es beabsichtigt ist.
  • 4 ist ein Blockschaltplan, der eine beispielhafte Ausführungsform einer Streuen-durch-Indizes-zu-Register-Operation 438 veranschaulicht, die in Reaktion auf eine Ausführungsform eines Streuen-durch-Indizes-zu-Register-Befehls (z. B. des Befehls 106 oder des Befehls 306) ausgeführt werden kann. Die Operation kann durch irgendeinen der hier offenbarten verschiedenen Prozessoren ausgeführt werden.
  • Der Befehl kann einen gepackten Quelldatenoperanden 432, der mehrere gepackte Datenelemente aufweist, spezifizieren (z. B. explizit spezifizieren) oder anderweitig angeben (z. B. implizit angeben). In der Veranschaulichung sind die Datenelemente, wenn sie von rechts nach links gelesen werden, als die Datenelemente A, B, C und D bezeichnet. Ohne Einschränkung können die Datenelemente A, B, C und D ganze Zahlen, Festkommaelemente, Gleitkommaelemente oder andere Datentypen repräsentieren. In der Veranschaulichung ist die niedrigstwertige Position oder Position tiefster Ordnung auf der rechten Seite gezeigt, während die höchstwertige Position oder Position höchster Ordnung auf der linken Seite gezeigt.
  • Der Befehl kann einen gepackten Quellindizesoperanden 432, der mehrere gepackte Indizes aufweist, spezifizieren oder anderweitig angeben. In dem veranschaulichten Beispiel weisen die Indizes die Werte 2, 1, 0 und 2 auf, wenn sie von rechts nach links gelesen werden. Diese Werte sind lediglich Beispiele. Es können stattdessen andere Kombinationen von Werten verwendet werden. In einigen Ausführungsformen können die Indizes ganzzahlige Werte repräsentieren. In einigen Ausführungsformen können die Indizes in einem Streumuster oder in einer Streuanordnung (z. B. gemäß einem Algorithmus oder Software, der bzw. die die Indizes verwendet) angeordnet sein.
  • In der veranschaulichten Ausführungsform gibt es nur vier Datenelemente und nur vier Indizes. In anderen Ausführungsformen können jedoch mehr Datenelemente und/oder mehr Indizes optional verwendet werden. Üblicherweise kann die Anzahl der Datenelemente oder der Indizes in jedem gepackten Quelldatenoperanden gleich der Größe in Bits des gepackten Quelldatenoperanden, geteilt durch die Größe in Bits eines einzigen Datenelements oder Index sein. In verschiedenen Ausführungsformen können die Größen oder Breiten jedes der gepackten Quelldatenoperanden 64 Bits, 128 Bits, 256 Bits, 512 Bits oder 1024 Bits sein, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. In verschiedenen Ausführungsformen können die Größen oder Breiten jedes Datenelements oder Index 8 Bits, 16 Bits, 32 Bits oder 64 Bits betragen, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. Andere Größen der gepackten Datenoperanden, Datenelementgrößen und Indexgrößen sind außerdem geeignet. In verschiedenen Ausführungsformen kann es wenigstens vier, wenigstens acht, wenigstens sechzehn, wenigstens zweiunddreißig, wenigstens vierundsechzig oder wenigstens einhundertachtundzwanzig Datenelemente oder Indizes in jedem der gepackten Quelldatenoperanden geben.
  • Ein gepackter Ergebnisdatenoperand 436, der gestreute Quelldatenelemente aufweist, kann in Reaktion auf den Streuen-durch-Indizes-Befehl und/oder die Streuen-durch-Indizes-Operation (z. B. durch eine Ausführungseinheit 418) erzeugt und in einem Zielregister 212 für gepackte Daten gespeichert werden. Die gepackten Quelldatenoperanden- und -indexoperanden können in die Ausführungseinheit eingegeben werden, wobei die Ausführungseinheit in Reaktion auf den Befehl/die Operation den gepackten Ergebnisdatenoperanden zu dem Zielregister für gepackte Daten ausgeben kann, was durch den Befehl spezifiziert oder anderweitig angegeben werden kann.
  • In dem Fall eines Streuen-durch-Indizes-Befehls und/oder einer Streuen-durch-Indizes-Operation werden die Indizes des gepackten Quelldatenoperanden 434 verwendet, um die Ergebnisdatenelemente in dem gepackten Ergebnisdatenoperanden auszuwählen, wo entsprechende Quelldatenelemente des gepackten Quelldatenoperanden gestreut oder gespeichert werden sollen. Ein erster Satz von Pfeilen 439, die die Indizes mit den Quelldatenelementen in dem gepackten Quelldatenoperanden verbinden, zeigt, dass die Indizes und die Quelldatenelemente an denselben relativen Positionen innerhalb der Operanden einander entsprechen. Der niedrigstwertige Index (in diesem Fall der Index ganz rechts) kann z. B. implizit dem niedrigstwertigen Datenelement A (in diesem Fall den Datenelement A ganz rechts) entsprechen, der Index unmittelbar neben dem niedrigstwertigen Index kann implizit dem Quelldatenelement B unmittelbar neben dem niedrigstwertigen Quelldatenelement entsprechen, der Index unmittelbar neben dem höchstwertigen Index kann implizit dem Quelldatenelement C unmittelbar neben dem höchstwertigen Quelldatenelement entsprechen und der höchstwertige Index (in diesem Fall der Index ganz links) kann implizit dem höchstwertigen Quelldatenelement D (in diesem Fall dem Quelldatenelement D ganz links) entsprechen. Diese Entsprechung kann implizit oder inhärent anstatt explizit spezifiziert sein. In einigen Ausführungsformen kann die implizite oder inhärente Entsprechung für den Befehl fest sein (z. B. für einen Opcode des Befehls fest sein), anstatt flexibel oder explizit durch den Befehl spezifiziert zu sein. Repräsentativ kann eine derartige implizite oder inhärente Entsprechung es unterstützen, es zu vermeiden, eine zusätzliche explizite Steuerung erzeugen und verwenden zu müssen.
  • Ein zweiter Satz von Pfeilen 440, die die Indizes mit den Ergebnisdatenelementen in dem gepackten Ergebnisdatenoperanden verbinden, zeigt, dass die Indizes verwendet werden, um die Ergebnisdatenelemente (z. B. die Ergebnisdatenelementpositionen) in dem gepackten Ergebnisdatenoperanden auszuwählen. In einigen Ausführungsformen kann der Wert jedes Index eine Datenelement-Positionskennung repräsentieren, um eine gegebene Ergebnisdatenelementposition in dem gepackten Ergebnisdatenoperanden zu identifizieren. In der Veranschaulichung befindet sich das niedrigstwertige Ergebnisdatenelement auf der rechten Seite, während sich das höchstwertige Ergebnisdatenelement auf der linken Seite befindet. Jedes der oben gezeigten Ergebnisdatenelemente ist eine Datenelement-Positionskennung (z. B. die Datenelement-Positionskennungen 0, 1, 2 und 3, wenn sie von rechts nach links gelesen werden).
  • In diesem Beispiel wählt der niedrigstwertige Indexwert (in diesem Fall der Indexwert ganz rechts) „2“ das Ergebnisdatenelement an der Datenelementposition zwei (2) aus, indexiert der niedrigstwertige Indexwert (in diesem Fall der Indexwert ganz rechts) „2“ das Ergebnisdatenelement an der Datenelementposition zwei (2) oder gibt der niedrigstwertige Indexwert (in diesem Fall der Indexwert ganz rechts) „2“ das Ergebnisdatenelement an der Datenelementposition zwei (2) anderweitig an, wobei der Indexwert „1“ unmittelbar neben den niedrigstwertigen Indexwert (in diesem Fall der Indexwert „1“ unmittelbar neben dem Indexwert ganz rechts) das Ergebnisdatenelement an der Datenelementposition eins (1) angibt. Weitergehend gibt der Indexwert „0“ unmittelbar neben dem höchstwertigen Indexwert (in diesem Fall der Indexwert „0“ unmittelbar neben den Indexwert ganz links) das Ergebnisdatenelement an der Datenelementposition null (0) an, während der höchstwertige Indexwert (in diesem Fall der Indexwert ganz links) „2“ das Ergebnisdatenelement an der Datenelementposition zwei (2) angibt.
  • Die Quelldatenelemente, die den Indizes entsprechen, (z. B. an derselben relativen Positionen wie die Indizes innerhalb der Operanden) können zu den Ergebnisdatenelementen, die durch die Indizes ausgewählt oder angegeben werden, gestreut oder dort gespeichert werden. Das Quelldatenelement A, das dem niedrigstwertigen Indexwert (in diesem Fall dem Indexwert ganz rechts) „2“ entspricht, kann (mit Ausnahme des Falls doppelter Indizes, wie im Folgenden weiter erörtert wird) in dem ausgewählten Ergebnisdatenelement an der Datenelementposition zwei (2) gespeichert werden, das Quelldatenelement B, das dem Indexwert „1“ unmittelbar neben dem niedrigstwertigen Indexwert (in diesem Fall dem Indexwert „1“ unmittelbar neben dem Indexwert ganz rechts) entspricht, kann in dem ausgewählten Ergebnisdatenelement an der Datenelementposition eins (1) gespeichert werden, das Quelldatenelement C, das dem Indexwert „0“ unmittelbar neben dem höchstwertigen Indexwert (in diesem Fall dem Indexwert „0“ unmittelbar neben dem Indexwert ganz links) entspricht, kann in dem ausgewählten Ergebnisdatenelement an der Datenelementposition null (0) gespeichert werden und das Quelldatenelement D, das dem höchstwertigen Indexwert (in diesem Fall dem Indexwert ganz links) „2“ entspricht, kann in dem ausgewählten Ergebnisdatenelement bei der Datenelementposition zwei (2) gespeichert werden. Wie gezeigt ist, kann der gepackte Ergebnisdatenoperand die Datenelemente C, B, D und * speichern, wenn er von rechts nach links gelesen wird.
  • Entsprechend werden in dem Fall eines Streuen-durch-Indizes-zu-Register-Befehls und/oder einer Streuen-durch-Indizes-zu-Register-Operation die Indizes verwendet, um die Ergebnisdatenelemente (z. B. die Ergebnisdatenelementpositionen) auszuwählen oder zu identifizieren, wobei die implizit entsprechenden Quelldatenelemente an denselben relativen Positionen mit den Operanden in den durch die Indizes angegebenen Ergebnisdatenelementen gespeichert werden sollen. Wie im Allgemeinen in der Wolke 442 angegeben ist, kann in dem Fall eines Streuen-durch-Indizes-zu-Register-Befehls und/oder einer Streuen-durch-Indizes-zu-Register-Operation ein i-ter positionierter Index ein Ergebnisdatenelement auswählen oder anderweitig angeben, das ein entsprechendes i-tes positioniertes Quelldatenelement speichern soll. Die Indizes des Registerstreubefehls können spezifizieren, wo in dem gepackten Zieldatenregister die entsprechenden Quelldatenelemente zu schieben oder zu streuen sind. Entsprechend ist der Streuen-durch-Indizes-zu-Register-Befehl und/oder die Streuen-durch-Indizes-zu-Register-Operation insofern anders als der Sammeln-durch-Indizes-zu-Register-Befehl und/oder die Sammeln-durch-Indizes-zu-Register-Operation, als die Indizes implizit dem gepackten Quelldatenoperanden anstatt dem gepackten Ergebnisdatenoperanden entsprechen und als die Indizes Positionen in dem gepackten Ergebnisdatenoperanden anstatt in dem gepackten Quelldatenoperanden auswählen.
  • In einigen Ausführungsformen kann es einen oder mehrere Sätze doppelter Indizes geben. Die doppelten Indizes jedes Satzes können den gleichen Wert aufweisen oder wenigstens dasselbe Ergebnisdatenelement angeben (falls z. B. bestimmte höherwertige Bits der Indizes, die nicht für die Auswahl der Ergebnisdatenelemente verwendet werden, ignoriert werden). Wie in der veranschaulichten beispielhaften Ausführungsform gezeigt ist, weisen z. B. sowohl der niedrigstwertige Index (in diesem Fall der Index ganz rechts) als auch der höchstwertige Index (in diesem Fall der Index ganz links) den gleichen Wert „2“ auf. Aufgrund der Indizes, die in den Streuen-durch-Indizes-zu-Register-Befehlen und/oder -Operationen den Ergebnisdatenelementen flexibel entsprechen, kann dann, wenn es doppelte Indizes mit dem gleichen Wert gibt, jeder der doppelten Indizes die gleiche Ergebnisdatenelementposition für ihr entsprechendes Quelldatenelement angeben. In der veranschaulichten Ausführungsform können z. B. beide Indizes, die einen Wert „2“ aufweisen, dasselbe Ergebnisdatenelement an der Datenelementposition zwei (2) auswählen, um ihre entsprechenden Quelldatenelemente zu speichern. Im Allgemeinen kann jedoch nur eines der Quelldatenelemente in dem angegebenen Ergebnisdatenelement gespeichert werden. In einigen Ausführungsformen kann eine konsistente Strategie verwendet werden, um zu entscheiden, welcher doppelte Index verwendet wird, um ein angegebenes Ergebnisdatenelement zu speichern. In einigen Ausführungsformen kann z. B. der höchstwertige doppelte Index eines gegebenen Wertes optional ausgewählt werden, um sein entsprechendes Quelldatenelement in das angegebene Ergebnisdatenelement zu schreiben, das durch den gegebenen Wert angegeben wird. Vorteilhaft kann eine derartige Konvention zu der ähnlich sein, die durch andere Befehle verwendet wird, wie z. B. durch die Streuen-zu-Speicher-Befehle, die Vektorkonfliktbefehle und dergleichen, wobei sie deshalb potentiell mit den Algorithmen kompatibler sein kann, die derartige Befehle verwenden. Alternativ kann der niedrigstwertige doppelte Index eines gegebenen Wertes optional auf Wunsch ausgewählt werden, um sein entsprechendes Quelldatenelement in das angegebene Ergebnisdatenelement, das durch den gegebenen Wert angegeben wird, zu schreiben.
  • Zusätzlich kann das Vorhandensein doppelter Indizes dazu tendieren, Streu-Leerstellen oder Streu-„Löcher“ zu erzeugen, die Ergebnisdatenelemente repräsentieren können, in denen keine Quelldatenelemente gespeichert sind. In der Annahme, dass z. B. die Anzahl der Eingangs- und Ausgangselemente übereinstimmt, kann jeder doppelte Index zu einer entsprechenden Streu-Leerstelle führen. In dem veranschaulichten Beispiel weist das höchstwertige Ergebnisdatenelement (in diesem Fall das Ergebnisdatenelement ganz links) an der Datenelementposition drei (3) einen Stern (*) auf, um eine derartige Streu-Leerstelle oder ein derartiges Streu-Loch anzugeben. Wie gezeigt ist, zeigt keiner der Indizes, die einen Wert drei (3) aufweisen, und entsprechend keiner der Pfeile 440 auf das Ergebnisdatenelement an der Datenelementposition drei (3). Mit anderen Worten, keiner der Indizes kann versuchen, Quelldatenelemente zu derartigen Streu-Leerstellen oder -Löchern zu streuen. In einigen Ausführungsformen kann der Streuen-durch-Indizes-zu-Register-Befehl einen Typ eines Wertes angeben, der in derartigen Streu-Leerstellen oder -Löchern gespeichert werden soll. In einigen Ausführungsformen können derartige Streu-Leerstellen in Reaktion auf das Ausführen eines Streuen-durch-Indizes-zu-Register-Befehls z. B. optional auf null gesetzt werden (z. B. alle Bits der Ergebnisdatenelemente auf eine binäre null gelöscht werden). Alternativ können in anderen Ausführungsformen die vorhandenen Werte an denselben Datenelementpositionen in demselben Register für gepackte Daten in Reaktion auf das Ausführen eines Streuen-durch-Indizes-zu-Register-Befehls optional an der Stelle der Streu-Leerstellen bewahrt oder beibehalten werden. Die Werte der Datenelemente anfangs in dem Register für gepackte Daten, bevor der Befehl ausgeführt wird, können z. B. in die Positionen der Streu-Leerstellen in dem gepackten Ergebnisdatenoperanden verschmolzen werden.
  • Es werden unterschiedliche Weisen des Implementierens der Streuen-durch-Indizes-zu-Register-Befehle in Betracht gezogen. In einigen Ausführungsformen können derartige Befehle durch eine Logik implementiert sein, die betriebsfähig ist, um: (a) den höchstwertige Index in jedem von irgendwelchen Sätzen doppelter Indizes zu identifizieren; (b) die entsprechenden Quelldatenelemente für die identifizierten höchstwertigen Indizes in den durch die höchstwertigen doppelten Indizes identifizierten Ergebnisdatenelementen zu speichern; und (c) die entsprechenden Quelldatenelemente für irgendwelche nicht doppelten Indizes in den durch jene nicht doppelten Indizes identifizierten Ergebnisdatenelementen zu speichern; und (d) in irgendwelchen Streu-Leerstellen Nullen oder verschmolzene Werte zu speichern. Dies kann in verschiedenen Ausführungsformen in verschiedenen Weisen ausgeführt werden. Um bestimmte Konzepte weiter zu veranschaulichen, wird im Zusammenhang mit 5 eine ausführliche beispielhafte Ausführungsform einer geeigneten Herangehensweise beschrieben, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist.
  • 5 ist ein Blockschaltplan einer ausführlichen beispielhaften Ausführungsform einer Streuen-durch-Indizes-zu-Register-Ausführungseinheit 518, die geeignet ist, um eine Ausführungsform eines Streuen-durch-Indizes-zu-Register-Befehls zu implementieren. Die Ausführungseinheit kann Eingangsanschlüsse, eine Eingangsschnittstelle oder eine andere Struktur(en) enthalten, um einen gepackten Quellindizesoperanden 534 und einen gepackten Quelldatenoperanden 532 zu empfangen. In diesem Beispiel weist für die Leichtigkeit der Veranschaulichung jeder dieser gepackten Quelloperanden nur vier jeweilige Indizes oder Datenelemente auf, obwohl andere Anzahlen von Datenelementen und Indizes, die hier anderswo beschrieben sind (z. B. acht, sechzehn, zweiunddreißig, vierundsechzig, einhundertachtundzwanzig usw.) optional in anderen Ausführungsformen verwendet werden können. In der veranschaulichten Ausführungsform weisen die vier Indizes die Werte 2, 1, 0 und 2 von rechts nach links auf, obwohl dies lediglich Beispiele sind.
  • Die Ausführungseinheit enthält eine vollständige Kreuzschiene oder eine andere geeignete Zusammenschaltungs-Schaltungsanordnung 548, um jeden der vier Indizes jedem von vier Komparatoren C0, C1, C2, C3 bereitzustellen. Jeder der vier Indizes kann z. B. einem ersten Komparator C0 bereitgestellt werden, jeder der vier kann einem zweiten Komparator C1 bereitgestellt werden usw. Jeder der Komparatoren kann betriebsfähig sein, um jeden der Indizes mit einer anderen entsprechenden Datenelement-Positionskennung, die diesem Komparator entspricht, zu vergleichen. Die Anzahl der Datenelement-Positionskennungen kann die gleiche wie die Anzahl der Ergebnisdatenelemente (z. B. in diesem Fall vier) sein. Wie in der Veranschaulichung beschriftet ist, können die vier Datenelement-Positionskennungen die Werte 0, 1, 2 und 3 aufweisen. Wie gezeigt ist, kann der erste Komparator (C0) jedem der vier Eingangsindizes entsprechen und jeden der vier Eingangsindizes mit einem entsprechenden Wert null (0) der Datenelement-Positionskennung vergleichen, kann der zweite Komparator (C1) jedem der vier Eingangsindizes entsprechen und jeden der vier Eingangsindizes mit einem entsprechenden Wert eins (1) der Datenelement-Positionskennung vergleichen, kann der dritte Komparator (C2) jedem der vier Eingangsindizes entsprechen und jeden der vier Eingangsindizes mit einem entsprechenden Wert zwei (2) der Datenelement-Positionskennung vergleichen und kann der vierte Komparator (C3) jedem der vier Eingangsindizes entsprechen und jeden der vier Eingangsindizes mit einem entsprechenden Wert drei (3) der Datenelement-Positionskennung vergleichen.
  • In der veranschaulichten Ausführungsform können die Komparatoren betriebsfähig sein, um die Indizes zu vergleichen und im Fall doppelter Indizes für jede Ergebnisdatenelementposition den höchstwertigen Index, dessen Wert mit der Ergebnisdatenelementposition übereinstimmt, zu arbitrieren oder anderweitig zu identifizieren. Alternativ kann in anderen Ausführungsformen der niedrigstwertige übereinstimmende Index optional in dem Fall von Duplikaten verwendet werden, wie vorher beschrieben worden ist. In einigen Ausführungsformen können diese Vergleiche anstatt auf allen Bits der Indizes optional nur auf einer Teilmenge der niedrigstwertigen Bits der Indizes basieren. Im Allgemeinen kann dies es unterstützen, die Leistung des Ausführens dieser Vergleiche zu verbessern, und/oder es unterstützen, die Komplexität der Hardware zu verringern, um die Vergleiche auszuführen. Es können z. B. nur die niedrigstwertigen (log2VLEN Bits) jedes Index optional verwendet werden, wobei VLEN die Anzahl der Ergebnisdatenelemente in dem gepackten Ergebnisdatenoperanden repräsentiert (z. B. 4 Bits gepackter 512-Bit-Datenoperanden- und dword-Indizes). Alternativ können auf Wunsch alle der Bits der Indizes optional verglichen werden. Jeder der Komparatoren kann, falls eine Übereinstimmung detektiert wird, betriebsfähig sein, um ein anderes entsprechendes Signal eines Satzes von ersten Signalen 550 auszugeben, um die Position des höchstwertigen Index anzugeben, der mit der entsprechenden Datenelement-Positionskennung übereinstimmt.
  • Beispielhaft kann der erste Komparator C0 jeden der vier Indizes 2, 1, 0 und 2 mit einem Wert null (0) einer Datenelement-Positionskennung vergleichen und bestimmen, dass nur der Index unmittelbar neben dem höchstwertigen Index (d. h., an der Indexposition 2) einen übereinstimmenden Indexwert null (0) aufweist. Der erste Komparator C0 kann in Reaktion ein entsprechendes Signal der ersten Signale 550 ausgeben, um den Wert 2 anzugeben, der die Position ist, wo sich der übereinstimmende Indexwert null (0) in dem gepackten Quellindizesoperanden befunden hat. Der zweite Komparator C1 kann außerdem jeden der vier Indizes 2, 1, 0 und 2 mit einem Wert eins (1) einer Datenelement-Positionskennung vergleichen und bestimmen, dass nur der Index unmittelbar neben dem niedrigstwertigen Index (d. h., an der Indexposition 1) einen übereinstimmenden Indexwert eins (1) aufweist. Der zweite Komparator C1 kann in Reaktion ein entsprechendes Signal der ersten Signale 550 ausgeben, um den Wert 1 anzugeben. Der dritte Komparator C2 kann außerdem jeden der vier Indizes 2, 1, 0 und 2 mit einem Wert zwei (2) einer Datenelement-Positionskennung vergleichen und bestimmen, dass sowohl der niedrigstwertige Index (d. h., an der Indexposition 0) als auch der höchstwertige Index (d. h., an der Indexposition 3) übereinstimmende Indexwerte zwei (2) aufweisen, und den höchstwertige der beiden doppelten Indizes (d. h., an der Indexposition 3) auswählen. Der dritte Komparator C2 kann in Reaktion ein entsprechendes Signal der ersten Signale 550 ausgeben, um den Wert 3 anzugeben. Der vierte Komparator C3 kann außerdem jeden der vier Indizes 2, 1, 0 und 2 mit einem Wert drei (3) einer Datenelement-Positionskennung vergleichen und bestimmen, dass keiner der Indizes mit dieser Datenelement-Positionskennung übereinstimmt. Der vierte Komparator C3 kann in Reaktion ein entsprechendes Signal der ersten Signale 550 ausgeben, um keine Übereinstimmung anzugeben, und/oder kann das Ausgeben des ersten Signals weglassen.
  • Die Ausführungseinheit enthält außerdem vier Keine-Übereinstimmung-Detektionseinheiten N0, N1, N2, N3, die jede einem anderen der vier Komparatoren C0-C3 entsprechen. Jede Keine-Übereinstimmung-Detektionseinheit kann gekoppelt sein, um das von dem entsprechenden Komparator ausgegebene entsprechende erste Signal zu empfangen, und kann betriebsfähig sein, um zu bestimmen, ob es angibt, dass wenigstens ein übereinstimmender Index detektiert wurde, oder nicht. Jede Keine-Übereinstimmung-Detektionseinheit kann betriebsfähig sein, um ein entsprechendes Signal eines Satzes von zweiten Signalen 552 auszugeben, um anzugeben, ob wenigstens ein übereinstimmender Index durch den entsprechenden Komparator detektiert wurde oder nicht.
  • Weil der erste Komparator C0 einen übereinstimmenden Indexwert detektiert hat, kann beispielhaft die Keine-Übereinstimmung-Detektionseinheit N0 ein entsprechendes Signal der zweiten Signale 552 ausgeben, um anzugeben, dass eine Übereinstimmung detektiert wurde. Weil der zweite Komparator C1 einen übereinstimmenden Indexwert detektiert hat, kann die Keine-Übereinstimmung-Detektionseinheit N1 ähnlich ein entsprechendes Signal der zweiten Signale 552 ausgeben, um anzugeben, dass eine Übereinstimmung detektiert wurde. Weil der dritte Komparator C2 einen übereinstimmenden Indexwert detektiert hat, kann die Keine-Übereinstimmung-Detektionseinheit N2 gleichermaßen ein entsprechendes Signal der zweiten Signale 552 ausgeben, um anzugeben, dass eine Übereinstimmung detektiert wurde. Weil der vierte Komparator C3 keinen übereinstimmenden Indexwert detektiert hat, (es wird daran erinnert, dass keiner der Indizes einen Wert drei (3) aufweist), kann im Gegensatz die Keine-Übereinstimmung-Detektionseinheit N3 ein entsprechendes Signal der zweiten Signale 552 ausgeben, um anzugeben, dass keine Übereinstimmung detektiert wurde.
  • Die Ausführungseinheit enthält außerdem einen ersten Satz von vier Multiplexern oder anderen Auswahlvorrichtungen S0, S1, S2 und S3, die jede einem anderen der vier Ergebnisdatenelemente entsprechen. Die vier Quelldatenelemente A, B, C und D des gepackten Quelldatenoperanden 532 können in eine vollständige Kreuzschiene oder eine andere geeignete Zusammenschaltungs-Schaltungsanordnung eingegeben werden. Die Zusammenschaltungs-Schaltungsanordnung ist gekoppelt, um jedes der vier Quelldatenelemente A-D jeder der vier Auswahlvorrichtungen S0-S3 bereitzustellen. Jedes von A-D kann z. B. der ersten Auswahlvorrichtung S0 bereitgestellt werden, jedes von A-D kann der zweiten Auswahlvorrichtung S1 bereitgestellt werden usw.
  • Wie gezeigt ist, ist jede der vier Auswahlvorrichtungen S0-S3 außerdem gekoppelt, um ein anderes entsprechendes Signal der ersten Signale 550 von einem anderen entsprechenden Komparator der vier Komparatoren C0-C3 zu empfangen. Die S0 kann z. B. ein erstes Signal vom C0 empfangen, die S1 kann ein erstes Signal vom C1 empfangen usw. Diese ersten Signale können Auswahlsteuersignale oder Eingaben in die Auswahlvorrichtungen S0-S3 repräsentieren, die betriebsfähig sind, um die Auswahlvorrichtungen zu steuern, um ein angegebenes Quelldatenelement der vier Quelldatenelemente auszuwählen und auszugeben, das sich an der Datenelementposition befindet, die durch das erste Signal angegeben wird. Weil das erste Signal 550 von dem ersten Komparator C0 einen Wert 2 angibt, kann die erste Auswahlvorrichtung S0 beispielhaft gesteuert werden, um das Datenelement C an der Datenelementposition zwei (2) in dem gepackten Quelldatenoperanden 532 auszuwählen und auszugeben. Weil das erste Signal 550 von dem zweiten Komparator C1 einen Wert 1 angibt, kann die zweite Auswahlvorrichtung S1 gleichermaßen gesteuert werden, um das Datenelement B an der Datenelementposition eins (1) in dem gepackten Quelldatenoperanden 532 auszuwählen und auszugeben. Weil das erste Signal 550 von dem dritten Komparator C2 einen Wert 3 angibt, kann die dritte Auswahlvorrichtung S2 ähnlich gesteuert werden, um das Datenelement D an der Datenelementposition drei (3) in dem gepackten Quelldatenoperanden auszuwählen und auszugeben.
  • Die Ausführungseinheit enthält außerdem einen zweiten Satz von vier Multiplexern oder anderen Auswahlvorrichtungen M0, M1, M2 und M3, die jede einer anderen des ersten Satzes von Auswahlvorrichtungen S0-S3 und/oder einem anderen der Ergebnisdatenelemente entsprechen. Jede des zweiten Satzes von Auswahlvorrichtungen M0-M3 weist einen ersten Eingang auf, der gekoppelt ist, um das ausgewählte und ausgegebene Quelldatenelemente von der entsprechenden Auswahlvorrichtung der Auswahlvorrichtungen S0-S3 zu empfangen. Der erste Eingang in die Auswahlvorrichtung M0 kann z. B. das Datenelement C empfangen, der erste Eingang in die Auswahlvorrichtung M1 kann das Datenelement B empfangen, der erste Eingang in die Auswahlvorrichtung M2 kann das Datenelement D empfangen usw. Jede des zweiten Satzes von Auswahlvorrichtungen M0-M3 weist außerdem einen zweiten Eingang auf, der gekoppelt ist, um einen Nullwert zu empfangen. Alternativ kann in einer weiteren Ausführungsform in dem Fall des Verschmelzens anstatt des Nullsetzens jeder der zweiten Eingänge optional gekoppelt sein, um den Anfangswert an einer entsprechenden Datenelementposition des Registers für gepackte Daten zu empfangen, das verwendet werden soll, um den gepackten Ergebnisdatenoperanden 536 zu speichern.
  • Wie gezeigt ist, ist jede des zweiten Satzes von Auswahlvorrichtungen M0-M3 außerdem gekoppelt, um ein anderes entsprechendes Signal der zweiten Signale 552 von einem anderen entsprechenden Keine-Übereinstimmung-Detektor der vier Keine-Übereinstimmung-Detektoren N0-N3 zu empfangen. Die M0 kann z. B. das zweite Signal 552 von dem N0 empfangen, die M1 kann z. B. das zweite Signal 552 von dem N1 empfangen, die M3 kann z. B. das zweite Signal 552 von dem N3 empfangen usw. Diese zweiten Signale 552 können die Auswahlsteuersignale repräsentieren, die betriebsfähig sind, um jede des zweiten Satzes von Auswahlvorrichtungen M0-M3 zu steuern, um entweder das entsprechende Eingangsdatenelement oder den Eingangsnullwert (oder z. B. den verschmolzenen Eingangswert im Fall des Verschmelzens) auszuwählen und zu einem entsprechenden Ergebnisdatenelement auszugeben. Wenn das zweite Signal z. B. angibt, dass ein übereinstimmender Index detektiert wurde, kann das Eingangsdatenelement ausgewählt und in dem gepackten Ergebnisdatenelement gespeichert werden. Wenn im Gegensatz das zweite Signal angibt, dass kein übereinstimmender Index detektiert wurde, kann der Nullwert (oder der verschmolzene Wert) ausgewählt und in dem gepackten Ergebnisdatenelement gespeichert werden. Weil die Übereinstimmungen durch jeden der ersten bis dritten Komparatoren C0-C2 detektiert wurden, speichern die drei niedrigstwertigen Ergebnisdatenelemente an den Datenelementposition 0, 1 und 2 die Werte der Eingangsdatenelemente C, B bzw. D, wie gezeigt ist. Weil jedoch durch den vierten Komparator C3 keine Übereinstimmung detektiert wurde, wird der Nullwert in dem höchstwertigen Ergebnisdatenelement an der Datenelementposition 3 gespeichert.
  • In einem Aspekt können der erste Satz von Auswahlvorrichtungen S0-S3 und die Zusammenschaltungen, die ihnen die gepackten Quelldatenelemente bereitstellen, eine Logik aufweisen, die zu der ähnlich ist, die verwendet werden kann, um einen Mischen-, Permutieren- oder einen anderen Sammeln-durch-Indizes-zu-Register-Befehl und/oder eine Mischen-, Permutieren- oder eine andere Sammeln-durch-Indizes-zu-Register-Operation zu implementieren. Die Steuersignale zu dem ersten Satz von Auswahlvorrichtungen können jedoch anstatt direkter von den Sammelindizes in einem gepackten Quellsammelindizesoperanden durch einen Vergleich (z. B. die Komparatoren C0-C3 und die ersten Signale) bestimmt werden. Überdies kann der zweite Satz von Auswahlvorrichtungen M0-M3 eine Logik aufweisen, die zu der ähnlich ist, die zusätzlich verwendet wird, um eine Maskierung hinzuzufügen, um einen maskierten Mischen-, maskierten Permutieren- oder einen anderen maskierten Sammeln-durch-Indizes-zu-Register-Befehl und/oder eine maskierte Mischen-, maskierte Permutieren- oder eine andere maskierte Sammeln-durch-Indizes-zu-Register-Operation zu implementieren.
  • Es soll erkannt werden, dass dies nur ein veranschaulichendes Beispiel einer geeigneten Ausführungseinheit ist. Es werden Varianten an der veranschaulichten Ausführungseinheit in Betracht gezogen. Die Komparatoren C0-C3 können z. B. modifiziert werden, so dass sie eine Logik umfassen, die zu der ähnlich ist, die für die Keine-Übereinstimmung-Detektionseinheiten beschrieben worden ist, so dass sie sowohl die beschriebenen ersten Signale als auch die beschriebenen zweiten Signale erzeugen und ausgeben kann. Überdies können der erste und der zweite Satz der Auswahlvorrichtungen optional in einen einzigen Satz von Auswahlvorrichtungen kombiniert werden, der zusätzlich die Nullwerte (oder die verschmolzenen Werte) empfängt und zwischen den Eingangsquelldatenelementen und den Nullwerten (oder verschmolzenen Werten) auswählt. Für die Fachleute auf dem Gebiet, die den Vorteil der vorliegenden Offenbarung haben, werden noch andere Variationen offensichtlich sein. Der Schutzumfang der Erfindung ist nicht auf irgendeine bekannte Weise eingeschränkt, um die Logik zu implementieren, um einen Streuen-durch-Indizes-zu-Register-Befehl und/oder eine Streuen-durch-Indizes-zu-Register-Operation zu erreichen.
  • Es werden andere Herangehensweisen außerdem in Betracht gezogen. Eine alternative Herangehensweise kann z. B. mit einer Sortierlogik (z. B. einem Sortiernetz) implementiert sein, die die Quellindizes als „Schlüssel“, die Indexpositionen als „Werte“ behandeln kann und die betriebsfähig sein kann, um die Schlüssel-Wert-Paare zu sortieren, um die Indizes zu sortieren. Beispielhaft werden die Quellindizes betrachtet, die die folgenden Werte aufweisen:
    {0, 2, 3, 7, 1, 4, 5, 6}
  • Diesen Quellindizes können Indexpositionskennungen zugeordnet werden, um Index:Positions-Paare, die die Schlüssel:Wert-Paare repräsentieren können, wie folgt bereitzustellen:
    {0:0, 2:1, 3:2, 7:3, 1:4, 4:5, 5:6, 6:7}
  • Derartige Schlüssel:Wert-Paare können basierend auf den Schlüsseln (d. h., den Indizes) sortiert werden, um Folgendes zu erzeugen:
    {0:0, 1:4, 2:1, 3:2, 4:5, 5:6, 6:7, 7:3}
  • Dann können die Werte (d. h., die Positionskennungen) durch das Entfernen der Schlüssel (d. h., der Indizes) extrahiert und in der gleichen Reihenfolge aufrechterhalten werden, um die umgeordneten Indizes wie folgt zu erhalten:
    {0, 4, 1, 2, 5, 6, 7, 3}
  • Diese auf einer Sortierung basierende Implementierung kann potentiell einen Vorteil von weniger Gesamtvergleichen als in der in 5 gezeigten Herangehensweise bieten, obwohl sie nicht notwendigerweise teilweise aufgrund der Weise, in der die Vergleiche in Beziehung stehen, eine kürzere Latenzzeit bietet. Zusätzlich kann eine derartige auf einer Sortierung basierende Herangehensweise mehr Einschränkungen an die Leerstellen und die Duplikate in den Quellindizes auferlegen. Falls die Quellindizes z. B. j Duplikate von i aufweisen, kann es erforderlich sein, dass es Leerstellen bei i + 1, ..., i + j - 1 gibt. {0, 2, 3, 7, 1, 3, 5, 6} kann z. B. eine gültige Eingabe repräsentieren, weil es infolge der zwei doppelten Indizes „3“ bei „4“ eine Leerstelle gibt. Dies ist eine gültige Eingabe, weil die Sortierung {0, 4, 1, 2, 5, 6, 7, 3} erzeugt und das Ausführen eines Permutationsbefehls mit diesen Ausgangsindizes eine inverse Permutation mit den Eingangsindizes richtig implementiert, angenommen, dass die Duplikate ausgeblendet werden. {0, 2, 3, 7, 1, 3, 4, 6} kann jedoch eine ungültige Eingabe repräsentieren, weil bei einer Permutation mit der entsprechenden Sortierungsausgabe {0, 4, 1, 2, 5, 6, 7, 3} die sechste Eingabe zu der fünften Datenelementposition geht, anstatt zu der vierten Datenelementposition zu gehen, (unter der Annahme einer nullbasierten Indexierung).
  • 6 ist ein Blockschaltplan einer Ausführungsform eines Verfahrens 660 zum Ausführen einer Ausführungsform eines Streuen-durch-Indizes-zu-Register-Befehls. In verschiedenen Ausführungsformen kann das Verfahren durch und/oder innerhalb eines Prozessors, einer Befehlsverarbeitungsvorrichtung oder einer anderen digitalen Logikvorrichtung ausgeführt werden. In einigen Ausführungsformen kann das Verfahren nach 6 durch den und/oder innerhalb des Prozessors nach 1 und/oder 3 ausgeführt werden. Die hier für den Prozessor nach 1 und/oder 3 beschriebenen Komponenten, Merkmale und spezifischen optionalen Einzelheiten gelten optional außerdem für das Verfahren 660. Alternativ kann das Verfahren 660 durch einen und/oder innerhalb eines ähnlichen oder anderen Prozessors oder durch eine und/oder innerhalb einer ähnlichen oder anderen Vorrichtung ausgeführt werden. Überdies kann der Prozessor nach 1 und/oder 3 Verfahren ausführen, die die gleiche wie das Verfahren 660, zu dem Verfahren 660 ähnlich oder anders als das Verfahren 660 sind.
  • Das Verfahren enthält im Block 661 das Empfangen des Streuen-durch-Indizes-zu-Register-Befehls. In verschiedenen Aspekten kann der Befehl an einem Prozessor oder einem Abschnitt davon (z. B. einer Befehlsholeinheit, einer Decodiereinheit, einer Busschnittstelleneinheit usw.) empfangen werden. In verschiedenen Aspekten kann der Befehl von einer Quelle außerhalb des Prozessors und/oder außerhalb des Dies (z. B. von einem Speicher, einer Zusammenschaltung usw.) oder von einer Quelle in dem Prozessor und/oder in dem Die (z. B. von einem Befehls-Cache, einer Befehlswarteschlange usw.) empfangen werden. Der Befehl kann einen gepackten Quelldatenoperanden spezifizieren oder anderweitig angeben, der mehrere Quell Datenelemente aufweist, und kann einen gepackten Quellindizesoperanden spezifizieren oder anderweitig angeben, der mehrere Indizes aufweist. In einigen Ausführungsformen kann jeder der Indizes einem anderen der Quelldatenelemente an derselben relativen Position innerhalb der Operanden entsprechen. Der Befehl kann außerdem ein gepacktes Zieldatenregister spezifizieren oder anderweitig angeben.
  • Ein gepackter Ergebnisdatenoperand kann im Block 662 in Reaktion auf den oder im Ergebnis des Streuen-durch-Indizes-zu-Register-Befehls im Zielregister für gepackte Daten gespeichert werden. Der gepackte Ergebnisdatenoperand kann mehrere Ergebnisdatenelemente enthalten. In einigen Ausführungsformen kann jedes Ergebnisdatenelement einen Wert von einem der Quelldatenelemente aufweisen, dessen entsprechender Index (z. B. an derselben relativen Position in dem gepackten Quellindizesoperanden) eine Datenelementposition des Ergebnisdatenelements in dem gepackten Ergebnisdatenoperanden angibt.
  • In einigen Ausführungsformen können nicht alle der Quelldatenelementwerte (z. B. in dem Fall von Duplikaten) in dem gepackten Ergebnisdatenoperanden gespeichert werden. In einigen Ausführungsformen kann in dem Fall von Duplikaten jedes Ergebnisdatenelement einen Wert eines höchstwertigen (oder alternativ des niedrigstwertigen) Quelldatenelements aufweisen, dessen entsprechender Index die Ergebnisdatenelementposition angibt. Falls keiner der Indizes eine gegebene Ergebnisdatenelementposition angibt, kann in einigen Ausführungsformen entweder ein Nullwert oder ein verschmolzener Wert (z. B. ein Wert anfangs in dem Register für gepackte Daten vor der Ausführung des Befehls) optional an der gegebenen Ergebnisdatenelementposition gespeichert werden. In einigen Ausführungsformen kann das Ergebnis irgendeines von jenen sein, die in den 4-5 gezeigt und beschrieben sind, einschließlich irgendeiner der dafür erwähnten Variationen, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist.
  • Das veranschaulichte Verfahren beinhaltet Architekturoperationen (z. B. jene, die aus einer Software-Perspektive sichtbar sind). In anderen Ausführungsformen kann das Verfahren optional eine oder mehrere Mikroarchitekturoperationen enthalten. Beispielhaft kann der Befehl geholt, decodiert, außerhalb der Reihenfolge geplant werden, kann auf die Quelloperanden zugegriffen werden, kann eine Ausführungseinheit die Mikroarchitekturoperationen ausführen, um den Befehl zu implementieren, usw. In einigen Ausführungsformen können die Mikroarchitekturoperationen, um den Befehl zu implementieren, optional irgendeinen derjenigen enthalten, die in 4 und/oder 5 gezeigt oder beschrieben sind, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist.
  • In einigen Ausführungsformen können die Datenelemente auf die Speicheradressen bezogene Indizes des Typs repräsentieren, der üblicherweise durch Sammeln-vom-Speicher- und/oder Streuen-zum-Speicher-Befehle verwendet wird. In derartigen Fällen können den Werten derartiger auf die Speicheradressen bezogene Indizes Einschränkungen auferlegt werden.
  • Wohingegen die Sammeln-vom-Speicher- und/oder Streuen-zum-Speicher-Befehle einen größeren Bereich erlauben können, können die auf die Speicheradressen bezogenen Indizes für diese Befehle auf einen kleineren Bereich eingeschränkt sein, wie z. B. dass sie nicht über die SIMD-Breite und/oder die Anzahl der Datenelemente in dem Ergebnis hinausgehen. In einem Aspekt können nur die log2VLEN Bits der auf die Speicheradressen bezogenen Indizes verwendet werden. In einem weiteren Aspekt könnte optional eine Prüfung ausgeführt werden, um zu bestimmen, ob sich die auf die Speicheradressen bezogenen Indizes außerhalb der Grenzen befinden, und, wenn ja, eine Ausnahmebedingung (z. B. eine Störung) zu signalisieren.
  • 7 ist ein Blockschaltplan einer Ausführungsform eines Prozessors 700, der betriebsfähig ist, um eine Ausführungsform eines Datenumordnungsbefehls 708 auszuführen. In den Ausführungsformen kann der Prozessor 300 der Prozessor 100 nach 1 und/oder der Prozessor 300 nach 3 sein oder in diesen enthalten sein. Die hier für den Prozessor 100 und/oder den Prozessor 300 beschriebenen Komponenten, Merkmale und spezifischen optionalen Einzelheiten gelten optional für den Prozessor 700. Alternativ kann der Prozessor 700 ein ähnlicher wie oder ein anderer Prozessor als die Prozessoren 100 und 300 sein oder in einem ähnlichen wie oder einem anderen Prozessor als die Prozessoren 100 und 300 enthalten sein. Überdies können die Prozessoren 100 und 300 entweder ein ähnlicher wie oder ein anderer Prozessor als der Prozessor 700 sein oder einen ähnlichen wie oder einen anderen Prozessor als den Prozessor 700 enthalten.
  • Während des Betriebs kann der Prozessor 700 den Datenumordnungsbefehl 708 empfangen. In einigen Ausführungsformen kann der Datenumordnungsbefehl einen gepackten Quelldatenoperanden 770, der mehrere gepackte Quelldatenelemente (z. B. wenigstens vier, acht, sechzehn, zweiunddreißig oder optional mehr) aufweist, (z. B. durch ein oder mehrere Felder oder einen Satz von Bits) explizit spezifizieren oder anderweitig angeben (z. B. implizit angeben). In einigen Ausführungsformen können die Quelldatenelemente Indizes sein, die in einem Streumuster angeordnet sind, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. In anderen Ausführungsformen können die Quelldatenelemente Indizes sein, die in einem Sammelmuster angeordnet sind, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. Der Datenumordnungsbefehl kann außerdem einen Zielspeicherort 774, wo der gepackte Ergebnisdatenoperand 774 in Reaktion auf den Befehl, der ausgeführt wird, gespeichert werden soll, explizit spezifizieren oder anderweitig angeben. Als ein Beispiel kann der Befehl Quell- und/oder Zieloperanden-Spezifikationsfelder aufweisen, um Register für gepackte Daten oder andere Speicherorte für die Quell- und/oder Zieloperanden zu spezifizieren. Alternativ können einer oder mehrere dieser Operanden optional für den Befehl implizit sein (z. B. für einen Opcode des Befehls implizit sein). Als ein spezifisches Beispiel kann ein Quell-/Zielspeicherort, der einmal explizit spezifiziert werden kann und implizit oder impliziert verstanden werden kann, sowohl für den gepackten Quelldatenoperanden als auch als der Zielspeicherort, um den gepackten Ergebnisdatenoperanden zu speichern, verwendet werden.
  • In 7 enthält der Prozessor 700 außerdem einen Satz von Registern 710 für gepackte Daten. Die Register 710 für gepackte Daten können optional die gleichen wie die oder ähnlich zu den vorher beschriebenen Registern 310 für gepackte Daten sein. Wie gezeigt ist, kann in einigen Ausführungsformen der gepackte Quelldatenoperand 770 optional in dem Satz von Registern für gepackte Daten (z. B. in einem ersten Register für gepackte Daten) gespeichert sein, wobei sich der Zielspeicherort 774 außerdem optional in dem Satz von Registern für gepackte Daten (z. B. entweder in dem ersten Register für gepackte Daten oder einem anderen Register für gepackte Daten) befinden kann. Alternativ können Datenspeicherorte oder andere Speicherorte optional für einen oder mehrere der Quell- und Zieloperanden verwendet werden.
  • In einigen Ausführungsformen kann jedes Quelldatenelement des gepackten Quelldatenoperanden 770 einen entsprechenden Quelldatenelementwert, wie z. B. einen ganzzahligen Indexwert, aufweisen, um eine Datenelementposition oder einen weiteren numerischen Wert anzugeben. In einigen Ausführungsformen kann jedes Quelldatenelement außerdem eine entsprechende Quelldatenelementposition aufweisen. In einem Aspekt können sich die Quelldatenelementpositionen bezüglich eines ersten Endes des gepackten Quelldatenoperanden (z. B. eines niedrigstwertigen Endes oder eines höchstwertigen Endes) befinden. Ein niedrigstwertiges Quelldatenelement kann z. B. eine kleinste nummerierte Position (z. B. 0) aufweisen, ein Quelldatenelement unmittelbar neben dem niedrigstwertigen Quelldatenelement kann eine Position (z. B. 1) unmittelbar neben der kleinsten nummerierten Position aufweisen usw.
  • In 7 enthält der Prozessor eine Decodiereinheit 716. Die Decodiereinheit kann den Datenumordnungsbefehl 708 empfangen und decodieren. Die Decodiereinheit 716 kann optional ähnlich zu der vorher beschriebenen Decodiereinheit 316 oder die gleiche wie die vorher beschriebene Decodiereinheit 316 sein. Wie vorher erwähnt worden ist, kann der Datenelement-Umordnungsbefehl außerdem optional durch einen Befehlsumsetzer in einen oder mehrere andere Befehle umgesetzt werden, die dann durch die Decodiereinheit decodiert werden können.
  • Eine Ausführungseinheit 718 ist mit der Decodiereinheit 716 gekoppelt und ist mit den Registern 710 für gepackte Daten gekoppelt. Die Ausführungseinheit 718 kann optional zu der vorher beschriebenen Ausführungseinheit 718 ähnlich sein oder die gleiche wie die vorher beschriebene Ausführungseinheit 718 sein. Die Ausführungseinheit kann einen oder mehrere decodierte oder anderweitig umgesetzte Befehle oder Steuersignale empfangen, die den Datenumordnungsbefehl repräsentieren und/oder von dem Datenumordnungsbefehl abgeleitet sind. Die Ausführungseinheit kann außerdem den gepackten Quelldatenoperanden 770 empfangen. Die Ausführungseinheit kann in Reaktion auf den und/oder im Ergebnis des Datenumordnungsbefehls (z. B. in Reaktion auf einen oder mehrere Befehle oder ein oder mehrere Steuersignale, die aus ihm decodiert worden sind) betriebsfähig sein, um den gepackten Ergebnisdatenoperanden 772 an dem Zielspeicherort 774 zu speichern. Der gepackte Ergebnisdatenoperand kann mehrere Ergebnisdatenelemente (z. B. wenigstens vier, acht, sechzehn, zweiunddreißig oder optional mehr) enthalten.
  • In einigen Ausführungsformen kann jedes der Ergebnisdatenelemente einen Ergebnisdatenelementwert und eine Ergebnisdatenelementposition bezüglich eines ersten Endes (z. B. eines niedrigstwertigen Endes oder eines höchstwertigen Endes) des gepackten Ergebnisdatenoperanden aufweisen. In einigen Ausführungsformen können dieselben Enden (z. B. die niedrigstwertigen Enden) sowohl für den gepackten Quelldatenoperanden als auch für den gepackten Ergebnisdatenoperanden als die Bezugspunkte für die relativen Datenelementpositionen verwendet werden.
  • In jeder Ausführungsform kann jedes Ergebnisdatenelement einen Ergebnisdatenelementwert aufweisen, der gleich einer Quelldatenelementposition eines Quelldatenelements ist, die sich am nächsten an einem Ende des gepackten Quelldatenoperanden befindet, dessen Quelldatenelementwert gleich der Ergebnisdatenelementposition für das Ergebnisdatenelement ist, solange wie wenigstens ein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition für dieses Ergebnisdatenelement ist. In einigen Ausführungsformen kann das eine Ende, auf das verwiesen worden ist, des gepackten Quelldatenoperanden ein höchstwertiges Ende des gepackten Quelldatenoperanden oder alternativ ein niedrigstwertiges Ende des gepackten Quelldatenoperanden sein. Umgekehrt kann in einigen Ausführungsformen jedes Ergebnisdatenelement einen Ergebnisdatenelementwert aufweisen, der gleich einem Ersatzwert ist, wenn kein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition für dieses Ergebnisdatenelement ist.
  • Ein Beispiel eines geeigneten Ersatzwertes ist ein Nullwert. Ein weiteres Beispiel eines geeigneten Ersatzwertes ist ein verschmolzener Wert (z. B. ein an einer entsprechenden Datenelementposition an dem Zielspeicherort gerade vor der Ausführung des Datenelement-Umordnungsbefehls gespeicherter Wert). Ein noch weiteres Beispiel eines geeigneten Ersatzwertes ist ein negativer Wert (z. B. irgendein gewünschter negativer ganzzahliger Wert). Ein noch weiteres Beispiel eines geeigneten Ersatzwertes ist ein großer Wert (z. B. ein Wert, der größer als der ist, der als ein Index verwendet werden würde, und/oder größer als die Anzahl der Datenelemente in dem gepackten Quelldatenoperanden ist). Alternativ können verschiedene andere Typen von Werten optional als die Ersatzwerte verwendet werden. In einigen Ausführungsformen können die Ergebnisdatenelemente Indizes sein, die in einem Sammeln-durch-Indizes-zu-Register-Muster bezüglich der Indizes des gepackten Quelldatenoperanden, die in einem Streuen-durch-Indizes-zu-Register-Muster angeordnet sind, angeordnet sind, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. In anderen Ausführungsformen können die Ergebnisdatenelemente Indizes sein, die in einem Streuen-durch-Indizes-zu-Register-Muster bezüglich der Indizes des gepackten Quelldatenoperanden, die in einem Sammeln-durch-Indizes-zu-Register-Muster angeordnet sind, angeordnet sind, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. In einigen Ausführungsformen kann der gepackte Ergebnisdatenoperand irgendeiner von jenen sein, die in den 8-10 gezeigt und beschrieben sind, einschließlich irgendeiner der dafür erwähnten Variationen, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist.
  • 8 ist ein Blockschaltplan, der eine beispielhafte Ausführungsform einer Streuindizes-zu-Sammelindizes-Umordnungsoperation 876 veranschaulicht, die in Reaktion auf eine Ausführungsform eines Streuindizes-zu-Sammelindizes-Umordnungsbefehls (z. B. des Befehls 108 und/oder 708) ausgeführt werden kann. Die Operation kann durch irgendeinen der verschiedenen hier offenbarten Prozessoren (z. B. den Prozessor 100 und/oder 700) ausgeführt werden.
  • Der Befehl kann einen gepackten Quelldatenoperanden 870, der mehrere Quelldatenelemente aufweist, spezifizieren (z. B. explizit spezifizieren) oder anderweitig angeben (z. B. implizit angeben). Jedes der Quelldatenelemente weist einen Quelldatenelementwert und eine Quelldatenelementposition bezüglich eines Endes des gepackten Quelldatenoperanden auf. In der Veranschaulichung ist die niedrigstwertige Position oder die Position niedrigster Ordnung auf der rechten Seite gezeigt, während die höchstwertige Position oder die Position höchster Ordnung auf der linken Seite gezeigt ist. In dem veranschaulichten Beispiel sind die Quelldatenelementwerte, wenn sie von rechts nach links (z. B. von der niedrigstwertigen zur höchstwertigen Position) gelesen werden, 2, 1, 0 und 2. In dem veranschaulichten Beispiel sind die Quelldatenelementpositionen von rechts nach links (z. B. bezüglich des niedrigstwertigen Endes) 0, 1, 2 und 3. Ohne Einschränkung können die Quelldatenelemente ganze Zahlen, Festkommaelemente, Gleitkommaelemente oder andere Datentypen repräsentieren. In einigen Ausführungsformen können die Quelldatenelementwerte ganzzahlige Indizes (z. B. für eine Streuen-durch-Indizes-Operation) repräsentieren, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist.
  • In der veranschaulichten Ausführungsform gibt es nur vier Quelldatenelemente. In anderen Ausführungsformen können jedoch mehr Quelldatenelemente optional verwendet werden. Üblicherweise kann die Anzahl der Datenelemente in dem gepackten Quelldatenoperanden gleich der Größe in Bits des gepackten Quelldatenoperanden, geteilt durch die Größe in Bits eines einzigen Datenelements sein. In verschiedenen Ausführungsformen können die Größe oder die Breite des gepackten Quelldatenoperanden 64 Bits, 128 Bits, 256 Bits, 512 Bits oder 1024 Bits sein, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. In verschiedenen Ausführungsformen kann die Größe oder die Breite jedes Datenelements 8 Bits, 16 Bits, 32 Bits oder 64 Bits sein, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist. Andere Größen der gepackten Datenoperanden und andere Größen der Datenelemente sind außerdem geeignet. In verschiedenen Ausführungsformen kann es wenigstens vier, wenigstens acht, wenigstens sechzehn, wenigstens zweiunddreißig, wenigstens vierundsechzig oder wenigstens einhundertachtundzwanzig Datenelemente in dem gepackten Quelldatenoperanden geben.
  • Ein gepackter Ergebnisdatenoperand 872 kann in Reaktion auf den Befehl und/oder die Operation (z.B. durch eine Ausführungseinheit 818) erzeugt und an einem Zielspeicherort gespeichert werden. Der gepackte Quelldatenoperand kann (z. B. von einem Register für gepackte Daten) in die Ausführungseinheit eingegeben werden, wobei die Ausführungseinheit in Reaktion auf den Befehl/die Operation den gepackten Ergebnisdatenoperanden erzeugen und an dem Zielspeicherort (z. B. einem Register für gepackte Daten) speichern kann. Der gepackte Ergebnisdatenoperand kann mehrere Ergebnisdatenelemente (z. B. die gleiche Anzahl von Datenelementen wie der gepackte Quelldatenoperand) aufweisen. In diesem veranschaulichenden Beispiel weist der gepackte Ergebnisdatenoperand nur vier Ergebnisdatenelemente auf.
  • In einigen Ausführungsformen kann jedes der Ergebnisdatenelemente einen Ergebnisdatenelementwert und eine Ergebnisdatenelementposition bezüglich eines Endes des gepackten Ergebnisdatenoperanden aufweisen. In der Veranschaulichung ist die niedrigstwertige Position oder die Position niedrigster Ordnung auf der rechten Seite gezeigt, während die höchstwertige Position oder die Position höchster Ordnung auf der linken Seite gezeigt ist. In dem veranschaulichten Beispiel sind die Ergebnisdatenelementwerte, wenn sie von rechts nach links (z. B. von der niedrigstwertigen Position zu der höchstwertigen Position) gelesen werden, 2, 1, 3 und *, wobei der Stern (*) einen Ersatzwert repräsentieren kann. In dem veranschaulichten Beispiel sind die Ergebnisdatenelementpositionen von rechts nach links (z. B. bezüglich des niedrigstwertigen Endes) 0, 1, 2 und 3. Ohne Einschränkung können die Quelldatenelemente ganze Zahlen, Festkommaelemente, Gleitkommaelemente oder andere Datentypen repräsentieren. In einigen Ausführungsformen können die Quelldatenelementwerte ganzzahlige Indizes (z. B. für eine Sammeln-durch-Indizes-Operation) repräsentieren, obwohl der Schutzumfang der Erfindung nicht so eingeschränkt ist.
  • In jeder Ausführungsform kann jedes Ergebnisdatenelement einen Ergebnisdatenelementwert aufweisen, der gleich einer Quelldatenelementposition eines Quelldatenelements ist, die sich am nächsten an einem Ende des gepackten Quelldatenoperanden befindet, dessen Quelldatenelementwert gleich der Ergebnisdatenelementposition für das Ergebnisdatenelement ist, solange wie wenigstens ein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition für dieses Ergebnisdatenelement ist. Ein erster Pfeil 879 zeigt z. B., dass ein Quelldatenelement unmittelbar neben dem höchstwertigen Quelldatenelement (d. h., das dritte von rechts) an der Quelldatenelementposition zwei (2) einen Quelldatenelementwert null (0) aufweist, der mit der Ergebnisdatenelementposition null (0) für das niedrigstwertige Ergebnisdatenelement übereinstimmt (z. B. gleich der Ergebnisdatenelementposition null (0) für das niedrigstwertige Ergebnisdatenelement ist). Wie durch einen zweiten Pfeil 880 gezeigt ist, kann entsprechend das niedrigstwertige Ergebnisdatenelement einen Ergebnisdatenelementwert zwei (2) aufweisen, der gleich der Quelldatenelementposition zwei (2) des Quelldatenelements unmittelbar neben dem höchstwertigen Quelldatenelement ist. Ein dritter Pfeil 881 zeigt als ein weiteres Beispiel, das ein höchstwertiges Quelldatenelement an der Quelldatenelementposition drei (3) einen Quelldatenelementwert zwei (2) aufweist, der mit der Ergebnisdatenelementposition zwei (2) für das Ergebnisdatenelement unmittelbar neben dem höchstwertigen Ergebnisdatenelement (d. h., dem dritten von rechts) übereinstimmt (d. h., gleich der Ergebnisdatenelementposition zwei (2) für das Ergebnisdatenelement unmittelbar neben dem höchstwertigen Ergebnisdatenelement (d. h., dem dritten von rechts) ist). Wie durch einen vierten Pfeil 882 gezeigt ist, kann entsprechend das Ergebnisdatenelement unmittelbar neben dem höchstwertigen Ergebnisdatenelement einen Ergebnisdatenelementwert drei (3) aufweisen, der gleich der Quelldatenelementposition drei (3) des höchstwertigen Quelldatenelements ist.
  • In einigen Ausführungsformen kann es einen oder mehrere Sätze von Quelldatenelementen mit völlig gleichen oder doppelten Quelldatenelementwerten geben. Wie in der veranschaulichten beispielhaften Ausführungsform gezeigt ist, weisen sowohl das niedrigstwertige Quelldatenelement (in diesem Fall das Quelldatenelement ganz rechts) als auch das höchstwertige Quelldatenelement (in diesem Fall das Quelldatenelement ganz links) Quelldatenelementwerte zwei (2) auf. Es kann jedoch nur ein Wert in dem Ergebnisdatenelement an der Ergebnisdatenelementposition zwei (2) gespeichert werden. In einigen Ausführungsformen kann einer Konvention gefolgt werden, um zu entscheiden, welches es sein sollte. Das Quelldatenelement am nächsten an einem Ende des gepackten Quelldatenoperanden kann z. B. gewählt werden. Die Quelldatenelemente am nächsten an dem höchstwertigen Ende des gepackten Quelldatenoperanden können z. B. gewählt werden, wie in dem veranschaulichten Beispiel gezeigt ist. Eine derartige Konvention kann zu der ähnlich sein, die durch andere Befehle, wie z. B. die Streuen-zum-Speicher-Befehle, die Vektorkonfliktbefehle und dergleichen, verwendet werden, wobei sie deshalb mit den Algorithmen, die derartige Befehle verwenden, potentiell kompatibler sein kann, wobei es aber nicht erforderlich ist. Wie durch ein „X“ durch einen Nullwert (0) in dem Ergebnisdatenelement unmittelbar neben dem höchstwertigen Ergebnisdatenelement gezeigt ist, wird die Datenelementposition null (0) in diesem Beispiel nicht in dem Ergebnisdatenelement unmittelbar neben dem höchstwertigen Ergebnisdatenelement gespeichert. Stattdessen wird in dieser Ausführungsform die Quelldatenelementposition für das Quelldatenelement gewählt, die sich am nächsten an dem höchstwertigen Ende des gepackten Quelldatenoperanden befindet, wobei daher anstelle des niedrigstwertigen Datenelements die Quelldatenelementposition des höchstwertigen Quelldatenelements verwendet wird. Alternativ können auf Wunsch die Quelldatenelemente am nächsten an dem niedrigstwertigen Ende des gepackten Quelldatenoperanden optional gewählt werden.
  • Zusätzlich kann das Vorhandensein doppelter Quelldatenelementwerte dazu tendieren, Leerstellen oder „Löcher“ zu erzeugen, die die Ergebnisdatenelementpositionen repräsentieren können, für die keine Quelldatenelementwerte gleich sind. In der Annahme, dass die Anzahl der Quell- und Ergebniselemente übereinstimmen, kann z. B. jeder doppelte Quelldatenelementwert dazu tendieren, zu einer entsprechenden Ergebnisdatenelement-Leerstelle zu führen. In dem veranschaulichten Beispiel weist das höchstwertige Ergebnisdatenelement (in diesem Fall das Ergebnisdatenelement ganz links) an einer Datenelementposition drei (3) einen Stern (*) auf, um eine derartige Leerstelle oder ein derartiges Loch anzugeben. Wie gezeigt ist, weist keines der Quelldatenelemente einen Quelldatenelementwert drei (3) auf, oder, mit anderen Worten, keines von 2, 1, 0 oder 2 ist gleich 3. In einigen Ausführungsformen kann in jeder derartigen Leerstelle oder in jedem derartigen Loch ein Ersatzwert gespeichert sein. Die Typen der Ersatzwerte, die vorher im Zusammenhang mit 7 beschrieben worden sind, sind im Allgemeinen geeignet.
  • In 8 kann in einigen Ausführungsformen ein optionaler Ergebnismaskenoperand 878 (z. B. durch eine Ausführungseinheit 818) in Reaktion auf den Befehl und/oder die Operation erzeugt und an einem Zielspeicherort gespeichert werden. In einigen Ausführungsformen kann der Zielspeicherort ein architektonischer Satz von Maskenregistern (z. B. der Operationsmaskenregister 114 für gepackte Daten, der hier anderswo offenbarten k-Maskenregister usw.) sein. Alternativ kann ein Universalregister, ein Register für gepackte Daten oder ein anderer Speicherort optional verwendet werden. Der Ergebnismaskenoperand kann mehrere Maskenelemente (z. B. eine gleiche Anzahl von Maskenelementen wie die Anzahl der Datenelemente in dem gepackten Ergebnisdatenoperanden) aufweisen. In diesem veranschaulichten Beispiel weist der Ergebnismaskenoperand vier Maskenelemente auf.
  • In einigen Ausführungsformen kann der Maskenoperand einen gepackten Datenoperationsmaskenoperanden repräsentieren, der durch einen nachfolgenden maskierten Befehl für gepackte Daten angegeben werden kann, um eine maskierte Operation für gepackte Daten auszuführen. Der Maskenoperand kann hier außerdem einfach als eine Operationsmaske, eine Aussagemaske oder eine Maske bezeichnet werden. Die Maske kann einen Aussageoperanden oder einen Operanden der bedingten Steuerung repräsentieren, der verwendet werden kann, um auszusagen, bedingt zu steuern oder zu maskieren, ob die entsprechenden Operationen ausgeführt werden sollen und/oder die entsprechenden Ergebnisse gespeichert werden sollen. In einigen Ausführungsformen kann das Maskieren oder die Aussage auf einer Granularität pro Datenelement geschehen, so dass die Operationen an verschiedenen Paaren entsprechender Datenelement separat und/oder unabhängig von anderen ausgesagt oder bedingt gesteuert werden können. Die Maske kann mehrere Maskenelemente, Aussageelemente oder Elemente zur bedingten Steuerung enthalten. In einem Aspekt können die Maskenelemente in einer Eins-zu-eins-Übereinstimmung mit entsprechenden Quelldatenelementen und/oder entsprechenden Ergebnisdatenelementen enthalten sein. Wie gezeigt ist, kann in einigen Ausführungsformen jedes Maskenelement ein einziges Maskenbit sein. Alternativ kann jedes der Maskenelemente ein Datenelement mit der gleichen oder einer unterschiedlichen Größe wie die Ergebnisdatenelemente sein. In noch anderen Ausführungsformen kann jedes der Maskenelemente ein einziges Bit eines Datenelements (z. B. ein höchstwertiges Bit oder niedrigstwertiges Bit) sein.
  • In einigen Ausführungsformen kann ein Wert jedes Maskenbits oder anderen Maskenelements betriebsfähig sein, um zu steuern, ob eine entsprechende Operation ausgeführt werden soll und/oder ein entsprechendes Ergebnisdatenelement gespeichert werden soll. Jedes Maskenbit kann z. B. einen ersten Wert aufweisen, um es zu erlauben, dass die Operation ausgeführt wird, und um es zu erlauben, dass das entsprechende Ergebnisdatenelement an dem Ziel gespeichert wird, oder kann einen zweiten, anderen Wert aufweisen, um es nicht zu erlauben, dass die Operation ausgeführt wird, und/oder um es nicht zu erlauben, dass das entsprechende Ergebnisdatenelement an dem Ziel gespeichert wird. Gemäß einer möglichen Konvention kann ein zu einer binären null (d. h., 0) gelöschtes Maskenbit eine ausgeblendete Operation repräsentieren, die nicht ausgeführt werden soll und/oder kein Ergebniselement erzeugen soll, wohingegen ein auf eine binäre eins (d. h., 1) gesetztes Maskenbild eine unmaskierte Operation repräsentieren kann, die ausgeführt werden soll, um ein Ergebniselement zu erzeugen, wie in der Veranschaulichung gezeigt ist. Die entgegengesetzte Konvention ist außerdem möglich.
  • In einigen Ausführungsformen, wenn wenigstens ein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich einer Ergebnisdatenelementposition für ein Ergebnisdatenelement ist, kann das entsprechende Maskenelement, das sich an derselben relativen Position wie das Ergebnisdatenelement befindet, unmaskiert sein (z. B. in der Veranschaulichung einen Wert eins aufweisen). Wenn umgekehrt kein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich einer Ergebnisdatenelementposition für ein Ergebnisdatenelement ist, kann das entsprechende Maskenelement (z. B. an derselben relativen Position wie das Ergebnisdatenelement) maskiert sein (z. B. in der Veranschaulichung einen Wert null aufweisen). Mit anderen Worten, jedes einem Ergebnisdatenelement mit einem Ersatzwert entsprechendes Maskenelement kann maskiert sein.
  • Um bestimmte Konzepte weiter zu veranschaulichen, bezieht sich die Erörterung nach 8 auf die Umsetzung der Streuindizes zu den Sammelindizes. Die gleiche allgemeine Herangehensweise kann jedoch außerdem verwendet werden, um die Sammelindizes in die Streuindizes umzusetzen. Entsprechend kann in einem Aspekt ein derartiger Datenelement-Umordnungsbefehl und/oder eine derartige Datenelement-Umordnungsoperation verwendet werden, um die Streuindizes zu den Sammelindizes und/oder die Sammelindizes zu den Streuindizes umzuordnen.
  • 9 ist ein Blockschaltplan einer ausführlichen beispielhaften Ausführungsform einer Datenelement-Umordnungsausführungseinheit 918, die geeignet ist, um eine Ausführungsform eines Datenelement-Umordnungsbefehls (z. B. eines Streuindizes-zu-Sammelindizes-Umordnungsbefehls) zu implementieren. Die Ausführungseinheit 918 kann zu der Ausführungseinheit 518 ähnlich sein und kann ähnliche Merkmale aufweisen. Um es zu vermeiden, die Beschreibung undeutlich zu machen, werden die unterschiedlichen und/oder zusätzlichen Merkmale in erster Linie beschrieben, ohne alle der optional ähnlichen Merkmale zu wiederholen.
  • Die Ausführungseinheit kann einen gepackten Quelldatenoperanden 970 empfangen. In diesem Beispiel weist für die Leichtigkeit der Veranschaulichung der gepackte Quelldatenoperand nur vier Datenelemente auf, obwohl andere Anzahlen von Datenelementen, die hier anderswo beschrieben sind (z. B. acht, sechzehn, zweiunddreißig, vierundsechzig, einhundertachtundzwanzig usw.), in anderen Ausführungsformen optional verwendet werden können. In der veranschaulichten Ausführungsform weisen die vier Indizes die Werte von rechts nach links von 2, 1, 0 und 2 auf, obwohl diese lediglich Beispiele sind.
  • Die Ausführungseinheit kann eine ähnliche Logik zu der, die vorher für die Ausführungseinheit 518 beschrieben worden ist, enthalten, um einen ersten Satz von Signalen 950 (der z. B. zu dem ersten Satz von Signalen 550 ähnlich sein kann) und einen zweiten Satz von Signalen 952 (der z. B. zu dem zweiten Satz von Signalen 552 ähnlich sein kann) zu erzeugen. Die Ausführungseinheit 918 kann z.B. eine vollständige Eingangskreuzschiene, Komparatoren, Keine-Übereinstimmung-Detektionseinheiten usw. enthalten. Jedes des ersten Satzes von Signalen 950 kann einen Wert oder eine Angabe aufweisen, der bzw. die verwendet werden kann, um einen Ergebnisdatenelementwert für ein anderes entsprechendes Ergebnisdatenelement des gepackten Ergebnisdatenoperanden 972 zu erzeugen. Jedes des zweiten Satzes von Signalen 952 kann einen Wert oder eine Angabe aufweisen, der bzw. die verwendet werden kann, um einen Maskenwert eines anderen entsprechenden Maskenelements eines Ergebnismaskenoperanden 978 zu erzeugen.
  • 10 ist ein Blockschaltplan, der eine beispielhafte Ausführungsform einer Streuindizes-zu-Sammelindizes-Umordnungsoperation 1076 veranschaulicht, die in Reaktion auf eine Ausführungsform eines Streuindizes-zu-Sammelindizes-Umordnungsbefehls (z. B. des Befehls 108 und/oder 708) ausgeführt werden kann. Die Operation kann durch irgendeinen der hier offenbarten verschiedenen Prozessoren (z. B. den Prozessor 100 und/oder 700) ausgeführt werden. Die Operation 1076 ist zu der vorher für 8 beschriebenen Operation 876 ähnlich und kann ähnliche Eigenschaften und Variationen aufweisen. Um es zu vermeiden, die Beschreibung undeutlich zu machen, werden die unterschiedlichen und/oder zusätzlichen Eigenschaften der Operation 1076 in erster Linie beschrieben, ohne alle der optional ähnlichen Eigenschaften und Variationen zu wiederholen.
  • Wie vorher beschrieben worden ist, kann der Befehl einen gepackten Quelldatenoperanden 1070 spezifizieren (z. B. explizit spezifizieren) oder anderweitig angeben (z. B. implizit angeben), wobei in Reaktion auf den Befehl/die Operation ein gepackter Ergebnisdatenoperand 1072 erzeugt werden kann. In der Ausführungsform der Operation 1076 wird jedoch kein Ergebnismaskenoperand erzeugt. Stattdessen kann in dieser Ausführungsform, wenn kein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich einer Ergebnisdatenelementposition für ein Ergebnisdatenelement ist, das Ergebnisdatenelement als einen Ersatz- oder Leerstellenwert einen Wert aufweisen, der von allen anderen Ergebnisdatenelementen unterschieden werden kann, die keinen derartigen Ersatz- oder Leerstellenwert aufweisen. In einigen Ausführungsformen kann ein derartiger Ersatz- oder Leerstellenwert eine negative Zahl sein, wohingegen alle anderen Ergebnisdatenelemente eine positive Zahl aufweisen können. Als ein weiteres Beispiel kann in einigen Ausführungsformen jeder derartige Ersatz- oder Leerstellenwert eine große Zahl sein (z. B. großer als die, die für die Sammel- oder Streuindizes verwendet würde), wohingegen alle anderen Ergebnisdatenelemente eine kleinere Zahl der Größe aufweisen können, die für die Sammel- oder Streuindizes geeignet ist. In noch anderen Ausführungsformen kann irgendein anderer vorgegebener Wert, der von den Nichtersatzwerten der Datenelemente, die von dem Quelloperanden in den Ergebnisoperanden umgeordnet sind, unterschieden werden kann, optional verwendet werden. Beispielhaft kann die Software in einem Test vor der Verwendung der Indizes, um die Sammeln-durch-Indizes-zu-Register-Operation zu steuern, derartige Werte als Unterscheidungswerte verwenden.
  • 11 ist ein Blockschaltplan, der eine beispielhafte Ausführungsform eines Verfahrens 1180 in einem Prozessor zum Ausführen einer Streuen-durch-Indizes-zu-Register-Routine veranschaulicht. Im Block 1181 kann ein Streuindizes-zu-Sammelindizes-Umordnungsbefehl empfangen werden. Der Befehl kann ein erstes Register für gepackte Daten angeben, das einen gepackten Quellindizesoperanden aufweist, der in einem Streumuster angeordnete Indizes aufweist. Der Befehl kann außerdem ein zweites Register für gepackte Daten als einen Zieloperanden angeben. In einigen Ausführungsformen kann der Befehl optional ein Maskenregister als einen Zieloperanden angeben.
  • Im Block 1182 kann ein gepackter Ergebnisindizesoperand in Reaktion auf den Streuindizes-zu-Sammelindizes-Umordnungsbefehl in dem zweiten Register für gepackte Daten gespeichert werden. In einigen Ausführungsformen kann der gepackte Ergebnisindizesoperand in einem Sammelmuster angeordnete Indizes aufweisen. In einigen Ausführungsformen kann der Ergebnismaskenoperand optional in Reaktion auf den Streuindizes-zu-Sammelindizes-Umordnungsbefehl im Maskenregister gespeichert werden. In einigen Ausführungsformen kann der gepackte Ergebnisindizesoperand Leerstellen angeben (z. B. ausgeblendete Werte für die Leerstellen aufweisen).
  • Im Block 1183 kann ein Sammeln-durch-Indizes-zu-Register-Befehl empfangen werden. Der Sammeln-durch-Indizes-zu-Register-Befehl kann ein drittes Register für gepackte Daten als einen gepackten Quelldatenoperanden angeben und kann das zweite Register für gepackte Daten als einen gepackten Quellindizesoperanden mit den in dem Sammelmuster angeordneten Indizes angeben. In einigen Ausführungsformen kann der Sammeln-durch-Indizes-zu-Register-Befehl optional ein Maskenregister als einen Quellmaskenoperanden angeben. Der Sammeln-durch-Indizes-zu-Register-Befehl kann außerdem ein viertes Register für gepackte Daten als einen Zieloperanden angeben.
  • Im Block 1184 kann ein gepackter Ergebnisdatenoperand in Reaktion auf den Sammeln-durch-Indizes-zu-Register-Befehl in dem vierten Register für gepackte Daten gespeichert werden. Der gepackte Ergebnisdatenoperand kann die von dem dritten Register für gepackte Daten unter Verwendung der Indizes aus dem zweiten Register für gepackte Daten gesammelten Datenelemente aufweisen. In einigen Ausführungsformen kann der Sammeln-durch-Indizes-zu-Register-Befehl optional ein maskierter oder ausgesagter Sammeln-durch-Indizes-zu-Register-Befehl sein, wobei die Datenelemente unter Verwendung der Indizes aus dem zweiten Register für gepackte Daten, die optional der Maskierung oder der Aussage durch den optionalen Quellmaskenoperanden unterworfen werden, aus dem dritten Register für gepackte Daten gesammelt werden können.
  • Vorteilhaft kann der Streuindizes-zu-Sammelindizes-Umordnungsbefehl es erlauben, dass die Indizes in ein Format umgeordnet werden, das für den Sammeln-durch-Indizes-zu-Register-Befehl geeignet ist (z. B. so dass eine vorhandene Befehls- und/oder Mikroarchitekturimplementierung wirksam eingesetzt werden kann, um die Streuen-durch-Indizes-zu-Register-Operation auszuführen). Für die Leichtigkeit der Beschreibung wird das Verfahren 1180 unter Verwendung verschiedener Register beschrieben, obwohl erkannt werden soll, dass dasselbe Register für mehrere der beschriebenen Operanden verwendet werden kann.
  • Ein Befehlssatz enthält ein oder mehrere Befehlsformate. Ein gegebenes Befehlsformat definiert verschiedene Felder (Anzahl der Bits, Orte der Bits), um unter anderem die auszuführende Operation (den Opcode) und den (die) Operanden, an dem (denen) die Operation auszuführen ist, zu spezifizieren. Einige Befehlsformate sind durch die Definition von Befehlsschablonen (oder Unterformaten) weiter aufgegliedert. Die Befehlsschablonen eines gegebenen Befehlsformats können z. B. so definiert sein, dass sie andere Teilmengen der Felder des Befehlsformats aufweisen (die enthaltenen Felder sind typischerweise in der gleichen Reihenfolge, wobei wenigstens einige verschiedene Bitpositionen aufweisen, weil weniger Felder enthalten sind), und/oder so definiert sein, dass sie ein gegebenes Feld aufweisen, das anders interpretiert wird. Folglich wird jeder Befehl eines ISA unter Verwendung eines gegebenen Befehlsformats (und in einer gegebenen Befehlsschablone der Befehlsschablonen dieses Befehlsformats, falls sie definiert sind) ausgedrückt, wobei er Felder zum Spezifizieren der Operation und der Operanden enthält. Ein beispielhafter ADD-Befehl weist z. B. einen spezifischen Opcode und ein Befehlsformat auf, das ein Opcode-Feld enthält, um diese Opcode- und Operandenfelder zu spezifizieren, um Operanden (Quelle1/Ziel und Quelle2) auszuwählen; wobei ein Auftreten dieses ADD-Befehls in einem Befehlsstrom spezifische Inhalte in den Operandenfeldern aufweist, die spezifische Operanden auswählen. Ein Satz von SIMD-Erweiterungen, die als die weiterentwickelten Vektorerweiterungen (AVX) (AVX1 und AVX2) bezeichnet werden und das Vektorerweiterungs-Codierungsschema (VEX-Codierungsschema) verwenden, ist freigegeben und/oder veröffentlicht worden (siehe z. B. Intel® 64 and IA-32 Architectures Software Developers Manual, Oktober 2011; und siehe Intel® Advanced Vector Extensions Programming Reference, Juni 2011).
  • Beispielhafte Befehlsformate
  • Die Ausführungsformen des (der) hier beschriebenen Befehls (Befehle) können in verschiedenen Formaten verkörpert sein. Zusätzlich werden im Folgenden beispielhafte Systeme, Architekturen und Pipelines ausführlich beschrieben. Die Ausführungsformen des Befehls (der Befehle) können in derartigen Systemen, Architekturen und Pipelines ausgeführt werden, sind jedoch nicht auf jene eingeschränkt, die ausführlich beschrieben werden.
  • Das VEX-Befehlsformat
  • Die VEX-Codierung ermöglicht, dass Befehle mehr als zwei Operanden aufweisen, und ermöglicht, dass SIMD-Vektorregister länger als 128 Bits sind. Die Verwendung eines VEX-Präfixes stellt eine Syntax für drei (oder mehr) Operanden bereit. Die vorherigen Zwei-Operanden-Befehle führten z.B. Operationen wie z.B. A = A + B aus, der einen Quelloperanden überschreibt. Die Verwendung eines VEX-Präfixes ermöglicht Operanden, zerstörungsfreie Operationen auszuführen, wie z. B. A = B + C.
  • 12A veranschaulicht ein beispielhaftes AVX-Befehlsformat, das ein VEX-Präfix 1202, ein echtes Opcode-Feld 1230, ein Mod R/M-Byte 1240, ein SIB-Byte 1250, ein Verschiebungsfeld 1262 und ein IMM8 1272 enthält. 12B veranschaulicht, welche Felder aus 12A ein vollständiges Opcode-Feld 1274 und ein Basisoperationsfeld 1242 bilden. 12C veranschaulicht, welche Felder aus 12A ein Registerindexfeld 1244 bilden.
  • Das VEX-Präfix (die Bytes 0-2) 1202 ist in einer Drei-Byte-Form codiert. Das erste Byte ist das Formatfeld 1240 (das VEX-Byte 0, die Bits [7:0]), das einen expliziten C4-Byte-Wert (den eindeutigen Wert, der zum Unterscheiden des C4-Befehlsformats verwendet wird) enthält. Die zweiten-dritten Bytes (die VEX-Bytes 1-2) enthalten eine Anzahl von Bitfeldern, die eine spezifische Fähigkeit bereitstellen. Spezifisch besteht das REX-Feld 1205 (das VEX-Byte 1, die Bits [7-5]) aus einem VEX.R-Bitfeld (dem VEX-Byte 1, dem Bit [7] - R), einem VEX.X-Bitfeld (dem VEX-Byte 1, dem Bit [6] -X) und einem VEX.B-Bitfeld (dem VEX-Byte 1, dem Bit [5] - B). Die anderen Felder der Befehle codieren die unteren drei Bits der Registerindizes, wie in der Technik bekannt ist (rrr, xxx und bbb), so dass Rrrr, Xxxx und Bbbb durch das Addieren von VEX.R, VEX.X und VEX.B gebildet werden können. Das Opcode-Abbildungsfeld 1215 (das VEX-Byte 1, die Bits [4:0] - mmmmm) enthält den Inhalt, um ein impliziertes führendes Opcode-Byte zu codieren. Das W-Feld 1264 (das VEX-Byte 2, das Bit [7] - W) - ist durch die Schreibweise VEX.W dargestellt und stellt in Abhängigkeit von dem Befehl verschiedene Funktionen bereit. Die Rolle des VEX.vvvv 1220 (des VEX-Bytes 2, der Bits [6:3] - vvvv) kann das Folgende enthalten: 1) das VEX.vvvv codiert den ersten Quellregisteroperanden, ist in invertierter (1-komplementärer) Form spezifiziert und ist für Befehle mit 2 oder mehr Quelloperanden gültig; 2) das VEX.vvvv codiert den Zielregisteroperanden und ist für bestimmte Vektorverschiebungen in 1-komplementärer Form spezifiziert; oder 3) das VEX.vvvv codiert keinen Operanden, wobei das Feld reserviert ist und 1211b enthalten sollte. Falls das Größenfeld VEX.L 1268 (das VEX-Byte 2, das Bit [2] - L) = 0 ist, gibt es einen 128-Bit-Vektor an; falls VEX.L = 1 gilt, gibt es einen 256-Bit-Vektor an. Das Präfix-Codierungsfeld 1225 (das VEX-Byte 2, die Bits [1:0] - pp) stellt zusätzliche Bits für das Basisoperationsfeld bereit.
  • Das echte Opcode-Feld 1230 (das Byte 3) ist außerdem als das Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • Das MOD R/M-Feld 1240 (das Byte 4) enthält ein MOD-Feld 1242 (die Bits [7-6]), ein Reg-Feld 1244 (die Bits [5-3]) und ein R/M-Feld 1246 (die Bits [2-0]). Die Rolle des Reg-Feldes 1244 kann das Folgende enthalten: Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden (das rrr des Rrrr), oder es kann als eine Opcode-Erweiterung behandelt werden und nicht verwendet werden, um irgendeinen Befehlsoperanden zu codieren. Die Rolle des R/M-Feldes 1246 kann das Folgende enthalten: Codieren des Befehlsoperanden, der auf eine Speicheradresse verweist, oder Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Maßstab, Index, Basis (SIB) - Der Inhalt des Maßstabsfeldes 1250 (das Byte 5) enthält das SS 1252 (die Bits [7-6]), das für die Speicheradressenerzeugung verwendet wird. Auf die Inhalte des SIB.xxx 1254 (der Bits [5-3]) und des SIB.bbb 1256 (der Bits [2-0]) ist vorher bezüglich der Registerindizes Xxxx und Bbbb verwiesen worden.
  • Das Verschiebungsfeld 1262 und das Sofortfeld (IMM8) 1272 enthalten Adressendaten.
  • Das generische vektorfreundliche Befehlsformat
  • Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (es gibt z. B. bestimmte Felder, die für Vektoroperationen spezifisch sind). Während die Ausführungsformen beschrieben werden, in denen sowohl Vektor- als auch Skalaroperationen durch das vektorfreundliche Befehlsformat unterstützt werden, verwenden in alternativen Ausführungsformen nur Vektoroperationen das vektorfreundliche Befehlsformat.
  • Die 13A-13B sind Blockschaltpläne, die ein generisches vektorfreundliches Befehlsformat und dessen Befehlsschablonen gemäß den Ausführungsformen der Erfindung veranschaulichen. 13A ist ein Blockschaltplan, der ein generisches vektorfreundliches Befehlsformat und dessen Befehlsschablonen der Klasse A gemäß den Ausführungsformen der Erfindung veranschaulicht; während 13B ein Blockschaltplan ist, der das generische vektorfreundliche Befehlsformat und dessen Befehlsschablonen der Klasse B gemäß den Ausführungsformen der Erfindung veranschaulicht. Spezifisch ein generisches vektorfreundliches Befehlsformat 1300, für das die Befehlsschablonen der Klasse A und der Klasse B definiert sind, wobei beide von diesen Befehlsschablonen ohne Speicherzugriff 1305 und Befehlsschablonen mit Speicherzugriff 1320 enthalten. Der Begriff generisch im Kontext des vektorfreundlichen Befehlsformats bezieht sich auf das Befehlsformat, das nicht an irgendeinen spezifischen Befehlssatz gebunden ist.
  • Indessen werden die Ausführungsformen der Erfindung beschrieben, in denen das vektorfreundliche Befehlsformat das Folgende unterstützt: eine Länge (oder Größe) der Vektoroperanden von 64 Bytes mit Breiten (oder Größen) der Datenelemente von 32 Bits (4 Bytes) oder 64 Bits (8 Bytes), (wobei folglich ein 64-Byte-Vektor entweder aus 16 Elementen in Doppelwortgröße oder 8 Elementen in Vierfachwortgröße besteht); eine Länge (oder Größe) der Vektoroperanden von 64 Bytes mit Breiten (oder Größen) der Datenelemente von 16 Bits (2 Bytes) oder 8 Bits (1 Byte); eine Länge (oder Größe) der Vektoroperanden von 32 Bytes mit Breiten (oder Größen) der Datenelemente von 32 Bits (4 Bytes), 64 Bits (8 Bytes), 16 Bits (2 Bytes) oder 8 Bits (1 Byte); und eine Länge (oder Größe) der Vektoroperanden von 16 Bytes mit Breiten (oder Größen) der Datenelemente von 32 Bits (4 Bytes), 64 Bits (8 Bytes), 16 Bits (2 Bytes) oder 8 Bits (1 Byte); alternative Ausführungsformen können mehr, weniger und/oder andere Größen der Vektoroperanden (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder anderen Breiten der Datenelemente (z. B. Breiten der Datenelemente von 128 Bits (16 Bytes)) unterstützen.
  • Die Befehlsschablonen der Klasse A in 13A enthalten Folgendes: 1) innerhalb der Befehlsschablonen ohne Speicherzugriff 1305 ist eine Befehlsschablone einer Operation 1310 des Typs der vollen Rundensteuerung ohne Speicherzugriff und eine Befehlsschablone einer Operation 1315 des Datentransformationstyps ohne Speicherzugriff gezeigt; und 2) innerhalb der Befehlsschablonen mit Speicherzugriff 1320 ist eine zeitliche Befehlsschablone 1325 mit Speicherzugriff und eine nicht zeitliche Befehlsschablone 1330 mit Speicherzugriff gezeigt. Die Befehlsschablonen der Klasse B in 13B enthalten Folgendes: 1) innerhalb der Befehlsschablonen ohne Speicherzugriff 1305 ist eine Befehlsschablone einer Operation 1312 des Typs der Teilrundensteuerung mit Schreibmaskensteuerung und ohne Speicherzugriff und eine Befehlsschablone einer Operation 1317 des vsize-Typs mit Schreibmaskensteuerung und ohne Speicherzugriff gezeigt; und 2) innerhalb der Befehlsschablonen mit Speicherzugriff 1320 ist eine Befehlsschablone mit Schreibmaskensteuerung 1327 und Speicherzugriff gezeigt.
  • Das generische vektorfreundliche Befehlsformat 1320 enthält die folgenden Felder, die im Folgenden in der in den 13A-13B veranschaulichten Reihenfolge aufgelistet sind.
  • Das Formatfeld 1340 - ein spezifischer Wert (ein Befehlsformat-Kennungswert) in diesem Feld identifiziert eindeutig das vektorfreundliche Befehlsformat und folglich die Auftritte von Befehlen in dem vektorfreundlichen Befehlsformat in den Befehlsströmen. Dieses Feld ist als solches in dem Sinn optional, dass es für einen Befehlssatz, der nur das generische vektorfreundliche Befehlsformat aufweist, nicht erforderlich ist.
  • Das Basisoperationsfeld 1342 - sein Inhalt unterscheidet die verschiedenen Basisoperationen.
  • Das Registerindexfeld 1344 - sein Inhalt spezifiziert direkt oder durch Adressenerzeugung die Orte der Quell- und Zieloperanden, ob sie sich in Registern oder im Speicher befinden. Diese enthalten eine ausreichende Anzahl von Bits, um N Register aus einer P × Q-Register Datei (z. B. 32 × 512, 16 × 128, 32 × 1024, 64 × 1024) auszuwählen. Während in einer Ausführungsform N bis zu drei Quellen und ein Zielregister sein kann, können alternative Ausführungsformen mehr oder weniger Quellen und Zielregister unterstützen (sie können z. B. bis zu zwei Quellen unterstützen, wobei eine dieser Quellen außerdem als das Ziel wirkt, sie können bis zu drei Quellen unterstützen, wobei eine dieser Quellen außerdem als das Ziel wirkt, und sie können bis zu zwei Quellen und ein Ziel unterstützen).
  • Das Modifiziererfeld 1346 - sein Inhalt unterscheidet die Vorkommen der Befehle in dem generischen Vektorbefehlsformat, die den Vektorzugriff spezifizieren, von jenen, die dies nicht tun; d. h., zwischen den Befehlsschablonen ohne Speicherzugriff 1305 und den Befehlsschablonen 1320 mit Speicherzugriff. Die Operationen mit Speicherzugriff lesen und/oder schreiben in die Speicherhierarchie (wobei sie in einigen Fällen die Quell- und/oder Zieladressen unter Verwendung der Werte in den Registern spezifizieren), während die Operationen ohne Speicherzugriff dies nicht tun (z. B. die Quelle und die Ziele sind Register). Während in einer Ausführungsform dieses Feld außerdem zwischen drei verschiedenen Weisen unterscheidet, um die Speicheradressenberechnungen auszuführen, können alternative Ausführungsformen mehr, weniger oder andere Weisen unterstützen, um die Speicheradressenberechnungen auszuführen.
  • Das Vergrößerungsoperationsfeld 1350 - sein Inhalt unterscheidet, welche von einer Vielfalt verschiedener Operationen zusätzlich zu der Basisoperation auszuführen ist. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Erfindung ist dieses Feld in ein Klassenfeld 1368, ein Alphafeld 1352 und ein Betafeld 1354 unterteilt. Das Vergrößerungsoperationsfeld 1350 ermöglicht, dass gemeinsame Gruppen von Operationen anstatt in 2, 3 oder 4 Befehlen in einem einzigen Befehl ausgeführt werden.
  • Das Maßstabsfeld 1360 - sein Inhalt ermöglicht das Skalieren des Inhalts des Indexfeldes für die Speicheradressenerzeugung (z. B. für die Adressenerzeugung, die 2Maßstab * Index + Basis verwendet).
  • Das Verschiebungsfeld 1362A - sein Inhalt wird als ein Teil der Speicheradressenerzeugung verwendet (z. B. für die Adressenerzeugung, die 2Maßstab * Index + Basis + Verschiebung verwendet).
  • Das Verschiebungsfaktorfeld 1362B (es sei angegeben, dass die Nebeneinanderstellung des Verschiebungsfeldes 1362A direkt über dem Verschiebungsfaktorfeld 1362B angibt, dass das eine oder das andere verwendet wird) - sein Inhalt wird als Teil der Adressenerzeugung verwendet; es spezifiziert einen Verschiebungsfaktor, der mit der Größe eines Speicherzugriffs (N) zu skalieren ist - wobei N die Anzahl der Bytes in dem Speicherzugriff ist (z. B. für die Adressenerzeugung, die 2Maßstab * Index + Basis + skalierte Verschiebung verwendet). Redundante Bits niedriger Ordnung werden ignoriert, wobei folglich der Inhalt des Verschiebungsfaktorfeldes mit der Gesamtgröße (N) der Speicheroperanden multipliziert wird, um die endgültige Verschiebung zu erzeugen, die beim Berechnen einer effektiven Adresse zu verwenden ist. Der Wert von N wird durch die Prozessor-Hardware zur Laufzeit basierend auf dem vollen Opcode-Feld 1374 (das hier später beschrieben wird) und dem Datenmanipulationsfeld 1354C bestimmt. Das Verschiebungsfeld 1362A und das Verschiebungsfaktorfeld 1362B sind in dem Sinn optional, dass sie für die Befehlsschablonen ohne Speicherzugriff 1305 nicht verwendet werden und/oder verschiedene Ausführungsformen nur eines oder keines der beiden implementieren können.
  • Das Datenelementbreitenfeld 1364 - sein Inhalt unterscheidet, welche von einer Anzahl von Datenelementbreiten verwendet werden soll (in einigen Ausführungsformen für alle Befehle; in anderen Ausführungsformen nur für einige der Befehle). Dieses Feld ist in dem Sinn optional, dass es nicht erforderlich ist, falls nur eine Datenelementbreite unterstützt wird und/oder die Datenelementbreiten unter Verwendung irgendeines Aspekts der Opcodes unterstützt werden.
  • Das Schreibmaskenfeld 1370 - sein Inhalt steuert auf einer Grundlage pro Datenelementposition, ob die Datenelementposition in dem Zielvektoroperanden das Ergebnis der Basisoperation und der Vergrößerungsoperation widerspiegelt. Die Befehlsschablonen der Klasse A unterstützen die Verschmelzungs-Schreibmaskierung, während die Befehlsschablonen der Klasse B sowohl die Verschmelzungs- als auch die Nullsetzungs-Schreibmaskierung unterstützen. Beim Verschmelzen ermöglichen die Vektormasken, dass irgendein Satz von Elementen in dem Ziel während der Ausführung irgendeiner Operation (die durch die Basisoperation und die Vergrößerungsoperation spezifiziert ist) vor Aktualisierungen geschützt ist; in einer anderen Ausführungsform wird der alte Wert jedes Element des Ziels, wo das entsprechende Maskenbit eine 0 aufweist, beibehalten. Im Gegensatz ermöglichen die Vektormasken bei der Nullsetzung, dass während der Ausführung irgendeiner Operation (die durch die Basisoperation und die Vergrößerungsoperation spezifiziert ist) irgendein Satz von Elementen in dem Ziel null gesetzt wird; in einer Ausführungsform wird ein Element des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen 0-Wert aufweist. Eine Teilmenge dieser Funktionalität ist die Fähigkeit, die Vektorlänge der Operation, die ausgeführt wird, (d. h., die Spanne der Elemente, die modifiziert werden, vom ersten bis zum letzten) zu steuern; es ist jedoch nicht notwendig, dass die Elemente, die modifiziert werden, aufeinanderfolgend sind. Folglich ermöglicht das Schreibmaskenfeld 1370 teilweise Vektoroperationen, einschließlich Ladeoperationen, Speicheroperationen, arithmetisch, logisch usw. Während die Ausführungsformen der Erfindung beschrieben werden, in denen der Inhalt des Schreibmaskenfeldes 1370 eines aus einer Anzahl von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält, (wobei folglich der Inhalt des Schreibmaskenfeldes 1370 indirekt identifiziert, dass die Maskierung auszuführen ist), ermöglichen alternative Ausführungsformen stattdessen oder zusätzlich, dass der Inhalt des Schreibmaskenfeldes 1370 direkt die Maskierung spezifiziert, die auszuführen ist.
  • Das Sofortfeld 1372 - sein Inhalt ermöglicht die Spezifikation eines Sofortwerts. Dieses Feld ist in dem Sinn optional, dass es in einer Implementierung des generischen vektorfreundlichen Formats nicht vorhanden ist, die keinen Sofortwert unterstützt, und dass es in Befehlen nicht vorhanden ist, die keinen Sofortwert verwenden.
  • Das Klassenfeld 1368 - sein Inhalt unterscheidet zwischen verschiedenen Klassen von Befehlen. In den 13A-B wählen die Inhalte dieses Feldes zwischen den Befehlen der Klasse A und der Klasse B aus. In den 13A-B werden die Vierecke mit abgerundeten Ecken verwendet, um einen spezifischen Wert anzugeben, der in einem Feld vorhanden ist (z. B. Klasse A 1368A bzw. Klasse B 1368B für das Klassenfeld 1368 in 13A-B).
  • Die Befehlsschablonen der Klasse A
  • In dem Fall der Befehlsschablonen ohne Speicherzugriff 1305 der Klasse A wird das Alphafeld 1352 als ein RS-Feld 1352A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Vergrößerungsoperationstypen ausgeführt werden soll (z. B. das Runden 1352A.1 und die Datentransformation 1352A.2 sind für die Befehlsschablonen der Operation 1310 des Rundentyps ohne Speicherzugriff bzw. der Operation 1315 des Datentransformationstyps ohne Speicherzugriff spezifiziert), während das Betafeld 1354 unterscheidet, welche der Operationen des spezifizierten Typs ausgeführt werden soll. In den Befehlsschablonen ohne Speicherzugriff 1305 sind das Maßstabsfeld 1362, das Verschiebungsfeld 1362A und das Verschiebungsmaßstabsfeld 1362B nicht vorhanden.
  • Die Befehlsschablonen ohne Speicherzugriff - die Operation des Typs der vollen Rundensteuerung
  • In der Befehlsschablone der Operation 1310 des Typs der vollen Rundensteuerung ohne Speicherzugriff wird das Betafeld 1354 als ein Rundensteuerfeld 1354A interpretiert, dessen Inhalt(e) ein statisches Runden bereitstellen. Während in den beschriebenen Ausführungsformen der Erfindung das Rundensteuerfeld 1354A ein Feld 1356 zum Unterdrücken aller Gleitkomma-Ausnahmen (SAE) und ein Rundenoperations-Steuerfeld 1358 enthält, können alternative Ausführungsformen das Codieren dieser beiden Konzepte in dasselbe Feld unterstützen oder können nur das eine oder das andere dieser Konzepte/Felder aufweisen (können z. B. nur das Rundenoperations-Steuerfeld 1358 aufweisen).
  • Das SAE-Feld 1356 - sein Inhalt unterscheidet, ob die Ausnahmeereignismeldung zu sperren ist oder nicht; wenn der Inhalt des SAE-Feldes 1356 angibt, dass die Unterdrückung freigegeben ist, meldet ein gegebener Befehl keine Art eines Gleitkomma-Ausnahmemerkers und startet keine Gleitkomma-Ausnahmebehandlungseinrichtung.
  • Das Rundenoperations-Steuerfeld 1358 - sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen auszuführen ist (z. B. Aufrunden, Abrunden, Runden zur Null und Runden zum Nächsten). Folglich ermöglicht das Rundenoperations-Steuerfeld 1358 das Ändern des Rundungsmodus auf einer Grundlage pro Befehl. In einer Ausführungsform der Erfindung, in der ein Prozessor ein Steuerregister zum Spezifizieren der Rundungsmodi enthält, setzt der Inhalt des Rundenoperations-Steuerfelds 1350 diesen Registerwert außer Kraft.
  • Die Befehlsschablonen ohne Speicherzugriff - die Operation des Datentransformationstyps
  • In der Befehlsschablone der Operation 1315 des Datentransformationstyps ohne Speicherzugriff wird das Betafeld 1354 als ein Datentransformationsfeld 1354B interpretiert, dessen Inhalt unterscheidet, welche aus einer Anzahl von Datentransformationen ausgeführt werden soll (z. B. keine Datentransformation, Swizzle, Rundsenden).
  • In dem Fall einer Befehlsschablone mit Speicherzugriff 1320 der Klasse A wird das Alphafeld 1352 als ein Räumungshinweisfeld 1352B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise verwendet werden soll (in 13A sind zeitlich 1352B.1 und nicht zeitlich 1352B.2 für die zeitliche Befehlsschablone mit Speicherzugriff 1325 bzw. die nicht zeitliche Befehlsschablone mit Speicherzugriff 1330 spezifiziert), während das Betafeld 1354 als ein Datenmanipulationsfeld 1354C interpretiert wird, dessen Inhalt unterscheidet, welche von einer Anzahl von Datenmanipulationsoperationen (die außerdem als Grundelemente bekannt sind) ausgeführt werden soll (z. B. keine Manipulation; Rundsenden; Aufwärtsumsetzung einer Quelle; und Abwärtsumsetzung eines Ziels). Die Befehlsschablonen mit Speicherzugriff 1320 enthalten das Maßstabsfeld 1360 und optional das Verschiebungsfeld 1362A oder das Verschiebungsmaßstabsfeld 1362B.
  • Die Vektorspeicherbefehle führen Vektor-Ladeoperationen aus dem und Vektor-Speicheroperationen in den Speicher mit Umsetzungsunterstützung aus. Wie bei regelmäßigen Vektorbefehlen übertragen die Vektorspeicherbefehle Daten von dem/zu dem Speicher in einer datenelementweisen Weise, wobei die Elemente, die tatsächlich übertragen werden, durch die Inhalte der Vektormaske vorgeschrieben sind, die als die Schreibmaske ausgewählt ist.
  • Die Befehlsschablonen mit Speicherzugriff - zeitlich
  • Die zeitlichen Daten sind Daten, die wahrscheinlich bald genug erneut verwendet werden, um von der Cache-Speicherung zu profitieren. Dies ist jedoch ein Hinweis, wobei verschiedene Prozessoren ihn in verschiedener Weise implementieren können, einschließlich des völligen Ignorierens des Hinweises.
  • Die Befehlsschablonen mit Speicherzugriff - nicht zeitlich
  • Es ist unwahrscheinlich, dass die nicht zeitlichen Daten bald genug erneut verwendet werden, um von der Cache-Speicherung im Cache der 1. Ebene zu profitieren, wobei ihnen die Priorität für die Räumung gegeben werden sollte. Dies ist jedoch ein Hinweis, wobei verschiedene Prozessoren ihn in verschiedener Weise implementieren können, einschließlich des völligen Ignorierens des Hinweises.
  • Die Befehlsschablonen der Klasse B
  • In dem Fall der Befehlsschablonen der Klasse B wird das Alphafeld 1352 als ein Schreibmasken-Steuerfeld 1352C (Z) interpretiert, dessen Inhalt unterscheidet, ob die durch das Schreibmaskenfeld 1370 gesteuerte Schreibmaskierung eine Verschmelzung oder eine Nullsetzung sein sollte.
  • In dem Fall der Befehlsschablonen ohne Speicherzugriff 1305 der Klasse B wird ein Teil des Betafeldes 1354 als ein RL-Feld 1357A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Vergrößerungsoperationstypen ausgeführt werden soll (z. B. das Runden 1357A.1 und die Vektorlänge (VSIZE) 1357A.2 sind jeweils für die Befehlsschablone der Operation 1312 des Typs der Teilrundensteuerung mit Schreibmaskensteuerung und ohne Speicherzugriff bzw. die Befehlsschablone der Operationen 1317 des VSIZE-Typs mit Schreibmaskensteuerung und ohne Speicherzugriff spezifiziert), während der Rest des Betafeldes 1354 unterscheidet, welche der Operationen des spezifizierten Typs ausgeführt werden soll. In den Befehlsschablonen ohne Speicherzugriff 1305 sind das Maßstabsfeld 1360, das Verschiebungsfeld 1362A und das Verschiebungsmaßstabsfeld 1362B nicht vorhanden.
  • In der Befehlsschablone der Operation 1310 des Typs der Teilrundensteuerung mit Schreibmaskensteuerung und ohne Speicherzugriff wird der Rest des Betafeldes 1354 als ein Rundenoperationsfeld 21359A interpretiert, wobei die Ausnahmeereignismeldung gesperrt ist (ein gegebener Befehl meldet keine Art eines Gleitkomma-Ausnahmemerkers und startet keine Gleitkomma-Ausnahmebehandlungseinrichtung).
  • Das Rundenoperations-Steuerfeld 1359A - genau wie das Rundenoperations-Steuerfeld 1358, sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen auszuführen ist (z. B. Aufrunden, Abrunden, Runden zur Null und Runden zum Nächsten). Folglich ermöglicht das Rundenoperations-Steuerfeld 1359A das Ändern des Rundungsmodus auf einer Grundlage pro Befehl. In einer Ausführungsform der Erfindung, in der ein Prozessor ein Steuerregister zum Spezifizieren der Rundungsmodi enthält, setzt der Inhalt des Rundenoperations-Steuerfeldes 1350 diesen Registerwert außer Kraft.
  • In der Befehlsschablone der Operation 1317 des VSIZE-Typs mit Schreibmaskensteuerung und ohne Speicherzugriff wird der Rest des Betafeldes 1354 als ein Vektorlängenfeld 1359B interpretiert, dessen Inhalt unterscheidet, mit welcher von einer Anzahl von Datenvektorlängen gearbeitet werden soll (z. B. 128, 256 oder 512 Bytes).
  • In dem Fall einer Befehlsschablone mit Speicherzugriff 1320 der Klasse B wird ein Teil des Betafeldes 1354 als ein Rundsendefeld 1357B interpretiert, dessen Inhalt unterscheidet, ob eine Datenmanipulationsoperation des Rundsendetyps ausgeführt werden soll, während der Rest des Betafeldes 1354 als das Vektorlängenfeld 1359B interpretiert wird. Die Befehlsschablonen mit Speicherzugriff 1320 enthalten das Maßstabsfeld 1360 und optional das Verschiebungsfeld 1362A oder das Verschiebungsmaßstabsfeld 1362B.
  • Bezüglich des generischen vektorfreundlichen Befehlsformats 1300 ist gezeigt, dass ein volles Opcode-Feld 1374 das Formatfeld 1340, das Basisoperationsfeld 1342 und das Datenelementbreitenfeld 1364 enthält. Während eine Ausführungsform gezeigt ist, in der das volle Opcode-Feld 1374 alle diese Felder enthält, wobei das volle Opcode-Feld 1374 in den Ausführungsformen, die nicht alle von ihnen unterstützen, weniger als alle dieser Felder enthält. Das volle Opcode-Feld 1374 stellt den Operationscode (den Opcode) bereit.
  • Das Vergrößerungsoperationsfeld 1350, das Datenelementbreitenfeld 1364 und das Schreibmaskenfeld 1370 ermöglichen, dass diese Merkmale in dem generischen vektorfreundlichen Befehlsformat auf einer Grundlage pro Befehl spezifiziert werden.
  • Die Kombination des Schreibmaskenfeldes und des Datenelementbreitenfeldes erzeugt typisierte Befehle, weil sie ermöglichen, dass die Maske basierend auf verschiedenen Datenelementbreiten angewendet wird.
  • Die verschiedenen Befehlsschablonen, die innerhalb der Klasse A und der Klasse B gefunden werden, sind in verschiedenen Situationen vorteilhaft. In einigen Ausführungsformen der Erfindung können verschiedene Prozessoren oder verschiedene Kerne innerhalb eines Prozessors nur die Klasse A, nur die Klasse B oder beide Klassen unterstützen. Ein Hochleistungs-Out-of-Order-Universalkern, der für die Universalberechnung vorgesehen ist, kann nur die Klasse B unterstützen, ein Kern, der hauptsächlich für die Graphik- und/oder wissenschaftliche (Durchsatz-) Berechnung vorgesehen ist, kann nur die Klasse A unterstützen, und ein Kern, der für beides vorgesehen ist, kann beides unterstützen (selbstverständlich befindet sich ein Kern, der irgendeine Mischung der Schablonen und der Befehle aus beiden Klassen, aber nicht alle Schablonen und Befehle aus beiden Klassen aufweist, innerhalb des Geltungsbereichs dieser Erfindung). Außerdem kann ein einziger Prozessor mehrere Kerne enthalten, von denen alle die gleiche Klasse unterstützen oder in denen verschiedene Kerne verschiedene Klassen unterstützen. In einem Prozessor mit separaten Graphik- und Universalkernen kann z. B. einer der Graphikkerne, der hauptsächlich für Graphik- und/oder wissenschaftliche Berechnung vorgesehen ist, nur die Klasse A unterstützen, während einer oder mehrerer der Universalkerne Hochleistungs-Universalkerne mit Out-of-Order-Ausführung und Registerumbenennung sein können, die für die Universalberechnung vorgesehen sind, die nur die Klasse B unterstützen. Ein weiterer Prozessor, der keinen separaten Graphikkern aufweist, kann einen oder mehrere In-Order- oder Out-of-Order-Universalkerne enthalten, die sowohl die Klasse A als auch die Klasse B unterstützen. Selbstverständlich können die Merkmale von einer Klasse außerdem in anderen Ausführungsformen der Erfindung in der anderen Klasse implementiert sein. Die Programme, die in einer höheren Sprache geschrieben sind, würden (z. B. rechtzeitig kompiliert oder statisch kompiliert) in eine Vielfalt verschiedener ausführbarer Formen übersetzt werden, einschließlich des Folgenden: 1) eine Form, die nur die Befehle der Klasse(n) aufweist, die durch den Zielprozessor für die Ausführung unterstützt wird (werden); oder 2) eine Form, die alternative Routinen aufweist, die unter Verwendung verschiedener Kombinationen der Befehle aller Klassen geschrieben sind und die Steuerungsablaufcode aufweisen, der die auszuführenden Routinen basierend auf den Befehlen auswählt, die durch den Prozessor unterstützt werden, der gegenwärtig den Code ausführt.
  • Ein beispielhaftes spezifisches vektorfreundliches Befehlsformat
  • 14 ist ein Blockschaltplan, der ein beispielhaftes spezifisches vektorfreundliches Befehlsformat gemäß den Ausführungsformen der Erfindung veranschaulicht. 14 zeigt ein spezifisches vektorfreundliches Befehlsformat 1400, das in dem Sinn spezifisch ist, dass es sowohl den Ort, die Größe, die Interpretation und die Reihenfolge der Felder als auch die Werte für einige dieser Felder spezifiziert. Das spezifische vektorfreundliche Befehlsformat 1400 kann verwendet werden, um den x86-Befehlssatz zu erweitern, wobei folglich einige der Felder ähnlich oder die gleichen wie jene sind, die in dem vorhandenen x86-Befehlssatz und dessen Erweiterung (z. B. AVX) verwendet werden. Dieses Format bleibt mit dem Präfixcodierungsfeld, dem echten Opcode-Byte-Feld, dem MOD R/M-Feld, dem SIB-Feld, dem Verschiebungsfeld und den Sofortfeldern des vorhandenen x86-Befehlssatzes mit Erweiterungen konsistent. Die Felder nach 13, in die die Felder nach 14 abbilden, sind veranschaulicht.
  • Es sollte erkannt werden, dass, obwohl die Ausführungsformen der Erfindung unter Bezugnahme auf das spezifische vektorfreundliche Befehlsformat 1400 im Kontext des generischen vektorfreundlichen Befehlsformats 1300 für Veranschaulichungszwecke beschrieben werden, die Erfindung nicht auf das spezifische vektorfreundliche Befehlsformat 1400 eingeschränkt ist, mit Ausnahme, wo es beansprucht ist. Das generische vektorfreundliche Befehlsformat 1300 betrachtet z. B. verschiedene mögliche Größen für die verschiedenen Felder, während gezeigt ist, dass das spezifische vektorfreundliche Befehlsformat 1400 Felder mit spezifischen Größen aufweist. Während als ein spezifisches Beispiel das Datenelementbreitenfeld 1364 in dem spezifischen vektorfreundlichen Befehlsformat 1400 als ein Ein-Bit-Feld veranschaulicht ist, ist die Erfindung nicht in dieser Weise eingeschränkt (d. h., das generische vektorfreundliche Befehlsformat 1300 betrachtet andere Größen des Datenelementbreitenfelds 1364).
  • Das generische vektorfreundliche Befehlsformat 1300 enthält die folgenden Felder, die im Folgenden in der in 14A veranschaulichten Reihenfolge aufgelistet sind.
  • Das EVEX-Präfix (die Bytes 0-3) 1402 - ist in einer Vier-Byte-Form codiert.
  • Das Formatfeld 1340 (das EVEX-Byte 0, die Bits [7:0]) - das erste Byte (das EVEX-Byte 0) ist das Formatfeld 1340, wobei es 0x62 enthält (den eindeutigen Wert, der zum Unterscheiden des vektorfreundlichen Befehlsformats in einer Ausführungsform der Erfindung verwendet wird).
  • Die zweiten-vierten Bytes (die EVEX-Bytes 1-3) enthalten eine Anzahl von Bitfeldern, die eine spezifische Fähigkeit bereitstellen.
  • Das REX-Feld 1405 (das EVEX-Byte 1, die Bits [7-5]) - besteht aus einem EVEX.R-Bitfeld (dem EVEX-Byte 1, dem Bit [7] - R), einem EVEX.X-Bitfeld (dem EVEX-Byte 1, dem Bit [6] -X) und dem 1357BEX-Byte 1, dem Bit [5] - B). Das EVEX.R-, das EVEX.X- und das EVEX.B-Bitfeld stellen die gleiche Funktionalität wie die entsprechenden VEX-Bitfelder bereit, wobei sie unter Verwendung der 1-Komplementform codiert sind, d. h., ZMM0 ist als 1211B codiert, ZMM15 ist als 0000B codiert. Andere Felder der Befehle codieren die unteren drei Bits der Registerindizes, wie es in der Technik bekannt ist (rrr, xxx und bbb), so dass Rrrr, Xxxx und Brrr durch das Addieren von EVEX.R, EVEX.X und EVEX.B gebildet werden können.
  • Das REX'-Feld 1310 - dies ist der erste Teil des REX'-Feldes 1310 und ist das EVEX.R'-Bitfeld (das EVEX-Byte 1, das Bit [4] - R'), das verwendet wird, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Register-Satzes zu codieren. In einer Ausführungsform der Erfindung ist dieses Bit zusammen mit anderen, wie im Folgenden angegeben wird, in einem bitinvertierten Format gespeichert, um es (in dem wohlbekannten x86-32-Bit-Modus) von dem BOUND-Befehl zu unterscheiden, dessen echtes Opcode-Byte 62 ist, das aber in dem (im Folgenden beschriebenen) MOD R/M-Feld den Wert von 11 in dem MOD-Feld nicht akzeptiert; alternative Ausführungsformen der Erfindung speichern dieses und die anderen im Folgenden angegebenen Bits nicht in dem invertierten Format. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, R'Rrrr wird durch das Kombinieren von EVEX.R', EVEX.R und den anderen RRR von den anderen Feldern gebildet.
  • Das Opcode-Abbildungsfeld 1415 (das EVEX-Byte 1, die Bits [3:0] - mmmm) - sein Inhalt codiert ein impliziertes führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Das Datenelementbreitenfeld 1364 (das EVEX-Byte 2, das Bit [7] - W) - ist durch die Schreibweise EVEX.W dargestellt. EVEX.W wird verwendet, um die Granularität (die Größe) des Datentyps zu definieren (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente).
  • Das EVEX.vvvv 1420 (das EVEX-Byte 2, die Bits [6:3] - vvvv) - die Rolle des EVEX.vvvv kann das Folgende enthalten: 1) EVEX.vvvv codiert den ersten Quellregisteroperanden, ist in einer invertieren (1-Komplement-) Form spezifiziert und ist für Befehle mit 2 oder mehr Quelloperanden gültig; 2) EVEX.vvvv codiert den Zielregisteroperanden und ist in 1-Komplement-Form für bestimmte Vektorverschiebungen spezifiziert; oder 3) EVEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1211b enthalten. Folglich codiert das EVEX.vvvv-Feld 1420 die 4 Bits niedriger Ordnung des ersten Quellregister-Spezifikationselements, das in invertierter (1-Komplement-) Form gespeichert ist. In Abhängigkeit von dem Befehl wird ein zusätzliches anderes EVEX-Bitfeld verwendet, um die Größe des Spezifikationselements auf 32 Register zu erweitern.
  • Das EVEX.U 1368 Klassenfeld (das EVEX-Byte 2, das Bit [2] - U) - Falls EVEX.U = 0 gilt, gibt es die Klasse A oder EVEX.U0 an; falls EVEX.U = 1 gilt, gibt es die Klasse B oder EVEX.U1 an.
  • Das Präfixcodierungsfeld 1425 (das EVEX-Byte 2, die Bits [1:0] - pp) - stellt zusätzliche Bits für das Basisoperationsfeld bereit. Zusätzlich zum Bereitstellen von Unterstützung für die Alt-SSE-Befehle in dem EVEX-Präfixformat weist dies außerdem den Vorteil des Verdichtens des SIMD-Präfixes auf (anstatt ein Byte zu erfordern, um das SIMD-Präfix auszudrücken, erfordert das EVEX-Präfix nur 2 Bits). Um die Alt-SSE-Befehle, die das SIMD-Präfix verwenden (66H, F2H, F3H), sowohl im Altformat als auch im EVEX-Präfixformat zu unterstützen, sind in einer Ausführungsform diese Alt-SIMD-Präfixe in dem SIMD-Präfixcodierungsfeld codiert; wobei sie zur Laufzeit in den Alt-SIMD-Präfix expandiert werden, bevor sie dem PLA des Codierers bereitgestellt werden (so kann der PLA sowohl das Alt- als auch das EVEX-Format dieser Altbefehle ohne Modifikation ausführen). Obwohl neuere Befehle den Inhalt des EVEX-Präfixcodierungsfeldes als eine Opcode-Erweiterung direkt verwenden könnten, erweitern bestimmte Ausführungsformen in einer ähnlichen Weise für die Konsistenz, wobei sie es aber ermöglichen, dass durch diese Alt-SIMD-Präfixe verschiedene Bedeutungen spezifiziert werden. Eine alternative Ausführungsform kann den PLA neu konstruieren, um die 2-Bit-SIMD-Präfixcodierungen zu unterstützen, und erfordert folglich die Erweiterung nicht.
  • Das Alphafeld 1352 (das EVEX-Byte 3, das Bit [7] - EH; außerdem als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.Schreibmaskensteuerung und EVEX.N bekannt; außerdem mit α veranschaulicht) - wie vorher beschrieben worden ist, ist dieses Feld kontextspezifisch.
  • Das Betafeld 1354 (das EVEX-Byte 3, die Bits [6:4] - SSS, außerdem als EVEX.s2-0, EVEX.r2-0, EVEX.rrl, EVEX.LL0, EVEX.LLB bekannt; außerdem mit βββ veranschaulicht) - wie vorher beschrieben worden ist, ist dieses Feld kontextspezifisch.
  • Das REX'-Feld 1310 - dies ist der Rest des REX'-Feldes und ist das EVEX.V'-Bitfeld (das EVEX-Byte 3, das Bit [3] - V'), das verwendet werden kann, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Register-Satzes zu codieren. Dieses Bit ist in einem bitinvertierten Format gespeichert. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, V'VVVV wird durch das Kombinieren von EVEX.V', EVEX.vvvv gebildet.
  • Das Schreibmaskenfeld 1370 (das EVEX-Byte 3, die Bits [2:0] - kkk) - sein Inhalt spezifiziert den Index eines Registers in den Schreibmaskenregistern, wie vorher beschrieben worden ist. In einer Ausführungsform der Erfindung weist der spezifische Wert EVEX.kkk = 000 ein spezifisches Verhalten auf, das impliziert, dass für den speziellen Befehl keine Schreibmaske verwendet wird (dies kann in verschiedenen Weisen einschließlich der Verwendung einer Schreibmaske, die mit allen festverdrahtet ist, oder Hardware, die die Maskierungs-Hardware umgeht, implementiert sein).
  • Das echte Opcode-Feld 1430 (das Byte 4) ist außerdem als das Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • Das MOD R/M-Feld 1440 (das Byte 5) enthält das MOD-Feld 1442, das Reg-Feld 1444 und das R/M-Feld 1446. Wie vorher beschrieben worden ist, unterscheidet der Inhalt des MOD-Feldes 1442 zwischen Operationen mit Speicherzugriff und ohne Speicherzugriff. Die Rolle des Reg-Feldes 1444 kann in zwei Situationen zusammengefasst werden: Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden oder kann als eine Opcode-Erweiterung behandelt werden und nicht verwendet werden, um irgendeinen Befehlsoperanden zu codieren. Die Rolle des R/M-Feldes 1446 kann das Folgende enthalten: Codieren des Befehlsoperanden, der auf eine Speicheradresse verweist, oder Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Das Maßstab-, Index-, Basis- (SIB-) Byte (das Byte 6) - Wie vorher beschrieben worden ist, wird der Inhalt des Maßstabfeldes 1350 für die Speicheradressenerzeugung verwendet. Das SIB.xxx 1454 und das SIB.bbb 1456 - auf die Inhalte dieser Felder ist vorher bezüglich der Registerindizes Xxxx und Bbbb verwiesen worden.
  • Das Verschiebungsfeld 1362A (die Bytes 7-10) - wenn das MOD-Feld 1442 10 enthält, sind die Bytes 7-10 das Verschiebungsfeld 1362A, wobei es gleich wie die Alt-32-Bit-Verschiebung (disp32) arbeitet und auf Byte-Granularität arbeitet.
  • Das Verschiebungsfaktorfeld 1362B (das Byte 7) - wenn das MOD-Feld 1442 01 enthält, ist das Byte 7 das Verschiebungsfaktorfeld 1362B. Der Ort dieses Feldes ist der gleiche wie der der 8-Bit-Verschiebung (disp8) des Alt-x86-Befehlssatzes, die auf Byte-Granularität arbeitet. Weil der disp8 vorzeichenerweitert ist, kann er nur zwischen -128- und 137-Byte-Versätzen adressieren; hinsichtlich von 64-Byte-Cache-Zeilen verwendet der disp8 8 Bits, die auf nur vier wirklich nützliche Werte -128, -64, 0 und 64 gesetzt werden können; weil oft ein größerer Bereich benötigt wird, wird der disp32 verwendet; der disp32 erfordert jedoch 4 Bytes. Im Gegensatz zum disp8 und zum disp32 ist das Verschiebungsfaktorfeld 1362B eine Neuinterpretation des disp8; wenn das Verschiebungsfaktorfeld 1362B verwendet wird, ist die tatsächliche Verschiebung durch den Inhalt des Verschiebungsfaktorfeldes multipliziert mit der Größe des Speicheroperandenzugriffs (N) bestimmt. Dieser Typ der Verschiebung wird als disp8 * N bezeichnet. Dies verringert die durchschnittliche Befehlslänge (ein einziges Byte wird für die Verschiebung verwendet, aber mit einem viel größeren Bereich). Eine derartige komprimierte Verschiebung basiert auf der Annahme, dass die effektive Verschiebung ein Vielfaches der Granularität des Speicherzugriffs ist, wobei folglich die redundanten Bits niedriger Ordnung des Adressenversatzes nicht codiert werden müssen. Mit anderen Worten, das Verschiebungsfaktorfeld 1362B ersetzt die 8-Bit-Verschiebung des Alt-x86-Befehlssatzes. Folglich ist das Verschiebungsfaktorfeld 1362B in der gleichen Weise wie eine 8-Bit-Verschiebung des x86-Befehlssatzes codiert (daher keine Änderungen der ModRM/SIB-Codierungsregeln), mit der einzigen Ausnahme, dass der disp8 zum disp8 * N überladen wird. Mit anderen Worten, es gibt keine Änderungen der Codierungsregeln oder der Codierungslängen, sondern nur in der Interpretation des Verschiebungswertes durch die Hardware (die die Verschiebung mit der Größe des Speicheroperanden skalieren muss, um einen byteweisen Adressenversatz zu erhalten).
  • Das Sofortfeld 1372 arbeitet so, wie vorher beschrieben worden ist.
  • Das vollständige Opcode-Feld
  • 14B ist ein Blockschaltplan, der die Felder des spezifischen vektorfreundlichen Befehlsformats 1400 veranschaulicht, die das vollständige Opcode-Feld 1374 gemäß einer Ausführungsform der Erfindung bilden. Spezifisch enthält das vollständige Opcode-Feld 1374 das Formatfeld 1340, das Basisoperationsfeld 1342 und das Datenelementbreitenfeld 1364 (W). Das Basisoperationsfeld 1342 enthält das Präfixcodierungsfeld 1425, das Opcode-Abbildungsfeld 1415 und das echte Opcode-Feld 1430.
  • Das Registerindexfeld
  • 14C ist ein Blockschaltplan, der die Felder des spezifischen vektorfreundlichen Befehlsformats 1400 veranschaulicht, die das Registerindexfeld 1344 gemäß einer Ausführungsform der Erfindung bilden. Spezifisch enthält das Registerindexfeld 1344 das REX-Feld 1405, das REX'-Feld 1410, das MODR/M.reg-Feld 1444, das MODR/M.r/m-Feld 1446, das VVVV-Feld 1420, das xxx-Feld 1454 und das bbb-Feld 1456.
  • Das Vergrößerungsoperationsfeld
  • 14D ist ein Blockschaltplan, der die Felder des spezifischen vektorfreundlichen Befehlsformats 1400 veranschaulicht, die das Vergrößerungsoperationsfeld 1350 gemäß einer Ausführungsform der Erfindung bilden. Wenn das Klassenfeld 1368 (U) 0 enthält, bedeutet es EVEX.U0 (Klasse A 1368A); wenn es 1 enthält, bedeutet es EVEX.U1 (Klasse B 1368B). Wenn U = 0 gilt und das MOD-Feld 1442 11 enthält (was eine Operation ohne Speicherzugriff bedeutet), wird das Alphafeld 1352 (das EVEX-Byte 3, das Bit [7] - EH) als das rs-Feld 1352A interpretiert. Wenn das rs-Feld 1352A eine 1 enthält (das Runden 1352A.1), wird das Betafeld 1354 (das EVEX-Byte 3, die Bits [6:4] - SSS) als das Rundensteuerfeld 1354A interpretiert. Das Rundensteuerfeld 1354A enthält ein Ein-Bit-SAE-Feld 1356 und ein Zwei-Bit-Rundenoperationsfeld 1358. Wenn das rs-Feld 1352A eine 0 enthält (die Datentransformation 1352A.2), wird das Betafeld 1354 (das EVEX-Byte 3, die Bits [6:4] - SSS) als ein Drei-Bit-Datentransformationsfeld 1354B interpretiert. Wenn U = 0 gilt und das MOD-Feld 1442 00, 01 oder 10 enthält (was eine Operation mit Speicherzugriff bedeutet), wird das Alphafeld 1352 (das EVEX-Byte 3, das Bit [7] - EH) als das Räumungshinweisfeld 1352B (EH-Feld) interpretiert und wird das Betafeld 1354 (das EVEX-Byte 3, die Bits [6:4] - SSS) als ein Drei-Bit-Datenmanipulationsfeld 1354C interpretiert.
  • Wenn U = 1 gilt, wird das Alphafeld 1352 das (EVEX-Byte 3, das Bit [7] - EH) als das Schreibmasken-Steuerfeld 1352C (Z) interpretiert. Wenn U = 1 gilt und das MOD-Feld 1442 11 enthält (was eine Operation ohne Speicherzugriff bedeutet), wird ein Teil des Betafeldes 1354 (das EVEX-Byte 3, das Bit [4] - S0) als das RL-Feld 1357A interpretiert; wenn es eine 1 enthält (das Runden 1357A.1), wird der Rest des Betafeldes 1354 (das EVEX-Byte 3, das Bit [6-5] - S2-1) als das Rundenoperationsfeld 1359A interpretiert, während, wenn das RL-Feld 1357A eine 0 enthält (VSIZE 1357.A2), der Rest des Betafeldes 1354 (das EVEX-Byte 3, das Bit [6-5] - S2-1) als das Vektorlängenfeld 1359B (das EVEX-Byte 3, das Bit [6-5] - L1-0) interpretiert wird. Wenn U = 1 gilt und das MOD-Feld 1442 00, 01 oder 10 enthält (was eine Operation mit Speicherzugriff bedeutet), wird das Betafeld 1354 (das EVEX-Byte 3, die Bits [6:4] - SSS) als das Vektorlängenfeld 1359B (das EVEX-Byte 3, das Bit [6-5] - L1-0) und das Rundsendefeld 1357B (das EVEX-Byte 3, das Bit [4] - B) interpretiert.
  • Eine beispielhafte Registerarchitektur
  • 15 ist ein Blockschaltplan einer Registerarchitektur 1500 gemäß einer Ausführungsform der Erfindung. In der veranschaulichten Ausführungsform gibt es 32 Vektorregister 1510, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die 256 Bits niedrigerer Ordnung der unteren 16 zmm-Register sind den Registern ymm0-16 überlagert. Die 128 Bits niedriger Ordnung der unteren 16 zmm-Register (die 128 Bits niedriger Ordnung der ymm-Register) sind den Registern xmm0-15 überlagert. Das spezifische vektorfreundliche Befehlsformat 1400 wirkt auf diese überlagerte Registerdatei so, wie in den Tabellen im Folgenden veranschaulicht ist.
    einstellbare Vektorlänge Klasse Operationen Register
    Befehlsschablonen, die das Vektorlängenfeld 1359B nicht enthalten A (13A; U = 0) 1310, 1315, 1325, 1330 zmm-Register (die Vektorlänge ist 64 Bytes)
    B (13B; U = 1) 1312 zmm-Register (die Vektorlänge ist 64 Bytes)
    Befehlsschablonen, die das Vektorlängenfeld 1359B enthalten B (13B; U = 1) 1317, 1327 zmm-, ymm- oder xmm-Register (die Vektorlänge ist in Abhängigkeit vom Vektorlängenfeld 1359B 64 Bytes, 32 Bytes oder 16 Bytes)
  • Mit anderen Worten, das Vektorlängenfeld 1359B wählt zwischen einer maximalen Länge und einer oder mehreren anderen kürzeren Längen aus, wobei jede derartige kürzere Länge die Hälfte der Länge der vorhergehenden Länge ist; wobei die Befehlsschablonen ohne das Vektorlängenfeld 1359B auf die maximale Vektorlänge wirken. Ferner arbeiten in einer Ausführungsform die Befehlsschablonen der Klasse B des spezifischen vektorfreundlichen Befehlsformats 1400 auf gepackte oder skalare Gleitkommadaten mit einfacher/doppelter Genauigkeit und gepackte oder skalare Ganzzahldaten. Die Skalaroperationen sind Operationen, die an der Datenelementposition niedrigster Ordnung in einem zmm/ymm/xmm-Register ausgeführt werden; die Datenelementpositionen höherer Ordnung werden in Abhängigkeit von der Ausführungsform entweder als die gleichen gelassen, die sie vor dem Befehl waren, oder auf null gesetzt.
  • Die Schreibmaskenregister 1515 - in der veranschaulichten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7), jedes mit einer Größe von 64 Bits. In einer alternativen Ausführungsform weisen die Schreibmaskenregister 1515 eine Größe von 16 Bits auf. Wie vorher beschrieben worden ist, kann in einer Ausführungsform der Erfindung das Vektormaskenregister k0 nicht als eine Schreibmaske verwendet werden; wenn die Codierung, die normalerweise k0 angeben würde, für eine Schreibmaske verwendet wird, wählt sie die festverdrahtete Schreibmaske 0xFFFF aus, die die Schreibmaskierung für diesen Befehl effektiv sperrt.
  • Die Universalregister 1525 - in der veranschaulichten Ausführungsform gibt es sechzehn 64-Bit-Universalregister, die zusammen mit den vorhandenen x86-Adressierungsmodi verwendet werden, um die Speicheroperanden zu adressieren. Auf diese Register wird durch die Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 verwiesen.
  • Skalare Gleitkomma-Stapelregisterdatei (x87-Stapel) 1545, die sonst die gepackte MMX-Ganzzahl-Flachregisterdatei 1550 genannt wird - in der veranschaulichten Ausführungsform ist der x87-Stapel ein Stapel mit acht Elementen, der verwendet wird, um skalare Gleitkommaoperationen an 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung auszuführen; während die MMX-Register verwendet werden, um sowohl Operationen an gepackten 64-Bit-Ganzzahldaten auszuführen als auch Operanden für einige Operationen, die zwischen den MMX- und den XMM-Registern ausgeführt werden, zu halten.
  • Alternative Ausführungsformen der Erfindung können breitere oder schmalere Register verwenden. Zusätzlich können alternative Ausführungsformen der Erfindung mehr, weniger oder andere Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Die Prozessorkerne können in verschiedenen Weisen, für verschiedene Zwecke und in verschiedenen Prozessoren implementiert sein. Die Implementierungen derartiger Kerne können z. B. Folgendes enthalten: 1) einen In-Order-Universalkern, der für eine Universalberechnung vorgesehen ist; 2) einen Hochleistungs-Out-of-Order-Universalkern, der für eine Universalberechnung vorgesehen ist; 3) einen Spezialkern, der hauptsächlich für Graphik und/oder wissenschaftliche Berechnung (Durchsatzberechnung) vorgesehen ist. Die Implementierungen der verschiedenen Prozessoren können Folgendes enthalten: 1) eine CPU, die einen oder mehrere In-Order-Universalkerne, die für eine Universalberechnung vorgesehen sind, und/oder einen oder mehrere Out-of-Order-Universalkerne, die für eine Universalberechnung vorgesehen sind, enthält; und 2) einen Coprozessor, der einen oder mehrere Spezialkerne enthält, die hauptsächlich für Graphik und/oder Wissenschaft (Durchsatz) vorgesehen sind. Derartige verschiedene Prozessoren führen zu verschiedenen Computersystemarchitekturen, die Folgendes enthalten können: 1) den Coprozessor auf einem von der CPU getrennten Chip; 2) den Coprozessor auf einem separaten Die in derselben Baugruppe wie eine CPU; 3) den Coprozessor auf demselben Die wie eine CPU (wobei in diesem Fall ein derartiger Coprozessor manchmal als eine Speziallogik, wie z. B. eine integrierte Graphik und/oder eine wissenschaftliche Logik (Durchsatzlogik), oder als Spezialkerne bezeichnet wird); und 4) ein System auf einem Chip, das auf demselben Die die beschriebene CPU (die manchmal als der (die) Anwendungskern(e) oder der (die) Anwendungsprozessor(en) bezeichnet wird), den oben beschriebenen Coprozessor und zusätzliche Funktionalität enthalten kann. Als Nächstes werden beispielhafte Kernarchitekturen beschrieben, gefolgt von den Beschreibungen der beispielhaften Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen
  • Ein Blockschaltplan eines In-Order- und Out-of-Order-Kerns
  • 16A ist ein Blockschaltplan, der sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Out-of-Order-Ausgabe-/Ausführungspipeline mit Registerumbenennung gemäß den Ausführungsformen der Erfindung veranschaulicht. 16B ist ein Blockschaltplan, der eine beispielhafte Ausführungsform sowohl eines Kerns einer In-Order-Architektur als auch eines beispielhaften Kerns einer Out-of-Order-Ausgabe-/Ausführungsarchitektur mit Registerumbenennung veranschaulicht, die in einem Prozessor gemäß den Ausführungsformen der Erfindung enthalten sind. Die Kästen mit durchgezogenen Linien in den 16A-B veranschaulichen die In-Order-Pipeline und den In-Order-Kern, während die optionale Ergänzung der Kästen mit den gestrichelten Linien die Out-of-Order-Ausgabe-/Ausführungspipeline mit Registerumbenennung und den Out-of-Order-Ausgabe-/Ausführungskern mit Registerumbenennung veranschaulichen. In Anbetracht dessen, dass der In-Order-Aspekt eine Teilmenge des Out-of-Order-Aspekts ist, wird der Out-of-Order-Aspekt beschrieben.
  • In 16A enthält eine Prozessorpipeline 1600 eine Holstufe 1602, eine Längendecodierstufe 1604, eine Decodierstufe 1606, eine Zuweisungsstufe 1608, eine Umbenennungsstufe 1610, eine Planungsstufe (die außerdem als eine Abfertigungs- oder Ausgabestufe bezeichnet wird) 1612, eine Registerlese-/Speicherlesestufe 1614, eine Ausführungsstufe 1616, eine Rückschreib-/Speicherschreibstufe 1618, eine Ausnahmebehandlungsstufe 1622 und eine Einspeicherstufe 1624.
  • 16B zeigt einen Prozessorkern 1690, der eine Front-End-Einheit 1630 enthält, die an eine Ausführungsmaschineneinheit 1650 gekoppelt ist, wobei beide an eine Speichereinheit 1670 gekoppelt sind. Der Kern 1690 kann ein Kern mit Berechnung mit verringertem Befehlssatz (RISC-Kern), ein Kern mit Berechnung mit komplexem Befehlssatz (CISC-Kern), ein Kern mit sehr langen Befehlswörtern (VLIW-Kern) oder ein hybrider oder alternativer Kerntyp sein. Als eine noch weitere Option kann der Kern 1690 ein Spezialkern sein, wie z. B. ein Netz- oder Kommunikationskern, eine Kompressionsmaschine, ein Coprozessorkern, ein Universalberechnungs-Graphikverarbeitungseinheits-Kern (GPGPU-Kern), ein Graphikkern oder dergleichen, sein.
  • Die Front-End-Einheit 1630 enthält eine Verzweigungsvorhersageeinheit 1632, die an eine Befehls-Cache-Einheit 1634 gekoppelt ist, die an einen Befehls-Adressenübersetzungspuffer (TLB) 1636 gekoppelt ist, der an eine Befehlsholeinheit 1638 gekoppelt ist, die an eine Decodiereinheit 1640 gekoppelt ist. Die Decodiereinheit 1640 (oder der Decodierer) kann Befehle decodieren und als eine Ausgabe eine oder mehrere Mikrooperationen, Mikrocode-Einsprungstellen, Mikrobefehle, andere Befehle oder andere Steuersignale erzeugen, die aus den ursprünglichen Befehlen decodiert werden oder die ursprünglichen Befehle anderweitig widerspiegeln oder aus den ursprünglichen Befehlen abgeleitet werden. Die Decodiereinheit 1640 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert sein. Beispiele geeigneter Mechanismen enthalten Nachschlagtabellen, Hardware-Implementierungen, programmierbare Logikanordnungen (PLAs), Mikrocode-Festwertspeicher (Mikrocode-ROMs) usw., sind aber nicht darauf eingeschränkt. In einer Ausführungsform enthält der Kern 1690 einen Mikrocode-ROM oder ein anderes Medium, der bzw. das Mikrocode für bestimmte Makrobefehle speichert, (z. B. in der Decodiereinheit 1640 oder anderweitig innerhalb der Front-End-Einheit 1630). Die Decodiereinheit 1640 ist an eine Umbenennungs-/Zuweisereinheit 1652 in der Ausführungsmaschineneinheit 1650 gekoppelt.
  • Die Ausführungsmaschineneinheit 1650 enthält eine Umbenennungs-/Zuweisereinheit 1652, die an eine Stilllegungseinheit 1654 und an einen Satz von einer oder mehreren Scheduler-Einheit(en) 1656 gekoppelt ist. Die Scheduler-Einheit(en) 1656 repräsentiert irgendeine Anzahl unterschiedlicher Scheduler, einschließlich Reservierungsstationen, eines zentralen Befehlsfensters usw. Die Scheduler-Einheit(en) 1656 ist an die Einheit(en) 1658 der physischen Registerdatei(en) gekoppelt. Jede der Einheiten 1658 der physischen Registerdatei(en) repräsentiert eine oder mehrere physische Registerdateien, von denen verschiedene einen oder mehrere verschiedene Datentypen, wie z. B. skalare Ganzzahl, skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw., speichern. In einer Ausführungsform umfasst die Einheit 1658 der physischen Registerdatei(en) eine Vektorregistereinheit, eine Schreibmasken-Registereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architektur-Vektorregister, Vektormaskenregister und Universalregister bereitstellen. Die Einheit(en) 1658 der physischen Registerdatei(en) ist durch die Stilllegungseinheit 1654 überlappt, um die verschiedenen Weisen zu veranschaulichen, in denen die Registerumbenennung und die Out-of-Order-Ausführung implementiert sein können (z. B. unter Verwendung eines Umordnungspuffers (von Umordnungspuffern) und einer Stilllegungsregisterdatei(en); unter Verwendung einer Zukunftsdatei(en), eines Historiepuffers (von Historiepuffern) und einer Stilllegungsregisterdatei(en); unter Verwendung von Registerabbildungen und einem Pool von Registern; usw.). Die Stilllegungseinheit 1654 und die Einheit(en) 1658 der physischen Registerdatei(en) sind an den (die) Ausführungs-Cluster 1660 gekoppelt. Der (die) Ausführung-Cluster 1660 enthält (enthalten) einen Satz von einer oder mehreren Ausführungseinheiten 1662 und einen Satz von einer oder mehreren Speicherzugriffseinheiten 1664. Die Ausführungseinheiten 1662 können verschiedene Operationen (z. B. Verschiebungen, eine Addition, eine Subtraktion, eine Multiplikation) und an verschiedenen Datentypen (z. B. skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma) ausführen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten enthalten können, die für spezifische Funktionen oder Sätze von Funktionen dediziert sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten, die alle alle Funktionen ausführen, enthalten. Die Scheduler-Einheit(en) 1656, die Einheit(en) 1658 der physikalischen Registerdatei(en) und der (die) Ausführungs-Cluster 1660 sind als möglicherweise mehrere gezeigt, weil bestimmte Ausführungsformen getrennte Pipelines für bestimmte Datentypen/Operationen erzeugen (z. B. eine skalare Ganzzahlpipeline, eine skalare Gleitkomma-/gepackte Ganzzahl-/gepackte Gleitkomma-/Vektorganzzahl-/Vektorgleitkommapipeline und/oder eine Speicherzugriffspipeline, die jede ihre eigene Scheduler-Einheit, ihre eigene Einheit der physikalischen Registerdatei(en) und/oder ihren eigenen Ausführung-Cluster aufweisen - wobei im Fall einer separaten Speicherzugriffspipeline bestimmte Ausführungsformen implementiert sind, in denen nur der Ausführungs-Cluster dieser Pipeline die Speicherzugriffseinheit(en) 1664 aufweist). Es sollte außerdem erkannt werden, dass, wo separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-Order-Ausgabe/Ausführung und der Rest In-Order sein können.
  • Der Satz von Speicherzugriffseinheiten 1664 ist an die Speichereinheit 1670 gekoppelt, die eine Daten-TLB-Einheit 1672 enthält, die an eine Daten-Cache-Einheit 1674 gekoppelt ist, die an eine Ebene-2-Cache-Einheit (L2-Cache-Einheit) 1676 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 1664 eine Ladeeinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit enthalten, von denen jede an die Daten-TLB-Einheit 1672 in der Speichereinheit 1670 gekoppelt ist. Die Befehls-Cache-Einheit 1634 ist ferner an eine Ebene-2-Cache-Einheit (L2-Cache-Einheit) 1676 in der Speichereinheit 1670 gekoppelt. Die L2-Cache-Einheit 1676 ist an eine oder mehrere andere Ebenen des Cache und schließlich an einen Hauptspeicher gekoppelt.
  • Beispielhaft kann die beispielhafte Out-of-Order-Ausgabe-/Ausführungskernarchitektur mit Registerumbenennung die Pipeline 1600 wie folgt implementieren: 1) das Befehlsholen 1638 führt die Hol- und Längendecodierstufen 1602 und 1604 aus; 2) die Decodiereinheit 1640 führt die Decodierstufe 1606 aus; 3) die Umbenennungs-/Zuweisereinheit 1652 führt die Zuweisungsstufe 1608 und die Umbenennungsstufe 1610 aus; 4) die Scheduler-Einheit(en) 1656 führt die Planungsstufe 1612 aus; 5) die Einheit(en) 1658 der physischen Registerdatei(en) und die Speichereinheit 1670 führen die Registerlese-/Speicherlesestufe 1614 aus; der Ausführungs-Cluster 1660 führt die Ausführungsstufe 1616 aus; 6) die Speichereinheit 1670 und die Einheit(en) 1658 der physischen Registerdatei(en) führen die Rückschreib-/Speicherschreibstufe 1618 aus; 7) in die Ausnahmebehandlungsstufe 1622 können verschiedene Einheiten einbezogen sein; und 8) die Stilllegungseinheit 1654 und die Einheit(en) 1658 der physischen Registerdatei(en) führen die Einspeicherstufe 1624 aus.
  • Der Kern 1690 kann einen oder mehrere Befehlssätze (z. B. den x86 Befehlssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt worden sind); den MIPS-Befehlssatz von MIPS Technolgies of Sunnyvale, CA; den ARM-Befehlssatz (mit optional zusätzlichen Erweiterungen, wie z. B. NEON) von ARM Holdings of Sunnyvale, CA), einschließlich der hier beschriebenen Befehl(e) unterstützen. In einer Ausführungsform enthält der Kern 1690 eine Logik, um eine Befehlssatzerweiterung für gepackte Daten (z. B. AVX1, AVX2) zu unterstützen, wobei dadurch die Operationen erlaubt werden, die durch viele Multimedia-Anwendungen verwendet werden, die unter Verwendung gepackter Daten auszuführen sind.
  • Es sollte erkannt werden, dass der Kern Multithreading (die Ausführung von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies in verschiedenen Weisen einschließlich des Zeitscheiben-Multithreading, des gleichzeitigen Multithreading (wo ein einziger physischer Kern einen logischen Kern für jeden der Threads bereitstellt, für die dieser physische Kern das gleichzeitige Multithreading ausführt) oder einer Kombination daraus (z. B. das Zeitscheiben-Holen und -Decodieren und danach das gleichzeitige Multithreading, wie z. B. in der Intel®-Hyperthreading-Technik) ausführen kann.
  • Während die Registerumbenennung im Kontext der Out-of-Order-Ausführung beschrieben wird, sollte erkannt werden, dass die Registerumbenennung in einer In-Order-Architektur verwendet werden kann. Während die veranschaulichte Ausführungsform des Prozessors außerdem separate Befehls- und Daten-Cache-Einheiten 1634/1674 und eine gemeinsam benutzte L2-Cache-Einheit 1676 enthält, können alternative Ausführungsformen einen einzigen internen Cache sowohl für Befehle als auch für Daten, wie z. B. einen internen Ebene-1-Cache (L1-Cache), oder mehrere Ebenen des internen Caches aufweisen. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, enthalten. Alternativ kann sich alles des Caches außerhalb des Kerns und/oder des Prozessors befinden.
  • Eine spezifische beispielhafte In-Order-Kernarchitektur
  • Die 17A-B veranschaulichen einen Blockschaltplan einer spezifischeren beispielhaften In-Order-Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne des gleichen Typs und/oder anderer Typen) in einem Chip sein würde. Die Logikblöcke kommunizieren in Abhängigkeit von der Anwendung durch ein Zusammenschaltungsnetz (z. B. ein Ringnetz) mit hoher Bandbreite mit irgendeiner Logik mit fester Funktion, Speicher-E/A-Schnittstellen und einer anderen notwendigen E/A-Logik.
  • 17A ist ein Blockschaltplan eines einzigen Prozessorkerns zusammen mit seiner Verbindung zu dem Zusammenschaltungsnetz 1702 auf dem Die und mit seiner lokalen Teilmenge des Ebene-2-Caches (L2-Caches) 1704 gemäß den Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdecodierer 1700 den x86-Befehlssatz mit der Befehlssatzerweiterung für gepackte Daten. Ein L1-Cache 1706 erlaubt Zugriffe mit geringer Latenzzeit auf den Cache-Speicher in die Skalar- und Vektoreinheiten. Während in einer Ausführungsform (um den Entwurf zu vereinfachen) eine Skalareinheit 1708 und eine Vektoreinheit 1710 getrennte Registersätze (Skalarregister 1712 bzw. Vektorregister 1714) verwenden und die zwischen ihnen übertragenen Daten in den Speicher geschrieben werden und dann von einem Ebene-1-Cache (L1-Cache) 1706 zurückgelesen werden, können alternative Ausführungsformen der Erfindung eine andere Herangehensweise verwenden (z. B. einen einzigen Registersatz verwenden oder einen Kommunikationsweg enthalten, der es ermöglicht, dass die Daten zwischen den zwei Registerdateien übertragen werden, ohne dass sie geschrieben und zurückgelesen werden).
  • Die lokale Teilmenge des L2-Caches 1704 ist ein Teil eines globalen L2-Caches, der in getrennte lokale Teilmengen, eine pro Prozessorkern, aufgeteilt ist. Jeder Prozessorkern weist einen direkten Zugangsweg zu seiner eigenen lokalen Teilmenge des L2-Cache 1704 auf. Die durch einen Prozessorkern gelesenen Daten werden in seiner L2-Cache-Teilmenge 1704 gespeichert, wobei parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilmengen zugreifen, schnell auf sie zugegriffen werden kann. Die durch einen Prozessorkern geschriebenen Daten werden in seiner eigenen L2-Cache-Teilmenge 1704 gespeichert und werden bei Bedarf aus anderen Teilmengen geleert. Das Ringnetz stellt die Kohärenz für die gemeinsam benutzten Daten sicher. Das Ringnetz ist bidirektional, um es den Agenten, wie z. B. den Prozessorkernen, den L2-Caches und anderen Logikblöcken zu ermöglichen, innerhalb des Chips miteinander zu kommunizieren. Jeder Ringdatenweg ist pro Richtung 1012 Bits breit.
  • 17B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 17A gemäß den Ausführungsformen der Erfindung. 17B enthält sowohl einen LI-Daten-Cache-Teil 1706A des L1-Caches 1704 als auch weitere Einzelheiten hinsichtlich der Vektoreinheit 1710 und der Vektorregister 1714. Spezifisch ist die Vektoreinheit 1710 eine 16 breite Vektorverarbeitungseinheit (VPU) (siehe die 16 breite ALU 1728), die einen oder mehrere der Ganzzahlbefehle, Gleitkommabefehle in einfacher Genauigkeit und Gleitkommabefehle in doppelter Genauigkeit ausführt. Die VPU unterstützt das Swizzling der Registereingaben mit der Swizzle-Einheit 1720, die numerische Umsetzung mit den numerischen Umsetzungseinheiten 1722A-B und die Replikation mit der Replikationseinheit 1724 an der Speichereingabe. Die Schreibmaskenregister 1726 erlauben das Aussagen der resultierenden Vektorschreibvorgänge.
  • Ein Prozessor mit integriertem Speicher-Controller und integrierter Graphik
  • 18 ist ein Blockschaltplan eines Prozessors 1800, der mehr als einen Kern aufweisen kann, einen integrierten Speicher-Controller aufweisen kann und eine integrierte Graphik aufweisen kann, gemäß den Ausführungsformen der Erfindung. Die Kästen mit durchgezogenen Linien in 18 veranschaulichen einen Prozessor 1800 mit einem einzigen Kern 1802A, einem Systemagenten 1810, einem Satz von einer oder mehreren Bus-Controller-Einheiten 1816, während die optionale Ergänzung der Kästen mit den gestrichelten Linien einen alternativen Prozessor 1800 mit mehreren Kernen 1802A-N, einem Satz von einer oder mehreren integrierten Speicher-Controller-Einheit(en) 1814 in der Systemagenteneinheit 1810 und einer Speziallogik 1808 veranschaulicht.
  • Folglich können verschiedene Implementierungen des Prozessors 1800 Folgendes enthalten: 1) eine CPU mit der Speziallogik 1808, die eine integrierte Graphik- und/oder wissenschaftliche Logik (Durchsatzlogik) ist (die einen oder mehrere Kerne enthalten kann), wobei die Kerne 1802A-N ein oder mehrere Universalkerne (z.B. In-Order-Universalkerne, Out-of-Order-Universalkerne, eine Kombination aus den beiden) sind; 2) einen Coprozessor mit den Kernen 1802A-N, die eine große Anzahl von Spezialkernen sind, die hauptsächlich für Graphik und/oder Wissenschaft (Durchsatz) vorgesehen sind; und 3) einen Coprozessor mit den Kernen 1802A-N, die eine große Anzahl von In-Order-Universalkernen sind. Folglich kann der Prozessor 1800 ein Universalprozessor, ein Coprozessor oder ein Spezialprozessor, wie z. B. ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Graphikprozessor, eine GPGPU (eine Universal-Graphikverarbeitungseinheit), ein Coprozessor mit vielen integrierten Kernen (MIC-Coprozessor) mit hohem Durchsatz (der 30 oder mehr Kerne enthält), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann in einem oder mehreren Chips implementiert sein. Der Prozessor 1800 kann ein Teil eines oder mehrerer Substrate sein und/oder unter Verwendung irgendeiner von einer Anzahl von Prozesstechniken, wie z. B. BiCMOS, CMOS oder NMOS, in einem oder mehreren Substraten implementiert sein.
  • Die Speicherhierarchie enthält eine oder mehrere Ebenen des Caches innerhalb der Kerne, einen Satz aus einer oder mehreren gemeinsam benutzten Cache-Einheiten 1806 und einen (nicht gezeigten) externen Speicher, der an den Satz von integrierten Speicher-Controller-Einheiten 1814 gekoppelt ist. Der Satz gemeinsam benutzter Cache-Einheiten 1806 kann einen oder mehrere Caches mittlerer Ebene, wie z. B. der Ebene 2 (L2), der Ebene 3 (L3), der Ebene 4 (L4) oder anderer Ebenen des Caches, einen Cache der letzten Ebene (LLC) und/oder Kombinationen daraus enthalten. Während in einer Ausführungsform eine ringbasierte Zusammenschaltungseinheit 1812 die integrierte Graphiklogik 1808, den Satz gemeinsam benutzter Cache-Einheiten 1806 und die Systemagenteneinheit 1810/die integrierten Speicher-Controller-Einheit(en) 1814 miteinander verbindet, können alternative Ausführungsformen irgendeine Anzahl wohlbekannter Techniken verwenden, um derartige Einheiten miteinander zu verbinden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cache-Einheiten 1806 und den Kernen 1802-A-N aufrechterhalten.
  • In einigen Ausführungsformen sind einer oder mehrerer der Kerne 1802A-N zum MultiThreading imstande. Der Systemagent 1810 enthält jene Komponenten, die die Kerne 1802A-N koordinieren und betreiben. Die Systemagenteneinheit 1810 kann z. B. eine Leistungssteuereinheit (PCU) und eine Anzeigeeinheit enthalten. Die PCU kann die Logik und die Komponenten sein oder die Logik und die Komponenten enthalten, die benötigt werden, um den Leistungszustand der Kerne 1802A-N und der integrierte Graphiklogik 1808 zu regeln. Die Anzeigeeinheit dient dem Ansteuern einer oder mehrerer extern angeschlossener Anzeigen.
  • Die Kerne 802A-N können hinsichtlich des Architekturbefehlssatzes homogen oder heterogen sein; d. h., zwei oder mehr der Kerne 1802A-N können zur Ausführung des gleichen Befehlssatzes imstande sein, während andere zum Ausführen nur einer Teilmenge dieses Befehlssatzes oder eines anderen Befehlssatzes imstande sein können.
  • Beispielhafte Computerarchitekturen
  • Die 19-21 sind Blockschaltpläne beispielhafter Computerarchitekturen. Andere Systementwürfe und -konfigurationen, die in den Techniken für Laptops, Desktops, handgehaltene PCs, persönliche digitale Assistenten, Entwicklungs-Arbeitsplatzrechner, Server, Netzvorrichtungen, Netz-Hubs, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Graphikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxes, Mikrocontroller, Mobiltelephone, tragbare Medienspieler, handgehaltene Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind außerdem geeignet. Im Allgemeinen ist eine riesige Vielfalt von Systemen oder elektronischen Vorrichtungen, die einen Prozessor und/oder eine andere Ausführungslogik umfassen können, wie sie hier offenbart sind, im Allgemeinen geeignet.
  • In 19 ist ein Blockschaltplan eines Systems 1900 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 1900 kann einen oder mehrere Prozessoren 1910, 1915 enthalten, die an einen Controller-Hub 1920 gekoppelt sind. In einer Ausführungsform enthält der Controller-Hub 1920 einen Graphikspeicher-Controller-Hub (GMCH) 1990 und einen Eingabe/Ausgabe-HUB (EAH) 1950 (die sich auf getrennten Chips befinden können); wobei der GMCH 1990 Speicher- und Graphik-Controller enthält, an die ein Speicher 1940 und ein Coprozessor 1945 gekoppelt sind; wobei der EAH 1950 die Eingabe/Ausgabe-Vorrichtungen (E/A-Vorrichtungen) 1960 an den GMCH 1990 koppelt. Alternativ sind einer oder beide des Speicher- und Graphik-Controllers innerhalb des Prozessors integriert (wie hier beschrieben ist), sind der Speicher 1940 und der Coprozessor 1945 direkt an den Prozessor 1910 gekoppelt und befindet sich der Controller-HUB 1920 in einem einzigen Chip mit dem EAH 1950.
  • Die optionale Art der zusätzlichen Prozessoren 1915 ist in 19 mit gestrichelten Linien angegeben. Jeder Prozessor 1910, 1915 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne enthalten und kann irgendeine Version des Prozessors 1800 sein.
  • Der Speicher 1940 kann z. B. ein dynamischer Schreib-Lese-Speicher (DRAM), ein Phasenänderungsspeicher (PCM) oder eine Kombination aus den beiden sein. Für wenigstens eine Ausführungsform kommuniziert der Controller-Hub 1920 über einen Bus mit mehreren Stationen, wie z. B. einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie z. B. eine QuickPath Interconnect (QPI), oder eine ähnliche Verbindung 1995 mit dem (den) Prozessor(en) 1910, 1915.
  • In einer Ausführungsform ist der Coprozessor 1945 ein Spezialprozessor, wie z. B. ein MIC-Prozessor mit hohem Durchsatz, ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Graphikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Controller-Hub 1920 einen integrierten Graphikbeschleuniger enthalten.
  • Es kann verschiedene Unterschiede zwischen den physischen Betriebsmitteln 1910, 1915 hinsichtlich eines Spektrums der Metriken der Vorzüge einschließlich der Architektur-, Mikroarchitektur-, thermischen und Leistungsaufnahmeeigenschaften und dergleichen geben.
  • In einer Ausführungsform führt der Prozessor 1910 Befehle aus, die die Datenverarbeitungsseparation eines allgemeinen Typs steuern. In die Befehle können Coprozessorbefehle eingebettet sein. Der Prozessor 1910 erkennt diese Coprozessorbefehle als ein Typ, der durch den beigefügten Coprozessor 1945 ausgeführt werden sollte. Entsprechend gibt der Prozessor 1910 diese Coprozessorbefehle (oder Steuersignale, die die Coprozessorbefehle repräsentieren) auf einem Coprozessor-Bus oder einer anderen Zusammenschaltung zu dem Coprozessor 1945 aus. Der (die) Coprozessor(en) 1945 akzeptiert (akzeptieren) die empfangenen Coprozessorbefehle und führt (führen) sie aus.
  • In 20 ist ein Blockschaltplan eines ersten spezifischeren beispielhaften Systems 2000 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 20 gezeigt ist, ist das Mehrprozessorsystem 2000 ein Punkt-zu-Punkt-Zusammenschaltungssystem, wobei es einen ersten Prozessor 2070 und einen zweiten Prozessor 2080 enthält, die über eine Punkt-zu-Punkt-Zusammenschaltung 2050 gekoppelt sind. Jeder der Prozessoren 2070 und 2080 kann irgendeine Version des Prozessors 1800 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 2070 und 2080 die Prozessoren 1910 bzw. 1915, während der Coprozessor 2038 der Coprozessor 1945 ist. In einer weiteren Ausführungsform sind die Prozessoren 2070 und 2080 der Prozessor 1910 bzw. der Coprozessor 1945.
  • Es ist gezeigt, dass die Prozessoren 2070 und 2080 die integrierten Speicher-Controller-Einheiten (IMC-Einheiten) 2072 bzw. 2082 enthalten. Der Prozessor 2070 enthält außerdem als einen Teil seiner Bus-Controller-Einheiten die Punkt-zu-Punkt-Schnittstellen (P-P-Schnittstellen) 2076 und 2078; ähnlich enthält der zweite Prozessor 2080 die P-P-Schnittstellen 2086 und 2088. Die Prozessoren 2070, 2080 können Informationen über eine Punkt-zu-Punkt-Schnittstelle (P-P-Schnittstelle) 2050 unter Verwendung der P-P-Schnittstellenschaltungen 2078, 2088 austauschen. Wie in 20 gezeigt ist, koppeln die IMCs 2072 und 2082 die Prozessoren an entsprechende Speicher, nämlich einen Speicher 2032 und einen Speicher 2034, die Teile des Hauptspeichers sein können, die lokal mit den jeweiligen Prozessoren verbunden sind.
  • Die Prozessoren 2070, 2080 können jeder Informationen über die einzelnen P-P-Schnittstellen 2052, 2054 unter Verwendung der Punkt-zu-Punkt-Schnittstellenschaltungen 2076, 2094, 2086, 2098 mit einem Chipsatz 2090 austauschen. Der Chipsatz 2090 kann optional Informationen über eine Hochleistungsschnittstelle 2039 mit dem Coprozessor 2038 austauschen. In einer Ausführungsform ist der Coprozessor 2038 ein Spezialprozessor, wie z. B. ein MIC-Prozessor mit hohem Durchsatz, ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Graphikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • In jedem Prozessor oder außerhalb der beiden Prozessoren kann ein (nicht gezeigter) gemeinsam benutzter Cache enthalten sein, der dennoch über die P-P-Zusammenschaltung mit den Prozessoren verbunden ist, so dass die lokalen Cache-Informationen eines oder beider Prozessoren in dem gemeinsam benutzten Cache gespeichert sein können, falls ein Prozessor in einen Kleinleistungsmodus gesetzt ist.
  • Der Chipsatz 2090 kann über eine Schnittstelle 2096 an einen ersten Bus 2016 gekoppelt sein. In einer Ausführungsform kann der erste Bus 2016 ein Peripheriekomponenten-Verbindungsbus (PCI-Bus) oder ein Bus, wie z. B. ein PCI-Express-Bus oder ein anderer E/A-Verbindungsbus der dritten Generation, sein, obwohl der Schutzumfang der vorliegenden Erfindung nicht so eingeschränkt ist.
  • Wie in 20 gezeigt ist, können verschiedene E/A-Vorrichtungen 2014 zusammen mit einer Busbrücke 2018, die den ersten Bus 2016 an einen zweiten Bus 2020 koppelt, an den ersten Bus 2016 gekoppelt sein. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessor(en) 2015, wie z. B. Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie z. B. Graphikbeschleuniger oder digitale Signalverarbeitungseinheiten (DSP-Einheiten)), feldprogrammierbare Gatteranordnungen oder irgendein anderer Prozessor an den ersten Bus 2016 gekoppelt. In einer Ausführungsform kann der zweite Bus 2020 ein Bus mit geringer Pinanzahl (LPC-Bus) sein. In einer Ausführungsform können verschiedene Vorrichtungen an den zweiten Bus 2020 gekoppelt sein, einschließlich z. B. einer Tastatur und/oder einer Maus 2022, der Kommunikationsvorrichtungen 2027 und einer Speichereinheit 2028, wie z. B. eines Plattenlaufwerks oder einer anderen Massenspeichervorrichtung, die Befehle/Code und Daten 2030 enthalten kann. Ferner kann eine Audio-E/A 2024 an den zweiten Bus 2020 gekoppelt sein. Es wird angegeben, dass andere Architekturen möglich sind. Anstelle der Punkt-zu-Punkt-Architektur nach 20 kann das System einen Bus mit mehreren Stationen oder eine andere derartige Architektur implementieren.
  • In 21 ist ein Blockschaltplan eines zweiten spezifischeren beispielhaften Systems 2100 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in den 20 und 21 tragen gleiche Bezugszeichen, wobei bestimmte Aspekte nach 20 aus 21 weggelassen worden sind, um das Verbergen der anderen Aspekte nach 21 zu vermeiden.
  • 21 veranschaulicht, dass die Prozessoren 2070, 2080 eine integrierte Speicher- und E/A-Steuerlogik („CL“) 2072 bzw. 2082 enthalten können. Folglich enthalten die CL 2072, 2082 die integrierten Speicher-Controller-Einheiten und eine E/A-Steuerlogik. 21 veranschaulicht, dass nicht nur die Speicher 2032, 2034 an die CL 2072, 2082 gekoppelt sind, sondern dass außerdem die E/A-Vorrichtungen 2114 an die Steuerlogik 2072, 2082 gekoppelt sind. Die Alt-E/A-Vorrichtungen 2115 sind an den Chipsatz 2090 gekoppelt.
  • In 22 ist ein Blockschaltplan eines SoC 2200 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in 18 tragen gleiche Bezugszeichen. Außerdem sind die Kästen mit gestrichelten Linien optionale Merkmale in weiterentwickelteren SoCs. In 22 ist eine Zusammenschaltungseinheit(en) 2202 an Folgendes gekoppelt: einen Anwendungsprozessor 2210, der einen Satz von einem oder mehreren Kernen 212A-N und gemeinsam benutzte Cache-Einheit(en) 1806 enthält; eine Systemagenteneinheit 1810; eine Bus-Controller-Einheit(en) 1816; eine integrierte Speicher-Controller-Einheit(en) 1814; einen Satz von einem oder mehreren Coprozessoren 2220, der eine integrierte Graphiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor enthalten kann; eine statische Schreib-Lese-Speicher-Einheit (SRAM-Einheit) 2230; eine Speicherdirektzugriffseinheit (DMA-Einheit) 2232; und eine Anzeigeeinheit 2240 zum Koppeln an eine oder mehrere externe Anzeigen. In einer Ausführungsform enthält (enthalten) der (die) Coprozessor(en) 2220 einen Spezialprozessor, wie z. B. einen Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, eine GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder dergleichen.
  • Die Ausführungsformen der hier offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination derartiger Implementierungsherangehensweisen implementiert sein. Die Ausführungsformen der Erfindung können als Computer-Programme oder Programmcode, die in programmierbaren Systemen ausgeführt werden, die wenigstens einen Prozessor, ein Speichersystem (einschließlich flüchtiger und/oder nichtflüchtiger Datenspeicher- und/oder Speicherelemente), wenigstens eine Eingabevorrichtung und wenigstens eine Ausgabevorrichtung umfassen, implementiert sein.
  • Der Programmcode, wie z. B. der in 20 veranschaulichte Code 2030, kann auf Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen auszuführen und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können in bekannter Weise auf eine oder mehrere Ausgabevorrichtungen angewendet werden. Für die Zwecke dieser Anmeldung enthält das Verarbeitungssystem irgendein System, das einen Prozessor aufweist, wie z. B. einen digitalen Signalprozessor (DSP), einen Mikrocontroller, eine Anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren prozeduralen Programmiersprache oder einer objektorientierten Programmiersprache implementiert sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann auf Wunsch außerdem in einer Assembler- oder Maschinensprache implementiert sein. In der Tat sind die hier beschriebenen Mechanismen im Schutzumfang nicht auf irgendeine spezielle Programmiersprache eingeschränkt. In jedem Fall kann die Sprache eine kompilierte oder eine interpretierte Sprache sein.
  • Ein oder mehrere Aspekte wenigstens einer Ausführungsform können durch repräsentative Befehle implementiert sein, die in einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logiken innerhalb des Prozessors repräsentiert, die, wenn sie durch eine Maschine gelesen werden, die Maschine veranlassen, eine Logik herzustellen, um die hier beschriebenen Techniken auszuführen. Derartige Darstellungen, die als „IP-Kerne“ bekannt sind, können in einem greifbaren maschinenlesbaren Medium gespeichert sein und können verschiedenen Kunden oder Herstellungseinrichtungen geliefert werden, um sie in die Fertigungsmaschinen zu laden, die die Logik oder den Prozessor tatsächlich bilden.
  • Derartige maschinenlesbare Speichermedien können ohne Einschränkung nicht transitorische greifbare Anordnungen von Herstellungsartikeln enthalten oder durch eine Maschine oder eine Vorrichtung gebildet sein, einschließlich Speichermedien wie z. B. Festplatten, irgendeines anderen Typs von Platten einschließlich Disketten, optischer Platten, Kompaktplatten-Festwertspeichern (CD-ROMs), wiederbeschreibbarer Kompaktplatten (CD-RWs) und magnetooptischer Platten, Halbleitervorrichtungen, wie z. B. Festwertspeichern (ROMs), Schreib-Lese-Speichern (RAMs), wie z. B. dynamischer Schreib-Lese-Speicher (DRAMs), statischer Schreib-Lese-Speicher (SRAMs), löschbarer programmierbarer Festwertspeicher (EPROMs), Flash-Speichern, elektrisch löschbarer programmierbarer Festwertspeicher (EEPROMs), Phasenänderungsspeichern (PCM), magnetischer oder optischer Karten oder irgendeines anderen Typs der Medien, die zum Speichern elektronischer Befehle geeignet sind.
  • Entsprechend enthalten die Ausführungsformen der Erfindung außerdem nicht transitorische greifbare maschinenlesbaren Medien, die Befehle enthalten oder Entwurfsdaten enthalten, wie z. B. eine Hardware-Beschreibungssprache (HDL), die Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale, die hier beschrieben sind, definieren. Derartige Ausführungsformen können außerdem als Programmprodukte bezeichnet werden.
  • Die Emulation (einschließlich der binären Übersetzung, des Codemorphings usw.)
  • In einigen Fällen kann ein Befehlsumsetzer verwendet werden, um einen Befehl von einem Quellbefehlssatz zu einem Zielbefehlssatz umzusetzen. Der Befehlsumsetzer kann z. B. übersetzen (z. B. unter Verwendung der statischen binären Übersetzung, der dynamischen binären Übersetzung einschließlich der dynamischen Kompilierung), morphen, emulieren oder anderweitig einen Befehl in einen oder mehrere andere Befehle umsetzen, die durch den Kern zu verarbeiten sind. Der Befehlsumsetzer kann in Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. Der Befehlsumsetzer kann sich in dem Prozessor, außerhalb des Prozessors oder teilweise in dem Prozessor und teilweise außerhalb des Prozessors befinden.
  • 23 ist ein Blockschaltplan, der die Verwendung eines Software-Befehlsumsetzers, um binäre Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz umzusetzen, gemäß den Ausführungsformen der Erfindung gegenüberstellt. In der veranschaulichten Ausführungsform ist der Befehlsumsetzer ein Software-Befehlsumsetzer, obwohl alternativ der Befehlsumsetzer in Software, Firmware, Hardware oder verschiedenen Kombinationen daraus implementiert sein kann. 23 zeigt ein Programm in einer höheren Sprache 2302, das unter Verwendung eines x86-Kompilierers 2304 kompiliert werden kann, um einen binären x86-Code 2306 zu erzeugen, der nativ durch einen Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2316 ausgeführt werden kann. Der Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2316 repräsentiert irgendeinen Prozessor, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern durch das kompatible Ausführen oder anderweitige Verarbeiten (1) eines wesentlichen Anteils des Befehlssatzes des Intel-x86-Befehlssatz-Kerns oder (2) von Objektcode-Versionen von Anwendungen oder anderer Software, die darauf abzielt, in einem Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern ausgeführt werden, ausführen kann, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern zu erreichen. Der x86-Kompilierer 2304 repräsentiert einen Kompilierer, der betreibbar ist, um binären x86-Code 2306 (z. B. Objektcode) zu erzeugen, der mit einer oder ohne eine zusätzliche Verbindungsverarbeitung in dem Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2316 ausgeführt werden kann. Ähnlich zeigt 23 das Programm in der höheren Sprache 2302, das unter Verwendung eines Kompilierers 2308 für einen alternativen Befehlssatz kompiliert werden kann, um binären Code 2310 des alternativen Befehlssatzes zu erzeugen, der nativ durch einen Prozessor ohne wenigstens einen x86-Befehlssatz-Kern 2314 (z. B. einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technology of Sunnyvale, CA, ausführen und/oder die den ARM-Befehlssatz von ARM Holdings of Sunnyvale, CA, ausführen) ausgeführt werden kann. Der Befehlsumsetzer 2312 wird verwendet, um den binären x86-Code 2306 in Code umzusetzen, der nativ durch den Prozessor ohne einen x86-Befehlssatz-Kern 2314 ausgeführt werden kann. Dieser umgesetzte Code ist wahrscheinlich nicht der gleiche wie der binäre Code 2310 des alternativen Befehlssatzes, weil ein Befehlsumsetzer, der dies kann, schwierig herzustellen ist; der umgesetzte Code erreicht jedoch den allgemeinen Betrieb und kann aus Befehlen aus dem alternativen Befehlssatz gebildet sein. Folglich repräsentiert der Befehlsumsetzer 2312 Software, Firmware, Hardware oder eine Kombination daraus, die es durch Emulation, Simulation oder irgendeinen anderen Prozess einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen x86-Befehlssatz-Prozessor oder -Kern aufweist, ermöglicht, den binären x86-Code 2306 auszuführen.
  • Die für eine der 4-5 beschriebenen Komponenten, Merkmale und Einzelheiten können außerdem optional für irgendeine der 1, 3 und 6 gelten. Die für eine der 8-10 beschriebenen Komponenten, Merkmale und Einzelheiten können außerdem optional für 7 gelten. Überdies können die für irgendeine der Vorrichtungen beschriebenen Komponenten, Merkmale und Einzelheiten außerdem optional für irgendeines der Verfahren gelten, die in den Ausführungsformen durch eine derartige und/oder mit einer derartigen Vorrichtung ausgeführt werden können. Jeder der hier beschriebenen Prozessoren kann in irgendeinem der hier offenbarten Computersysteme enthalten sein. In einigen Ausführungsformen kann das Computersystem einen dynamischen Schreib-Lese-Speicher (DRAM) enthalten. Alternativ kann das Computersystem einen Typ eines flüchtigen Speichers, der nicht aufgefrischt werden muss, oder einen Flash-Speicher enthalten. Die hier offenbarten Befehle können mit jedem der hier gezeigten Prozessoren, der irgendeine der hier gezeigten Mikroarchitekturen aufweist, in jedem der hier gezeigten Systeme ausgeführt werden. Die hier offenbarten Befehle können irgendeines der Merkmale der hier gezeigte Befehlsformate aufweisen.
  • In der Beschreibung und den Ansprüchen können die Begriffe „gekoppelt“ und/oder „verbunden“ zusammen mit ihren Ableitungen verwendet worden sein. Diese Begriffe sind nicht als Synonyme füreinander vorgesehen. Stattdessen kann in den Ausführungsformen „verbunden“ verwendet werden, um anzugeben, dass sich zwei oder mehr Elemente in direkten physischen und/oder elektrischen Kontakt miteinander befinden. „Gekoppelt“ kann bedeuten, dass sich zwei oder mehr Elemente in direkten physischen und/oder elektrischen Kontakt miteinander befinden. „Gekoppelt“ kann jedoch außerdem bedeuten, dass sich zwei oder mehr Elemente nicht in direkten Kontakt miteinander befinden, aber dennoch trotzdem zusammenarbeiten oder miteinander wechselwirken. Eine Ausführungseinheit kann z. B. durch eine oder mehrere dazwischenliegende Komponenten mit Registern und/oder einer Decodiereinheit gekoppelt sein. In den Figuren werden Pfeile verwendet, um Verbindungen und Kopplungen zu zeigen.
  • Der Begriff „und/oder“ kann verwendet worden sein. Der Begriff „und/oder“, wie er hier verwendet wird, bedeutet eines oder das andere oder beide (A und/oder B bedeutet z. B. A oder B oder sowohl A als auch B).
  • In der obigen Beschreibung sind spezifische Einzelheiten dargelegt worden, um ein umfassendes Verständnis der Ausführungsformen bereitzustellen. Es können jedoch andere Ausführungsformen ohne einige dieser spezifischen Einzelheiten praktiziert werden. Der Schutzumfang der Erfindung soll nicht durch die oben bereitgestellten spezifischen Beispiele bestimmt werden, sondern nur durch die Ansprüche im Folgenden. In anderen Fällen sind wohlbekannte Schaltungen, Strukturen, Vorrichtungen und Operationen in Form von Blockschaltplänen und/oder ohne Einzelheiten gezeigt worden, um es zu vermeiden, das Verstehen der Beschreibung undeutlich zu machen. Wo es als geeignet betrachtet wurde, sind Bezugszeichen oder die Endabschnitte der Bezugszeichen zwischen den Figuren wiederholt worden, um entsprechende oder analoge Elemente anzugeben, die optional ähnliche oder die gleichen Eigenschaften aufweisen können, wenn es nicht anderweitig spezifiziert oder deutlich offensichtlich ist.
  • Bestimmte Operationen können durch Hardware-Komponenten ausgeführt werden oder können in maschinenlesbaren oder schaltungsausführbaren Befehlen verkörpert sein, die verwendet werden können, um zu veranlassen und/oder dazu zu führen, dass eine Maschine, eine Schaltung oder eine Hardware-Komponente (z. B. ein Prozessor, ein Anteil eines Prozessors, eine Schaltung usw.), die mit den Befehlen programmiert ist, die Operationen ausführt. Die Operationen können außerdem optional durch eine Kombination aus Hardware und Software ausgeführt werden. Ein Prozessor, eine Maschine, eine Schaltung oder Hardware kann eine spezifische oder spezielle Schaltungsanordnung oder andere Logik (z. B. Hardware, potentiell kombiniert mit Firmware und/oder Software) enthalten, die betriebsfähig ist, um den Befehl auszuführen und/oder zu verarbeiten und ein Ergebnis in Reaktion auf den Befehl zu speichern.
  • Einige Ausführungsformen enthalten einen Herstellungsartikel (z. B. ein Computerprogrammprodukt), der ein maschinenlesbares Medium enthält. Das Medium kann einen Mechanismus enthalten, der Informationen in einer Form, die durch die Maschine lesbar ist, bereitstellt, z. B. speichert. Das maschinenlesbare Medium kann einen Befehl oder eine Folge von Befehlen bereitstellen oder darin gespeichert aufweisen, die, falls und/oder wenn sie durch eine Maschine ausgeführt werden, betriebsfähig sind, um die Maschine zu veranlassen, es auszuführen und/oder dazu zu führen, dass die Maschine eine oder mehrere Operationen, Verfahren oder Techniken, die hier offenbart sind, ausführt.
  • In einigen Ausführungsformen kann das maschinenlesbare Medium ein nicht transitorisches maschinenlesbares Speichermedium enthalten. Das nicht transitorische maschinenlesbare Speichermedium kann z. B. eine Diskette, ein optisches Speichermedium, eine optische Platte, eine optische Datenspeichervorrichtung, einen CD-ROM, eine Magnetplatte, eine magnetooptische Platte, einen Festwertspeicher (ROM) einen programmierbaren ROM (PROM), einen löschbaren und programmierbaren ROM (EPROM), einen elektrisch löschbaren und programmierbaren ROM (EEPROM), einen Schreib-Lese-Speicher (RAM), einen statischen RAM (SRAM), einen dynamischen RAM (DRAM), einen Flash-Speicher, einen Phasenänderungsspeicher, ein Phasenänderungs-Datenspeichermaterial, einen nichtflüchtigen Speicher, eine nichtflüchtige Datenspeichervorrichtung, einen nicht transitorischen Speicher, eine nicht transitorische Datenspeichervorrichtung oder dergleichen enthalten. Das nicht transitorische maschinenlesbare Speichermedium besteht nicht aus einem transitorischen ausgebreiteten Signal. In einigen Ausführungsformen kann das Speichermedium ein greifbares Medium enthalten, das einen Feststoff enthält.
  • Beispiele geeigneter Maschinen enthalten einen Universalprozessor, einen Spezialprozessor, eine digitale Logikschaltung, eine integrierte Schaltung oder dergleichen, sind aber nicht auf diese eingeschränkt. Noch andere Beispiele geeigneter Maschinen enthalten ein Computersystem oder eine elektronische Vorrichtung, die einen Prozessor, eine digitale Logikschaltung oder eine integrierte Schaltung enthält. Beispiele derartiger Computersysteme oder elektronischer Vorrichtungen enthalten Desktop-Computer, Laptop-Computer, Notebook-Computer, Tablet-Computer, Netbooks, Smartphones, Mobiltelephone, Server, Netzvorrichtungen (z. B. Router und Switches), mobile Internetvorrichtungen (MIDs), Medienspieler, intelligente Fernsehgeräte, Nettops, Set-Top-Boxes und Videospiel-Controller, sind aber nicht auf diese eingeschränkt.
  • Eine Bezugnahme überall in dieser Beschreibung auf „eine einzige Ausführungsform“, „eine Ausführungsform“, „eine oder mehrere Ausführungsformen“, „einige Ausführungsformen“ gibt z. B. an, dass ein spezielles Merkmal in der Praxis der Erfindung enthalten sein kann, wobei es aber nicht notwendigerweise erforderlich ist, dass es das ist. Ähnlich sind in der Beschreibung verschiedene Merkmale manchmal in einer einzigen Ausführungsform, Figur oder deren Beschreibung für den Zweck der Straffung der Offenbarung und des Unterstützens des Verständnisses der verschiedenen erfinderischen Aspekte zusammen gruppiert. Dieses Verfahren der Offenbarung soll jedoch nicht als eine Absicht widerspiegelnd interpretiert werden, dass die Erfindung mehr Merkmale erfordert, als in jedem Anspruch ausdrücklich dargestellt sind. Stattdessen liegen die erfinderischen Aspekte in weniger als allen Merkmalen einer einzigen offenbarten Ausführungsform, wie es die folgenden Ansprüche widerspiegeln. Folglich sind die der ausführlichen Beschreibung folgenden Ansprüche hierdurch ausdrücklich in diese ausführliche Beschreibung aufgenommen, wobei jeder Anspruch für sich allein als eine separate Ausführungsform der Erfindung steht.
  • BEISPIELHAFTE AUSFÜHRUNGSFORMEN
  • Die folgenden Beispiele betreffen weitere Ausführungsformen. Die Besonderheiten in den Beispielen können überall in einer oder mehreren Ausführungsformen verwendet werden.
  • Das Beispiel 1 ist ein Prozessor, der eine Decodiereinheit enthält, um einen Datenelement-Umordnungsbefehl zu decodieren. Der Befehl gibt einen gepackten Quelldatenoperanden an, der mehrere Quelldatenelemente aufweist, und gibt einen Zielspeicherort an. Jedes der Quelldatenelemente weist einen Quelldatenelementwert und eine Quelldatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Quelldatenoperanden auf. Eine Ausführungseinheit ist mit der Decodiereinheit gekoppelt. Die Ausführungseinheit speichert in Reaktion auf den Befehl einen gepackten Ergebnisdatenoperanden an dem Zielspeicherort. Der gepackte Ergebnisdatenoperand weist mehrere Ergebnisdatenelemente auf, wovon jedes einen Ergebnisdatenelementwert und eine Ergebnisdatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Ergebnisdatenoperanden aufweist. Der Ergebnisdatenelementwert jedes Ergebnisdatenelements ist eines der Folgenden: (1) gleich einer Quelldatenelementposition eines Quelldatenelements am nächsten an einem Ende des gepackten Quelldatenoperanden, der einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist; und (2) ein Ersatzwert, wenn kein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist.
  • Das Beispiel 2 enthält den Prozessor des Beispiels 1, wobei der gepackte Quelldatenoperand mehrere Sätze doppelter Quelldatenelementwerte aufweist. Für jeden Satz doppelter Quelldatenelementwerte speichert der gepackte Ergebnisdatenoperand eine Quelldatenelementposition nur eines höchstwertigen der doppelten Quelldatenelementwerte.
  • Das Beispiel 3 enthält den Prozessor des Beispiels 1, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, in dem das eine Ende des gepackten Quelldatenoperanden ein höchstwertiges Ende des gepackten Quelldatenoperanden enthält.
  • Das Beispiel 4 enthält den Prozessor des Beispiels 1, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, in dem das eine Ende des gepackten Quelldatenoperanden ein niedrigstwertiges Ende des gepackten Quelldatenoperanden enthält.
  • Das Beispiel 5 enthält den Prozessor des Beispiels 1, wobei die Ausführungseinheit in Reaktion auf den Befehl einen Ergebnismaskenoperanden speichert, der mehrere Maskenelemente aufweist, wovon jedes einem anderen der Ergebnisdatenelemente entspricht.
  • Das Beispiel 6 enthält den Prozessor des Beispiels 5, wobei die Ausführungseinheit in Reaktion auf den Befehl den Ergebnismaskenoperanden speichert, wobei: (1) jedes Maskenelement, das einem Ergebnisdatenelementwert entspricht, der gleich einer Quelldatenelementposition ist, einen ersten Wert aufweist; und (2) jedes Maskenelement, das einem Ergebnisdatenelementwert entspricht, der ein Ersatzwert ist, einen zweiten, anderen Wert aufweist.
  • Das Beispiel 7 enthält den Prozessor des Beispiels 5, wobei jedes Maskenelement nur ein einziges Bit umfasst.
  • Das Beispiel 8 enthält den Prozessor des Beispiels 5, wobei die Ausführungseinheit in Reaktion auf den Befehl einen Ergebnismaskenoperanden in einem Maskenregister speichert. Mehrere andere Befehle eines Befehlssatzes einschließlich des Datenelement-Umordnungsbefehls spezifizieren das Maskenregister für einen Aussageoperanden, der zu verwenden ist, um eine Operation für gepackte Daten auszusagen.
  • Das Beispiel 9 enthält den Prozessor des Beispiels 1, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, der wenigstens ein Ergebnisdatenelement aufweist, das einen Ergebnisdatenelementwert aufweist, der ein Ersatzwert ist. Der Ersatzwert ist eine negative Zahl. Keine anderen Ergebnisdatenelementwerte, die keine Ersatzwerte sind, sind negative Zahlen.
  • Das Beispiel 10 enthält den Prozessor des Beispiels 1, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, der wenigstens ein Ergebnisdatenelement aufweist, das einen Ergebnisdatenelementwert aufweist, der ein Ersatzwert ist, und wobei der Ersatzwert einen Nullwert umfasst.
  • Das Beispiel 11 enthält den Prozessor des Beispiels 1, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, der einen Ergebnisdatenelementwert aufweist, der ein Ersatzwert ist. Der Ersatzwert umfasst einen Wert eines Datenelements, das an einer entsprechenden Position an dem Zielspeicherort gerade vor der Ausführung des Befehls gespeichert ist.
  • Das Beispiel 12 enthält den Prozessor eines der Beispiele 1 bis 11, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, der wenigstens acht Ergebnisdatenelemente aufweist, die wenigstens ein Ergebnisdatenelement enthalten, das den Ersatzwert als einen Ergebnisdatenelementwert aufweist.
  • Das Beispiel 13 enthält den Prozessor eines der Beispiele 1 bis 11, wobei jedes der Quelldatenelemente einen ganzzahligen Index enthält. Jeder Index ist in einer Teilmenge unterster Ordnung von Bits eines niedrigstwertigen Bytes jedes Quelldatenelements dargestellt.
  • Das Beispiel 14 enthält den Prozessor eines der Beispiele 1 bis 11, wobei die Decodiereinheit außerdem einen Sammeln-durch-Indizes-zu-Register-Befehl decodiert, wobei aber die Decodiereinheit keinen Streuen-durch-Indizes-zu-Register-Befehl decodieren kann.
  • Das Beispiel 15 enthält den Prozessor eines der Beispiele 1 bis 11, wobei der gepackte Quelldatenoperand Quelldatenelemente aufweist, die in einem Streumuster angeordnet sind, und wobei der gepackte Ergebnisdatenoperand Ergebnisdatenelemente aufweist, die in einem Sammelmuster angeordnet sind.
  • Das Beispiel 16 ist ein Verfahren in einem Prozessor, das das Empfangen eines Datenelement-Umordnungsbefehls enthält. Der Befehl gibt einen gepackten Quelldatenoperanden an, der mehrere Quelldatenelemente aufweist, und gibt einen Zielspeicherort an. Jedes der Quelldatenelemente weist einen Quelldatenelementwert und eine Quelldatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Quelldatenoperanden auf. Das Verfahren enthält außerdem das Speichern eines gepackten Ergebnisdatenoperanden in Reaktion auf den Befehl an dem Zielspeicherort. Der gepackte Ergebnisdatenoperand weist mehrere Ergebnisdatenelemente auf, wovon jedes einen Ergebnisdatenelementwert und eine Ergebnisdatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Ergebnisdatenoperanden aufweist. Der Ergebnisdatenelementwert jedes Ergebnisdatenelements ist eines der Folgenden: (1) gleich einer Quelldatenelementposition eines Quelldatenelements am nächsten an einem Ende des gepackten Quelldatenoperanden, der einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist; und (2) ein Ersatzwert, wenn kein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist.
  • Das Beispiel 17 enthält das Verfahren des Beispiels 16, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, in dem das eine Ende des gepackten Quelldatenoperanden ein höchstwertiges Ende des gepackten Quelldatenoperanden enthält.
  • Das Beispiel 18 enthält das Verfahren des Beispiels 16, wobei die Ausführungseinheit in Reaktion auf den Befehl einen Ergebnismaskenoperanden speichert, der mehrere Maskenelemente aufweist, wobei jedes einem anderen der Ergebnisdatenelemente entspricht.
  • Das Beispiel 19 enthält das Verfahren des Beispiels 18, wobei die Ausführungseinheit in Reaktion auf den Befehl den Ergebnismaskenoperanden speichert, wobei: (1) jedes Maskenelement, das einem Ergebnisdatenelementwert entspricht, der gleich einer Quelldatenelementposition ist, einen ersten Wert aufweist; und (2) jedes Maskenelement, das einem Ergebnisdatenelementwert entspricht, der ein Ersatzwert ist, einen zweiten, anderen Wert aufweist.
  • Das Beispiel 20 enthält das Verfahren des Beispiels 16, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, der wenigstens acht Ergebnisdatenelemente aufweist, die wenigstens ein Ergebnisdatenelement enthalten, das den Ersatzwert als einen Ergebnisdatenelementwert aufweist. Jedes der Quelldatenelemente enthält einen ganzzahligen Index, wobei jeder Index in einer Teilmenge unterster Ordnung von Bits eines niedrigstwertigen Bytes jedes Quelldatenelements dargestellt ist.
  • Das Beispiel 21 enthält das Verfahren des Beispiels 16, das ferner das Ausführen eines Sammeln-durch-Indizes-zu-Register-Befehls enthält, der den gepackten Ergebnisdatenoperanden des Datenelement-Umordnungsbefehls als einen gepackten Quelldatenoperanden angibt.
  • Das Beispiel 22 ist ein Computersystem, das eine Zusammenschaltung und einen Prozessor, der mit der Zusammenschaltung gekoppelt ist, enthält. Der Prozessor empfängt einen Datenelement-Umordnungsbefehl. Der Befehl gibt einen gepackten Quelldatenoperanden an, der mehrere Quelldatenelemente aufweist, und gibt einen Zielspeicherort an. Jedes der Quelldatenelemente weist einen Quelldatenelementwert und eine Quelldatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Quelldatenoperanden auf. Der Prozessor speichert in Reaktion auf den Befehl einen gepackten Ergebnisdatenoperanden an dem Zielspeicherort. Der gepackte Ergebnisdatenoperand weist mehrere Ergebnisdatenelemente auf, wovon jedes einen Ergebnisdatenelementwert und eine Ergebnisdatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Ergebnisdatenoperanden aufweist. Der Ergebnisdatenelementwert jedes Ergebnisdatenelements ist eines der Folgenden: (1) gleich einer Quelldatenelementposition eines Quelldatenelements am nächsten an einem Ende des gepackten Quelldatenoperanden, der einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist; und (2) ein Ersatzwert, wenn kein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist. Das Computersystem weist außerdem einen dynamischen Schreib-Lese-Speicher (DRAM) auf, der mit der Zusammenschaltung gekoppelt ist. Der DRAM speichert einen Satz von Befehlen einschließlich eines Sammeln-durch-Indizes-zu-Register-Befehls, der den gepackten Ergebnisdatenoperanden des Datenelement-Umordnungsbefehls als einen gepackten Quelldatenoperanden angibt.
  • Das Beispiel 23 enthält das Computersystem des Beispiels 22, wobei der Prozessor in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, in dem das eine Ende des gepackten Quelldatenoperanden ein höchstwertiges Ende des gepackten Quelldatenoperanden enthält.
  • Das Beispiel 24 ist ein Herstellungsartikel, der ein nicht transitorisches maschinenlesbares Speichermedium enthält. Das nicht transitorische maschinenlesbare Speichermedium speichert einen Datenelement-Umordnungsbefehl. Der Datenelement-Umordnungsbefehl gibt einen gepackten Quelldatenoperanden an, der mehrere Quelldatenelemente aufweist, und gibt einen Zielspeicherort an. Jedes der Quelldatenelemente weist einen Quelldatenelementwert und eine Quelldatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Quelldatenoperanden auf. Der Datenelement-Umordnungsbefehl veranlasst, falls er durch eine Maschine ausgeführt wird, die Maschine, die Operationen einschließlich des Speicherns eines gepackten Ergebnisdatenoperanden an dem Zielspeicherort auszuführen. Der gepackte Ergebnisdatenoperand weist mehrere Ergebnisdatenelemente auf, wovon jedes einen Ergebnisdatenelementwert und eine Ergebnisdatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Ergebnisdatenoperanden aufweist. Der Ergebnisdatenelementwert jedes Ergebnisdatenelements ist eines der Folgenden: (1) gleich einer Quelldatenelementposition eines Quelldatenelements am nächsten an einem Ende des gepackten Quelldatenoperanden, der einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist; und (2) ein Ersatzwert, wenn kein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist.
  • Das Beispiel 25 enthält den Herstellungsartikel des Beispiels 24, wobei der Datenelement-Umordnungsbefehl, falls er durch die Maschine ausgeführt wird, die Maschine veranlasst, Operationen auszuführen, die das Speichern eines Maskenoperanden in einem Maskenregister enthalten, wobei der Maskenoperand ein einziges Maskenbit für jedes Ergebnisdatenelement des gepackten Ergebnisdatenoperanden aufweist.
  • Das Beispiel 26 enthält den Prozessor eines der Beispiele 1 bis 11, wobei er ferner eine optionale Verzweigungsvorhersageeinheit, um Verzweigungen vorherzusagen, und eine optionale Befehls-Prefetch-Einheit, die mit der Verzweigungsvorhersageeinheit gekoppelt ist, enthält, wobei die Befehls-Prefetch-Einheit die Befehle, die den Datenelement-Umordnungsbefehl (oder einen Streuen-durch-Indizes-zu-Register-Befehl) enthalten, im Voraus holt. Der Prozessor kann außerdem optional einen optionalen Befehls-Cache der Ebene 1 (L1-Befehls-Cache), der mit der Befehls-Prefetch-Einheit gekoppelt ist, wobei der L1-Befehls-Cache Befehle speichert, einen optionalen L1-Daten-Cache, um Daten zu speichern, und einen optionalen Cache der Ebene 2 (L2-Cache), um Daten und Befehle zu speichern, enthalten. Der Prozessor kann außerdem optional eine Befehlsholeinheit enthalten, die mit der Decodiereinheit, dem L1-Befehls-Cache und dem L2-Cache gekoppelt ist, um den Datenelement-Umordnungsbefehl (oder den Streuen-durch-Indizes-zu-Register-Befehl) in einigen Fällen von einem des L1-Befehls-Caches und des L2-Caches zu holen und um den Datenelement-Umordnungsbefehl (oder den Streuen-durch-Indizes-zu-Register-Befehl) der Decodiereinheit bereitzustellen. Der Prozessor kann außerdem optional eine Registerumbenennungseinheit, um Register umzubenennen, einen optionalen Scheduler, um eine oder mehrere Operationen, die von dem Datenelement-Umordnungsbefehl (oder dem Streuen-durch-Indizes-zu-Register-Befehl) decodiert worden sind, für die Ausführung zu planen, und eine optionale Einspeichereinheit, um die Ausführungsergebnisse des Datenelement-Umordnungsbefehls (oder des Streuen-durch-Indizes-zu-Register-Befehls) einzuspeichern, enthalten.
  • Das Beispiel 27 enthält ein System auf dem Chip, das wenigstens eine Zusammenschaltung, den Prozessor eines der Beispiele 1 bis 16, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, eine optionale Graphikverarbeitungseinheit (GPU), die mit der wenigstens einen Zusammenschaltung gekoppelt ist, einen optionalen digitalen Signalprozessor (DSP), der mit der wenigstens einen Zusammenschaltung gekoppelt ist, einen optionalen Anzeige-Controller, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, einen optionalen Speicher-Controller, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, ein optionales drahtloses Modem, das mit der wenigstens einen Zusammenschaltung gekoppelt ist, einen optionalen Bildsignalprozessor, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, einen optionalen mit dem universellen Bus (USB) 3.0 kompatiblen Controller, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, einen optionalen mit Bluetooth 4.1 kompatiblen Controller, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, und einen optionalen drahtlosen Sender/Empfänger-Controller, der mit der wenigstens einen Zusammenschaltung gekoppelt ist, enthält.
  • Das Beispiel 28 ist ein Prozessor oder eine andere Vorrichtung, um das Verfahren eines der Beispiele 16 bis 21 auszuführen oder um betriebsfähig zu sein, um das Verfahren eines der Beispiele 16 bis 21 auszuführen.
  • Das Beispiel 29 ist ein Prozessor oder eine andere Vorrichtung, die Mittel zum Ausführen des Verfahrens eines der Beispiele 16 bis 21 enthält.
  • Das Beispiel 30 ist ein Herstellungsartikel, der optional ein nicht transitorisches maschinenlesbares Medium enthält, das optional einen Befehl speichert oder anderweitig bereitstellt, der, falls und/oder wenn er durch einen Prozessor, ein Computersystem, eine elektronische Vorrichtung oder eine andere Maschine ausgeführt wird, betriebsfähig ist, um die Maschine zu veranlassen, das Verfahren eines der Beispiele 16 bis 21 auszuführen.
  • Das Beispiel 31 ist ein Prozessor oder eine andere Vorrichtung, wie er bzw. sie im Wesentlichen hier beschrieben ist.
  • Das Beispiel 32 ist ein Prozessor oder eine andere Vorrichtung, der bzw. die betriebsfähig ist, um irgendein Verfahren auszuführen, wie es im Wesentlichen hier beschrieben ist.
  • Das Beispiel 33 ist ein Prozessor oder eine andere Vorrichtung, um irgendeinen Datenelement-Umordnungsbefehl (oder einen Streuen-durch-Indizes-zu-Register-Befehl), wie er im Wesentlichen hier beschrieben ist, auszuführen, (der bzw. die z. B. Komponenten aufweist, um irgendeinen Datenelement-Umordnungsbefehl (oder einen Streuen-durch-Indizes-zu-Register-Befehl), wie er im Wesentlichen hier beschrieben ist, auszuführen, oder der bzw. die betriebsfähig ist, um irgendeinen Datenelement-Umordnungsbefehl (oder einen Streuen-durch-Indizes-zu-Register-Befehl), wie er im Wesentlichen hier beschrieben ist, auszuführen).
  • Das Beispiel 34 ist ein Computersystem oder eine andere elektronische Vorrichtung, die einen Prozessor enthält, der eine Decodiereinheit aufweist, um die Befehle eines ersten Befehlssatzes zu decodieren. Der Prozessor weist außerdem eine oder mehrere Ausführungseinheiten auf. Die elektronische Vorrichtung enthält außerdem eine Speichervorrichtung, die mit dem Prozessor gekoppelt ist. Die Speichervorrichtung ist betreibbar, um einen Datenelement-Umordnungsbefehl (oder einen Streuen-durch-Indizes-zu-Register-Befehl), der aus einem zweiten Befehlssatz stammt, zu speichern. Die Speichervorrichtung speichert außerdem Befehle, um den Datenelement-Umordnungsbefehl (oder den Streuen-durch-Indizes-zu-Register-Befehl) in einen oder mehrere Befehle des ersten Befehlssatzes umzusetzen. Der eine oder die mehreren Befehle des ersten Befehlssatzes veranlassen, wenn sie durch den Prozessor ausgeführt werden, den Prozessor, ein Ergebnis, das durch den Datenelement-Umordnungsbefehl (oder den Streuen-durch-Indizes-zu-Register-Befehl) gespeichert würde, zu speichern.
  • Das Beispiel 35 ist ein Prozessor, der mehrere Register für gepackte Daten und eine Decodiereinheit, um einen Streuen-durch-Indizes-zu-Register-Befehl zu decodieren, enthält. Der Streuen-durch-Indizes-zu-Register-Befehl gibt einen gepackten Quelldatenoperanden an, der mehrere Quelldatenelemente aufweist, gibt einen gepackten Quellindizesoperanden an, der mehrere Indizes aufweist, und gibt ein gepacktes Zieldatenregister an. Jeder der Indizes entspricht einem anderen der Quelldatenelemente an derselben relativen Position. Eine Ausführungseinheit ist mit den mehreren Registern für gepackte Daten gekoppelt und ist mit der Decodiereinheit gekoppelt. Die Ausführungseinheit speichert in Reaktion auf den Streuen-durch-Indizes-zu-Register-Befehl einen gepackten Ergebnisdatenoperanden in einem Zielregister für gepackte Daten. Der gepackte Ergebnisdatenoperand enthält mehrere Ergebnisdatenelemente. Jedes Ergebnisdatenelement weist einen Wert von einem der Quelldatenelemente auf, dessen entsprechender Index eine Datenelementposition des Ergebnisdatenelements in dem gepackten Ergebnisdatenoperanden angibt.

Claims (25)

  1. Prozessor, der umfasst: eine Decodiereinheit, um einen Datenelement-Umordnungsbefehl zu decodieren, wobei der Befehl einen gepackten Quelldatenoperanden angibt, der mehrere Quelldatenelemente aufweist, und einen Zielspeicherort angibt, wobei jedes der Quelldatenelemente einen Quelldatenelementwert und eine Quelldatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Quelldatenoperanden aufweist; und eine Ausführungseinheit, die mit der Decodiereinheit gekoppelt ist, wobei die Ausführungseinheit in Reaktion auf den Befehl einen gepackten Ergebnisdatenoperanden an dem Zielspeicherort speichert, wobei der gepackte Ergebnisdatenoperand mehrere Ergebnisdatenelemente aufweist, wovon jedes einen Ergebnisdatenelementwert und eine Ergebnisdatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Ergebnisdatenoperanden aufweist, wobei der Ergebnisdatenelementwert jedes Ergebnisdatenelements eines der Folgenden ist: gleich einer Quelldatenelementposition eines Quelldatenelements am nächsten an einem Ende des gepackten Quelldatenoperanden, der einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist; und ein Ersatzwert, wenn kein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist.
  2. Prozessor nach Anspruch 1, wobei der gepackte Quelldatenoperand mehrere Sätze doppelter Quelldatenelementwerte aufweist, und wobei für jeden Satz doppelter Quelldatenelementwerte der gepackte Ergebnisdatenoperand eine Quelldatenelementposition nur eines höchstwertigen der doppelten Quelldatenelementwerte speichert.
  3. Prozessor nach Anspruch 1, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, in dem das eine Ende des gepackten Quelldatenoperanden ein höchstwertiges Ende des gepackten Quelldatenoperanden umfasst.
  4. Prozessor nach Anspruch 1, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, in dem das eine Ende des gepackten Quelldatenoperanden ein niedrigstwertiges Ende des gepackten Quelldatenoperanden umfasst.
  5. Prozessor nach Anspruch 1, wobei die Ausführungseinheit in Reaktion auf den Befehl einen Ergebnismaskenoperanden speichert, der mehrere Maskenelemente aufweist, wovon jedes einem anderen der Ergebnisdatenelemente entspricht.
  6. Prozessor nach Anspruch 5, wobei die Ausführungseinheit in Reaktion auf den Befehl den Ergebnismaskenoperanden speichert, wobei: jedes Maskenelement, das einem Ergebnisdatenelementwert entspricht, der gleich einer Quelldatenelementposition ist, einen ersten Wert aufweist; und jedes Maskenelement, das einem Ergebnisdatenelementwert entspricht, der ein Ersatzwert ist, einen zweiten, anderen Wert aufweist.
  7. Prozessor nach Anspruch 5, wobei jedes Maskenelement nur ein einziges Bit umfasst.
  8. Prozessor nach Anspruch 5, wobei die Ausführungseinheit in Reaktion auf den Befehl einen Ergebnismaskenoperanden in einem Maskenregister speichert und wobei mehrere andere Befehle eines Befehlssatzes einschließlich des Datenelement-Umordnungsbefehls das Maskenregister für einen Aussageoperanden, der zu verwenden ist, um eine Operation für gepackte Daten auszusagen, spezifizieren.
  9. Prozessor nach Anspruch 1, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, der wenigstens ein Ergebnisdatenelement aufweist, das einen Ergebnisdatenelementwert aufweist, der ein Ersatzwert ist, wobei der Ersatzwert eine negative Zahl ist und wobei keine anderen Ergebnisdatenelementwerte, die keine Ersatzwerte sind, negative Zahlen sind.
  10. Prozessor nach Anspruch 1, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, der wenigstens ein Ergebnisdatenelement aufweist, das einen Ergebnisdatenelementwert aufweist, der ein Ersatzwert ist, und wobei der Ersatzwert einen Nullwert umfasst.
  11. Prozessor nach Anspruch 1, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, der einen Ergebnisdatenelementwert aufweist, der ein Ersatzwert ist, und wobei der Ersatzwert einen Wert eines Datenelements umfasst, das an einer entsprechenden Position an dem Zielspeicherort gerade vor der Ausführung des Befehls gespeichert ist.
  12. Prozessor nach einem der Ansprüche 1 bis 11, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, der wenigstens vier Ergebnisdatenelemente aufweist, die wenigstens ein Ergebnisdatenelement enthalten, das den Ersatzwert als einen Ergebnisdatenelementwert aufweist.
  13. Prozessor nach einem der Ansprüche 1 bis 11, wobei jedes der Quelldatenelemente einen ganzzahligen Index enthält und wobei jeder Index in einer Teilmenge unterster Ordnung von Bits eines niedrigstwertigen Bytes jedes Quelldatenelements dargestellt ist.
  14. Prozessor mach einem der Ansprüche 1 bis 11, wobei die Decodiereinheit außerdem einen Sammeln-durch-Indizes-zu-Register-Befehl decodiert, wobei aber die Decodiereinheit keinen Streuen-durch-Indizes-zu-Register-Befehl decodieren kann.
  15. Prozessor nach einem der Ansprüche 1 bis 11, wobei der gepackte Quelldatenoperand Quelldatenelemente aufweist, die in einem Streumuster angeordnet sind, und wobei der gepackte Ergebnisdatenoperand Ergebnisdatenelemente aufweist, die in einem Sammelmuster angeordnet sind.
  16. Verfahren in einem Prozessor, das Folgendes umfasst: Empfangen eines Datenelement-Umordnungsbefehls, wobei der Befehl einen gepackten Quelldatenoperanden angibt, der mehrere Quelldatenelemente aufweist, und einen Zielspeicherort angibt, wobei jedes der Quelldatenelemente einen Quelldatenelementwert und eine Quelldatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Quelldatenoperanden aufweist; und Speichern eines gepackten Ergebnisdatenoperanden in Reaktion auf den Befehl an dem Zielspeicherort, wobei der gepackte Ergebnisdatenoperand mehrere Ergebnisdatenelemente aufweist, wovon jedes einen Ergebnisdatenelementwert und eine Ergebnisdatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Ergebnisdatenoperanden aufweist, wobei der Ergebnisdatenelementwert jedes Ergebnisdatenelements eines der Folgenden ist: gleich einer Quelldatenelementposition eines Quelldatenelements am nächsten an einem Ende des gepackten Quelldatenoperanden, der einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist; und ein Ersatzwert, wenn kein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist.
  17. Verfahren nach Anspruch 16, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, in dem das eine Ende des gepackten Quelldatenoperanden ein höchstwertiges Ende des gepackten Quelldatenoperanden umfasst.
  18. Verfahren nach Anspruch 16, wobei die Ausführungseinheit in Reaktion auf den Befehl einen Ergebnismaskenoperanden speichert, der mehrere Maskenelemente aufweist, wobei jedes einem anderen der Ergebnisdatenelemente entspricht.
  19. Verfahren nach Anspruch 18, wobei die Ausführungseinheit in Reaktion auf den Befehl den Ergebnismaskenoperanden speichert, wobei: jedes Maskenelement, das einem Ergebnisdatenelementwert entspricht, der gleich einer Quelldatenelementposition ist, einen ersten Wert aufweist; und jedes Maskenelement, das einem Ergebnisdatenelementwert entspricht, der ein Ersatzwert ist, einen zweiten, anderen Wert aufweist.
  20. Verfahren nach Anspruch 16, wobei die Ausführungseinheit in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, der wenigstens vier Ergebnisdatenelemente aufweist, die wenigstens ein Ergebnisdatenelement enthalten, das den Ersatzwert als einen Ergebnisdatenelementwert aufweist, und wobei jedes der Quelldatenelemente einen ganzzahligen Index umfasst, und wobei jeder Index in einer Teilmenge unterster Ordnung von Bits eines niedrigstwertigen Bytes jedes Quelldatenelements dargestellt ist.
  21. Computersystem, das Folgendes umfasst: eine Zusammenschaltung; einen Prozessor, der mit der Zusammenschaltung gekoppelt ist, wobei der Prozessor einen Datenelement-Umordnungsbefehl empfängt, wobei der Befehl einen gepackten Quelldatenoperanden angibt, der mehrere Quelldatenelemente aufweist, und einen Zielspeicherort angibt, wobei jedes der Quelldatenelemente einen Quelldatenelementwert und eine Quelldatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Quelldatenoperanden aufweist, wobei der Prozessor in Reaktion auf den Befehl einen gepackten Ergebnisdatenoperanden an dem Zielspeicherort speichert, wobei der gepackte Ergebnisdatenoperand mehrere Ergebnisdatenelemente aufweist, wovon jedes einen Ergebnisdatenelementwert und eine Ergebnisdatenelementposition bezüglich eines niedrigstwertigen Endes des gepackten Ergebnisdatenoperanden aufweist, wobei der Ergebnisdatenelementwert jedes Ergebnisdatenelements eines der Folgenden ist: gleich einer Quelldatenelementposition eines Quelldatenelements am nächsten an einem Ende des gepackten Quelldatenoperanden, der einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist; und ein Ersatzwert, wenn kein Quelldatenelement einen Quelldatenelementwert aufweist, der gleich der Ergebnisdatenelementposition des Ergebnisdatenelements ist; und einen dynamischen Schreib-Lese-Speicher (DRAM), der mit der Zusammenschaltung gekoppelt ist, wobei der DRAM einen Satz von Befehlen einschließlich eines Sammeln-durch-Indizes-zu-Register-Befehls speichert, der den gepackten Ergebnisdatenoperanden des Datenelement-Umordnungsbefehls als einen gepackten Quelldatenoperanden angibt.
  22. Computersystem nach Anspruch 21, wobei der Prozessor in Reaktion auf den Befehl den gepackten Ergebnisdatenoperanden speichert, in dem das eine Ende des gepackten Quelldatenoperanden ein höchstwertiges Ende des gepackten Quelldatenoperanden umfasst.
  23. Vorrichtung, die Mittel zum Ausführen des Verfahrens nach einem der Ansprüche 16 bis 20 umfasst.
  24. Herstellungsartikel, der ein maschinenlesbares Medium umfasst, das einen Befehl speichert, der, wenn er durch eine Maschine ausgeführt wird, betriebsfähig ist, um die Maschine zu veranlassen, das Verfahren nach einem der Ansprüche 16 bis 20 auszuführen.
  25. Elektronische Vorrichtung, die eine Zusammenschaltung, den Prozessor nach einem der Ansprüche 1 bis 11, der mit der Zusammenschaltung gekoppelt ist, und einen dynamischen Schreib-Lese-Speicher (DRAM), der mit der Zusammenschaltung gekoppelt ist, umfasst.
DE112016004348.1T 2015-09-25 2016-08-08 Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle Pending DE112016004348T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/865,696 2015-09-25
US14/865,696 US10503502B2 (en) 2015-09-25 2015-09-25 Data element rearrangement, processors, methods, systems, and instructions
PCT/US2016/045989 WO2017052812A1 (en) 2015-09-25 2016-08-08 Scatter by indices to register, and data element rearrangement, processors, methods, systems, and instructions

Publications (1)

Publication Number Publication Date
DE112016004348T5 true DE112016004348T5 (de) 2018-06-21

Family

ID=58387259

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112016004348.1T Pending DE112016004348T5 (de) 2015-09-25 2016-08-08 Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle

Country Status (5)

Country Link
US (2) US10503502B2 (de)
CN (1) CN107924307B (de)
DE (1) DE112016004348T5 (de)
TW (1) TWI706322B (de)
WO (1) WO2017052812A1 (de)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10503502B2 (en) 2015-09-25 2019-12-10 Intel Corporation Data element rearrangement, processors, methods, systems, and instructions
JP6222285B1 (ja) * 2016-06-01 2017-11-01 富士電機株式会社 データ処理装置、データ処理方法及びプログラム
US10459843B2 (en) 2016-12-30 2019-10-29 Texas Instruments Incorporated Streaming engine with separately selectable element and group duplication
JP7148526B2 (ja) * 2017-02-23 2022-10-05 アーム・リミテッド データ処理装置におけるベクトルによる要素演算
US10782918B2 (en) * 2018-09-06 2020-09-22 Advanced Micro Devices, Inc. Near-memory data-dependent gather and packing
CN111078282B (zh) * 2018-10-19 2020-12-22 安徽寒武纪信息科技有限公司 运算方法、装置及相关产品
US10862465B1 (en) * 2019-09-02 2020-12-08 Quantum Machines Quantum controller architecture
US11256987B1 (en) * 2021-06-02 2022-02-22 SambaNova Systems, Inc. Memory efficient dropout, with reordering of dropout mask elements
US11328209B1 (en) 2021-06-02 2022-05-10 SambaNova Systems, Inc. Dual cycle tensor dropout in a neural network

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2665111B2 (ja) * 1992-06-18 1997-10-22 日本電気株式会社 ベクトル処理装置
US5838984A (en) * 1996-08-19 1998-11-17 Samsung Electronics Co., Ltd. Single-instruction-multiple-data processing using multiple banks of vector registers
US5996066A (en) 1996-10-10 1999-11-30 Sun Microsystems, Inc. Partitioned multiply and add/subtract instruction for CPU with integrated graphics functions
US6088782A (en) 1997-07-10 2000-07-11 Motorola Inc. Method and apparatus for moving data in a parallel processor using source and destination vector registers
US6041404A (en) 1998-03-31 2000-03-21 Intel Corporation Dual function system and method for shuffling packed data elements
US6018628A (en) * 1998-06-16 2000-01-25 Sun Microsystems, Inc. Method of implementing parameterized types to be compatible with existing unparameterized libraries
US20040054877A1 (en) 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US20040236920A1 (en) 2003-05-20 2004-11-25 Sheaffer Gad S. Methods and apparatus for gathering and scattering data associated with a single-instruction-multiple-data (SIMD) operation
EP1622009A1 (de) 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM-Architektur und Systeme
US8074026B2 (en) 2006-05-10 2011-12-06 Intel Corporation Scatter-gather intelligent memory architecture for unstructured streaming data on multiprocessor systems
US7984273B2 (en) 2007-12-31 2011-07-19 Intel Corporation System and method for using a mask register to track progress of gathering elements from memory
US10387151B2 (en) * 2007-12-31 2019-08-20 Intel Corporation Processor and method for tracking progress of gathering/scattering data element pairs in different cache memory banks
US8447962B2 (en) 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
US8230172B2 (en) 2009-12-03 2012-07-24 Intel Corporation Gather and scatter operations in multi-level memory hierarchy
US20120254592A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
JP5933725B2 (ja) * 2011-09-26 2016-06-15 インテル・コーポレーション ベクトル散乱演算機能及びベクトル収集演算機能を提供する命令及びロジック
US10866807B2 (en) * 2011-12-22 2020-12-15 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in numerical order that differ by a constant stride
US9639354B2 (en) 2011-12-22 2017-05-02 Intel Corporation Packed data rearrangement control indexes precursors generation processors, methods, systems, and instructions
CN104025040B (zh) * 2011-12-23 2017-11-21 英特尔公司 用于混洗浮点或整数值的装置和方法
WO2013095653A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for performing a conversion of a writemask register to a list of index values in a vector register
US9766887B2 (en) * 2011-12-23 2017-09-19 Intel Corporation Multi-register gather instruction
WO2013095669A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Multi-register scatter instruction
WO2013101010A1 (en) * 2011-12-28 2013-07-04 Intel Corporation Floating point scaling processors, methods, systems, and instructions
WO2013101232A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Packed rotate processors, methods, systems, and instructions
CN104011673B (zh) * 2011-12-30 2016-12-07 英特尔公司 向量频率压缩指令
US9626333B2 (en) 2012-06-02 2017-04-18 Intel Corporation Scatter using index array and finite state machine
US9785436B2 (en) 2012-09-28 2017-10-10 Intel Corporation Apparatus and method for efficient gather and scatter operations
US9842046B2 (en) * 2012-09-28 2017-12-12 Intel Corporation Processing memory access instructions that have duplicate memory indices
US9348601B2 (en) 2012-12-26 2016-05-24 Intel Corporation Coalescing adjacent gather/scatter operations
US20140281418A1 (en) * 2013-03-14 2014-09-18 Shihjong J. Kuo Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions
US10228941B2 (en) * 2013-06-28 2019-03-12 Intel Corporation Processors, methods, and systems to access a set of registers as either a plurality of smaller registers or a combined larger register
US10503502B2 (en) 2015-09-25 2019-12-10 Intel Corporation Data element rearrangement, processors, methods, systems, and instructions

Also Published As

Publication number Publication date
CN107924307A (zh) 2018-04-17
US20170090921A1 (en) 2017-03-30
US11941394B2 (en) 2024-03-26
CN107924307B (zh) 2022-06-17
WO2017052812A1 (en) 2017-03-30
US10503502B2 (en) 2019-12-10
TW201729072A (zh) 2017-08-16
TWI706322B (zh) 2020-10-01
US20200117451A1 (en) 2020-04-16

Similar Documents

Publication Publication Date Title
DE102015007571B4 (de) Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren, -verfahren, -systeme und -befehle
DE112016004348T5 (de) Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE112012007063T5 (de) Zusammenfügen von benachbarten Sammel-/Streuoperationen
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE102014003644A1 (de) Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich
DE112017003336T5 (de) Vorrichtungen, verfahren und systeme zum elementsortieren von vektoren
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE102018125232A1 (de) Einrichtung und Verfahren für komplexe Multiplikation und Akkumulation
DE112013005343T5 (de) Befehle für Codierungsalgorithemen mit gleitendem Fenster
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE112013003741T5 (de) Systeme, Vorrichtungen und Verfahren zum Durchführen einer Konfliktdetektion unf einer Übertragung von Inhalten eines Registers an Datenelementpositionen eines anderen Registers
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
DE102018124944A1 (de) Vorrichtung und Verfahren zum Umsetzen eines Gleitkommawertes von halber Genauigkeit in einfache Genauigkeit
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE112017001709T5 (de) Prozessoren, verfahren, systeme, und instruktionen zum partitionieren von quellpackdaten in spuren
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