DE112010002773T5 - Entpacken von gepackten daten auf mehreren spuren - Google Patents

Entpacken von gepackten daten auf mehreren spuren Download PDF

Info

Publication number
DE112010002773T5
DE112010002773T5 DE112010002773T DE112010002773T DE112010002773T5 DE 112010002773 T5 DE112010002773 T5 DE 112010002773T5 DE 112010002773 T DE112010002773 T DE 112010002773T DE 112010002773 T DE112010002773 T DE 112010002773T DE 112010002773 T5 DE112010002773 T5 DE 112010002773T5
Authority
DE
Germany
Prior art keywords
bits
track
operand
data elements
subset
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.)
Withdrawn
Application number
DE112010002773T
Other languages
English (en)
Inventor
Asaf Hargil
Doron Orenstein
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 DE112010002773T5 publication Critical patent/DE112010002773T5/de
Withdrawn 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/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/30145Instruction analysis, e.g. decoding, instruction word fields

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)
  • Advance Control (AREA)

Abstract

Offenbart ist ein Empfangen eines Befehls, der einen ersten und einen zweiten Operanden angibt. Jeder der Operanden weist gepackte Datenelemente auf, die sich in jeweiligen Positionen entsprechen. Eine erste Teilmenge der Datenelemente des ersten Operanden und eine erste Teilmenge der Datenelemente des zweiten Operanden entsprechen jeweils einer ersten Spur. Eine zweite Teilmenge der Datenelemente des ersten Operanden und eine zweite Teilmenge der Datenelemente des zweiten Operanden entsprechen jeweils einer zweiten Spur. Ein Ergebnis wird als Reaktion auf den Befehl gespeichert, aufweisend: (1) in der ersten Spur lediglich niedrigstwertige Datenelemente aus der ersten Teilmenge des ersten Operanden verschachtelt mit entsprechenden niedrigstwertigen Datenelementen aus der ersten Teilmenge des zweiten Operanden; und (2) in der zweiten Spur lediglich höchstwertige Datenelemente aus der zweiten Teilmenge des ersten Operanden verschachtelt mit entsprechenden höchstwertigen Datenelementen aus der zweiten Teilmenge des zweiten Operanden.

Description

  • HINTERGRUND
  • Bereich
  • Ausführungsformen beziehen sich auf Prozessoren, Verfahren, die von Prozessoren durchgeführt werden, Systeme, die Prozessoren einbauen, oder Befehle, die von Prozessoren verarbeitet werden. Insbesondere beziehen sich Ausführungsformen auf Prozessoren, Verfahren, Systeme oder Befehle zum Entpacken von gepackten Daten auf mehreren Spuren.
  • Hintergrundinformationen
  • Das Verbessern der Leistungsfähigkeit von Computer und anderen Verarbeitungssystemen führt allgemein dazu, dass die Datenmenge, die verarbeitet werden kann, zunimmt und/oder ein besseres Nutzungserlebnis angeboten wird. Da Computer und andere Verarbeitungssysteme zunehmend größere Datenmengen handhaben, neigen Techniken zum Beschleunigen solcher Verarbeitungen von Daten dazu, zunehmend wichtiger zu werden.
  • Single Instruction, Multiple Data(SIMD)-Architekturen sind eine Möglichkeit zum Beschleunigen der Verarbeitung von Daten. Anstelle von einem Befehl, der nur auf genau einem Datenelement arbeitet, kann der Befehl bei SIMD-Architekturen auf mehreren Datenelementen gleichzeitig oder parallel arbeiten. Bei SIMD-Architekturen können repräsentativ mehrere Datenelemente innerhalb eines Registers oder einer Speicherstelle gepackt sein. Parallele Ausführungshardware, die auf die Befehle reagiert, kann mehrere Operationen gleichzeitig oder parallel durchführen. Solche SIMD-Architekturen führen dazu, dass die Systemleistungsfähigkeit wesentlich verbessert wird.
  • Ein bekannter Typ eines SIMD-Befehls ist ein Unpack-Befehl. Einige bekannte Prozessoren weisen eine Vielzahl von unterschiedlichen Unpack-Befehlen auf. Zum Beispiel weist der Intel® CoreTM 2 Duo-Prozessor, unter Anderem von der Intel Corporation, verschiedene Unpack-Befehle auf, wie z. B. solche, die in dem Intel Architecture Software Developer's Manual: Band 2: Instruction Set Reference, 1999 (Bestell-Nr. 243191) beschrieben werden.
  • Jedoch können zusätzliche Unpack-Befehle und -Operationen in bestimmten Fällen und für einige Anwendungen nützlich sein.
  • KURZBESCHREIBUNG DER VERSCHIEDENEN ANSICHTEN DER ZEICHNUNGEN
  • Ausführungsformen der Erfindung können am Besten mit Bezug auf die folgende Beschreibung und die begleitenden Zeichnungen verstanden werden, die verwendet werden, um Ausführungsformen der Erfindung darzustellen. In den Zeichnungen:
  • 1 stellt eine beispielhafte Ausführungsform eines Prozessors dar.
  • 2 ist ein Blockflussdiagramm einer Ausführungsform eines Verfahrens zum Empfangen eines Befehls und zum Speichern eines Ergebnisses, das durch den Befehl spezifiziert ist.
  • 3 zeigt eine Ausführungsform von YMM-Registern, die von vielen Intel® Advanced Vector Extensions(Intel AVX)-Befehlen verwendet werden.
  • 4 zeigt repräsentative Beispiele von gepackten Datenformaten, die für eine oder mehrere Ausführungsformen der Erfindung geeignet sind.
  • 5 ist ein Blockflussdiagramm einer beispielhaften Ausführungsform eines Kreuzspur-Entpackverfahrens.
  • 6 stellt ein Entpacken von gepackten 32-Bit-Doppelwort-Datenelementen in 256-Bit-Operanden mit zwei Spuren gemäß einem ersten einzelnen Kreuzspur-Unpack-Befehl dar, der niedrige Entpackoperationen für eine untere Spur und hohe Entpackoperationen für eine obere Spur spezifiziert.
  • 7 stellt ein Entpacken von gepackten 32-Bit-Doppelwort-Datenelerenten in 256-Bit-Operanden mit zwei Spuren gemäß einem zweiten einzelnen Kreuzspur-Unpack-Befehl dar, der hohe Entpackoperationen für eine untere Spur und niedrige Entpackoperationen für eine obere Spur spezifiziert.
  • 8 stellt ein Entpacken von gepackten 16-Bit-Wort-Datenelementen in 256-Bit-Operanden mit zwei Spuren gemäß einem dritten einzelnen Kreuzspur-Unpack-Befehl dar, der niedrige Entpackoperationen für eine untere Spur und hohe Entpackoperationen für eine obere Spur spezifiziert.
  • 9 stellt ein Entpacken von gepackten 16-Bit-Wort-Datenelementen in 256-Bit-Operanden mit zwei Spuren gemäß einem vierten einzelnen Kreuzspur-Unpack-Befehl dar, der hohe Entpackoperationen für eine untere Spur und niedrige Entpackoperationen für eine obere Spur spezifiziert.
  • 10 ist ein vereinfachtes Blockdiagramm einer Ausführungsform eines Kreuzspur-Unpack-Befehls mit einem Steuerfeld, um anzugeben, welche Typen von Entpackoperationen für jede Spur durchzuführen sind.
  • 11 ist ein Blockdiagramm einer beispielhaften Ausführungsform eines Computersystems, das zum Implementieren von einer oder mehreren Ausführungsformen der Erfindung geeignet ist.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche spezifische Details, wie z. B. Prozessortypen, Datentypen, Datenformate, Registertypen, Registeranordnungen, Systemkonfigurationen und Ähnliche dargelegt. Es ist jedoch klar, dass Ausführungsformen der Erfindung auch ohne diese spezifischen Details ausgeführt werden können. In anderen Fällen wurden wohlbekannte Schaltungen, Strukturen und Techniken nicht detailliert gezeigt, um das Verständnis dieser Beschreibung nicht zu verschleiern.
  • 1 stellt eine beispielhafte Ausführungsform eines Prozessors 100 dar. Der Prozessor ist in der Lage oder ist eingerichtet, einen Kreuzspur-Unpack-Befehl 102, wie an anderer Stelle hier diskutiert werden wird, auszuführen.
  • Der Prozessor kann irgendeiner aus verschiedenen unterschiedlichen Typen von Prozessoren sein, die in der Lage sind, Befehle auszuführen. Der Prozessor kann z. B. ein Allzweckprozessor, wie z. B. ein PENTIUM® 4, PENTIUM® Dual-Core, CoreTM 2 Duo und Quad, XeonTM, Itanium®, XScaleTM oder StrongARMTM-Mikroprozessor sein, die von der Intel Corporation aus Santa Clara, Kalifornien verfügbar sind. Alternativ kann der Prozessor von einem anderen Unternehmen sein. Der Prozessor kann ein Reduced Instruction Set Computing(RISC)-Prozessor, ein Complex Instruction Set Computing(CISC)-Prozessor, ein Very Long Instruction Word(VLIW)-Prozessor oder ein hybrider oder alternativer Prozessortyp sein. Als noch eine weitere Option kann der Prozessor ein Spezialprozessor sein, wie z. B. ein Netzwerk- oder Kommunikationsprozessor, ein Koprozessor, ein eingebetteter Prozessor, eine Kompressions-Engine, ein Grafikprozessor oder Ähnliches. Der Prozessor kann auf einem oder mehreren Chips implementiert sein.
  • Während der Nutzung ist der Prozessor funktional eingerichtet, den Kreuzspur-Unpack-Befehl 102 zu empfangen. Der Unpack-Befehl kann ein Steuersignal darstellen, das funktional eingerichtet ist, den Prozessor dazu zu veranlassen, Entpackoperationen durchzuführen, wie weiter unten diskutiert werden wird. Der Unpack-Befehl kann z. B. durch eine Software-Sequenz oder einen Algorithmus bereitgestellt sein.
  • Die dargestellte Ausführungsform des Prozessors weist einen Befehlsdecodierer 104 auf. Der Decodierer kann den Kreuzspur-Unpack-Befehl empfangen. Der Decodierer kann den Unpack-Befehl decodieren und als Ausgabe eine oder mehrere Mikrooperationen, Mikrocode-Einsprungspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale erzeugen, die aus dem ursprünglichen Unpack-Befehl decodiert sind oder diesen anderweitig reflektieren oder aus diesem abgeleitet sind. Der Decodierer kann unter Verwendung von verschiedenen unterschiedlichen Mechanismen implementiert sein. Beispiele von geeigneten Mechanismen weisen auf, sind jedoch nicht beschränkt auf Look-up-Tabellen, Hardware-Implementierungen, programmierbare logische Arrays (PLAs), Mikrocode-Random Access Memories (ROMs) usw.
  • In einigen Fällen kann der Decodierer durch einen Befehlsübersetzer, einen Befehlsemulator oder einen anderen Befehlskonvertierer ersetzt sein. Der Befehlskonvertierer kann einen Befehl aus einem Quellbefehlssatz in einen Zielbefehlssatz konvertieren. Der Befehlskonvertierer kann z. B. einen Unpack-Befehl, wie er hier beschrieben ist, in einen oder mehrere andere Befehle, die von einer Ausführungseinheit verarbeitet werden sollen, übersetzen, umwandeln, emulieren oder anderweitig konvertieren. Der Befehlskonvertierer kann als Software, Hardware, Firmware oder eine Kombination davon implementiert sein. Der Befehlskonvertierer kann auf dem Prozessor, außerhalb des Prozessors oder teilweise auf und teilweise außerhalb des Prozessors angeordnet sein. Entsprechend ist der Decodierer keine notwendige Komponente des Prozessors.
  • Der Prozessor weist mindestens eine Ausführungseinheit 106 auf. Die Ausführungseinheit ist mit oder steht anderweitig in Kommunikation mit dem Decodierer oder einem Befehlsübersetzer oder einem anderen Befehlskonvertierer, wie oben diskutiert worden ist. Die Ausführungseinheit kann eine Schaltung oder eine Ausführungslogik aufweisen, die funktional eingerichtet ist oder in der Lage ist, einen Unpack-Befehl auszuführen. Die Ausführungseinheit kann z. B. eine oder mehrere Mikrooperationen, Mikrobefehle oder andere Befehle oder Steuersignale ausführen, die aus dem ursprünglichen Unpack-Befehl decodiert sind, übersetzt sind, emuliert sind oder diesen anderweitig reflektieren oder aus diesem abgeleitet sind. In einer oder mehreren Ausführungsformen kann die Ausführungseinheit eine spezialisierte Logik haben, um Maschinenbefehle oder Mikro-Ops oder -Befehle, die aus diesen Maschinenbefehlen abgeleitet sind, zu verarbeiten. Das heißt, dass die Ausführungseinheit Operationen als Ergebnis von oder als Reaktion auf den Kreuzspur-Unpack-Befehl durchführen kann. In einer oder mehreren Ausführungsformen kann die Ausführungseinheit und/oder der Prozessor Operationen als Ergebnis von oder als Reaktion auf die meisten oder alle Intel Architecture-Befehle durchführen, wie z. B. diejenigen, die in den PENTIUM® 4, PENTIUM® Dual-Core, CoreTM 2 Duo und Quad, XeonTM, Itanium®, XScaleTM oder StrongARMTM-Mikroprozessoren verwendet werden.
  • Einige Ausführungsformen können lediglich eine einzelne Ausführungseinheit oder eine einzelne Ausführungseinheit, die bestimmte Operationen durchführen kann, aufweisen. Andere Ausführungsformen können eine Anzahl von dedizierten Ausführungseinheiten für spezifische Funktionen oder Funktionssätze aufweisen. Zusätzlich kann eine oder mehrere Ausführungsformen eines Prozessors mehrere Kerne haben, wobei jeder Kern mindestens eine Ausführungseinheit hat.
  • Der Prozessor weist ebenfalls eine Registerdatei 108 auf, die an den Decodierer und die Ausführungseinheit gekoppelt ist. Der Begriff „Register” wird hier verwendet, um auf eine allgemeine On-Board-Prozessor-Storage-Speicherstelle Bezug zu nehmen, die allgemein von einem Makrobefehl verwendet wird, um einen Operanden zu identifizieren. Allgemein sind die Register von außerhalb des Prozessors oder von einer Programmiererperspektive aus sichtbar.
  • Die Register sind nicht auf irgendeinen bestimmten bekannten Schaltungstyp beschränkt. Verschiedene unterschiedliche Registertypen sind geeignet, solange sie in der Lage sind, Daten, wie hier beschrieben, zu speichern und bereitzustellen. Beispiele von geeigneten Registern weisen auf, sind jedoch nicht beschränkt auf dedizierte physikalische Register, dynamisch allozierte physikalische Register, die Registerumbenennung verwenden, Kombinationen von dedizierten und dynamisch allozierten physikalischen Registern usw.
  • Die Registerdatei kann verschiedene unterschiedliche Registertypen aufweisen. Beispiele von geeigneten Registertypen weisen auf, sind jedoch nicht beschränkt auf Integer-Register, Gleitkomma-Register, Vektor-Register, Status-Register, Befehlszeiger-Register und Ähnliche.
  • Ein einzelner Registersatz 109 ist aus Einfachheitsgründen gezeigt. Der Registersatz weist eine Gruppe oder eine Anzahl von Registern auf Der Registersatz weist z. B. Register R0 bis RN auf, wobei N eine ganze Zahl ist. In einer bestimmten Ausführungsform ist N 15. Die Register können, müssen jedoch nicht umbenannt sein.
  • Der Registersatz kann eingerichtet sein, gepackte Daten zu speichern. Gepackte Daten umfassen mehrere Datenelemente, die zusammengepackt sind. Ein Datenelement kann auf ein individuelles Datenstück Bezug nehmen, das in einem Register oder an einer anderen Speicherstelle zusammen mit anderen Datenelementen gespeichert ist, die oft die gleiche Länge in Bits haben. Der Registersatz kann erlauben, dass auf eines oder verschiedene der gepackten Datenelemente getrennt voneinander zugegriffen wird. Ein bestimmtes Register in einem Registersatz kann zu unterschiedlichen Zeitpunkten gepackte Datenelemente mit unterschiedlicher Größe halten und auf alle gepackten Elemente aller unterschiedlichen individuellen Größen kann, muss jedoch nicht individuell zugegriffen werden.
  • Der Registersatz hat mehrere Spuren. In der dargestellten Ausführungsform hat der Registersatz, inklusive jedes Register davon, eine erste, untere Spur 110 und eine zweite, obere Spur 111. Die untere Spur weist die untersten oder niedrigsten Bits auf, während die obere Spur die obersten oder höchsten Bits aufweist. Jede der Spuren weist eine Vielzahl von Bits auf. Die Register können z. B. jeweils 256 Bits aufweisen und jede der Spuren kann 128 Bits aufweisen. In anderen Ausführungsformen kann der Prozessor und/oder die Register drei, vier oder mehr Spuren haben und die Register und die Spuren können unterschiedliche Größen haben.
  • Die dargestellte Ausführungsform des Prozessors weist ebenfalls einen Cache 112 auf, der an den Decodierer gekoppelt ist. Abhängig von der Architektur kann der Prozessor einen einzelnen internen Cache, wie z. B. einen internen Level 1(L1)-Cache, oder mehrere Ebenen von internen Caches aufweisen. In einigen Ausführungsformen kann das System eine Kombination eines internen Cache und eines externen Cache aufweisen, der extern zu dem Prozessor angeordnet ist. Alternativ können alle Caches extern zu dem Prozessor angeordnet sein.
  • Um ein Verschleiern der Erfindung zu vermeiden, wurde der Prozessor in einem vereinfachten Format gezeigt. Ein Fachmann wird jedoch zu würdigen wissen, dass der Prozessor andere konventionelle Komponenten, Schaltungen oder Logik aufweisen kann. Der Prozessor kann z. B. eine Front-End-Logik, eine Registerumbenennungs-Logik, eine Scheduling-Logik, eine Back-End-Logik, eine Retirement-Logik, Neuordnungspuffer usw. aufweisen. Darüber hinaus ist dies lediglich eine darstellende beispielhafte Ausführungsform eines Prozessors. Andere Allzweckprozessoren, Spezialprozessoren, Netzwerk- oder Kommunikationsprozessoren, Koprozessoren, eingebettete Prozessoren, Kompression-Engines, Grafik-Prozessoren oder Ähnliche, können ebenfalls von den Unpack-Befehlen und den hier offenbarten Operationen profitieren.
  • 2 ist ein Blockflussdiagramm einer Ausführungsform eines Verfahrens 214 zum Empfangen eines Befehls und Speichern eines Ergebnisses, das durch den Befehl spezifiziert ist. In einer oder mehreren Ausführungsformen kann das Verfahren von einem Prozessor als Ergebnis eines Unpack-Befehls, wie hier anderweitig beschrieben wird, durchgeführt werden.
  • Der Befehl kann bei Block 215 empfangen werden. Der Befehl kann einen Maschinenbefehl in einem Befehlssatz des Prozessors repräsentieren. Als Beispiel kann der Befehl an einem Prozessor oder an einem Decodierer oder einem anderen Abschnitt des Prozessors empfangen werden. Der Befehl kann repräsentativ von einem Cache, wie z. B. dem Cache 112 oder einem Bus oder einer anderen Zusammenschaltung empfangen werden.
  • Der Befehl kann bei Block 216 decodiert werden. Der Befehl kann in eine oder mehrere Mikrooperationen, Mikrocode-Einsprungspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale decodiert werden, die aus dem ursprünglichen Unpack-Befehl decodiert werden, oder diesen anderweitig reflektieren, oder aus ihm abgeleitet sind. Alternativ kann der Befehl, wie vorher erwähnt, übersetzt, emuliert oder anderweitig konvertiert werden.
  • Der Decodierer oder ein anderer Abschnitt des Prozessors kann bei Block 217 auf einen oder mehrere Operanden zugreifen und/oder diese empfangen, wie es durch den Befehl angegeben ist. Auf die Operanden kann aus Registern (z. B. dem Registersatz 109), an Speicherstellen oder einer Kombination davon zugegriffen werden und/oder sie können daraus empfangen werden. Der Befehl kann die Adressen der Register oder Speicherstellen der Operanden spezifizieren. Der Befehl kann z. B. eine Adresse eines ersten Quelloperanden (SRC1) und eine Adresse eines zweiten Quelloperanden (SRC2) spezifizieren.
  • Auf einer Ausführungseinheit kann eine Operation oder können Operationen, die durch den Befehl spezifiziert ist/sind, bei Block 218 freigegeben sein. Die Ausführungseinheit kann die spezifizierte(n) Operation(en) auf den Daten der Operanden durchführen, um einen Ergebnisoperanden zu generieren.
  • Der Ergebnisoperand kann an einer Zieladresse eines Registers oder einer Speicherstelle, die durch den Befehl spezifiziert ist, bei Block 219 gespeichert werden. In einer oder mehreren Ausführungsformen kann der Befehl zusätzlich zu SRC1 und SRC2 ebenfalls eine Adresse für den Ergebnisoperanden (DEST) spezifizieren. Alternativ kann ebenfalls in einer oder mehreren Ausführungsformen entweder SRC1 oder SRC2 als DEST verwendet werden. Die Daten bei SRC1 oder SRC2 können z. B. mit dem Ergebnisoperanden überschrieben werden. In einem solchen Fall muss der Befehl nicht explizit ein separates DEST spezifizieren, obwohl der Befehl derart verstanden wird, dass er das Ziel für den Ergebnisoperanden entweder als SRC1 oder SRC2 spezifiziert.
  • Intel Corporation hat kürzlich die Intel® Advanced Vector Extensions (Intel AVX)-Befehle eingeführt. Intel AVX stellt eine neue 256-Bit-SIMD-Gleitkomma-Vektor-Erweiterung der Intel Architektur bereit. Dies erweitert oder verdoppelt die maximale SIMD-Vektorlänge der 128-Bit-XMM-Registerdatei bei Intel® SSE4 auf 256 Bits. Intel AVX führt 256-Bit-Register ein, auf die in Baugruppen durch die Namen YMM0–YMM15 Bezug genommen wird, und viele der Intel AVX-Befehle arbeiten auf ihnen. Weitere Details von Intel AVX sind, falls gewünscht, in dem Dokument Intel® Advanced Vector Extensions Programming Reference (Referenz-Nr. 319433-005) verfügbar, die im Januar 2009 publiziert worden ist und von der Intel Corporation verfügbar ist, und die zum Anmeldezeitpunkt im Netz unter http://software.intel.com/en-us/avx/ verfügbar war.
  • 3 zeigt eine Ausführungsform von YMM-Registern 320, die von vielen Intel AVX-Befehlen verwendet werden. Die YMM-Register weisen Register YMM0 bis YMM15 auf. Jeder dieser YMM-Register hat 256 Bits. Wie gezeigt, sind in einer oder mehreren Ausführungsformen die unteren 128 Bits der YMM-Register symbolisch auf die entsprechenden 128-Bit-XMM-Register bezogen, obwohl dies nicht notwendig ist. Die Register YMM0–YMM15 sind aus zwei 128-Bit-Spuren konstruiert. Eine untere 128-Bit-Spur 310 (Bits 0 bis 127) entspricht den XMM-Registern. Eine obere 128-Bit-Spur 311 (Bits 128 bis 255) entspricht den YMM-Registern.
  • 4 zeigt repräsentative Beispiele von gepackten Datenformaten, die für eine oder mehrere Ausführungsformen der Erfindung geeignet sind. Zwei beispielhafte gepackte Datenformate sind dargestellt, nämlich ein gepacktes Wort 430 und ein gepacktes Doppelwort 432. Um bestimmte Konzepte besser darstellen zu können, werden diese gepackten Datenformate für 256-Bit-Speicherstellen gezeigt, wie z. B. YMM-Register, obwohl der Umfang der Ausführungsformen der Erfindung derart nicht beschränkt ist.
  • Das gepackte Wortformat 430 ist 256 Bits lang und weist sechzehn Datenelemente auf. Jedes Datenelement ist 16 Bits oder ein Wort lang. Auf solche 16-Bit-Datenelemente wird als „words” Bezug genommen. In der Darstellung sind die Datenelemente von einer niedrigen Wertigkeit zu einer höheren Wertigkeit als „word0” bis „word15” benannt. Word0 bis word7 entsprechen einer unteren Spur (rechts; Bits 0 bis 127). Word8 bis word15 entsprechen einer oberen Spur (links; Bits 128 bis 255).
  • Das gepackte Doppelwort(dword)-Format 432 ist 256 Bits lang und weist acht Datenelemente auf. Jedes Datenelement ist 32 Bits oder ein Doppelwort (dword) lang. Auf solche 32-Bit-Datenelemente wird als „dwords” Bezug genommen. 32-Bit-Datenelemente werden im Allgemeinen für Gleitkomma-Berechnungen mit einfacher Genauigkeit verwendet. In der Darstellung sind die Datenelemente von einer niedrigen Wertigkeit zu einer höheren Wertigkeit als „dword0” bis „dword15” benannt. Dword0 bis dword3 entsprechen einer unteren Spur. Ddword4 bis dword7 entsprechen einer oberen Spur.
  • Dies sind lediglich zwei darstellende Beispiele. Andere gepackte Datenformate sind ebenfalls geeignet. So sind z. B. Formate mit gepackten Bytes, in denen jedes Datenelement 8 Bits hat, und Formate mit gepackten Quadwords, in denen jedes Datenelement 64 Bits hat, ebenfalls geeignet. 64-Bit-Datenelemente werden im Allgemeinen für Gleitkomma-Berechnungen mit doppelter Genauigkeit verwendet. Übergrößen oberhalb von 64-Bit-Datenelementen sind ebenfalls geeignet. Darüber hinaus können Register verwendet werden, die größer oder kleiner als 256 Bits sind. Allgemein weist ein Format mit gepackten Daten mehrere Datenelemente auf. Im Allgemeinen haben die Datenelemente die gleiche Größe. In einem solchen Fall ist die Größe des Registers geteilt durch die Größe der Datenelemente gleich der Anwahl der Datenelemente.
  • Intel AVX verwendet Register mit mehreren Mehrfachbit-Spuren. Bestimmte Intel AVX-Befehle sind als „In-Spur”-Befehle bekannt. Solche „In-Spur”-Befehle verursachen, dass die gleiche Operation auf beiden 128-Bit-Hälften oder Spuren von einem oder mehreren YMM-Registern durchgeführt werden. Der UNPCKLPS(VEX.256-codierte Version)-Befehl von Intel AVX verursacht z. B., dass die gleiche niedrige Entpackoperation auf beiden 128-Bit-Hälften oder Spuren der YMM-Register durchgeführt wird. Derzeit ist kein „Kreuzspur”-Unpack-Befehl bekannt, bei dem unterschiedliche Entpackoperationen (z. B. niedriges Entpacken in Vergleich zu hohem Entpacken) auf unterschiedlichen Spuren durchgeführt werden. Entsprechend können in einigen Anwendungen oder unter bestimmten Voraussetzungen, zusätzliche Operationen, wie z. B. Extraktionen, Casts usw. benötigt werden, um Ergebnisse von solchen „In-Spur”-Unpack-Befehlen neu anzuordnen, was eine zusätzliche Berechnung und/oder eine komplizierte Programmierung erfordern kann. Alternativ kann eine Verwendung von älteren SSE-Unpack-Befehlen nicht alle Vorteile der neueren 256-Bit-YMM-Register ausnutzen. Entsprechend können unter bestimmten Voraussetzungen oder für einige Anwendungen zusätzliche Unpack-Befehle und -Operationen nützlich sein. So waren z. B. Unpack-Befehle vorteilhaft, die für Structure-of-Arrays (SoA) zu Array-of-Structures(AoS)-Algorithmen nützlicher sind.
  • Ausführungsformen der Erfindung betreffen Prozessoren, Verfahren, die durch Prozessoren durchgeführt werden, Systeme, die Prozessoren einbauen oder Befehle, die von Prozessoren ausgeführt oder durchgeführt werden, zum Entpacken von gepackten Daten auf mehreren Spuren, wobei eine Entpackoperation, die auf mindestens einer Spur durchgeführt wird, von einem anderen Typ ist als eine Entpackoperation, die auf mindestens einer anderen Spur durchgeführt wird. Ausführungsformen der vorliegenden Erfindung betreffen „Kreuzspur”-Unpack-Befehle, die niedrige Entpackoperationen für mindestens eine Spur und hohe Entpackoperationen für mindestens eine andere Spur spezifizieren, oder Prozessoren zum Verarbeiten der Kreuzspur-Unpack-Befehle, Verfahren, die von Prozessoren als Ergebnis eines Verarbeitens der Kreuzspur-Unpack-Befehle durchgeführt werden, oder Computersysteme oder andere Systeme, die solche Prozessoren einbauen.
  • 5 ist ein Blockflussdiagramm einer beispielhaften Ausführungsform eines Kreuzspur-Entpackverfahrens 534.
  • Ein Kreuzspur-Unpack-Befehl kann bei Block 535 empfangen werden. Der Kreuzspur-Unpack-Befehl kann niedrige Entpackoperationen für mindestens eine Spur und hohe Entpackoperationen für mindestens eine andere Spur spezifizieren.
  • Der Kreuzspur-Unpack-Befehl kann bei Block 536 decodiert werden. Alternativ kann der Befehl übersetzt, emuliert oder anderweitig konvertiert werden.
  • Auf einen ersten und zweiten Quelloperanden, die von dem Kreuzspur-Unpack-Befehl spezifiziert oder angegeben sind, kann bei Block 537 zugegriffen werden. Auf die Operanden kann aus Registern oder an Speicherstellen zugegriffen werden. Die Kreuzspur-Unpack-Befehle können ein erstes und ein zweites Feld haben, um die Operanden anzugeben.
  • Auf einer Ausführungseinheit können die niedrigen Entpackoperationen für die mindestens eine Spur und die hohen Entpackoperationen für die mindestens eine andere Spur bei Block 538 freigegeben sein.
  • Ein Ergebnis, das durch den Kreuzspur-Unpack-Befehl spezifiziert ist, kann bei Block 539 in einem Register oder an einer Speicherstelle gespeichert werden. Das Ergebnis kann die niedrigen Entpackoperationen, die für die mindestens eine Spur durchgeführt werden, und die hohen Entpackoperationen, die für die mindestens eine andere Spur durchgeführt werden, repräsentieren.
  • 6 bis 9 stellen verschiedene beispielhafte Ausführungsformen zum Entpacken von gepackten Daten von ersten und zweiten Operanden mit mehreren Spuren gemäß einem einzelnen Kreuzspur-Unpack-Befehl dar, der niedrige Entpackoperationen für mindestens eine Spur und hohe Entpackoperationen für mindestens eine andere Spur spezifiziert.
  • 6 stellt ein Entpacken von gepackten 32-Bit-Doppelwort(dword)-Datenelementen in 256-Bit-Operanden mit zwei Spuren gemäß einem ersten einzelnen Kreuzspur-Unpack-Befehl dar, der niedrige Entpackoperationen für eine untere Spur (Bits 0 bis 127) und hohe Entpackoperationen für eine obere Spur (Bits 128 bis 255) spezifiziert.
  • Ein erster Quelloperand 650 hat 256 Bits und speichert acht gepackte 32-Bit- oder Doppelwort-Datenelemente. Der erste Quelloperand kann in einem Register (z. B. einem YMM-Register), einem Speicher oder an einer anderen Speicherstelle gespeichert sein. Diese Datenelemente werden von einer niedrigen Wertigkeit zu einer höheren Wertigkeit als X0 bis X7 benannt. Im Einzelnen weist der erste Quelloperand ein erstes Datenelement (X0), das durch Bits 0 bis 31 repräsentiert ist, ein zweites Datenelement (X1), das durch Bits 32 bis 63 repräsentiert ist, ein drittes Datenelement (X2), das durch Bits 64 bis 95 repräsentiert ist, ein viertes Datenelement (X3), das durch Bits 96 bis 127 repräsentiert ist, ein fünftes Datenelement (X4), das durch Bits 128 bis 159 repräsentiert ist, ein sechstes Datenelement (X5), das durch Bits 160 bis 191 repräsentiert ist, ein siebtes Datenelement (X6), das durch Bits 192 bis 223 repräsentiert ist, und ein achtes Datenelement (X7) auf, das durch Bits 224 bis 255 repräsentiert ist. Die Datenelemente X0 bis X3 repräsentieren eine Teilmenge von Datenelementen einer unteren Spur, die der unteren Spur entsprechen. Die Datenelemente X4 bis X7 repräsentieren eine Teilmenge von Datenelementen einer oberen Spur, die der oberen Spur entsprechen.
  • Ähnlich hat ein zweiter Quelloperand 652 256 Bits und speichert acht gepackte 32-Bit- oder dword-Datenelemente. Der erste Quelloperand kann in einem Register (z. B. einem YMM-Register), einem Speicher oder an einer anderen Speicherstelle gespeichert sein. Diese Datenelemente werden von einer niedrigen Wertigkeit zu einer höheren Wertigkeit als Y0 bis Y7 benannt. Im Einzelnen weist der zweite Quelloperand ein neuntes Datenelement (Y0), das durch Bits 0 bis 31 repräsentiert ist, ein zehntes Datenelement (Y1), das durch Bits 32 bis 63 repräsentiert ist, ein elftes Datenelement (Y2), das durch Bits 64 bis 95 repräsentiert ist, ein zwölftes Datenelement (Y3), das durch Bits 96 bis 127 repräsentiert ist, ein dreizehntes Datenelement (Y4), das durch Bits 128 bis 159 repräsentiert ist, ein vierzehntes Datenelement (Y5), das durch Bits 160 bis 191 repräsentiert ist, ein fünfzehntes Datenelement (Y6), das durch Bits 192 bis 223 repräsentiert ist, und ein sechzehntes Datenelement (Y7) auf, das durch Bits 224 bis 255 repräsentiert ist. Die Datenelemente Y0 bis Y3 repräsentieren eine Teilmenge von Datenelementen einer unteren Spur, die einer unteren Spur entsprechen. Die Datenelemente Y4 bis Y7 repräsentieren eine Teilmenge von Datenelementen einer oberen Spur, die einer oberen Spur entsprechen.
  • Ein Ergebnisoperand 654 speichert ein Ergebnis. Das Ergebnis wird basierend auf einem Durchführen von Entpackoperationen generiert, die durch den ersten Kreuzspur-Unpack-Befehl spezifiziert sind. Das Ergebnis kann von einer Ausführungseinheit, einer funktionalen Einheit oder einem anderen Abschnitt eines Prozessors als Ergebnis des Kreuzspur-Unpack-Befehls gespeichert werden (z. B. als Ergebnis einer Ausführungseinheit, die einen oder mehrere Mikrobefehle oder andere Befehle ausführt, die aus dem Befehl decodiert, übersetzt oder anderweitig abgeleitet sind).
  • Der Ergebnisoperand hat 256 Bits und speichert acht gepackte 32-Bit- oder Doppelwort-Datenelemente. Die acht Datenelemente in dem Ergebnisoperanden repräsentieren eine Teilmenge, weniger als alle oder die Hälfte der entpackten und verschachtelten Datenelemente, die aus dem ersten und zweiten Quelloperanden gemäß Entpackoperationen ausgewählt werden, die durch den ersten Kreuzspur-Unpack-Befehl spezifiziert sind.
  • Dieser bestimmte erste Kreuzspur-Unpack-Befehl spezifiziert niedrige Entpackoperationen für die untere Spur (Bits 0 bis 127) und hohe Entpackoperationen für die obere Spur (Bits 128 bis 255). Die niedrigen Entpackoperationen für die untere Spur können ein verschachteltes Entpacken nur von den niederwertigen 32-Bit- oder Doppelwort-Datenelementen aus den niederwertigen Quadwords (64 Bits) in der unteren Spur des ersten und zweiten Quelloperanden aufweisen. Die hohen Entpackoperationen für die obere Spur können ein verschachteltes Entpacken nur von den höherwertigen 32-Bit- oder Doppelwort-Datenelementen aus den höherwertigen Quadwords (64 Bits) in der oberen Spur des ersten und zweiten Quelloperanden aufweisen.
  • Wie gezeigt, kann das Ergebnis Folgendes aufweisen: (1) in der unteren Spur nur die niedrigstwertigen Datenelemente aus der Teilmenge der unteren Spur des ersten Operanden, die mit entsprechenden niedrigstwertigen Datenelementen aus der Teilmenge der unteren Spur des zweiten Operanden verschachtelt sind; und (2) in der oberen Spur nur die höchstwertigen Datenelemente aus der Teilmenge der oberen Spur des ersten Operanden, die mit entsprechenden höchstwertigen Datenelementen aus der Teilmenge der oberen Spur des zweiten Operanden verschachtelt sind.
  • Im Einzelnen kann der Ergebnisoperand das erste Datenelement (X0), das in Bits 0 bis 31 eines Zielregisters gespeichert ist, das neunte Datenelement (Y0), das in Bits 32 bis 63 des Zielregisters gespeichert ist, das zweite Datenelement (X1), das in Bits 64 bis 95 des Zielregisters gespeichert ist, das zehnte Datenelement (Y1), das in Bits 96 bis 127 des Zielregisters gespeichert ist, das siebte Datenelement (X6), das in Bits 128 bis 159 des Zielregisters gespeichert ist, das fünfzehnte Datenelement (Y6), das in Bits 160 bis 191 des Zielregisters gespeichert ist, das achte Datenelement (X7), das in Bits 192 bis 223 des Zielregisters gespeichert ist, und das sechzehnte Datenelement (Y7) aufweisen, das in Bits 224 bis 255 des Zielregisters gespeichert ist.
  • Der Ergebnisoperand weist nur eine Teilmenge (insbesondere die Hälfte) der Datenelemente aus dem ersten und zweiten Operanden auf. Die untere Spur des Ergebnisoperanden weist nur eine Teilmenge (insbesondere die Hälfte) der Datenelemente aus der unteren Spur des ersten und zweiten Operanden auf. In ähnlicher Weise weist die obere Spur des Ergebnisoperanden nur eine Teilmenge (insbesondere die Hälfte) der Datenelemente aus der oberen Spur des ersten und zweiten Operanden auf.
  • Ebenfalls werden die niederwertigeren Datenelemente X0 und X1 und ebenfalls die niederwertigeren Datenelemente Y0 und Y1 mit der gleichen relativen Wertigkeit (d. h., X0 an einem niederwertigeren Bit als X1; und Y0 an einem niederwertigeren Bit als Y1), wie diese Datenelemente in der unteren Spur des ersten bzw. zweiten Operanden erscheinen, in der unteren Spur des Ergebnisoperanden gespeichert. In ähnlicher Weise werden die höherwertigeren Datenelemente X6 und X7 und ebenfalls die höherwertigeren Datenelemente Y6 und Y7 in der gleichen relativen Wertigkeit, wie diese Datenelemente in der oberen Spur des ersten bzw. zweiten Operanden erscheinen, in der oberen Spur des Ergebnisoperanden gespeichert.
  • 7 stellt ein Entpacken von gepackten 32-Bit-Doppelwort(dword)-Datenelementen in 256-Bit-Operanden mit zwei Spuren gemäß einem zweiten einzelnen Kreuzspur-Unpack-Befehl dar, der hohe Entpackoperationen für eine untere Spur (Bits 0 bis 127) und niedrige Entpackoperationen für eine obere Spur (Bits 128 bis 255) spezifiziert.
  • Ein erster Quelloperand 750 hat 256 Bits und speichert acht gepackte 32-Bit- oder Doppelwort-Datenelemente. Der erste Quelloperand kann in einem Register (z. B. einem YMM-Register), einem Speicher oder an einer anderen Speicherstelle gespeichert sein. Diese Datenelemente werden von einer niedrigen Wertigkeit zu einer hohen Wertigkeit als X0 bis X7 benannt. Im Einzelnen weist der erste Quelloperand ein erstes Datenelement (X0), das durch Bits 0 bis 31 repräsentiert ist, ein zweites Datenelement (X1), das durch Bits 32 bis 63 repräsentiert ist, ein drittes Datenelement (X2), das durch Bits 64 bis 95 repräsentiert ist, ein viertes Datenelement (X3), das durch Bits 96 bis 127 repräsentiert ist, ein fünftes Datenelement (X4), das durch Bits 128 bis 159 repräsentiert ist, ein sechstes Datenelement (X5), das durch Bits 160 bis 191 repräsentiert ist, ein siebtes Datenelement (X6), das durch Bist 132 bis 223 repräsentiert ist, und ein achtes Datenelement (X7) auf, das durch Bits 224 bis 255 repräsentiert ist. Die Datenelemente X0 bis X3 entsprechen der unteren Spur. Die Datenelemente X4 bis X7 entsprechen der oberen Spur.
  • In ähnlicher Weise hat ein zweiter Quelloperand 752 256 Bits und speichert acht gepackte 32-Bit- oder dword-Datenelemente. Der erste Quelloperand kann in einem Register (z. B. einem YMM-Register), einem Speicher oder an einer anderen Speicherstelle gespeichert sein. Diese Datenelemente werden von einer niedrigen Wertigkeit zu einer höheren Wertigkeit als Y0 bis Y7 benannt. Im Einzelnen weist der zweite Quelloperand ein neuntes Datenelement (Y0), das durch Bits 0 bis 31 repräsentiert ist, ein zehntes Datenelement (Y1), das durch Bits 32 bis 63 repräsentiert ist, ein elftes Datenelement (Y2), das durch Bits 64 bis 95 repräsentiert ist, ein zwölftes Datenelement (Y3), das durch Bits 96 bis 127 repräsentiert ist, ein dreizehntes Datenelement (Y4), das durch Bits 128 bis 159 repräsentiert ist, ein vierzehntes Datenelement (Y5), das durch Bits 160 bis 191 repräsentiert ist, ein fünfzehntes Datenelement (Y6), das durch Bits 192 bis 223 repräsentiert ist, und ein sechzehntes Datenelement (Y7) auf, das durch Bits 224 bis 255 repräsentiert ist. Die Datenelemente Y0 bis Y3 entsprechen einer unteren Spur. Die Datenelemente Y4 bis Y7 entsprechen einer oberen Spur.
  • Ein Ergebnisoperand 754 speichert ein Ergebnis. Das Ergebnis wird basierend auf einem Durchführen von Entpackoperationen generiert, die durch den zweiten Kreuzspur-Unpack-Befehl spezifiziert sind. Das Ergebnis kann von einer Ausführungseinheit, einer funktionalen Einheit oder einem anderen Abschnitt eines Prozessors als Ergebnis des Kreuzspur-Unpack-Befehls gespeichert werden (z. B. als Ergebnis einer Ausführungseinheit, die einen oder mehrere Mikrobefehle oder andere Befehle ausführt, die aus dem Befehl decodiert, übersetzt oder anderweitig abgeleitet sind).
  • Der Ergebnisoperand hat 256 Bits und speichert acht gepackte 32-Bit- oder Doppelwort-Datenelemente. Die acht Datenelemente in dem Ergebnisoperanden repräsentieren eine Teilmenge, weniger als alle oder in diesem Fall die Hälfte der entpackten und verschachtelten Datenelemente, die aus dem ersten und zweiten Quelloperanden gemäß Entpackoperationen ausgewählt werden, die durch den zweiten Kreuzspur-Unpack-Befehl spezifiziert sind.
  • Dieser bestimmte zweite Kreuzspur-Unpack-Befehl spezifiziert hohe Entpackoperationen für die untere Spur (Bits 0 bis 127) und niedrige Entpackoperationen für die obere Spur (Bits 128 bis 255). Die hohen Entpackoperationen für die untere Spur können ein verschachteltes Entpacken der höherwertigen 32-Bit- oder Doppelwort-Datenelemente aus den höherwertigen Quadwords (64 Bits) in der unteren Spur des ersten und zweiten Quelloperanden aufweisen. Die niedrigen Entpackoperationen für die obere Spur können ein verschachteltes Entpacken der niederwertigen 32-Bit- oder Doppelwort-Datenelemente aus den niederwertigen Quadwords (64 Bits) in der oberen Spur des ersten und zweiten Quelloperanden aufweisen.
  • Wie gezeigt, kann der Ergebnisoperand das dritte Datenelement (X2), das in Bits 0 bis 31 eines Zielregisters gespeichert ist, das elfte Datenelement (Y2), das in Bits 32 bis 63 des Zielregisters gespeichert ist, das vierte Datenelement (X3), das in Bits 64 bis 95 des Zielregisters gespeichert ist, das zwölfte Datenelement (Y3), das in Bits 96 bis 127 des Zielregisters gespeichert ist, das fünfte Datenelement (X4), das in Bits 128 bis 159 des Zielregisters gespeichert ist, das dreizehnte Datenelement (Y4), das in Bits 160 bis 191 des Zielregisters gespeichert ist, das sechste Datenelement (X5), das in Bits 192 bis 223 des Zielregisters gespeichert ist, und das vierzehnte Datenelement (Y5) aufweisen, das in Bits 224 bis 255 des Zielregisters gespeichert ist.
  • 8 stellt ein Entpacken von gepackten 16-Bit-Wort-Datenelementen in 256-Bit-Operanden mit zwei Spesen gemäß einem dritten einzelnen Kreuzspur-Unpack-Befehl dar, der niedrige Entpackoperationen für eine untere Spur (Bits 0 bis 127) und hohe Entpackoperationen für eine obere Spur (Bits 128 bis 255) spezifiziert.
  • Ein erster Quelloperand 850 hat 256 Bits und speichert sechzehn gepackte 16-Bit- oder Wort-Datenelemente. Der erste Quelloperand kann in einem Register (z. B. einem YMM-Register), einem Speicher oder an einer anderen Speicherstelle gespeichert sein. Diese Datenelemente werden von einer niedrigen Wertigkeit zu einer höheren Wertigkeit als X0 bis X15 benannt. Die Datenelemente X0 bis X7 entsprechen der unteren Spur. Die Datenelemente X8 bis X15 entsprechen der oberen Spur.
  • In ähnlicher Weise hat ein zweiter Quelloperand 852 256 Bits und speichert sechzehn gepackte 16-Bit- oder Wort-Datenelemente. Der erste Quelloperand kann in einem Register (z. B. einem YMM-Register), einem Speicher oder an einer anderen Speicherstelle gespeichert sein. Diese Datenelemente werden von einer niedrigen Wertigkeit zu einer höheren Wertigkeit als Y0 bis Y15 benannt. Die Datenelemente Y0 bis Y7 entsprechen einer unteren Spur. Die Datenelemente Y8 bis Y15 entsprechen einer oberen Spur.
  • Ein Ergebnisoperand 854 speichert ein Ergebnis. Das Ergebnis wird basierend auf einem Durchführen von Entpackoperationen generiert, die durch den dritten Kreuzspur-Unpack-Befehl spezifiziert sind. Das Ergebnis kann von einer Ausführungseinheit, einer funktionalen Einheit oder einem anderen Abschnitt eines Prozessors als Ergebnis des Kreuzspur-Unpack-Befehls gespeichert werden (z. B. als Ergebnis einer Ausführungseinheit, die einen oder mehrere Mikrobefehle oder andere Befehle ausführt, die aus dem Befehl decodiert, übersetzt oder anderweitig abgeleitet sind).
  • Der Ergebnisoperand hat 256 Bits und speichert sechzehn gepackte 16-Bit- oder Wort-Datenelemente. Die sechzehn Datenelemente in dem Ergebnisoperanden repräsentieren eine Teilmenge, weniger als alle oder die Hälfte der entpackten und verschachtelten Datenelemente, die aus dem ersten und zweiten Quelloperanden gemäß Entpackoperationen ausgewählt werden, die durch den dritten Kreuzspur-Unpack-Befehl spezifiziert sind.
  • Dieser bestimmte dritte Kreuzspur-Unpack-Befehl spezifiziert niedrige Entpackoperationen für die untere Spur (Bits 0 bis 127) und hohe Entpackoperationen für die obere Spur (Bits 128 bis 255). Die niedrigen Entpackoperationen für die untere Spur können ein verschachteltes Entpacken der niederwertigen 16-Bit- oder Wort-Datenelemente aus den niederwertigen Quadwords (64 Bits) in der unteren Spur des ersten und zweiten Quelloperanden aufweisen. Die hohen Entpackoperationen für die obere Spur können ein verschachteltes Entpacken der höherwertigen 16-Bit- oder Wort-Datenelemente aus den höherwertigen Quadwords (64 Bits) in der oberen Spur des ersten und zweiten Quelloperanden aufweisen.
  • Wie gezeigt, weist der Ergebnisoperand von einer niedrigen Wertigkeit zu einer höheren Wertigkeit die geordneten Datenelemente X0, Y0, X1, Y1, X2, Y2, X3, Y3 in der unteren Spur auf. Der Ergebnisoperand weist von einer niedrigen Wertigkeit zu einer höheren Wertigkeit die geordneten Datenelemente X12, Y12, X13, Y13, X14, Y14, X15, Y15 in der oberen Spur auf.
  • 9 stellt ein Entpacken von gepackten 16-Bit-Wort-Datenelementen in 256-Bit-Operanden mit zwei Spuren gemäß einem vierten einzelnen Kreuzspur-Unpack-Befehl dar, der hohe Entpackoperationen für eine untere Spur (Bits 0 bis 127) und niedrige Entpackoperationen für eine obere Spur (Bits 128 bis 255) spezifiziert.
  • Ein erster Quelloperand 950 hat 256 Bits und speichert sechzehn gepackte 16-Bit- oder Wort-Datenelemente. Der erste Quelloperand kann in einem Register (z. B. einem YMM-Register), einem Speicher oder an einer anderen Speicherstelle gespeichert sein. Diese Datenelemente werden von einer niedrigen Wertigkeit zu einer höheren Wertigkeit als X0 bis X15 bezeichnet. Die Datenelemente X0 bis X7 entsprechen der unteren Spur. Die Datenelemente X8 bis X15 entsprechen der oberen Spur.
  • In ähnlicher Weise hat ein zweiter Quelloperand 952 256 Bits und speichert sechzehn gepackte 16-Bit- oder Wort-Datenelemente. Der erste Quelloperand kann in einem Register (z. B. einem YMM-Register), einem Speicher oder an einer anderen Speicherstelle gespeichert sein. Diese Datenelemente werden von einer niedrigen Wertigkeit zu einer höheren Wertigkeit als Y0 bis Y15 benannt. Die Datenelemente Y0 bis Y7 entsprechen einer unteren Spur. Die Datenelemente Y8 bis Y15 entsprechen einer oberen Spur.
  • Ein Ergebnisoperand 945 speichert ein Ergebnis. Das Ergebnis wird basierend auf einem Durchführen von Entpackoperationen generiert, die durch den vierten Kreuzspur-Unpack-Befehl spezifiziert sind. Das Ergebnis kann von einer Ausführungseinheit, einer funktionalen Einheit oder einem anderen Abschnitt eines Prozessors als Ergebnis des Kreuzspur-Unpack-Befehls gespeichert werden (z. B. als Ergebnis einer Ausführungseinheit, die einen oder mehrere Mikrobefehle oder andere Befehle ausführt, die aus dem Befehl decodiert, übersetzt oder anderweitig abgeleitet sind).
  • Der Ergebnisoperand hat 256 Bits und speichert sechzehn gepackte 16-Bit- oder Wort-Datenelemente. Die sechzehn Datenelemente in dem Ergebnisoperanden repräsentieren eine Teilmenge, weniger als alle oder die Hälfte der entpackten und verschachtelten Datenelemente, die aus dem ersten und zweiten Quelloperanden gemäß Entpackoperationen ausgewählt werden, die durch den vierten Kreuzspur-Unpack-Befehl spezifiziert sind.
  • Dieser bestimmte vierte Kreuzspur-Unpack-Befehl spezifiziert hohe Entpackoperationen für die untere Spur (Bits 0 bis 127) und niedrige Entpackoperationen für die obere Spur (Bits 128 bis 255). Die hohen Entpackoperationen für die untere Spur können ein verschachteltes Entpacken der höherwertigen 16-Bit- oder Wort-Datenelemente aus den höherwertigen Quadwords (64 Bits) in der unteren Spur des ersten und zweiten Quelloperanden aufweisen. Die niedrigen Entpackoperationen für die obere Spur können ein verschachteltes Entpacken der niederwertigen 16-Bit- oder Wort-Datenelemente aus den niederwertigen Quadwords (64 Bits) in der oberen Spur des ersten und zweiten Quelloperanden aufweisen.
  • Wie gezeigt, weist der Ergebnisoperand von einer niedrigen Wertigkeit zu einer höheren Wertigkeit die geordneten Datenelemente X4, Y4, X5, Y5, X6, Y6, X7, Y7 in der unteren Spur auf. Der Ergebnisoperand weist von einer niedrigen Wertigkeit zu einer höheren Wertigkeit die geordneten Datenelemente X8, Y8, X9, Y9, X10, Y10, X11, Y11 in der oberen Spur auf.
  • Wie in jeder der 6 bis 9 gezeigt, weisen die Ergebnisoperanden nur eine Teilmenge (insbesondere die Hälfte) der Datenelemente aus den ersten und zweiten Operanden auf. Die unteren Spuren der Ergebnisoperanden weisen nur eine Teilmenge (insbesondere die Hälfte) der Datenelemente aus der unteren Spur des ersten und zweiten Operanden auf. In ähnlicher Weise weisen die oberen Spuren der Ergebnisoperanden nur eine Teilmenge (insbesondere die Hälfte) der Datenelemente aus der unteren Spur des ersten und zweiten Operanden auf.
  • Die Datenelemente aus dem ersten und zweiten Operanden werden ebenfalls im Ergebnisoperanden in der gleichen Reihenfolge gespeichert, wie diese Datenelemente im ersten bzw. zweiten Operanden erscheinen. Dies ist übergreifend für den Ergebnisoperanden sowie innerhalb jeder Spur wahr.
  • In den 6 bis 9 wurden 256-Bit-Operanden mit zwei 128-Bit-Spuren besprochen, obwohl der Umfang der Ausführungsformen der vorliegenden Erfindung derart nicht beschränkt ist. Die Operanden können entweder weniger oder mehr Bits aufweisen. In ähnlicher Weise können die Spuren entweder weniger oder mehr Bits aufweisen. Als ein veranschaulichendes Beispiel können die Operanden 128 Bits aufweisen und die Spuren können 64 Bits umfassen.
  • Als ein anderes veranschaulichendes Beispiel können die Operanden 512 Bits aufweisen und die Spuren können 64 Bits oder 128 Bits aufweisen.
  • Um bestimmte Konzepte weiter zu veranschaulichen, sollte eine beispielhafte Verwendung eines beispielhaften Kreuzspur-Unpack-Befehls berücksichtigt werden. Bei bestimmten Algorithmen, wie z. B. einem Structure-of-Arrays (SoA) zu Array-of-Structures(AoS)-Algorithmus, ist es wünschenswert, Datenelemente aus zwei Operanden zu verschachteln, während die gleiche Reihenfolge, in der die Datenelemente in den Operanden erscheinen, beibehalten wird. Unten aufgeführt ist ein erster Quelloperand mit vier Datenelementen (0, 2, 4, 6), die in einer unteren Spur und einer oberen Spur dupliziert sind. In ähnlicher Weise hat ein zweiter Quelloperand andere vier Datenelemente (1, 3, 5, 7), die in der unteren Spur und der oberen Spur dupliziert sind. Diese Datenelemente können als ein Beispiel durch den Intel AVX-Broadcast-Befehl repliziert werden. Wie unten gezeigt, kann ein Kreuzspur-Unpack-Befehl, der niedrige Entpackoperationen für die untere Spur und hohe Entpackoperationen für die obere Spur spezifiziert, einen Ergebnisoperanden zu Stande bringen, in dem alle Datenelemente aus dem ersten und zweiten Operanden verschachtelt sind und in der gleichen Reihenfolge angeordnet sind, wie diese Datenelemente in den Quelloperanden erscheinen, und die Ergebnisse sind kontinuierlich.
    Erster Quelloperand: 6 4 2 0 | 6 4 2 0
    Zweiter Quelloperand: 7 5 3 1 | 7 5 3 1
    Ergebnisoperand: 7 6 5 4 | 3 2 1 0
  • Dies ist lediglich ein veranschaulichendes Beispiel, das eine spezifische Verwendung eines bestimmten Kreuzspur-Unpack-Befehls darstellt. Andere Verwendungen und Vorteile der Kreuzspur-Unpack-Befehle werden dem Fachmann klar sein und weisen die Vorteile der vorliegenden Offenbarung auf.
  • 10 ist ein vereinfachtes Blockdiagramm einer Ausführungsform eines Kreuzspur-Unpack-Befehls 1002 mit einem Steuerfeld 1060, um anzugeben, welche Typen von Entpackoperationen durchgeführt werden sollen. Das Steuerfeld weist eine Vielzahl von Bits auf. In der Darstellung entspricht ein erstes Bit (bit0) einer ersten Spur, ein zweites Bit (bit1) entspricht einer zweiten Spur und ein N-tes Bit (bitN) entspricht einer N-ten Spur, wobei N eine ganze Zahl ist, die oft zwischen einschließlich 2 und 5 liegt. In einer oder mehreren Ausführungsformen kann jedes Bit einen ersten vorbestimmten Wert (z. B. 0), um einen ersten Typ einer Entpackoperation (z. B. niedrige Entpackoperationen) für die entsprechende Spur anzugeben, und einen zweiten vorbestimmten Wert (z. B. 1) aufweisen, um einen zweiten Typ einer Entpackoperation (z. B. hohe Entpackoperationen) für die entsprechende Spur anzugeben. Alternativ können zwei, drei oder mehr Bits optional verwendet werden, um die Entpackoperationen für jede Spur zu spezifizieren. Anstatt dass ein Befehl ein Steuerfeld aufweist, um zu spezifizieren, welche Operationen durchgeführt werden, kann alternativ ein Befehl eine einzelne vorbestimmte Kombination von Entpackoperationen durchführen und, falls gewünscht, können mehrere Befehle aufgenommen sein, um mehrere unterschiedliche Kombinationen von Entpackoperationen bereitzustellen.
  • 11 ist ein Blockdiagramm einer beispielhaften Ausführungsform eines Computersystems 1170, das zum Implementieren von einer oder mehreren Ausführungsformen der Erfindung geeignet ist. Das Computersystem steht repräsentativ für Verarbeitungssysteme, wie z. B. solche, die auf den PENTIUM® 4, PENTIUM® Dual-Core, CoreTM 2 Duo und Quad, XeonTM, Itanium®, XScaleTM und/oder StrongARMTM-Mikroprozessoren basieren. Jedoch ist dies nur ein bestimmtes Beispiel eines geeigneten Computersystems. Mehrfachprozessorsysteme, Server und andere Computersysteme mit anderen Designs oder Komponenten sind ebenfalls geeignet.
  • In einer Ausführungsform kann das Computersystem eine Version des WINDOWSTM-Betriebssystems ausführen, das von der Microsoft Corporation aus Redmond, Washington verfügbar ist. Alternativ können andere Betriebssysteme, wie z. B. UNIX, Linux oder Embedded-Systeme verwendet werden. Ausführungsformen der Erfindung sind nicht auf irgendeine bekannte spezifische Kombination von Hardwareschaltkreisen und Software beschränkt.
  • Das Computersystem weist einen Prozessor 1100 auf. Der Prozessor weist mindestens eine Ausführungseinheit 1106 auf. Die Ausführungseinheit und/oder der Prozessor können in der Lage sein, mindestens einen Kreuzspur-Unpack-Befehl 1102, wie vorher beschrieben, auszuführen oder anderweitig zu verarbeiten. Der Prozessor weist ebenfalls eine Registerdatei 1108 auf. In einer oder mehreren Ausführungsformen weist die Registerdatei Register mit mehreren Spuren auf, Das heißt, dass der Prozessor eine SIMD-Architektur mit mehreren Spuren bereitstellen kann. Der dargestellte Prozessor ist in einem vereinfachten Format gezeigt, um ein Verschleiern der Beschreibung zu vermeiden. Es ist zu beachten, dass der Prozessor andere Komponenten aufweisen kann, wie z. B. einen Cache, einen Befehls-Prefetcher, einen Befehlsdecodierer oder -übersetzer, einen Trace-Cache, einen Mikrocode(ucode)-Read Only Memory (ROM), eine Out-of-Order-Engine usw.
  • Der Prozessor ist an einen Prozessorbus oder eine andere Zusammenschaltung 1172 gekoppelt. Der Prozessorbus kann verwendet werden, um Datensignale zwischen dem Prozessor und anderen Komponenten im System zu übertragen.
  • Das Computersystem weist ebenfalls einen Speicher 1174 auf. Der Speicher kann einen Dynamic Random Access Memory (DRAM), einen Static Random Access Memory (SRAM), einen Flash-Speicher, andere bekannte Speichertypen oder Kombinationen davon aufweisen. DRAM ist ein Beispiel eines Speichertyps, der in einigen, jedoch nicht allen Computersystemen verwendet wird. Der Speicher kann verwendet werden, um Befehle 1173, wie z. B. Software, die einen oder mehrere Kreuzspur-Unpack-Befehle aufweist, und Daten 1174 zu speichern.
  • Das Computersystem ist ein Beispiel einer Hub-Typ-Architektur. Die Hub-Typ-Architektur weist einen Speicher-Controller-Hub (MCH) 1176 auf. Der MCH ist ein Systemlogikchip. Der MCH ist an den Prozessorbus 1172 und den Speicher 1174 gekoppelt. Der Prozessor kann mit dem MCH durch den Prozessorbus kommunizieren. Der MCH kann Signale zwischen dem Prozessor, dem Speicher und anderen Komponenten im Computersystem lenken. Der MCH kann ebenfalls Signale zwischen dem Prozessorbus, dem Speicher und einem Hub-Schnittstellenbus oder einer anderen Zusammenschaltung überbrücken. Der MCH stellt einen Speicherpfad mit hoher Bandbreite zum Speicher bereit, der verwendet werden kann, um Befehle und Daten zu speichern und abzurufen.
  • In einigen Ausführungsformen kann das System optional eine Grafikvorrichtung (z. B. eine Grafik/Videokarte) 1186 aufweisen. Der MCH kann einen Grafikanschluss und eine Grafikzusammenschaltung, (z. B. eine Accelerated Graphics Port(AGP)-Zusammenschaltung) bereitstellen, um die Grafikvorrichtung anzukoppeln.
  • Das System weist ebenfalls einen I/O-Controller-Hub (ICH) 1178 auf Der ICH ist an den MCH durch den Hub-Schnittstellenbus oder eine andere Zusammenschaltung 1177 gekoppelt, die einen oder mehrere Busse aufweisen kann. Der ICH kann direkte Verbindungen zu einigen I/O-Vorrichtungen durch einen lokalen I/O-Bus oder eine andere Zusammenschaltung bereitstellen. Der lokale I/O-Bus oder die andere Zusammenschaltung kann einen Hochgeschwindigkeits-I/O-Bus oder eine andere Zusammenschaltung darstellen, um Peripherie mit dem Speicher, dem Chipsatz und dem Prozessor zu verbinden.
  • Verschiedene repräsentative Beispiele von Peripherie sind gezeigt, aufweisend einen Audio-Controller 1179, Flash-BIOS 1180, einen drahtlosen Transceiver 1181, einen Daten-Storage-Speicher 1182 (z. B. ein Festplattenlaufwerk, ein Diskettenlaufwerk, eine CD-ROM-Vorrichtung, eine Flash-Speicher-Vorrichtung oder Ähnliche), einen I/O-Alt-Controller 1183, um eine Benutzereingabeschnittstelle (z. B. eine Tastatur) bereitzustellen, einen seriellen Erweiterungsanschluss 1184, wie z. B. einen Universal Serial Bus (USB), und einen Netzwerk-Controller 1185. Diese bestimmte Peripherie ist optional und nicht notwendig.
  • Es ist zu beachten, dass dies nur ein veranschaulichendes Beispiel eines geeigneten Computersystems ist. Der Umfang der Ausführungsformen der Erfindung ist nicht auf irgendein bestimmtes Computersystem-Design beschränkt. Vielmehr ist eine große Vielzahl von anderen Computersystem-Designs geeignet. Solche Designs weisen unter Anderem Laptops, Desktops, Entwicklungs-Workstations und Server, handgehaltene PCs, Personal Digital Assistants und Ähnliche auf.
  • Darüber hinaus können Ausführungsformen in anderen Vorrichtung mit einem oder mehreren Prozessoren oder Ausführungseinheiten angewendet werden. Andere Vorrichtungen, die einen Prozessor und/oder eine Ausführungseinheit aufweisen können, die funktional eingerichtet ist, einen der hier offenbarten Kreuzspur-Unpack-Befehle auszuführen, weisen auf, sind jedoch nicht beschränkt auf portable Medienabspielvorrichtungen, Mobiltelefone, handgehaltene Vorrichtungen, Internet Protocol-Vorrichtungen, Settop-Boxen, Netzwerkvorrichtungen, Netzwerk-Hubs, Wide Area Network(WAN)-Switches, Videospielvorrichtungen, Grafikvorrichtungen, Digital Signal Processors (DSPs), Mikrocontroller, eingebettete Prozessoren und andere logische Schaltungen. Beliebige elektronische Vorrichtungen oder Systeme, die SIMD oder gepackte Daten verwenden oder davon profitieren können, können möglicherweise Logik aufweisen, um einen Kreuzspur-Unpack-Befehl, wie hier offenbart, zu verarbeiten.
  • In der Beschreibung und den Ansprüchen können die Begriffe „gekoppelt” und „verbunden” zusammen mit ihren Ableitungen verwendet werden. Es sollte klar sein, dass die Begriffe nicht dazu bestimmt sind, Synonyme füreinander zu sein. Vielmehr kann „verbunden” in bestimmten Ausführungsformen verwendet werden, um anzugeben, dass zwei oder mehr Elemente in einem direkten physikalischen oder elektrischen Kontakt miteinander stehen. „Gekoppelt” kann bedeuten, dass zwei oder mehr Elemente in einem direkten physikalischen oder elektrischen Kontakt stehen. Jedoch kann „gekoppelt” ebenfalls bedeuten, dass zwei oder mehr Elemente nicht in einem direkten Kontakt miteinander stehen, jedoch nach wie vor miteinander kooperieren oder interagieren.
  • In der obigen Beschreibung wurden für Erklärungszwecke zahlreiche spezifische Details dargelegt, um ein tiefgehendes Verständnis der Ausführungsformen der Erfindung bereitzustellen. Es ist jedoch für einen Fachmann klar, dass eine oder mehrere weitere Ausführungsformen ohne einige der spezifischen Details ausgeführt werden können. Die beschriebenen bestimmten Ausführungsformen werden nicht bereitgestellt, um die Erfindung zu beschränken, sondern um Ausführungsformen der Erfindung zu veranschaulichen. Der Umfang der Erfindung sollte deshalb nicht durch die oben bereitgestellten spezifischen Beispiele bestimmt sein, sondern nur durch die unteren Ansprüche. In anderen Fällen wurden wohlbekannte Schaltungen, Strukturen, Vorrichtungen und Operationen in einer Blockdiagrammform oder ohne Details gezeigt, um ein Verschleiern des Verständnisses der Beschreibung zu vermeiden. Wo dies angebracht erschien, wurden Bezugszeichen oder Endabschnitte von Bezugszeichen in den Figuren wiederholt, um entsprechende oder analoge Elemente anzugeben, die optional ähnliche Eigenschaften haben können.
  • Verschiedene Operationen und Verfahren wurden beschrieben. Einige der Verfahren wurden in einer grundlegenden Form beschrieben, jedoch können bei diesen Verfahren Operationen optional hinzugefügt und/oder aus ihnen entfernt werden. Die Operationen der Verfahren können ebenfalls oft optional in einer unterschiedlichen Reihenfolge durchgeführt werden. Zahlreiche Modifikationen und Anpassungen der Verfahren können gemacht werden und sind vorgesehen.
  • Bestimmte Operationen können von Hardwarekomponenten durchgeführt werden oder können in maschinenausführbaren Befehlen verkörpert sein, die verwendet werden können, um zu veranlassen, oder die zumindest dazu führen, dass eine Schaltung oder Hardware, die mit den Befehlen programmiert ist, die Operationen durchführt. Die Schaltung kann einen Allzweck- oder einen Spezialprozessor oder eine logische Schaltung aufweisen, um ein paar Beispiele zu nennen. Die Operationen können ebenfalls optional von einer Kombination aus Hardware und Software durchgeführt werden. Ein Prozessor kann eine spezifische Logik aufweisen, die auf Maschinenbefehle oder ein oder mehrere Steuersignale reagiert, die aus den Maschinenbefehlen abgeleitet sind.
  • Eine oder mehrere Ausführungsformen der Erfindung können als ein Programmprodukt oder ein anderer Herstellungsartikel bereitgestellt sein, der ein maschinenzugreifbares und/oder -lesbares greifbares Medium aufweist, das einen oder mehrere Befehle (z. B. einen Unpack-Befehl) und/oder Datenstrukturen darauf gespeichert hat. Das greifbare Medium kann ein oder mehrere Materialien aufweisen. Das Medium kann Befehle bereitstellen, die, falls und wenn sie von einer Maschine ausgeführt werden, dazu führen können und/oder die Maschine dazu veranlassen können, eine oder mehrere der hier offenbarten Operationen oder Verfahren durchzuführen. Geeignete Maschinen weisen auf, sind jedoch nicht beschränkt auf Computersysteme, Netzwerkvorrichtungen, Personal Digital Assistants (PDAs), Modems, Mobiltelefone, andere drahtlose Vorrichtungen und eine große Vielzahl von anderen elektronischen Vorrichtungen mit einem oder mehreren Prozessoren, um ein paar als Beispiel zu nennen.
  • Das Medium kann einen Mechanismus aufweisen, der Informationen in einer Form bereitstellt, z. B. speichert, auf die von der Maschine zugegriffen werden kann. Das Medium kann beispielsweise optional ein beschreibbares Medium aufweisen, wie z. B. eine Floppy-Diskette, ein optisches Speichermedium, eine optische Platte, eine CD-ROM, eine magnetische Platte, eine magneto-optische Platte, Read Only Memory (ROM), programmierbaren ROM (PROM), löschbaren und programmierbaren ROM (EPROM), elektrisch löschbaren und programmierbaren ROM (EEPROM), Random Access Memory (RAM) statischen RAM (SRAM), dynamischen RAM (DRAM), einen Flash-Speicher und Kombinationen davon.
  • Es sollte ebenfalls beachtet werden, dass Bezüge in dieser Beschreibung auf „(genau) eine Ausführungsform”, „eine Ausführungsform” oder „eine oder mehrere Ausführungsformen” beispielsweise bedeuten, dass ein bestimmtes Merkmal bei der Ausübung der Ausführungsformen der Erfindung aufgenommen sein kann. In ähnlicher Weise sollte beachtet werden, dass in der Beschreibung verschiedene Merkmale manchmal in einer einzelnen Ausführungsform, einer Figur oder einer Beschreibung davon zusammen gruppiert werden, um die Offenbarung zu rationalisieren und beim Verständnis von verschiedenen erfinderischen Aspekten zu helfen. Dieses Verfahren der Offenbarung ist jedoch nicht dahingehend zu interpretieren, dass es eine Erfindung dahingehend reflektiert, dass die Erfindung mehr Merkmale erfordert, als es ausdrücklich in jedem Anspruch wiedergegeben ist. Vielmehr können erfinderische Aspekte, wie es in den folgenden Ansprüchen reflektiert ist, weniger als alle Merkmale einer einzelnen offenbarten Ausführungsform aufweisen. Die der detaillierten Beschreibung folgenden Ansprüche sind somit hierdurch ausdrücklich in diese detaillierte Beschreibung aufgenommen, wobei jeder Anspruch für sich als eine getrennte Ausführungsform der Erfindung steht.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • Intel Architecture Software Developer's Manual: Band 2: Instruction Set Reference, 1999 (Bestell-Nr. 243191) [0004]
    • Intel® Advanced Vector Extensions Programming Reference (Referenz-Nr. 319433-005) verfügbar, die im Januar 2009 [0040]
    • http://software.intel.com/en-us/avx/ [0040]

Claims (27)

  1. Verfahren, das folgende Schritte umfasst: Empfangen eines Befehls, wobei der Befehl einen ersten Operanden und einen zweiten Operanden angibt, wobei sowohl der erste als auch der zweite Operand eine Vielzahl von gepackten Datenelementen aufweist, die sich in jeweiligen Positionen entsprechen, wobei eine erste Teilmenge der gepackten Datenelemente des ersten Operanden und eine erste Teilmenge der gepackten Datenelemente des zweiten Operanden jeweils einer ersten Spur entsprechen und eine zweite Teilmenge der gepackten Datenelemente des ersten Operanden und eine zweite Teilmenge der gepackten Datenelemente des zweiten Operanden jeweils einer zweiten Spur entsprechen; und Speichern eines Ergebnisses als Reaktion auf den Befehl, wobei das Ergebnis Folgendes aufweist: (1) in der ersten Spur lediglich niedrigstwertige Datenelemente aus der ersten Teilmenge des ersten Operanden verschachtelt mit entsprechenden niedrigstwertigen Datenelementen aus der ersten Teilmenge des zweiten Operanden; und (2) in der zweiten Spur lediglich höchstwertige Datenelemente aus der zweiten Teilmenge des ersten Operanden verschachtelt mit entsprechenden höchstwertigen Datenelementen aus der zweiten Teilmenge des zweiten Operanden.
  2. Verfahren nach Anspruch 1, wobei die erste Spur eine untere Spur umfasst und die zweite Spur eine obere Spur umfasst.
  3. Verfahren nach Anspruch 1, wobei die erste Spur eine obere Spur umfasst und die zweite Spur eine untere Spur umfasst.
  4. Verfahren nach Anspruch 1, wobei der Befehl ein Steuerfeld aufweist, wobei ein oder mehrere Bits des Steuerfelds der ersten Spur entsprechen und angeben, dass eine niedrige Entpackoperation für die erste Spur auszuführen ist, und wobei ein oder mehrere Bits des Steuerfelds der zweiten Spur entsprechen und angeben, dass eine hohe Entpackoperation für die zweite Spur durchzuführen ist.
  5. Verfahren nach Anspruch 1, wobei sowohl die erste als auch die zweite Spur 128 Bits aufweisen.
  6. Verfahren nach Anspruch 1, wobei das Speichern des Ergebnisses folgende Schritte umfasst: in der ersten Spur, Speichern von lediglich der Hälfte der Datenelemente aus der ersten Teilmenge, das ein Speichern der niedrigstwertigen Datenelemente aus der ersten Teilmenge des ersten Operanden in der gleichen Reihenfolge aufweist, wie die niedrigstwertigen Datenelemente in der ersten Teilmenge des ersten Operanden erscheinen; und in der zweiten Spur, Speichern von lediglich der Hälfte der Datenelemente aus der zweiten Teilmenge.
  7. Verfahren nach Anspruch 1, das ferner mindestens eines aus einem Decodieren des Befehls in einen oder mehrere Befehle und einem Übersetzen des Befehls in einen oder mehrere Befehle umfasst.
  8. Vorrichtung, die Folgendes umfasst: eine Ausführungseinheit, die funktional eingerichtet ist, ein Ergebnis als Ergebnis eines Befehls zu speichern, wobei der Befehl ein erstes Feld, um einen ersten Operanden anzugeben, und ein zweites Feld aufweist, um einen zweiten Operanden anzugeben, wobei sowohl der erste als auch der zweite Operand eine Vielzahl von gepackten Datenelementen aufweisen, die sich in jeweiligen Positionen entsprechen, wobei eine erste Teilmenge der gepackten Datenelemente des ersten Operanden und eine erste Teilmenge der gepackten Datenelemente des zweiten Operanden jeweils einer ersten Spur entsprechen und wobei eine zweite Teilmenge der gepackten Datenelemente des ersten Operanden und eine zweite Teilmenge der gepackten Datenelemente des zweiten Operanden jeweils einer zweiten Spur entsprechen, wobei das Ergebnis, das zu speichern ist, Folgendes aufweist: (1) in der ersten Spur lediglich niedrigstwertige Datenelemente aus der ersten Teilmenge des ersten Operanden verschachtelt mit entsprechenden niedrigstwertigen Datenelementen aus der ersten Teilmenge des zweiten Operanden; und (2) in der zweiten Spur lediglich höchstwertige Datenelemente aus der zweiten Teilmenge des ersten Operanden verschachtelt mit entsprechenden höchstwertigen Datenelementen aus der zweiten Teilmenge des zweiten Operanden.
  9. Vorrichtung nach Anspruch 8, wobei die erste Spur eine untere Spur umfasst und die zweite Spur eine obere Spur umfasst.
  10. Vorrichtung nach Anspruch 8, wobei die erste Spur eine obere Spur umfasst und die zweite Spur eine untere Spur umfasst.
  11. Vorrichtung nach Anspruch 8, wobei der Befehl ein Steuerfeld aufweist, wobei ein oder mehrere Bits des Steuerfelds der ersten Spur entsprechen und angeben, dass die niedrigstwertigen Datenelemente des ersten und zweiten Operanden entpackt werden sollen, und wobei ein oder mehrere Bits des Steuerfelds der zweiten Spur entsprechen und angeben, dass die höchstwertigen Datenelemente des ersten und zweiten Operanden entpackt werden sollen.
  12. Vorrichtung nach Anspruch 8, wobei der Befehl ein drittes Feld aufweist, das sich von dem ersten und zweiten Feld unterscheidet, um ein Ziel anzugeben, an dem das Ergebnis gespeichert werden soll, und wobei das Speichern des Ergebnisses ein Speichern des Ergebnisses an dem Ziel umfasst.
  13. Vorrichtung nach Anspruch 8, wobei der Befehl einen Kreuzspur-Unpack-Befehl umfasst.
  14. Vorrichtung nach Anspruch 8, wobei sowohl die erste als auch die zweite Spur 128 Bits aufweisen.
  15. Vorrichtung nach Anspruch 8, wobei die Ausführungseinheit eingerichtet ist, ein Ergebnis zu speichern, das Folgendes umfasst: (1) in der ersten Spur lediglich die Hälfte der Datenelemente aus der ersten Teilmenge; und (2) in der zweiten Spur lediglich die Hälfte der Datenelemente aus der zweiten Teilmenge.
  16. Vorrichtung nach Anspruch 8, wobei die Ausführungseinheit eingerichtet ist, ein Ergebnis zu speichern, das in der ersten Spur die niedrigstwertigen Datenelemente aus der ersten Teilmenge des ersten Operanden in der gleichen Reihenfolge umfasst, wie die niedrigstwertigen Datenelemente in der ersten Teilmenge des ersten Operanden erscheinen.
  17. Vorrichtung nach Anspruch 8, wobei die Ausführungseinheit eingerichtet ist, ein Ergebnis zu speichern, das mindestens vier Datenelemente umfasst, wobei jedes aus dem ersten oder dem zweiten Operanden ist.
  18. Vorrichtung nach Anspruch 8, die ferner mindestens einen aus einem Decodierer zum Decodieren des Befehls in einen oder mehrere Befehle, die von der Ausführungseinheit ausgeführt werden sollen, um die Ausführungseinheit dazu zu veranlassen, das Ergebnis zu speichern, und einem Befehlsübersetzer umfasst, um den Befehl in einen oder mehrere Befehle zu übersetzen, die von der Ausführungseinheit ausgeführt werden sollen, um die Ausführungseinheit dazu zu veranlassen, das Ergebnis zu speichern.
  19. Vorrichtung nach Anspruch 8, wobei die Ausführungseinheit eine Schaltung umfasst und wobei der Befehl einen Maschinenbefehl umfasst und wobei die Ausführungseinheit bestimmte Logik umfasst, die funktional eingerichtet ist, das Ergebnis aufgrund des Maschinenbefehls zu speichern.
  20. Vorrichtung, die Folgendes umfasst: ein erstes 256-Bit-Register, um einen ersten Quelloperanden zu speichern, der ein erstes Datenelement, das durch Bits 0 bis 31 repräsentiert ist, ein zweites Datenelement, das durch Bits 32 bis 63 repräsentiert ist, ein drittes Datenelement, das durch Bits 64 bis 95 repräsentiert ist, ein viertes Datenelement, das durch Bits 96 bis 127 repräsentiert ist, ein fünftes Datenelement, das durch Bits 128 bis 159 repräsentiert ist, ein sechstes Datenelement, das durch Bits 160 bis 191 repräsentiert ist, ein siebtes Datenelement, das durch Bits 192 bis 223 repräsentiert ist, und ein achtes Datenelement aufweist, das durch Bits 224 bis 255 repräsentiert ist; ein zweites 256-Bit-Register, um einen zweiten Quelloperanden zu speichern, der ein neuntes Datenelement, das durch Bits 0 bis 31 repräsentiert ist, ein zehntes Datenelement, das durch Bits 32 bis 63 repräsentiert ist, ein elftes Datenelement, das durch Bits 64 bis 95 repräsentiert ist, ein zwölftes Datenelement, das durch Bits 96 bis 127 repräsentiert ist, ein dreizehntes Datenelement, das durch Bits 128 bis 159 repräsentiert ist, ein vierzehntes Datenelement, das durch Bits 160 bis 191 repräsentiert ist, ein fünfzehntes Datenelement, das durch Bits 192 bis 223 repräsentiert ist, und ein sechzehntes Datenelement aufweist, das durch Bits 224 bis 255 repräsentiert ist; eine Ausführungseinheit, die dazu eingerichtet ist, ein Ergebnis als Ergebnis eines Befehls zu speichern, wobei das Ergebnis, das gespeichert werden soll, das erste Datenelement, das in Bits 0 bis 31 eines Zielregisters gespeichert werden soll, das neunte Datenelement, das in Bits 32 bis 63 des Zielregisters gespeichert werden soll, das zweite Datenelement, das in Bits 64 bis 95 des Zielregisters gespeichert werden soll, das zehnte Datenelement, das in Bits 96 bis 127 des Zielregisters gespeichert werden soll, das siebte Datenelement, das in Bits 128 bis 159 des Zielregisters gespeichert werden soll, das fünfzehnte Datenelement, das in Bits 160 bis 191 des Zielregisters gespeichert werden soll, das achte Datenelement, das in Bits 192 bis 223 des Zielregisters gespeichert werden soll, und das sechzehnte Datenelement, das in Bits 224 bis 255 des Zielregisters gespeichert werden soll, aufweisen soll.
  21. Vorrichtung nach Anspruch 20, die ferner mindestens einen aus einem Decodierer, um den Befehl in einen oder mehrere Befehle zu decodieren, die von der Ausführungseinheit ausgeführt werden sollen, um die Ausführungseinheit dazu zu veranlassen, das Ergebnis zu speichern, und einem Befehlsübersetzer umfasst, um den Befehl in einen oder mehrere Befehle zu übersetzen, die von der Ausführungseinheit ausgeführt werden sollen, um die Ausführungseinheit dazu zu veranlassen, das Ergebnis zu speichern.
  22. Vorrichtung, die Folgendes umfasst: ein erstes 256-Bit-Register, um einen ersten Quelloperanden zu speichern, der ein erstes Datenelement, das durch Bits 0 bis 31 repräsentiert ist, ein zweites Datenelement, das durch Bits 32 bis 63 repräsentiert ist, ein drittes Datenelement, das durch Bits 64 bis 95 repräsentiert ist, ein viertes Datenelement, das durch Bits 96 bis 127 repräsentiert ist, ein fünftes Datenelement, das durch Bits 128 bis 159 repräsentiert ist, ein sechstes Datenelement, das durch Bits 160 bis 191 repräsentiert ist, ein siebtes Datenelement, das durch Bits 192 bis 223 repräsentiert ist, und ein achtes Datenelement aufweist, das durch Bits 224 bis 255 repräsentiert ist; ein zweites 256-Bit-Register, um einen zweiten Quelloperanden zu speichern, der ein neuntes Datenelement, das durch Bits 0 bis 31 repräsentiert ist, ein zehntes Datenelement, das durch Bits 32 bis 63 repräsentiert ist, ein elftes Datenelement, das durch Bits 64 bis 95 repräsentiert ist, ein zwölftes Datenelement, das durch Bits 96 bis 127 repräsentiert ist, ein dreizehntes Datenelement, das durch Bits 128 bis 159 repräsentiert ist, ein vierzehntes Datenelement, das durch Bits 160 bis 191 repräsentiert ist, ein fünfzehntes Datenelement, das durch Bits 192 bis 223 repräsentiert ist, und ein sechzehntes Datenelement aufweist, das durch Bits 224 bis 255 repräsentiert ist; eine Ausführungseinheit, die eingerichtet ist, ein Ergebnis als Ergebnis eines Befehls zu speichern, wobei das Ergebnis, das gespeichert werden soll, das dritte Datenelement, das in Bits 0 bis 31 eines Zielregisters gespeichert werden soll, das elfte Datenelement, das in Bits 32 bis 63 des Zielregisters gespeichert werden soll, das vierte Datenelement, das in Bits 64 bis 95 des Zielregisters gespeichert werden soll, das zwölfte Datenelement, das in Bits 96 bis 127 des Zielregisters gespeichert werden soll, das fünfte Datenelement, das in Bits 128 bis 159 des Zielregisters gespeichert werden soll, das dreizehnte Datenelement, das in Bits 160 bis 191 des Zielregisters gespeichert werden soll, das sechste Datenelement, das in Bits 192 bis 223 des Zielregisters gespeichert werden soll, und das vierzehnte Datenelement, das in Bits 224 bis 255 des Zielregisters gespeichert werden soll, aufweisen soll.
  23. Vorrichtung nach Anspruch 22, die ferner mindestens einen aus einem Decodierer, um den Befehl in einen oder mehrere Befehle zu decodieren, die von der Ausführungseinheit ausgeführt werden sollen, um die Ausführungseinheit dazu zu veranlassen, das Ergebnis zu speichern, und einem Befehlsübersetzer umfasst, um den Befehl in einen oder mehrere Befehle zu übersetzen, die von der Ausführungseinheit ausgeführt werden sollen, um die Ausführungseinheit dazu zu veranlassen, das Ergebnis zu speichern.
  24. System, das Folgendes umfasst: eine Zusammenschaltung; einen Prozessor, der an die Zusammenschaltung gekoppelt ist, wobei der Prozessor Folgendes aufweist: mindestens einen aus einem Befehlsdecodierer, einem Befehlsübersetzer und einem Befehlsemulator, wobei der mindestens eine als Hardware, Software, Firmware oder eine Kombination davon implementiert ist und eingerichtet ist, einen Befehl zu empfangen, wobei der Befehl ein erstes Feld, um einen ersten Operanden anzugeben, und ein zweites Feld aufweist, um einen zweiten Operanden anzugeben, wobei sowohl der erste als auch der zweite Operand eine Vielzahl von gepackten Datenelementen aufweist, die sich in jeweiligen Positionen entsprechen, wobei eine erste Teilmenge der gepackten Datenelemente des ersten Operanden und eine erste Teilmenge der gepackten Datenelemente des zweiten Operanden jeweils einer ersten Spur entsprechen, und wobei eine zweite Teilmenge der gepackten Datenelemente des ersten Operanden und eine zweite Teilmenge der gepackten Datenelemente des zweiten Operanden jeweils einer zweiten Spur entsprechen; und eine Schaltung, die auf den mindestens einen, der den Befehl empfängt, reagiert, um ein Ergebnis zu speichern, wobei das Ergebnis Folgendes aufweist: (1) in der ersten Spur lediglich niedrigstwertige Datenelemente aus der ersten Teilmenge des ersten Operanden verschachtelt mit entsprechenden niedrigstwertigen Datenelementen aus der ersten Teilmenge des zweiten Operanden; und (2) in der zweiten Spur lediglich höchstwertige Datenelemente aus der zweiten Teilmenge des ersten Operanden verschachtelt mit entsprechenden höchstwertigen Datenelementen aus der zweiten Teilmenge des zweiten Operanden; und einen dynamischen Direktzugriffsspeicher (DRAM), der an die Zusammenschaltung gekoppelt ist.
  25. System nach Anspruch 24, wobei die Schaltung eingerichtet ist, ein Ergebnis zu speichern, das Folgendes umfasst: (1) in der ersten Spur lediglich die Hälfte der Datenelemente aus der ersten Teilmenge; und (2) in der zweiten Spur lediglich die Hälfte der Datenelemente aus der zweiten Teilmenge.
  26. Herstellungsartikel, der Folgendes umfasst: ein maschinenlesbares Medium zum Bereitstellen eines Befehls, wobei der Befehl ein erstes Feld zum Angeben eines ersten Operanden und ein zweites Feld zum Angeben eines zweiten Operanden aufweist, wobei sowohl der erste als auch der zweite Operand eine Vielzahl von gepackten Datenelementen aufweisen, die sich in jeweiligen Positionen entsprechen, wobei eine erste Teilmenge der gepackten Datenelemente des ersten Operanden und eine erste Teilmenge der gepackten Datenelemente des zweiten Operanden jeweils einer ersten Spur entsprechen und eine zweite Teilmenge der gepackten Datenelemente des ersten Operanden und eine zweite Teilmenge der gepackten Datenelemente des zweiten Operanden jeweils einer zweiten Spur entsprechen, und wobei der Befehl, wenn er von einer Maschine verarbeitet wird, die Maschine dazu veranlasst, Operationen durchzuführen, die ein Speichern eines Ergebnisses umfassen, wobei das Ergebnis Folgendes aufweist: (1) in der ersten Spur lediglich niedrigstwertige Datenelemente aus der ersten Teilmenge des ersten Operanden verschachtelt mit entsprechenden niedrigstwertigen Datenelementen aus der ersten Teilmenge des zweiten Operanden; und (2) in der zweiten Spur lediglich höchstwertige Datenelemente aus der zweiten Teilmenge des ersten Operanden verschachtelt mit entsprechenden höchstwertigen Datenelementen aus der zweiten Teilmenge des zweiten Operanden.
  27. Verfahren nach Anspruch 26, wobei der Befehl einen Maschinenbefehl umfasst und die Maschine bestimmte Logik umfasst, die funktional eingerichtet ist, das Ergebnis aufgrund des Maschinenbefehls zu speichern.
DE112010002773T 2009-06-30 2010-06-29 Entpacken von gepackten daten auf mehreren spuren Withdrawn DE112010002773T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/494,667 2009-06-30
US12/494,667 US9086872B2 (en) 2009-06-30 2009-06-30 Unpacking packed data in multiple lanes
PCT/US2010/040395 WO2011002773A2 (en) 2009-06-30 2010-06-29 Unpacking packed data in multiple lanes

Publications (1)

Publication Number Publication Date
DE112010002773T5 true DE112010002773T5 (de) 2012-10-11

Family

ID=43382043

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112010002773T Withdrawn DE112010002773T5 (de) 2009-06-30 2010-06-29 Entpacken von gepackten daten auf mehreren spuren

Country Status (8)

Country Link
US (2) US9086872B2 (de)
JP (2) JP5438214B2 (de)
KR (1) KR101399141B1 (de)
CN (1) CN102473093B (de)
DE (1) DE112010002773T5 (de)
GB (1) GB2481567B (de)
TW (2) TWI443525B (de)
WO (1) WO2011002773A2 (de)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8078836B2 (en) 2007-12-30 2011-12-13 Intel Corporation Vector shuffle instructions operating on multiple lanes each having a plurality of data elements using a common set of per-lane control bits
US9086872B2 (en) * 2009-06-30 2015-07-21 Intel Corporation Unpacking packed data in multiple lanes
WO2013095564A1 (en) 2011-12-22 2013-06-27 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in numerical order that differ by a constant stride
US10223112B2 (en) 2011-12-22 2019-03-05 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset
CN104011646B (zh) 2011-12-22 2018-03-27 英特尔公司 用于产生按照数值顺序的连续整数的序列的处理器、方法、系统和指令
US9946540B2 (en) 2011-12-23 2018-04-17 Intel Corporation Apparatus and method of improved permute instructions with multiple granularities
CN107220029B (zh) 2011-12-23 2020-10-27 英特尔公司 掩码置换指令的装置和方法
WO2013095620A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method of improved insert instructions
US9405539B2 (en) * 2013-07-31 2016-08-02 Intel Corporation Providing vector sub-byte decompression functionality
US9582419B2 (en) * 2013-10-25 2017-02-28 Arm Limited Data processing device and method for interleaved storage of data elements
CN106030513A (zh) * 2014-03-27 2016-10-12 英特尔公司 用于采用到被屏蔽结果元素的传播将连续源元素存储到未屏蔽结果元素的处理器、方法、系统和指令
KR101818985B1 (ko) 2014-03-28 2018-02-28 인텔 코포레이션 마스킹된 결과 요소들로의 전파를 이용하여 소스 요소들을 대응하는 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어
US10474465B2 (en) * 2014-05-01 2019-11-12 Netronome Systems, Inc. Pop stack absolute instruction
JP2017199045A (ja) * 2014-09-02 2017-11-02 パナソニックIpマネジメント株式会社 プロセッサ及びデータ並び替え方法
EP3001306A1 (de) * 2014-09-25 2016-03-30 Intel Corporation Prozessoren, Verfahren, Systeme und Anweisungen zum Verschachteln von Bitgruppen
EP3001307B1 (de) * 2014-09-25 2019-11-13 Intel Corporation Bit-Shuffle-Prozessoren, Verfahren, Systeme und Anweisungen
US9772850B2 (en) * 2014-11-14 2017-09-26 Intel Corporation Morton coordinate adjustment processors, methods, systems, and instructions
US9785437B2 (en) * 2014-12-23 2017-10-10 Intel Corporation Method and apparatus for performing a vector bit reversal and crossing
US10013253B2 (en) * 2014-12-23 2018-07-03 Intel Corporation Method and apparatus for performing a vector bit reversal
US9892053B2 (en) * 2015-03-24 2018-02-13 Intel Corporation Compaction for memory hierarchies
US20170192789A1 (en) * 2015-12-30 2017-07-06 Rama Kishnan V. Malladi Systems, Methods, and Apparatuses for Improving Vector Throughput
US10289416B2 (en) * 2015-12-30 2019-05-14 Intel Corporation Systems, apparatuses, and methods for lane-based strided gather
JP6767660B2 (ja) 2017-01-27 2020-10-14 富士通株式会社 プロセッサ、情報処理装置及びプロセッサの動作方法
US20190272175A1 (en) * 2018-03-01 2019-09-05 Qualcomm Incorporated Single pack & unpack network and method for variable bit width data formats for computational machines
DE112019005878T5 (de) 2018-11-26 2021-09-02 AGC Inc. Antennenkonstruktions-Unterstützungsvorrichtung, Antennenkonstruktions-Unterstützungsprogramm und Antennenkonstruktions-Unterstützungsverfahren
US11216281B2 (en) * 2019-05-14 2022-01-04 International Business Machines Corporation Facilitating data processing using SIMD reduction operations across SIMD lanes
WO2021237510A1 (zh) * 2020-05-27 2021-12-02 深圳市大疆创新科技有限公司 数据解压缩的方法、系统、处理器及计算机存储介质
US11966745B2 (en) 2021-11-15 2024-04-23 Google Llc Sparse SIMD cross-lane processing unit
US11972263B2 (en) 2021-11-22 2024-04-30 Google Llc Cooperative instruction prefetch on multicore system
US11977499B2 (en) 2022-03-22 2024-05-07 Google Llc Streaming transfers and ordering model

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2932963B2 (ja) 1994-01-21 1999-08-09 モトローラ・インコーポレイテッド 効率的なビット移動能力を有するデータ・プロセッサとその方法
CN1326033C (zh) 1994-12-02 2007-07-11 英特尔公司 可以对复合操作数进行压缩操作的微处理器
US5819101A (en) 1994-12-02 1998-10-06 Intel Corporation Method for packing a plurality of packed data elements in response to a pack instruction
GB9509989D0 (en) 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Manipulation of data
US7085795B2 (en) 2001-10-29 2006-08-01 Intel Corporation Apparatus and method for efficient filtering and convolution of content data
US6385634B1 (en) * 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US6041404A (en) 1998-03-31 2000-03-21 Intel Corporation Dual function system and method for shuffling packed data elements
US6643287B1 (en) 1999-11-24 2003-11-04 Pluris, Inc. Apparatus and method for forwarding encapsulated data packets on a network having multiple links between nodes
US8751681B1 (en) 2000-06-30 2014-06-10 Intel Corporation Delivering content by encapsulating into packages with associated meta-data
US7155601B2 (en) 2001-02-14 2006-12-26 Intel Corporation Multi-element operand sub-portion shuffle instruction execution
US7739319B2 (en) 2001-10-29 2010-06-15 Intel Corporation Method and apparatus for parallel table lookup using SIMD instructions
AU2003256870A1 (en) 2002-08-09 2004-02-25 Intel Corporation Multimedia coprocessor control mechanism including alignment or broadcast instructions
US7107435B2 (en) 2003-05-27 2006-09-12 International Business Machines Corporation System and method for using hardware assist functions to process multiple arbitrary sized data elements in a register
US7356518B2 (en) * 2003-08-27 2008-04-08 Icosystem Corporation Methods and systems for multi-participant interactive evolutionary computing
GB2409064B (en) 2003-12-09 2006-09-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing in parallel a data processing operation on data elements
GB2411973B (en) 2003-12-09 2006-09-27 Advanced Risc Mach Ltd Constant generation in SMD processing
US7475392B2 (en) 2004-06-07 2009-01-06 International Business Machines Corporation SIMD code generation for loops with mixed data lengths
US7745392B2 (en) * 2005-09-23 2010-06-29 Nitto Denko Corporation Multi-valent guanidinium compounds for enhancing molecular translocation across cellular membranes and epithelial tissues
US20070106882A1 (en) 2005-11-08 2007-05-10 Stexar Corp. Byte-wise permutation facility configurable for implementing DSP data manipulation instructions
US7761694B2 (en) 2006-06-30 2010-07-20 Intel Corporation Execution unit for performing shuffle and other operations
US7752647B2 (en) * 2006-07-18 2010-07-06 Via Technologies, Inc. Video data packing
US8078836B2 (en) * 2007-12-30 2011-12-13 Intel Corporation Vector shuffle instructions operating on multiple lanes each having a plurality of data elements using a common set of per-lane control bits
US9086872B2 (en) 2009-06-30 2015-07-21 Intel Corporation Unpacking packed data in multiple lanes

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
http://software.intel.com/en-us/avx/
Intel Architecture Software Developer's Manual: Band 2: Instruction Set Reference, 1999 (Bestell-Nr. 243191)
Intel(RTM) Advanced Vector Extensions Programming Reference (Referenz-Nr. 319433-005) verfügbar, die im Januar 2009

Also Published As

Publication number Publication date
JP2014063522A (ja) 2014-04-10
CN102473093B (zh) 2016-06-01
TWI514166B (zh) 2015-12-21
GB2481567A (en) 2011-12-28
KR101399141B1 (ko) 2014-06-19
KR20120026104A (ko) 2012-03-16
TW201447606A (zh) 2014-12-16
US20130232321A1 (en) 2013-09-05
CN102473093A (zh) 2012-05-23
JP5438214B2 (ja) 2014-03-12
US9086872B2 (en) 2015-07-21
TW201113717A (en) 2011-04-16
JP5795788B2 (ja) 2015-10-14
JP2012530977A (ja) 2012-12-06
US20100332794A1 (en) 2010-12-30
US9081562B2 (en) 2015-07-14
GB2481567B (en) 2015-05-20
TWI443525B (zh) 2014-07-01
WO2011002773A3 (en) 2011-04-07
WO2011002773A2 (en) 2011-01-06
GB201119082D0 (en) 2011-12-21

Similar Documents

Publication Publication Date Title
DE112010002773T5 (de) Entpacken von gepackten daten auf mehreren spuren
DE102010051476B4 (de) Addierbefehle, um drei Quelloperanden zu addieren
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE112011105122T5 (de) Systeme, Vorrichtungen und Verfahren zum Vermischen zweier Quelloperanden in einem einzigen Ziel unter Verwendung einer Schreibmaske
DE112011105121T5 (de) Systeme, Vorrichtungen und Verfahren zum Schrittmustersammeln von Datenelementen und Schrittmusterstreuen von Datenelementen
DE102010053967A1 (de) Bitbereich-Isolierbefehle, Verfahren und Vorrichtung
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE112013004783T5 (de) Durch Lese- und Schreibmasken gesteuerter Vektor-Verschiebebefehl
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102018130225A1 (de) Entfernte atomare Operationen in Multi-Sockel-Systemen
DE102018126036A1 (de) Systeme und verfahren zum setzen eines kachelregisterpaars auf null
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern
DE102018125971A1 (de) Systeme und verfahren zum berechnen von skalaprodukten von halbbytes in operanden aus zwei kacheln
DE102018005976A1 (de) Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten
DE102018129273A1 (de) Einrichtung und verfahren zum vektor-multiplizieren; und -akkumulieren von unsignierten doppelwörtern
DE102018131484A1 (de) Einrichtung und verfahren zum vektormultiplizieren und zur subtraktion von vorzeichenbehafteten doppelwörtern

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee