DE102018006744A1 - Bitmatrixmultiplikation - Google Patents

Bitmatrixmultiplikation Download PDF

Info

Publication number
DE102018006744A1
DE102018006744A1 DE102018006744.1A DE102018006744A DE102018006744A1 DE 102018006744 A1 DE102018006744 A1 DE 102018006744A1 DE 102018006744 A DE102018006744 A DE 102018006744A DE 102018006744 A1 DE102018006744 A1 DE 102018006744A1
Authority
DE
Germany
Prior art keywords
bit
matrix
source
identified
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102018006744.1A
Other languages
English (en)
Inventor
Dmitry Y. Babokin
Kshitij A. Doshi
Vadim Sukhomlinov
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 DE102018006744A1 publication Critical patent/DE102018006744A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT
    • 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Abstract

Detailliert beschrieben werden Ausführungsformen im Zusammenhang mit Bitmatrixmultiplikation in einem Prozessor. Beispielsweise umfasst ein Prozessor in einigen Ausführungsformen Folgendes: Decodierungsschaltungsanordnungen zum Decodieren eines Befehls mit Feldern für einen Opcode, eine Kennung einer ersten Quellbitmatrix, eine Kennung einer zweiten Quellbitmatrix, eine Kennung einer Zielbitmatrix und einen Direktoperanden, und Ausführungsschaltungsanordnungen zum Ausführen des decodierten Befehls zum Durchführen einer Multiplikation einer Matrix aus S-Bit-Elementen der identifizierten ersten Quellbitmatrix mit S-Bit-Elementen der identifizierten zweiten Quellbitmatrix, wobei die Multiplikations- und Akkumulationsoperationen durch den Operationsselektor ausgewählt werden und ein Ergebnis der Matrixmultiplikation in die identifizierte Zielbitmatrix speichern, wobei S eine Mehrfachbitgröße anzeigt, wird beschrieben.

Description

  • STAND DER TECHNIK
  • Verschiedene Instanzen der Bioinformatik, softwaredefinierte Funk-(Software Defined Radio), Bilderfassungs- und Kryptologieanwendungen (verschiedene Verschlüsselungsalgorithmen, sichere Hashfunktionen usw.) verwenden Bitmatrixmultiplikation (BMM). Verschiedene Operationen können effizienter sein, wenn sie als BMM umgesetzt werden, wie etwa S-Boxen, Bitpermutationen, Hadamard-Transformation, bitweise neuronale Netzwerke, Galois-Feld-Multiplikationen (in Kryptographie und bei Kanalcodierung verwendet) usw., wie auch für Bitmanipulationen.
  • Figurenliste
  • Die vorliegende Erfindung wird in den Figuren der beigefügten Zeichnungen als Beispiel und nicht als Einschränkung dargestellt, wobei ähnliche Bezüge ähnliche Elemente anzeigen und:
    • 1 stellt eine Ausführungsform eines ausgewählten Teils von Ausführung eines BMM-Befehls dar, der als Quellen eine 8×8-Bit-Matrix mit einer 8×64-Bit-Matrix hat;
    • 2 stellt eine Ausführungsform eines ausgewählten Teils von Ausführung eines BMM-Befehls dar, der als Quellen eine 64×8-Bit-Matrix mit einer 8×8-Bit-Matrix hat;
    • 3 stellt eine Ausführungsform eines ausgewählten Teils von Ausführung eines BMM-Befehls dar, der als Quellen eine 8×64-Bit-Matrix mit einer 64×64-Bit-Matrix hat;
    • 4 stellt eine Ausführungsform eines ausgewählten Teils von Ausführung eines BMM-Befehls dar, der als Quellen eine 64×64-Bit-Matrix mit einer 64×8-Bit-Matrix hat;
    • 5 stellt eine Ausführungsform von Hardware zum Verarbeiten eines Befehls, wie etwa eines BMM-Befehls, dar;
    • 6 stellt eine Ausführungsform eines durch einen Prozess durchgeführten Verfahrens zum Verarbeiten eines BMM-Befehls dar;
    • 7 stellt eine ausführlichere Beschreibung einer Ausführung eines BMM-Befehls dar;
    • 8A-8B sind Blockdiagramme, ein generisches vektorfreundliches Befehlsformat und Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Erfindung;
    • 9A ist ein Blockdiagramm, ein beispielhaftes spezielles vektorfreundliches Befehlsformat gemäß Ausführungsformen der Erfindung darstellend;
    • 9B ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 900, die das volle Opcode-Feld 874 bilden, darstellend, gemäß einer Ausführungsform der Erfindung;
    • 9C ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 900, die das Registerindexfeld 844 bilden, darstellend, gemäß einer Ausführungsform der Erfindung;
    • 9D ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 900, die das Zusatzoperationsfeld 850 bilden, darstellend, gemäß einer Ausführungsform der Erfindung;
    • 10 ist ein Blockdiagramm einer Registerarchitektur 1000, gemäß einer Ausführungsform der Erfindung;
    • 11A ist ein Blockdiagramm, das sowohl eine beispielhafte reihenfolgetreue (In-order) Pipeline als auch eine beispielhafte reihenfolgeveränderte (Out-of-order) Ausgabe-/Ausführungspipeline mit Registerumbenennung gemäß Ausführungsformen der Erfindung darstellt;
    • 11B ist ein Blockdiagramm, das sowohl ein Ausführungsbeispiel für einen reihenfolgetreuen Architekturkern als auch einen beispielhaften reihenfolgeveränderten Registerumbenennungs-Ausgabe/Ausführungs-Architekturkern, der in einem Prozessor aufzunehmen ist, gemäß Ausführungsformen der Erfindung darstellt;
    • 12A-B stellen ein Blockdiagramm einer spezifischeren beispielhaften reihenfolgetreuen (In-order) Kernarchitektur dar, deren Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne vom gleichen Typ und/oder anderen Typen) in einem Chip wäre;
    • 13 ist ein Blockdiagramm eines Prozessors 1300, der mehr als einen Kern haben kann, der eine integrierte Speichersteuerung haben kann und der integrierte Grafik haben kann, gemäß Ausführungsformen der Erfindung;
    • 14 zeigt ein Blockdiagramm eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 15 ist ein Blockdiagramm eines ersten spezielleren beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 16 ist ein Blockdiagramm eines zweiten spezielleren beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 17 ist ein Blockdiagramm eines SoC (System-on-a-Chip) gemäß einer Ausführungsform der vorliegenden Erfindung; und
    • 18 ist ein Blockdiagramm, die Verwendung eines Softwarebefehlsumwandlers zum Umwandeln binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz abgesetzt darstellend, gemäß Ausführungsformen der Erfindung.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt. Allerdings versteht es sich, dass Ausführungsformen der Erfindung ohne diese spezifischen Details umgesetzt sein können. In anderen Fällen sind wohl bekannte Schaltungen, Strukturen und Techniken nicht im Detail gezeigt, um das Verständnis dieser Beschreibung nicht einzutrüben.
  • Bezugnahmen in der Spezifikation auf „eine Ausführungsform“, „eine beispielhafte Ausführungsform“ usw. zeigen an, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, eine Struktur oder Charakteristik umfassen kann, aber jede Ausführungsform muss nicht notwendigerweise das spezielle Merkmal, die Struktur oder Charakteristik umfassen. Darüber hinaus beziehen sich solche Phrasen nicht notwendigerweise auf die gleiche Ausführungsform. Ferner, wenn ein bestimmtes Merkmal, eine Struktur oder Charakteristik in Verbindung mit einer Ausführungsform beschrieben wird, wird davon ausgegangen, dass es im Wissen eines Fachmanns liegt, ein solches Merkmal, eine Struktur oder Charakteristik in Verbindung mit anderen Ausführungsformen umzusetzen, seien sie ausdrücklich beschrieben oder nicht.
  • Typischerweise sind Prozessorkerne rund um das Verarbeiten von Wörtern, nicht von Bits, optimiert. Daher werden komplexe Operationen auf Bitebene typischerweise nicht so gut unterstützt.
  • Hier werden Ausführungsformen von BMM-Befehlen und ihre Ausführung detailliert beschrieben. In Abhängigkeit von der Umsetzung können die hier detailliert angegebenen Befehle universelle Register (z. B. 64-Bit-GPRs), gepackte Daten (manchmal Vektor- oder SIMD-Register (Single-Instruction Multiple Data; ein Befehl, mehrere Daten) oder Registerblöcke oder speicherbasierte (z. B. 64-Bit, 512-Bit, 4096-Bit usw.) Operanden verwenden. Diese Befehle sind Verbesserungen an einem Computer selbst, da sie Unterstützung für BMM bieten, die vorher nicht möglich war. Insbesondere führt eine Ausführung eines BMM-Befehls dazu, dass eine Bitmatrixmultiplikation von zwei Quellmatrizen durchgeführt wird, wobei die bestimmten Schaltungsanordnungen, die bei Multilizier- und Addieraspekten verwendet werden, über den Befehl ausgewählt werden. In einigen Ausführungsformen wird Element-mal-Element-Multiplizieren unter Verwendung einer AND-Operation und Term-mit-Term-Summieren unter Verwendung einer exklusiven OR-Operation (XOR) durchgeführt. Wie nachfolgend detailliert beschrieben, können hier detailliert beschriebene Ausführungsformen der BMM-Befehle auswählbare Multiplizier- und/oder Summierschaltungsanordnungen haben. Beispielsweise gibt ein Direktoperand (oder andere(r) Operand(en)) an, welche Multilpizier- und Addierschaltungsanordnungen in der BMM verwendet werden. Beispielhafte Multiplikationsschaltungen (⊗) umfassen unter anderem: bitweises AND, NAND, XOR, XNOR und/oder NOR. Beispielhafte Additionsschaltungen (⊕) umfassen unter anderem: bitweises XOR, NOR, OR, XNOR; Mehrheit (=1 wenn Mehrheit 1 ist) und Minderheit. In der folgenden Diskussion bezeichnen eckige Klammern [] den Wert eines spezifischen Bits, ⊗ bezeichnet eine Bitfeldmultiplikation (z. B. AND), und ⊕ bezeichnet eine Bitakkumulation (z. B. XOR).
  • 1 stellt eine Ausführungsform eines ausgewählten Teils von Ausführung eines BMM-Befehls dar, der als Quellen eine 8×8-Bit-Matrix mit einer 8×64-Bit-Matrix hat; Das Format dieses BMM-Befehls umfasst Felder für einen Opcode („VBMM8×64“ ist in dieser Darstellung die Opcode-Mnemonik), eine erste Quellbitmatrix-Operandenkennung (gezeigt als „QUELLE 1“), eine zweite Quellbitmatrix-Operandenkennung (gezeigt als „QUELLE 2/MEM“), einen Direktoperanden und eine Zielbitmatrix-Operandenkennung (gezeigt als „ZIEL“).
  • Die beiden Quelloperandenfelder stellen einen Ort eines ersten Quellbitmatrixoperanden 101 und eines zweiten Quellbitmatrixoperanden 103 dar. Diese Orte können ein Speicherort (z. B. eine Adresse im Speicher, wie etwa eine Festplatte oder RAM) oder ein oder mehrere Register sein.
  • In dieser Darstellung ist der erste Quellbitmatrixoperand 101 eine 8×8-Bitmatrix. In einigen Ausführungsformen von BMM-Befehlen wird eine 8×8-Bitmatrix im Speicher oder in einem oder mehreren Registern als eine Sequenz von 8 8-Bit-Zeilen, beginnend mit Zeile 0, gespeichert. Daher wäre der Zugriff auf das Bit in Zeile I, Spalte J von Matrix M gleich: M[I,J]=M[I*8+J], und wenn im Speicher gespeichert: (M[I]>>J) &1.
  • In dieser Darstellung ist der zweite Quellbitmatrixoperand 101 eine 8×64-Bitmatrix. In einigen Ausführungsformen wird eine 8x64-Bitmatrix (8 Zeilen mit 64 Bits) im Speicher oder in einem oder mehreren Registern als eine Sequenz von 64-Bit-Zeilen, beginnend mit Zeile 0, gespeichert. Daher wäre der Zugriff auf das Bit in Zeile I, Spalte J von Matrix M gleich: M[I,J] = M[I*64+J] (dies bezieht sich auf Bit, nicht auf Byte), oder anders, um den Wert von Bit M[I,J], im Speicher gespeichert, zu erhalten, würden einige (M[I*8]>>J)&1 verwenden, dabei Byteadressierung voraussetzend.
  • Das Zielbitmatrixoperandenfeld stellt einen Zielbitmatrixoperanden 121 dar, der das Ergebnis der Bitmatrixmultiplikationsoperation speichert. Wie bereits ausgeführt, kann dieser Operand 121 in einem Register (z. B. 512-Bit-Register), einer Sammlung von Registern oder Orten im Speicher gespeichert werden.
  • Wie gezeigt, umfasst Ausführungsschaltungsanordnung 111 mehrere Multiplikationsarrays 113 und mehrere Addiererarrays 115. Der Direktoperand des Befehls wird verwendet, um einen Typ von Multiplikationsarray 113 und einen Typ von Addiererarray 115 auszuwählen. Beispielsweise werden, in einigen Ausführungsformen, Bits 4:7 eines 8-Bit-Direktoperanden durch den Multiplikationsselektor 117 verwendet, um die Multiplikationsschaltungsanordnung aus den mehreren Multiplikationsarrays 113 auszuwählen. Beispielsweise wählt imm8[4:7] aus den Schaltungen XOR, AND, OR, NOR, NAND und XNOR für Multiplikation aus. In einigen Ausführungsformen werden Bits 0:3 eines 8-Bit-Direktoperanden durch den Addiererselektor 119 verwendet, um die Multiplikationsschaltungsanordnung aus den mehreren Addiererarrays 115 auszuwählen. Beispielsweise wählt imm8[0:3] aus den Schaltungen XOR, AND, OR, NOR und XNOR für Addition aus. Jede bestimmte Anordnung kann verwendet werden, um die Auswahl zu signalisieren, allerdings wird nachfolgend eine beispielhafte Tabelle von Auswahlen angegeben: TABELLE 1
    DIREKTOPERAND[0:3] AUSGEWÄHLTE ADDIERERSCHALTUNG(EN) DIREKTOPERAND[4:7] AUSGEWÄHLTE MULTIPLIZIERERSCHALTUNG(EN)
    0000 XOR 0000 XOR
    0001 AND 0001 AND
    0010 OR 0010 OR
    0011 NOR 0011 NOR
    0100 XNOR 0100 XNOR
    0101 0101 NAND
  • Die Darstellung zeigt zwei Positionen des berechneten Ergebnisses (ZIEL[0] und ZIEL[168]). ZIEL[0] wird wie folgt berechnet: ZIEL[0*64 + 0] = QUELLE1[0*8+0]⊗QUELLE2[0*64 + 0] ⊕ OUELLE1[0*8+1]⊗QUELLE2[1*64 + 0]⊕ ... ⊕ QUELLE1[0*8+7]⊗QUELLE2[7*64 + 0]. ZIEL[168] wird wie folgt berechnet: ZIEL[2*64 + 40] = QUELLE1[2*8+0]⊗QUELLE2[0*64 + 40] ⊕ QUELLE1[2*8+1]⊗QUELLE2[1*64 + 40]⊕ ... ⊕ QUELLE1[2*8+7]⊗QUELLE2[7*64 + 40].
  • 2 stellt eine Ausführungsform eines ausgewählten Teils von Ausführung eines BMM-Befehls dar, der als Quellen eine 64×8-Bit-Matrix mit einer 8×8-Bit-Matrix hat; Das Format dieses BMM-Befehls umfasst Felder für einen Opcode („VBMM64×8“ ist in dieser Darstellung die Opcode-Mnemonik), eine erste Quellbitmatrix-Operandenkennung (gezeigt als „QUELLE 1“), eine zweite Quellbitmatrix-Operandenkennung (gezeigt als „QUELLE 2/MEM“), einen Direktoperanden und eine Zielbitmatrix-Operandenkennung (gezeigt als „ZIEL“).
  • Die beiden Quelloperandenfelder stellen einen Ort eines ersten Quellbitmatrixoperanden 201 und eines zweiten Quellbitmatrixoperanden 203 dar. Diese Orte können ein Speicherort (z. B. eine Adresse im Speicher, wie etwa eine Festplatte oder RAM) oder ein oder mehrere Register sein.
  • In dieser Darstellung ist der erste Quellbitmatrixoperand 201 eine 64×8-Bitmatrix. In einigen Ausführungsformen von BMM-Befehlen wird eine 64×8-Bit-Matrix (8 Zeilen mit 64 Bits) als eine Sequenz von 8 64-Bit-Zeilen gespeichert. Daher wäre der Zugriff auf das Bit in Zeile I, Spalte J von Matrix M gleich: M[I,J] = M[I*64+J] (dies bezieht sich auf Bit, nicht auf Byte), oder anders, um den Wert von Bit M[I,J], im Speicher gespeichert, zu erhalten, würden einige (M[I*8]>>J)&1 verwenden, dabei Byteadressierung voraussetzend. Ein Laden dieses Typs von Matrix in ein 512-Bit-Register umfasst Lesen von einer Startadresse der ersten Zeile.
  • In dieser Darstellung ist der zweite Quellbitmatrixoperand 203 eine 8x8-Bitmatrix. In einigen Ausführungsformen von BMM-Befehlen wird eine 8×8-Bitmatrix im Speicher oder in einem oder mehreren Registern als eine Sequenz von 8 8-Bit-Zeilen, beginnend mit Zeile 0, gespeichert. Daher wäre der Zugriff auf das Bit in Zeile I, Spalte J von Matrix M gleich: M[I,J]=M[I*8+J], und wenn im Speicher gespeichert: (M[I]>>J) &1.
  • Das Zielbitmatrixoperandenfeld stellt einen Zielbitmatrixoperanden 221 dar, der das Ergebnis der Bitmatrixmultiplikationsoperation speichert. Wie bereits ausgeführt, kann dieser Operand 221 in einem Register (z. B. 512-Bit-Register), einer Sammlung von Registern oder Orten im Speicher gespeichert werden.
  • Wie gezeigt, umfasst Ausführungsschaltungsanordnung 211 mehrere Multiplikationsarrays 213 und mehrere Addiererarrays 215. Der Direktoperand des Befehls wird verwendet, um einen Typ von Multiplikationsarray 213 und einen Typ von Addiererarray 215 auszuwählen. Beispielsweise werden, in einigen Ausführungsformen, Bits 4:7 eines 8-Bit-Direktoperanden durch den Multiplikationsselektor 217 verwendet, um die Multiplikationsschaltungsanordnung aus den mehreren Multiplikationsarrays 213 auszuwählen. Beispielsweise wählt imm8[4:7] aus den Schaltungen XOR, AND, OR, NOR, NAND und XNOR für Multiplikation aus. In einigen Ausführungsformen werden Bits 0:3 eines 8-Bit-Direktoperanden durch den Addiererselektor 219 verwendet, um die Multiplikationsschaltungsanordnung aus den mehreren Addiererarrays 215 auszuwählen. Beispielsweise wählt imm8[0:3] aus den Schaltungen XOR, AND, OR, NOR und XNOR für Addition aus. Jede bestimmte Anordnung kann verwendet werden, um die Auswahl zu signalisieren, allerdings wird nachfolgend eine beispielhafte Tabelle von Auswahlen angegeben: TABELLE 2
    DIREKTOPERAND[0:3] AUSGEWÄHLTE ADDIERERSCHALTUNG(EN) DIREKTOPERAND[4:7] AUSGEWÄHLTE MULTIPLIZIERERSCHALTUNG(EN)
    0000 XOR 0000 XOR
    0001 AND 0001 AND
    0010 OR 0010 OR
    0011 NOR 0011 NOR
    0100 XNOR 0100 XNOR
    0101 0101 NAND
  • Die Darstellung zeigt zwei Positionen des berechneten Ergebnisses (ZIEL[0] und ZIEL[511]). ZIEL[0] wird wie folgt berechnet: ZIEL[0*8 + 0] = QUELLE1[0*8+0]⊗QUELLE2[0*8 + 0] ⊕ QUELLE1[0*8+1]⊗QUELLE2[1*8 + 0] ⊕... ⊕ QUELLE1[0*8+7]⊗QUELLE2[7*8 + 0]. ZIEL[511] wird berechnet als: ZIEL[63*8 + 7] = QUELLE1[63*8+0]⊗QUELLE2[0*8 + 7] ⊕ QUELLE1[63*8+1]⊗QUELLE2[1*8 +7] ⊕... ⊕ QUELLE1[63*8+7]⊗QUELLE2[7*8 + 7].
  • 3 stellt eine Ausführungsform eines ausgewählten Teils von Ausführung eines BMM-Befehls dar, der als Quellen eine 8×64-Bit-Matrix mit einer 64×64-Bit-Matrix hat; Das Format dieses BMM-Befehls umfasst Felder für einen Opcode („VBMM8×64×64“ ist in dieser Darstellung die Opcode-Mnemonik), eine erste Quellbitmatrix-Operandenkennung (gezeigt als „QUELLE 1“), eine zweite Quellbitmatrix-Operandenkennung (gezeigt als „QUELLE 2/MEM“), einen Direktoperanden und eine Zielbitmatrix-Operandenkennung (gezeigt als „ZIEL“).
  • Die beiden Quelloperandenfelder stellen einen Ort eines ersten Quellbitmatrixoperanden 301 und eines zweiten Quellbitmatrixoperanden 303 dar. Diese Orte können ein Speicherort (z. B. eine Adresse im Speicher, wie etwa eine Festplatte oder RAM) oder ein oder mehrere Register sein.
  • In dieser Darstellung ist der erste Quellbitmatrixoperand 301 eine 8×64-Bitmatrix. In einigen Ausführungsformen wird eine 8×64-Bitmatrix (8 Zeilen mit 64 Bits) im Speicher oder in einem oder mehreren Registern als eine Sequenz von 64-Bit-Zeilen, beginnend mit Zeile 0, gespeichert. Daher wäre der Zugriff auf das Bit in Zeile I, Spalte J von Matrix M gleich: M[I,J] = M[I*64+J] (dies bezieht sich auf Bit, nicht auf Byte), oder anders, um den Wert von Bit M[I,J], im Speicher gespeichert, zu erhalten, würden einige (M[I*8]>>J)&1 verwenden, dabei Byteadressierung voraussetzend.
  • In dieser Darstellung ist der zweite Quellbitmatrixoperand 303 eine 64×64-Bitmatrix. In einigen Ausführungsformen von BMM-Befehlen wird eine 64×64-Bitmatrix im Speicher als eine Sequenz von 64 64-Bit-Zeilen, beginnend mit Zeile 0, gespeichert. Daher wäre der Zugriff auf ein Bit in Zeile I, Spalte J von Matrix M gleich: M[I,J] = M[I*64+J] (dies bezieht sich auf Bit, nicht auf Byte), oder anders, um den Wert von Bit M[I,J], im Speicher gespeichert, zu erhalten, würden einige (M[I*8]>>J)&1 verwenden, dabei Byteadressierung voraussetzend.
  • Das Zielbitmatrixoperandenfeld stellt einen Zielbitmatrixoperanden 321 dar, der das Ergebnis der Bitmatrixmultiplikationsoperation speichert. Wie bereits ausgeführt, kann dieser Operand 321 in einem Register (z. B. 512-Bit-Register), einer Sammlung von Registern oder Orten im Speicher gespeichert werden.
  • Wie gezeigt, umfasst Ausführungsschaltungsanordnung 311 mehrere Multiplikationsarrays 313 und mehrere Addiererarrays 315. Der Direktoperand des Befehls wird verwendet, um einen Typ von Multiplikationsarray 313 und einen Typ von Addiererarray 315 auszuwählen. Beispielsweise werden, in einigen Ausführungsformen, Bits 4:7 eines 8-Bit-Direktoperanden durch den Multiplikationsselektor 317 verwendet, um die Multiplikationsschaltungsanordnung aus den mehreren Multiplikationsarrays 313 auszuwählen. Beispielsweise wählt imm8[4:7] aus den Schaltungen XOR, AND, OR, NOR, NAND und XNOR für Multiplikation aus. In einigen Ausführungsformen werden Bits 0:3 eines 8-Bit-Direktoperanden durch den Addiererselektor 319 verwendet, um die Multiplikationsschaltungsanordnung aus den mehreren Addiererarrays 315 auszuwählen. Beispielsweise wählt imm8[0:3] aus den Schaltungen XOR, AND, OR, NOR und XNOR für Addition aus. Jede bestimmte Anordnung kann verwendet werden, um die Auswahl zu signalisieren, allerdings wird nachfolgend eine beispielhafte Tabelle von Auswahlen angegeben: TABELLE 3
    DIREKTOPERAND[0:3] AUSGEWÄHLTE ADDIERERSCHALTUNG(EN) DIREKTOPERAND[4:7] AUSGEWÄHLTE MULTIPLIZIERERSCHALTUNG(EN)
    0000 XOR 0000 XOR
    0001 AND 0001 AND
    0010 OR 0010 OR
    0011 NOR 0011 NOR
    0100 XNOR 0100 XNOR
    0101 0101 NAND
  • Die Darstellung zeigt zwei Positionen des berechneten Ergebnisses (ZIEL[0] und ZIEL[168]). ZIEL[0] wird wie folgt berechnet: ZIEL[0*64 + 0] = QUELLE[0*64+0]⊗MEM[0*64 + 0] ⊕ QUELLE[0*64+1]⊗MEM[1*64 + 0] ⊕ ... ⊕ QUELLE[0*64+63]⊗MEM[63*64 + 0]. ZIEL[168] wird wie folgt berechnet: ZIEL[2*64 + 40] = QUELLE[2*64+0]⊗MEM[0*64 + 40] ⊕ QUELLE[2*64+1]⊗MEM[1*64 +40] ⊕ ... ⊕ QUELLE[2*64+63]⊗MEM[63*64 + 40].
  • 4 stellt eine Ausführungsform eines ausgewählten Teils von Ausführung eines BMM-Befehls dar, der als Quellen eine 64×64-Bit-Matrix mit einer 64×8-Bit-Matrix hat; Das Format dieses BMM-Befehls umfasst Felder für einen Opcode („VBMM8×64×64“ ist in dieser Darstellung die Opcode-Mnemonik), eine erste Quellbitmatrix-Operandenkennung (gezeigt als „QUELLE 1“), eine zweite Quellbitmatrix-Operandenkennung (gezeigt als „QUELLE 2/MEM“), einen Direktoperanden und eine Zielbitmatrix-Operandenkennung (gezeigt als „ZIEL“).
  • Die beiden Quelloperandenfelder stellen einen Ort eines ersten Quellbitmatrixoperanden 401 und eines zweiten Quellbitmatrixoperanden 403 dar. Diese Orte können ein Speicherort (z. B. eine Adresse im Speicher, wie etwa eine Festplatte oder RAM) oder ein oder mehrere Register sein.
  • In dieser Darstellung ist der erste Quellbitmatrixoperand 401 eine 64×64-Bitmatrix. In einigen Ausführungsformen von BMM-Befehlen wird eine 64×64-Bitmatrix im Speicher als eine Sequenz von 64 64-Bit-Zeilen, beginnend mit Zeile 0, gespeichert. Daher wäre der Zugriff auf ein Bit in Zeile I, Spalte J von Matrix M gleich: M[I,J] = M[I*64+J] (dies bezieht sich auf Bit, nicht auf Byte), oder anders, um den Wert von Bit M[I,J], im Speicher gespeichert, zu erhalten, würden einige (M[I*8]>>J)&1 verwenden, dabei Byteadressierung voraussetzend.
  • In dieser Darstellung ist der zweite Quellbitmatrixoperand 403 eine 64×8-Bitmatrix. In einigen Ausführungsformen von BMM-Befehlen wird eine 64×8-Bit-Matrix (8 Zeilen mit 64 Bits) als eine Sequenz von 8 64-Bit-Zeilen gespeichert. Daher wäre der Zugriff auf das Bit in Zeile I, Spalte J von Matrix M gleich: M[I,J] = M[I*64+J] (dies bezieht sich auf Bit, nicht auf Byte), oder anders, um den Wert von Bit M[I,J], im Speicher gespeichert, zu erhalten, würden einige (M[I*8]>>J)&1 verwenden, dabei Byteadressierung voraussetzend. Ein Laden dieses Typs von Matrix in ein 512-Bit-Register umfasst Lesen von einer Startadresse der ersten Zeile.
  • Das Zielbitmatrixoperandenfeld stellt einen Zielbitmatrixoperanden 421 dar, der das Ergebnis der Bitmatrixmultiplikationsoperation speichert. Wie bereits ausgeführt, kann dieser Operand 421 in einem Register (z. B. 512-Bit-Register), einer Sammlung von Registern oder Orten im Speicher gespeichert werden.
  • Wie gezeigt, umfasst Ausführungsschaltungsanordnung 411 mehrere Multiplikationsarrays 413 und mehrere Addiererarrays 415. Der Direktoperand des Befehls wird verwendet, um einen Typ von Multiplikationsarray 413 und einen Typ von Addiererarray 415 auszuwählen. Beispielsweise werden, in einigen Ausführungsformen, Bits 4:7 eines 8-Bit-Direktoperanden durch den Multiplikationsselektor 417 verwendet, um die Multiplikationsschaltungsanordnung aus den mehreren Multiplikationsarrays 413 auszuwählen. Beispielsweise wählt imm8[4:7] aus den Schaltungen XOR, AND, OR, NOR, NAND und XNOR für Multiplikation aus. In einigen Ausführungsformen werden Bits 0:3 eines 8-Bit-Direktoperanden durch den Addiererselektor 419 verwendet, um die Multiplikationsschaltungsanordnung aus den mehreren Addiererarrays 415 auszuwählen. Beispielsweise wählt imm8[0:3] aus den Schaltungen XOR, AND, OR, NOR und XNOR für Addition aus. Jede bestimmte Anordnung kann verwendet werden, um die Auswahl zu signalisieren, allerdings wird nachfolgend eine beispielhafte Tabelle von Auswahlen angegeben: TABELLE 4
    DIREKTOPERAND[0:3] AUSGEWÄHLTE ADDIERERSCHALTUNG(EN) DIREKTOPERAND[4:7] AUSGEWÄHLTE MULTIPLIZIERERSCHALTUNG(EN)
    0000 XOR 0000 XOR
    0001 AND 0001 AND
    0010 OR 0010 OR
    0011 NOR 0011 NOR
    0100 XNOR 0100 XNOR
    0101 0101 NAND
  • Die Darstellung zeigt zwei Positionen des berechneten Ergebnisses (ZIEL[0] und ZIEL[25]). ZIEL[0] wird wie folgt berechnet: ZIEL[0*7 + 0] = MEM[0*64+0]⊗QUELLE[0*8 + 0] ⊕ MEM[0*64+1]⊗QUELLE[1*8 + 0] ⊕ ... ⊕ MEM[0*64+63]⊗QUELLE[63*8 + 0]. ZIEL[25] wird wie folgt berechnet: ZIEL[3*7 + 4] = MEM[3*64+0]⊗QUELLE[0*8 + 4] ⊕ MEM[3*64+1]⊗QUELLE[1*8 + 4] ⊕ ... ⊕ MEM[3*64+63]⊗QUELLE[63*8 + 4].
  • Zusätzlich können, in einigen Ausführungsformen, die Multiplikations- und/oder Additionsoperationen logisch (AND/OR/XOR/XNOR/NAND), oder arithmetisch (Addieren, Subtrahieren, Multiplizieren) mit und ohne Sättigung sein. Dies kann zu einer Vielzahl von Definitionen führen, von denen einige ausgewählt und mit den Direktoperanden als Selektoren umgesetzt werden können. Daher sind einige Operationen möglicherweise nicht einfach AND/NAND/usw., sondern sind tabellenbasiert. Beispielsweise können 2 Bits als 0,1,2,3 oder als -0,1,-2,-1, oder als 0,1,ungültig,-1 interpretiert werden. -1+ -1 kann -1 sein, wenn Sättigung aktiv ist, und -2, wenn nicht. 1+1 kann 1 sein, wenn es sich um nicht vorzeichenbehaftete 2-Bits handelt (-1,0,1, keine 2). Diese Tabellen können vorab definiert sein, und der Direktoperand wählt eine von solchen Tabellen aus. AND/NAND sind nur spezifische Fälle und können auch als Tabellen umgesetzt sein. Die folgenden Tabellen 5 und 6 bieten Beispiele von Tabellen für Direktoperanden. TABELLE 5
    Wert vorzeichen behaftet nicht vorzeichenbehaftet
    ungesättigt gesättigt ungesättigt gesättigt
    symmetrisch unsymmetrisch
    2-Bit 00 0 0 0 0 0
    01 1 1 1 1 1
    10 -2 N.A. (-1) -2 2 2
    11 -1 -1 -1 3 3
    4-Bit 0000 0 0 0 0 0
    0001 1 1 1 1 1
    0010 2 2 2 2 2
    0011 3 3 3 3 3
    0100 4 4 4 4 4
    0101 5 5 5 5 5
    0110 6 6 6 6 6
    0111 7 7 7 7 7
    1000 -8 N.A. (-7) -8 8 8
    1001 -7 -7 -7 9 9
    1010 -6 -6 -6 10 10
    1011 -5 -5 -5 11 11
    1100 -4 -4 -4 12 12
    1101 -3 -3 -3 13 13
    1110 -2 -2 -2 14 14
    1111 -1 -1 -1 15 15
    TABELLE 6
    vorzeichen behaftet nicht vorzeichenbehaftet
    ungesättigt gesättigt ungesättigt gesättigt
    symmetrisch unsymmetrisch
    0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
    0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
    ADD 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
    0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
    0 0 1 1 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 1 1
    1 1 0 1 0 1 1 0 0 1 1 1 0 1 0 1 0 1 0 1 1
    1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1
    0 0 1 0 1 1 0 1 1 0 1 0 0 0 1 0 1 0 1 1 1
    1 1 0 0 1 1 0 1 1 1 0 1 1 1 0 0 1 1 1 1 1
    1 1 0 1 0 1 0 1 1 1 0 0 0 1 0 1 0 1 1 1 1
    MUL 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
    1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 1 1
    1 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 1 1 1
    0 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 0 0 0 1 1
    1 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 1
    1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 0 1 0 1 1 1
  • 5 stellt eine Ausführungsform von Hardware zum Verarbeiten eines Befehls, wie etwa eines BMM-Befehls, dar. Wie dargestellt, speichert der Speicher 503 einen BMM-Befehl 501, der ausgeführt werden soll.
  • Der Befehl 501 wird von der Decodierschaltungsanordnung 505 empfangen. Zum Beispiel empfängt die Decodierschaltungsanordnung 505 diesen Befehl von der Abruflogik/- schaltungsanordnung. Der Befehl umfasst Felder für einen Opcode, eine erste und eine zweite Bitmatrixquelle, ein Ziel und einen Direktoperanden. In einigen Ausführungsformen sind die Quellen und das Ziel Register, und in anderen Ausführungsformen sind sie ein oder mehrere Speicherorte.
  • Detailliertere Ausführungsformen von zumindest einem Befehlsformat werden später detailliert beschrieben. Die Decodierschaltungsanordnung 505 decodiert den Befehl in eine oder mehrere Operationen. In einigen Ausführungsformen umfasst dieses Decodieren das Generieren von mehreren Mikrooperationen, die von Ausführungsschaltungsanordnungen (wie der Ausführungsschaltungsanordnung 509) durchgeführt werden sollen. Die Decodierschaltungsanordnung 505 decodiert auch Befehlspräfixe.
  • In einigen Ausführungsformen stellt die Registerumbenennungs-, Registerzuweisungs- und/oder Planungsschaltung 507 eine Funktionalität für eines oder mehrere von Folgendem bereit: 1) Umbenennen von logischen Operandenwerten in physische Operandenwerte (z. B. eine Registeraliastabelle in einigen Ausführungsformen), 2) Zuweisen von Statusbits und Kennzeichen zu dem decodierten Befehl und 3) Planen des decodierten Befehls zur Ausführung an der Ausführungsschaltungsanordnung aus einem Befehlspool (z. B. unter Verwendung einer Reservierungsstation in einigen Ausführungsformen).
  • Register (Registerdatei) und/oder Speicher 508 speichern Daten als Operanden des Befehls zum Betrieb an einer Ausführungsschaltungsanordnung 509. Beispielhafte Registertypen umfassen gepackte Datenregister, universelle Register und Gleitkommaregister.
  • Die Ausführungsschaltungsanordnung 509 führt den decodierten Befehl aus. Die Ausführung des decodierten Befehls veranlasst die Ausführungsschaltungsanordnung, eine Bitmatrixmultiplikation der Quellbitmatrizen durchzuführen, wobei die bestimmte Schaltungsanordnung, die im Multiplizier- und Addieraspekt verwendet werden, über den Befehl ausgewählt werden.
  • Bei einigen Ausführungsformen gibt die Rückzugs-/Zurückschreibschaltungsanordnung 511 die Architektur des Zielregisters in die Register oder den Speicher 508 frei und zieht den Befehl zurück.
  • Eine Ausführungsform eines Formats für einen BMM-Befehl ist BMMOPCODE ZIEL, QUELLE1, QUELLE2, IMM. BMMOPCODE ist der Opcode des Befehls. Beispielhafte Opcode-Mnemoniken sind weiter oben aufgeführt. ZIEL ist ein Feld mit der Angabe eines Zielbitmatrixoperanden. QUELLE1 und QUELLE2 sind ein oder mehr Felder für Quelloperandenkennungen, wie etwa ein Register, Registerblock und/oder einen Speicherort. IMM ist ein Feld für einen Direktoperanden (Immediate). In einigen Ausführungsformen werden die Operandenfelder unter Verwendung von VVVV-Feld 920, MOD R/M 940 und/oder SIB 950 codiert.
  • In einigen Ausführungsformen gelten BMM-Befehle für Operanden mit mehreren Bits (z. B. 2, 4 und 8 Bit). In diesen Ausführungsformen definiert der Opcode die zu verwendende Bitgröße,Zeilen- und Spaltengröße der Quellen und Zeilen- und Spaltengröße des Ziels. Letztere Größe ist in den vorherigen Beispielen zu sehen. Beispielsweise stellt die Opcode-Mnemonik V[S]BMM[R1][C1=R2][C2] einen Ansatz zum Definieren dieser Elemente dar. In diesem Beispiel zeigt [S] die Bitgröße an; R1, C1 definieren die Zeilen- und Spaltengrößen der ersten Quellbitmatrix; C1, C2 definieren die Zeilen- und Spaltengrößen der zweiten Quellbitmatrix; und R1, C2 definieren die Zeilen- und Spaltengrößen der Zielbitmatrix.
  • Beispiele dieser Befehle und ihrer Funktionalität werden nachfolgend detailliert beschrieben. In jedem dieser Beispiele wird der Direktoperand (imm8) verwendet, wie oben detailliert beschrieben:
    • - V2BMM8×8×32 ZIEL, QUELLE1, QUELLE2/m512, imm8 - Multiplizieren einer 8×8-2-Bit-Matrix (QUELLE1) mit einer 8×32-2-Bit-Matrix (QUELLE2) und Speichern des Ergebnisses in einer 8×32-2-Bit-Zielmatrix (ZIEL).
    • - V2BMM32×8×8 ZIEL, QUELLE1, QUELLE2/m512, imm8 - Multiplizieren einer 32×8-2-Bit-Matrix (QUELLE1) mit einer 8×8-2-Bit-Matrix (QUELLE2) und Speichern des Ergebnisses in einer 32×8-2-Bit-Zielmatrix (ZIEL).
    • - V2BMM8x8x32 ZIEL, QUELLE1, QUELLE2/m512, imm8 - Multiplizieren einer 8×8-2-Bit-Matrix (QUELLE1) mit einer 8×32-2-Bit-Matrix (QUELLE2) und Speichern des Ergebnisses in einer 8×32-2-Bit-Zielmatrix (ZIEL).
    • - V2BMM32x8×8 ZIEL, QUELLE1, QUELLE2/m512, imm8 - Multiplizieren einer 32x8-2-Bit-Matrix (QUELLE1) mit einer 8x8-2-Bit-Matrix (QUELLE2) und Speichern des Ergebnisses in einer a32×8-2-Bit-Zielmatrix (ZIEL).
    • - V2BMM8x32x32 ZIEL, QUELLE1, MEM, imm8 - Multiplizieren einer 8×32-2-Bit-Matrix (QUELLE1) mit einer 32x32-2-Bit-Matrix im Speicher (MEM) und Speichern des Ergebnisses in einer 8×32-2-Bit-Zielmatrix (ZIEL).
    • - V2BMM32x32x8 ZIEL, MEM, QUELLE2, imm8 - Multiplizieren einer 32x32-2-Bit-Matrix im Speicher (MEM) mit einer 32x8-2-Bit-Matrix (QUELLE2) und Speichern des Ergebnisses in einer 32×8-2-Bit-Zielmatrix (ZIEL).
    • - V4BMM8×8×16 ZIEL, QUELLE1, QUELLE2/m512, imm8 - Multiplizieren einer 8x8-4-Bit-Matrix (QUELLE1) mit einer 8×16-4-Bit-Matrix (QUELLE2) und Speichern des Ergebnisses in einer 8×16-4-Bit-Zielmatrix (ZIEL).
    • - V4BMM16x8x8 ZIEL, QUELLE1, QUELLE2/m512, imm8 - Multiplizieren einer 16x8-4-Bit-Matrix (QUELLE1) mit einer 8x8-4-Bit-Matrix (QUELLE2) und Speichern des Ergebnisses in einer 16×8-4-Bit-Zielmatrix (ZIEL).
    • - V4BMM8×16×16 ZIEL, QUELLE1, MEM, imm8 - Multiplizieren einer 8×16-4-Bit-Matrix (QUELLE1) mit einer 16×16-4-Bit-Matrix im Speicher (MEM) und Speichern des Ergebnisses in einer 8×16-4-Bit-Zielmatrix (ZIEL).
    • - V4BMM16×16×8 ZIEL, MEM, QUELLE2, imm8 - Multiplizieren einer 16×16-4-Bit-Matrix im Speicher (MEM) mit einer 16x8-4-Bit-Matrix (QUELLE2) und Speichern des Ergebnisses in einer 16×8-4-Bit-Zielmatrix (ZIEL).
  • In Ausführungsformen umfassen Codierungen des Befehls einen Speicheradressierungsoperanden vom SIB-Typ (Skalierung-Index-Basis), der indirekt mehrere indexierte Zielorte im Speicher identifiziert (z. B. Feld QAA50). In einer Ausführungsform kann ein Speicheroperand vom SIB-Typ eine Codierung umfassen, die ein Basisadressregister identifiziert. Der Inhalt des Basisadressregisters kann eine Basisadresse im Speicher darstellen, aus der die Adressen der bestimmten Zielorte im Speicher berechnet werden. Beispielsweise kann die Basisadresse die Adresse der ersten Position in einem Block potenzieller Zielpositionen für einen erweiterten Vektorbefehl sein. In einer Ausführungsform kann ein Speicheroperand vom SIB-Typ eine Codierung umfassen, die ein Indexregister identifiziert. Jedes Element des Indexregisters kann einen Index oder Versatzwert angeben, der verwendbar ist, um aus der Basisadresse eine Adresse eines jeweiligen Zielortes innerhalb eines Blocks potenzieller Zielorte zu berechnen. In einer Ausführungsform kann ein Speicheroperand vom SIB-Typ eine Codierung umfassen, die einen Skalierungsfaktor angibt, der beim Berechnen einer jeweiligen Zieladresse auf jeden Indexwert anzuwenden ist. Wenn beispielsweise ein Skalierungsfaktorwert von vier in dem Speicheroperanden vom SIB-Typ codiert ist, kann jeder von einem Element des Indexregisters erhaltene Indexwert mit vier multipliziert werden und dann zu der Basisadresse addiert werden, um eine Zieladresse zu berechnen.
  • In einer Ausführungsform kann ein Speicheroperand vom SIB-Typ der Form vm32{x,y,z} ein Vektorarray von Speicheroperanden identifizieren, das unter Verwendung der SIB-Speicheradressierung spezifiziert ist. In diesem Beispiel wird das Array von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters spezifiziert, das einzelne Elemente enthält, von denen jedes ein 32-Bit-Indexwert ist. Das Vektorindexregister kann ein 128-Bit-Register (vm32x) (z. B. XMM), ein 256-Bit-Register (vm32y) (z. B. YMM) oder ein 512-Bit-Register (vm32z) (z. B. ZMM) sein. In einer anderen Ausführungsform kann ein Speicheroperand vom SIB-Typ der Form vm64{x,y,z} ein Vektorarray von Speicheroperanden identifizieren, das unter Verwendung der SIB-Speicheradressierung spezifiziert ist. In diesem Beispiel wird das Array von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters spezifiziert, das einzelne Elemente enthält, von denen jedes ein 64-Bit-Indexwert ist. Das Vektorindexregister kann ein 128-Bit-Register (vm64x) (z. B. XMM), ein 256-Bit-Register (vm64y) (z. B. YMM) oder ein 512-Bit-Register (vm64z) (z. B. ZMM) sein.
  • Beispielhafte Ausführung der BMM-Befehle
  • 6 stellt eine Ausführungsform eines durch einen Prozess durchgeführten Verfahrens zum Verarbeiten eines BMM-Befehls dar.
  • Bei 601 wird ein Befehl abgerufen. Beispielsweise wird ein BMM-Befehl abgerufen. Der BMM-Befehl umfasst Felder für einen Opcode, eine erste und eine zweite Quellbitmatrix-Operandenkennung, eine Zielbitmatrix-Operandenkennung und einen Direktoperanden. In einigen Ausführungsformen wird der Befehl aus einem Befehls-Cache abgerufen. Der Opcode des BMM-Befehls zeigt die Größe der Matrizen an. In einigen Ausführungsformen zeigt der Opcode auch die Bitgrößen im Rahmen der Bitmatrixmultiplikation an.
  • Der abgerufene Befehl wird bei 603 decodiert. Zum Beispiel wird der abgerufene BMM-Befehl durch eine Decodierschaltung, wie hierin ausführlich beschrieben, decodiert.
  • Mit den identifizierten Quelloperanden der Decodieranweisung verbundene Datenwerte werden bei 605 abgerufen, und der decodierte Befehl wird geplant (nach Bedarf). Wenn ein identifizierter Quelloperand beispielsweise ein Speicheroperand ist, werden die Daten vom angegebenen Speicherort abgerufen.
  • Bei 607 wird der decodierte Befehl von einer Ausführungsschaltungsanordnung (Hardware) ausgeführt, wie hierin detailliert beschrieben. Beim BMM-Befehl führt die Ausführung dazu, dass die Ausführungsschaltungsanordnung eine Matrixmultiplikation des identifizierten ersten Quellbitmatrixoperanden mit dem identifizierten zweiten Quellbitmatrixoperanden durchführt und ein Ergebnis der Matrixmultiplikation im identifizierten Zielbitmatrixoperanden speichert, wobei der Direktoperand des decodierten Befehls die Multiplikations- und Additionsschaltungsanordnungen angibt, die bei der Matrixmultiplikation zu verwenden sind.
  • In einigen Ausführungsformen wird der Befehl bei 609 übergeben oder zurückgezogen.
  • 7 stellt eine ausführlichere Beschreibung einer Ausführung eines BMM-Befehls dar. Dies wird in der Regel durch Ausführungsschaltungsanordnungen wie die hier detailliert beschriebene durchgeführt. In einigen Ausführungsformen wird die Ausführung entsprechend einer in Hardware ausgeführten Zustandsmaschine durchgeführt.
  • Bei 701 wird ein Typ von Multiplikationsschaltungsanordnungsarray basierend auf dem Direktoperanden ausgewählt. Beispielsweise wird die Multiplikationsschaltungsanordnung aus Schaltungen wie etwa XOR-, AND-, OR-, NOR-, NAND- und XNOR-Schaltungen ausgewählt.
  • Bei 703 wird ein Typ von Additionsschaltungsanordnungsarray basierend auf dem Direktoperanden ausgewählt. Beispielsweise wird die Multiplikationsschaltungsanordnung aus Schaltungen wie etwa XOR-, AND-, OR-, NOR- und XNOR-Schaltungen ausgewählt.
  • Bei 705 werden für jede S-Bit-Position des identifizierten Zieloperanden mehrere Operationen durchgeführt. Der „S“-Wert wird aus dem Opcode bestimmt und ist ein Wert von 1, 2, 4 oder 8.
  • Bei 707 wird ein Wert aus einer Bitposition einer entsprechenden Zeile in der identifizierten ersten Quellbitmatrix mit einem Wert einer entsprechenden S-Bit-Position einer entsprechenden Spalte in der identifizierten zweiten Quellbitmatrix multipliziert. Diese Multiplikationen werden unter Verwendung der ausgewählten Multiplikationsschaltungsanordnungen durchgeführt.
  • Bei 709 wird jede der Multiplikationen akkumuliert (zusammenaddiert). Diese Additionen werden unter Verwendung der ausgewählten Multiplikationsschaltungsanordnungen durchgeführt.
  • Bei 711 wird ein Ergebnis der Akkumulation gespeichert.
  • Im Folgenden sind beispielhafte Befehlsformate, Architekturen und Systeme im Detail aufgeführt, die für die obigen detaillierten Befehle verwendet werden können. Zum Beispiel ist eine beispielhafte Pipeline detailliert, die die Befehle unterstützt, die eine Schaltungsanordnung aufweist, um die hierin ausführlich beschriebenen Verfahren durchzuführen.
  • Befehlssätze
  • Ein Befehlssatz kann ein oder mehrere Befehlsformate umfassen. Ein gegebenes Befehlsformat kann verschiedene Felder (Anzahl von Bits, Ort von Bits) zum Angeben, unter anderen Dingen, der Operation, die durchgeführt werden soll (Opcode) und des bzw. der Operanden, auf denen die Operation durchgeführt werden soll, und/oder andere(s) Datenfeld(er) (z. B. Maske) definieren. Einige Befehlsformate werden durch die Definition von Befehlsvorlagen (oder Unterformaten) weiter aufgeteilt. Zum Beispiel können die Befehlsvorlagen eines gegebenen Befehlsformats so definiert sein, dass sie unterschiedliche Teilsätze der Felder des Befehlsformats aufweisen (die enthaltenen Felder sind typischerweise in der gleichen Reihenfolge, aber wenigstens manche weisen unterschiedliche Bitpositionen auf, weil dort weniger Felder enthalten sind), und/oder so definiert sein, dass sie ein gegebenes Feld aufweisen, welches unterschiedlich interpretiert wird. Daher wird jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats (und, wenn definiert, in einer gegebenen der Befehlsvorlagen dieses Befehlsformats) ausgedrückt und umfasst Felder zum Angeben der Operation und der Operanden. Beispielsweise hat ein beispielhafter ADD-Befehl einen spezifischen Opcode und ein Befehlsformat, das ein Opcode-Feld zum Angeben dieses Opcodes und Operandenfelder zum Auswählen von Operanden (Quellel/Ziel und Quelle2) umfasst; und ein Auftreten dieses ADD-Befehls in einem Befehlsstrom hat spezifische Inhalte in den Operandenfeldern, die spezifische Operanden auswählen. Ein Satz von SIMD-Erweiterungen, die als AVX (Advanced Vector Extensions - weiterentwickelte Vektorerweiterungen) (AVX1 und AVX2) bezeichnet werden, und das Verwenden des VEX-Codierungsschemas (VEX: VEctor Extensions - Vektorerweiterungen) wurden herausgegeben und/oder veröffentlicht (siehe z. B. Intel® 64 und IA-32 Architectures Software Developer's Manual, September 2014; und siehe Intel® Advanced Vector Extensions Programming Reference, Oktober 2014).
  • Beispielhafte Befehlsformate
  • Ausführungsformen des bzw. der hier beschriebenen Befehle können in unterschiedlichen Formaten ausgeführt sein. Zusätzlich werden beispielhafte Systeme, Architekturen und Pipelines nachfolgend ausführlich beschrieben. Ausführungsformen des bzw. der Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf diese aufgeführten beschränkt.
  • Generisches vektorfreundliches Befehlsformat
  • Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (z. B. gibt es gewisse Felder, die für Vektoroperationen spezifisch sind). Während Ausführungsformen beschrieben sind, in denen sowohl Vektor- als auch skalare Operationen durch das vektorfreundliche Format unterstützt sind, verwenden alternative Ausführungsformen nur Vektoroperationen im vektorfreundlichen Befehlsformat.
  • 8A-8B sind Blockdiagramme, ein generisches vektorfreundliches Befehlsformat und Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Erfindung; 8A ist ein Blockdiagramm, ein generisches vektorfreundliches Befehlsformat und Klasse-A-Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Erfindung; während 8B ein Blockdiagramm ist, das generische vektorfreundliche Befehlsformat und Klasse-B-Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Erfindung. Insbesondere ein generisches vektorfreundliches Befehlsformat 800, für das Klasse-A- und Klasse-B-Befehlsvorlagen definiert sind, die beide Befehlsvorlagen ohne Speicherzugriff 805 und Befehlsvorlagen mit Speicherzugriff 820 umfassen. Der Begriff „generisch“ im Kontext des vektorfreundlichen Befehlsformats bezieht sich darauf, dass das Befehlsformat nicht an einen spezifischen Befehlssatz gebunden ist.
  • Während Ausführungsformen der Erfindung beschrieben werden, in denen das vektorfreundliche Befehlsformat Folgendes unterstützt: eine 64-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 32 Bit (4 Byte) oder 64 Bit (8 Byte) (und daher besteht ein 64-Byte-Vektor entweder aus 16 Elementen in Doppelwortgröße oder alternativ aus 8 Elementen in Quadrupelwortgröße); eine 64-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 16 Bit (2 Byte) oder 8 Bit (1 Byte); eine 32-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); und eine 16-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); können alternative Ausführungsformen mehr, weniger und/oder verschiedene Vektoroperandengrößen (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder verschiedenen Datenelementbreiten (z. B. Datenelementbreiten von 128 Bit (16 Byte)) unterstützen.
  • Die Klasse-A-Befehlsvorlagen in 8A umfassen: 1) innerhalb der Befehlsvorlagen ohne Speicherzugriff 805 ist eine Befehlsvorlage für eine Operation vom vollen Rundungssteuerungstyp ohne Speicherzugriff 810 und eine Befehlsvorlage für eine Operation vom Datentransformationstyp ohne Speicherzugriff 815 gezeigt; und 2) innerhalb der Befehlsvorlagen mit Speicherzugriff 820 ist eine temporale Befehlsvorlage mit Speicherzugriff 825 und eine nicht-temporale Befehlsvorlage mit Speicherzugriff 830 gezeigt. Die Klasse-B-Befehlsvorlagen in 8B umfassen: 1) innerhalb der Befehlsvorlagen ohne Speicherzugriff 805 ist eine Befehlsvorlage für eine Operation vom teilweisen Rundungssteuerungstyp mit Schreibmaskensteuerung ohne Speicherzugriff 812 und eine Befehlsvorlage für eine Operation vom vsize-Typ mit Schreibmaskensteuerung ohne Speicherzugriff 817 gezeigt; und 2) innerhalb der Befehlsvorlagen mit Speicherzugriff 820 ist eine Befehlsvorlage mit Schreibmaskensteuerung mit Speicherzugriff 827 gezeigt.
  • Das generische vektorfreundliche Befehlsformat 800 umfasst die folgenden Felder, nachfolgend in der in 8A-8B dargestellten Reihenfolge aufgeführt.
  • Formatfeld 840 - ein spezifischer Wert (eine Befehlsformat-Identifiziererwert) in diesem Feld identifiziert eindeutig das vektorfreundliche Befehlsformat und daher Auftreten von Befehlen im vektorfreundlichen Befehlsformat in Befehlsströmen. Daher ist dieses Feld optional in dem Sinne, dass es nicht für einen Befehlssatz benötigt wird, der nur das generische vektorfreundliche Befehlsformat hat.
  • Basisoperationsfeld 842 - sein Inhalt unterscheidet die unterschiedlichen Basisoperationen.
  • Registerindexfeld 844 - sein Inhalt gibt, direkt oder über Adresserzeugung, die Orte der Quell- und Zieloperanden an, seien sie in Registern oder im Speicher. Dies umfasst eine ausreichende Anzahl von Bits zum Auswählen von N Registern aus einer PxQ-Registerdatei (z. B. 32×512, 16×128, 32×1024, 64×1024). Während in einer Ausführungsform N bis zu drei Quellen und ein Zielregister sein kann, können alternative Ausführungsformen mehr oder weniger Quellen und Zielregister unterstützen (z. B. können bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel wirkt; können bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel wirkt; können bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifiziererfeld 846 - sein Inhalt unterscheidet Auftreten von Befehlen im generischen Vektorbefehlsformat, die Speicherzugriff angeben, von denen, die dies nicht tun; das heißt, zwischen Befehlsvorlagen ohne Speicherzugriff 805 und Befehlsvorlagen mit Speicherzugriff 820. Speicherzugriffsoperationen lesen und/oder schreiben in die Speicherhierarchie (in einigen Fällen die Quell- und Zieladressen unter Verwendung von Werten in Registern angebend), während Nicht-Speicherzugriffsoperationen dies nicht tun (z. B. die Quelle und Ziele sind Register). Während in einer Ausführungsform dieses Feld auch zwischen drei unterschiedlichen Wegen zum Durchführen von Speicheradressberechnungen auswählt, können alternative Ausführungsformen mehr, weniger oder verschiedene zum Durchführen von Speicheradressberechnungen unterstützen.
  • Zusatzoperationsfeld 850 - sein Inhalt unterscheidet, welche von mehreren unterschiedlichen Operationen zusätzlich zu der Basisoperation durchzuführen sind. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Erfindung wird dieses Feld in ein Klassenfeld 868, ein Alpha-Feld 852 und ein Beta-Feld 854 unterteilt. Das Zusatzoperationsfeld 850 ermöglicht gängigen Gruppen von Operationen, in einem einzelnen Befehl durchgeführt zu werden, anstatt in 2, 3 oder 4 Befehlen.
  • Skalierungsfeld 860 - sein Inhalt ermöglicht das Skalieren des Inhalts des Indexfelds zur Speicheradresserzeugung (z. B. für Adresserzeugung, die 2Skalierung * Index + Basis verwendet).
  • Verschiebungsfeld 862A- sein Inhalt wird als Teil einer Speicheradresserzeugung verwendet (z. B. für Adresserzeugung, die 2Skalierung * Index + Basis + Verschiebung verwendet).
  • Verschiebungsfaktorfeld 862B (es ist anzumerken, dass die Stellung von Verschiebungsfeld 862A direkt über Verschiebungsfaktorfeld 862B anzeigt, dass das eine oder das andere verwendet wird) - sein Inhalt wird als Teil der Adresserzeugung verwendet; gibt einen Verschiebungsfaktor an, der um die Größe eines Speicherzugriffs (N) zu skalieren ist - wobei N die Anzahl von Bytes im Speicherzugriff ist (z. B. für Adresserzeugung, die 2Skalierung * Index + Basis + skalierte Verschiebung verwendet). Redundante Bits niedriger Ordnung werden ignoriert, und daher wird der Inhalt des Verschiebungsfaktorfelds mit der Speicheroperandengesamtgröße (N) multipliziert, um die abschließende Verschiebung zu erzeugen, die beim Berechnen einer effektiven Adresse zu verwenden ist. Der Wert von N wird durch die Prozessorhardware bei Laufzeit basierend auf dem vollen Opcode-Feld 874 (hier später beschrieben) und dem Datenmanipulationsfeld 854C bestimmt. Das Verschiebungsfeld 862A und das Verschiebungsfaktorfeld 862B sind optional in dem Sinn, dass sie nicht für die Befehlsvorlagen ohne Speicherzugriff 805 verwendet werden, und/oder unterschiedliche Ausführungsformen können nur eins oder keins der zwei umsetzen.
  • Datenelementbreitenfeld 864 - sein Inhalt unterscheidet, welche einer Anzahl von Datenelementbreiten zu verwenden ist (in einigen Ausführungsformen für alle Befehle; in anderen Ausführungsformen nur für einige der Befehle). Dieses Feld ist optional in dem Sinn, dass es nicht benötigt wird, wenn nur eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unter Verwendung einiger Aspekte der Opcodes unterstützt werden.
  • Schreibmaskenfeld 870 - sein Inhalt steuert, basierend auf der Datenelementposition, ob diese Datenelementposition im Zielvektoroperanden das Ergebnis der Basisoperation und Zusatzoperation widerspiegelt. Klasse-A-Befehlsvorlagen unterstützen Zusammenführungs-Schreibmaskierung, während Klasse-B-Befehlsvorlagen sowohl Zusammenführungs- als auch Nullungs-Schreibmaskierung unterstützen. Beim Zusammenführen erlauben Vektormasken jedem Satz von Elementen im Ziel, vor Aktualisierungen während der Ausführung einer beliebigen Operation (angegeben durch die Basisoperation und die Zusatzoperation) geschützt zu werden; in einer anderen Ausführungsform, Beibehalten des alten Werts jedes Elements des Ziels, wo das zugehörige Maskenbit eine 0 hat. Im Gegensatz dazu erlauben beim Nullen Vektormasken einem beliebigen Satz von Elementen im Ziel, während der Ausführung eines beliebigen Befehls (angegeben durch die Basisoperation und die Zusatzoperation) genullt zu werden; in einer Ausführungsform wird ein Element des Ziels auf 0 gesetzt, wenn das zugehörige Maskenbit einen 0-Wert hat. Eine Teilmenge dieser Funktionalität ist die Fähigkeit, die Vektorlänge der durchzuführenden Operation zu steuern (das heißt die Spanne von Elementen, die modifiziert werden, vom ersten bis zum letzten); allerdings ist es nicht notwendig, dass die Elemente, die modifiziert werden, aufeinander folgen. Daher erlaubt das Schreibmaskenfeld 870 teilweise Vektoroperationen, einschließlich Ladeoperation, Speicherungen, arithmetisch, logisch usw. Während Ausführungsformen der Erfindung beschrieben werden, in denen der Inhalt des Schreibmaskenfelds 870 eines aus einer Anzahl von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält (und daher identifiziert der Inhalt des Schreibmaskenfelds 870 indirekt die durchzuführende Maskierung), erlauben alternative Ausführungsformen stattdessen oder zusätzlich dem Inhalt des Schreibmaskenfelds 870, die durchzuführende Maskierung direkt anzugeben.
  • Direktoperandenfeld 872 - sein Inhalt ermöglicht die Spezifikation eines Direktoperanden. Dieses Feld ist optional in dem Sinn, dass es in einer Umsetzung des generischen vektorfreundlichen Formats, das keine Direktausführung unterstützt, nicht vorhanden ist, und dass es nicht in Befehlen vorhanden ist, die keine Direktausführung verwenden.
  • Klassenfeld 868-sein Inhalt unterscheidet zwischen unterschiedlichen Klassen von Befehlen. Bezug nehmend auf 8A-B wählen die Inhalte dieses Felds zwischen Klasse-A- und Klasse-B-Befehlen aus. In 8A-B werden Quadrate mit abgerundeten Ecken verwendet, um anzuzeigen, dass ein spezifischer Wert in einem Feld vorhanden ist (z. B. Klasse A 868A bzw. Klasse B 868B für das Klassenfeld 868 in 8A-B).
  • Befehlsvorlagen von Klasse A
  • Im Falle der Befehlsvorlagen der Klasse A ohne Speicherzugriff 805 wird das Alpha-Feld 852 als ein RS-Feld 852A interpretiert, dessen Inhalt unterscheidet, welche der unterschiedlichen Zusatzoperationstypen durchzuführen sind (z. B. Runden 852A.1 und Datentransformation 852A.2 sind jeweils für die Befehlsvorlagen für Operation vom Rundungstyp ohne Speicherzugriff 810 bzw. die Operation vom Datentransformationstyp 815 ohne Speicherzugriff angegeben), während das Beta-Feld 854 unterscheidet, welche der Operationen des angegebenen Typs durchzuführen sind. In den Befehlsvorlagen ohne Speicherzugriff 805 sind das Skalierungsfeld 860, das Verschiebungsfeld 862A und das Verschiebungsskalierungsfeld 862B nicht vorhanden.
  • Befehlsvorlagen ohne Speicherzugriff - Operation vom vollen Rundungssteuerungstyp
  • In der Befehlsvorlage für die Operation vom vollen Rundungssteuerungstyp ohne Speicherzugriff 810 wird das Beta-Feld 854 als Rundungsteuerungsfeld 854A interpretiert, dessen Inhalte(e) statisches Runden bieten. Während in den beschriebenen Ausführungsformen der Erfindung das Rundungssteuerungsfeld 854A ein Feld zum Unterdrücken aller Gleitkommaausnahmen (SAE) 856 und ein Rundungsoperationssteuerungsfeld 858 umfasst, können alternative Ausführungsformen diese beiden Konzepte unterstützen und in das gleiche Feld codieren oder nur ein oder das andere dieser Konzepte/Felder haben (z. B. kann nur das Rundungsoperationssteuerfeld 858 haben).
  • SAE-Feld 856 - sein Inhalt unterscheidet, ob oder ob nicht Melden von Ausnahmeereignissen deaktiviert werden soll; wenn der Inhalt des SAE-Felds 856 anzeigt, dass Unterdrückung aktiviert ist, meldet ein gegebener Befehl keinen Typ von Gleitkommaausnahmen-Kennzeichen und zeigt keinen Gleitkommaausnahmen-Handler an.
  • Rundungsoperationssteuerfeld 858 - sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen durchzuführen ist (z. B. Aufrunden, Abrunden, Runden Richtung null und Runden zur nächstgelegenen Rundungszahl). Daher erlaubt das Rundungsoperationssteuerfeld 858 das Ändern des Rundungsmodus auf einer Befehlsbasis. In einer Ausführungsform der Erfindung, wo ein Prozessor ein Steuerregister zum Angeben der Rundungsmodi umfasst, überschreibt der Inhalt des Rundungsoperationssteuerfelds 850 diesen Registerwert.
  • Befehlsvorlagen ohne Speicherzugriff - Operation vom Datentransformationstyp
  • In der Befehlsvorlage der Operation vom Datentransformationstyp ohne Speicherzugriff 815 wird das Beta-Feld 854 als ein Datentransformationsfeld 854B interpretiert, dessen Inhalt unterscheidet, welche aus einer Anzahl von Datentransformationen durchzuführen ist (z. B. keine Datentransformation, Mischen, Senden).
  • Im Falle einer Befehlsvorlage der Klasse A mit Speicherzugriff 820 wird das Alpha-Feld 852 als ein Räumungshinweisfeld 852B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise zu verwenden ist (in 8A sind temporal 852B.1 und nicht-temporal 852B.2 angegeben für die temporale Befehlsvorlage mit Speicherzugriff 825 bzw. die nicht-temporale Befehlsvorlage mit Speicherzugriff 830), während das Beta-Feld 854 als ein Datenmanipulationsfeld 854C interpretiert wird, dessen Inhalt unterscheidet, welche aus einer Anzahl von Datenmanipulationsoperationen (auch als Primitiven bekannt) durchzuführen sind (z. B. keine Manipulation; Senden; Aufwärtsumwandlung einer Quelle; und Abwärtsumwandlung eines Ziels). Die Befehlsvorlagen mit Speicherzugriff 820 umfassen das Skalierungsfeld 860 und optional das Verschiebungsfeld 862A oder das Verschiebungsskalierungsfeld 862B.
  • Vektorspeicherbefehle führen Vektorladeoperationen vom und Vektorspeicheroperationen im Speicher mit Umwandlungsunterstützung durch. Wie bei regulären Vektorbefehlen, transferieren Vektorspeicherbefehle Daten datenelementweise vom/in den Speicher, wobei die Elemente, die tatsächlich transferiert werden, durch die Inhalte der Vektormaske, die als Schreibmaske ausgewählt ist, bestimmt wird.
  • Befehlsvorlagen mit Speicherzugriff - Temporal
  • Temporale Daten sind Daten, die wahrscheinlich bald genug wiederverwendet werden, um von Caching profitieren zu können. Dies ist allerdings ein Hinweis, und unterschiedliche Prozessoren können dies in unterschiedlichen Weisen umsetzen, einschließlich vollständiges Ignorieren des Hinweises.
  • Befehlsvorlagen mit Speicherzugriff - Nicht-temporal
  • Nicht-temporale Daten sind Daten, die wahrscheinlich nicht bald genug wiederverwendet werden, um von Caching im Level-1-Cache profitieren zu können und denen Priorität für Räumung gegeben werden sollte. Dies ist allerdings ein Hinweis, und unterschiedliche Prozessoren können dies in unterschiedlichen Weisen umsetzen, einschließlich vollständiges Ignorieren des Hinweises.
  • Befehlsvorlagen von Klasse B
  • Im Falle der Befehlsvorlagen von Klasse B wird das Alpha-Feld 852 als eine Schreibmaskensteuerfeld (Z) 852C interpretiert, dessen Inhalt unterscheidet, ob die durch das Schreibmaskenfeld 870 gesteuerte Schreibmaskierung zusammenführend oder nullend sein soll.
  • Im Falle der Befehlsvorlagen der Klasse B ohne Speicherzugriff 805 wird ein Teil des Beta-Felds 854 als ein RL-Feld 857A interpretiert, dessen Inhalt unterscheidet, welche der unterschiedlichen Zusatzoperationstypen durchzuführen sind (z. B. Runden 857A.1 und Vektorlänge (VSIZE) 857A.2 sind jeweils für die Befehlsvorlage für Schreibmaskensteuerungsoperation vom teilweisen Rundungssteuerungstyp ohne Speicherzugriff 812 bzw. die Befehlsvorlage für Schreibmaskensteuerungsoperation vom VSIZE-Typ ohne Speicherzugriff 817 angegeben), während der Rest des Beta-Felds 854 unterscheidet, welche der Operationen des angegebenen Typs durchzuführen sind. In den Befehlsvorlagen ohne Speicherzugriff 805 sind das Skalierungsfeld 860, das Verschiebungsfeld 862A und das Verschiebungsskalierungsfeld 862B nicht vorhanden.
  • In der Befehlsvorlage für Schreibmaskensteuerungsoperation vom teilweisen Rundungssteuerungstyp ohne Speicherzugriff 810 wird der Rest des Beta-Felds 854 als ein Rundungsoperationsfeld 859A interpretiert, und Melden von Ausnahmeereignissen ist deaktiviert (ein gegebener Befehl meldet keinen Typ von Gleitkommaausnahmen-Flag und zeigt keinen Gleitkommaausnahmen-Handler an).
  • Rundungsoperationssteuerfeld (Round operation) 859A-wie bei Rundungsoperationssteuerfeld 858, unterscheidet sein Inhalt, welche aus einer Gruppe von Rundungsoperationen durchzuführen ist (z. B. Aufrunden, Abrunden, Runden Richtung null und Runden zur nächstgelegenen Rundungszahl). Daher erlaubt das Rundungsoperationssteuerfeld 859A das Ändern des Rundungsmodus auf einer Befehlsbasis. In einer Ausführungsform der Erfindung, wo ein Prozessor ein Steuerregister zum Angeben der Rundungsmodi umfasst, überschreibt der Inhalt des Rundungsoperationssteuerfelds 850 diesen Registerwert.
  • In der Befehlsvorlage der Schreibmaskensteuerungsoperation vom VSIZE-Typ ohne Speicherzugriff 817 wird der Rest des Beta-Felds 854 als ein Vektorlängenfeld 859B interpretiert, dessen Inhalt unterscheidet, auf welcher einer Anzahl von Datenvektorlängen durchgeführt werden soll (z. B. 128, 256 oder 512 Byte).
  • Im Falle einer Befehlsvorlage der Klasse B mit Speicherzugriff 820 wird ein Teil des Beta-Felds 854 als ein Sendefeld 857B interpretiert, dessen Inhalt unterscheidet, ob oder ob nicht die Datenmanipulationsoperation vom Sendetyp durchzuführen ist, während der Rest des Beta-Felds 854 als das Vektorlängenfeld 859B interpretiert wird. Die Befehlsvorlagen mit Speicherzugriff 820 umfassen das Skalierungsfeld 860 und optional das Verschiebungsfeld 862A oder das Verschiebungsskalierungsfeld 862B.
  • Hinsichtlich des generischen vektorfreundlichen Befehlsformats 800, ist ein volles Opcode-Feld 874 gezeigt, das Formatfeld 840, das Basisoperationsfeld 842 und das Datenelementbreitenfeld 864 umfassend. Während eine Ausführungsform gezeigt ist, bei der das volle Opcode-Feld 874 all diese Felder umfasst, umfasst das volle Opcode-Feld 874 in Ausführungsformen, die nicht alle unterstützen, weniger als alle diese Felder. Das volle Opcode-Feld 874 stellt den Operationscode (Opcode) bereit.
  • Das Zusatzoperationsfeld 850, das Datenelementbreitenfeld 864 und das Schreibmaskenfeld 870 ermöglichen, dass diese Merkmale auf einer befehlsweisen Grundlage im generischen vektorfreundlichen Befehlsformat angegeben werden können.
  • Die Kombination aus Schreibmaskenfeld und Datenelementbreitenfeld erzeugt typenbehaftete Befehle dahingehend, dass sie ermöglichen, die Maske basierend auf unterschiedlichen Datenelementbreiten anzuwenden.
  • Die verschiedenen Befehlsvorlagen, die in Klasse A und Klasse B zu finden sind, sind in unterschiedlichen Situationen vorteilhaft. In einigen Ausführungsformen der Erfindung können unterschiedliche Prozessoren oder unterschiedliche Kerne nur Klasse A, nur Klasse B oder beide Klassen unterstützen. Beispielsweise kann ein universeller reihenfolgeveränderter (Out-of-order) Hochleistungskern, der für universelles Rechnen gedacht ist, nur Klasse B unterstützen, ein Kern, der primär für Grafik und/oder wissenschaftliches (Durchsatz) Rechnen gedacht ist, kann nur Klasse A unterstützen, und ein Kern, der für beides gedacht ist, kann beide unterstützen (natürlich liegt ein Kern, der einen gewissen Mix aus Vorlagen und Befehlen von beiden Klassen hat, aber nicht alle Vorlagen und Befehle von beiden Klassen, innerhalb des Geltungsbereichs der Erfindung). Außerdem kann ein einzelner Prozessor mehrere Kerne umfassen, die alle die gleiche Klasse unterstützen oder von denen verschiedene Kerne unterschiedliche Klassen unterstützen. Beispielsweise kann in einem Prozessor mit separaten Grafik- und universellen Kernen einer der Grafikkerne, die primär für Grafik und/oder wissenschaftliches Rechnen gedacht sind, nur Klasse A unterstützen, während einer oder mehrere der universellen Kerne universelle Hochleistungskerne mit reihenfolgeveränderter (Out-of-order) Ausführung und Registerumbenennung sein können, die für universelles Rechnen gedacht sind, die nur Klasse B unterstützen. Ein weiterer Prozessor, der keinen separaten Grafikkern hat, kann einen oder mehrere reihenfolgetreue (In-order) oder reihenfolgeveränderte (Out-of-order) Kerne umfassen, die sowohl Klasse A als auch Klasse B unterstützen. Natürlich können in verschiedenen Ausführungsformen der Erfindung Merkmale von einer Klasse auch in der anderen Klasse umgesetzt sein. Programme, die in einer höheren Sprache geschrieben sind, würden in eine Vielzahl von unterschiedlichen ausführbaren Formen gebracht werden (z. B. just-in-time-kompiliert oder statisch kompiliert), umfassend: 1) eine Form, nur Befehle der Klasse(n) aufweisend, die durch den Zielprozessor für Ausführung unterstützt werden; oder 2) eine Form, alternative Routinen aufweisend, die unter Verwendung unterschiedlicher Kombinationen aller Klassen geschrieben wurden und Steuerflusscode aufweisen, der die auszuführenden Routinen basierend auf den durch den Prozessor, der momentan den Code ausführt, unterstützten Befehlen auswählt.
  • Beispielhaftes spezifisches vektorfreundliches Befehlsformat
  • 9A ist ein Blockdiagramm, ein beispielhaftes spezielles vektorfreundliches Befehlsformat gemäß Ausführungsformen der Erfindung darstellend; 9A zeigt ein spezifisches vektorfreundliches Befehlsformat 900, dass spezifisch in dem Sinn ist, dass es den Ort, die Größe, die Interpretation und die Reihenfolge der Felder sowie Werte für einige dieser Felder angibt. Das spezifische vektorfreundliche Befehlsformat 900 kann verwendet werden, um den x86-Befehlssatz zu erweitern, und daher sind einige der Felder ähnlich wie oder die gleichen wie die, die im bestehenden x86-Befehlssatz und Erweiterungen davon (z. B. AVX) verwendet werden. Dieses Format bleibt konsistent mit dem Präfixcodierungsfeld, dem Real-Opcode-Bytefeld, dem MOD R/M-Feld, dem SIB-Feld, dem Verschiebungsfeld und dem Direktausführungsfeld des vorhandenen x86-Befehlssatzes mit Erweiterungen. Die Felder aus 8, in die die Felder aus 9A zugeordnet werden, sind dargestellt.
  • Es versteht sich, dass, obwohl Ausführungsformen der Erfindung zu Darstellungszwecken unter Bezugnahme auf das spezifische vektorfreundliche Befehlsformat 900 im Kontext des generischen vektorfreundlichen Befehlsformats 800 beschrieben sind, die Erfindung nicht auf das spezifische vektorfreundliche Befehlsformat 900 beschränkt ist, ausgenommen dort, wo beansprucht. Beispielsweise berücksichtigt das generische vektorfreundliche Befehlsformat 800 eine Vielzahl möglicher Größen für die verschiedenen Felder, während das spezifische vektorfreundliche Befehlsformat 900 als Felder mit spezifischen Größen aufweisend gezeigt ist. Als spezifisches Beispiel, während das Datenelementbreitenfeld 864 als ein Ein-Bit-Feld im spezifischen vektorfreundlichen Befehlsformat 900 dargestellt ist, ist die Erfindung nicht so beschränkt (das heißt, das generische vektorfreundliche Befehlsformat 800 zieht andere Größen für das Datenelementbreitenfeld 864 in Betracht).
  • Das generische vektorfreundliche Befehlsformat 800 umfasst die folgenden Felder, nachfolgend in der in 9A dargestellten Reihenfolge aufgeführt.
  • EVEX-Präfix (Bytes 0-3) 902 - ist in einer Vier-Byte-Form codiert.
  • Formatfeld 840 (EVEX-Byte 0, Bits [7:0]) - das erste Byte (EVEX-Byte 0) ist das Formatfeld 840, und es beinhaltet 0x62 (der eindeutige Wert, der in einer Ausführungsform der Erfindung zum Unterscheiden des vektorfreundlichen Befehls verwendet wird).
  • Die zweiten bis vierten Bytes (EVEX-Bytes 1-3) umfassen eine Anzahl von Bitfeldern, die eine spezifische Fähigkeit bieten.
  • REX-Feld 905 (EVEX-Byte 1, Bits [7-5]) - besteht aus einem EVEX.R-Bitfeld (EVEX-Byte 1, Bit [7] - R), einem EVEX.X-Bitfeld (EVEX-Byte 1, bit [6] - X) und einem 857BEX-Byte 1, Bit[5] - B). Die EVEX.R-, EVEX.X- und EVEX.B-Bitfelder bieten die gleiche Funktionalität wie die zugehörigen VEX-Bitfelder und werden unter Verwendung der Einerkomplementform codiert, d. h. ZMM0 wird als 1111B codiert, ZMM15 wird als 0000B codiert. Andere Felder der Befehle codieren die niedrigeren drei Bits der Registerindizies, wie im Fachgebiet bekannt ist (rrr, xxx und bbb), sodass Rrrr, Xxxx und Bbbb durch Addieren von EVEX.R, EVEX.X und EVEX.B gebildet werden können.
  • REX'-Feld 810 - dies ist der erste Teil des REX'-Felds 810 und ist das EVEX.R'-Bitfeld (EVEX-Byte 1, Bit [4] - R'), das verwendet wird, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Registersatzes zu codieren. In einer Ausführungsform der Erfindung wird dieses Bit, zusammen mit anderen, wie nachfolgend angezeigt, im bitinvertierten Format gespeichert, um (im wohlbekannten x86-32-Bit-Modus) vom BOUND-Befehl zu unterscheiden, dessen Real-Opcode-Byte 62 ist, akzeptiert aber nicht im MOD-R/M-Feld (nachfolgend beschrieben) den Wert von 11 im MOD-Feld; alternative Ausführungsformen der Erfindung speichern dieses und die anderen nachfolgend angezeigten Bits nicht im invertierten Format. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, R'Rrrr wird durch Kombinieren von EVEX.R', EVEX.R und den anderen RRR aus anderen Feldern gebildet.
  • Opcode-Abbildungsfeld 915 (EVEX-Byte 1, Bits [3:0] - mmmm) - sein Inhalt codiert ein impliziertes führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelementbreitenfeld 864 (EVEX-Byte 2, Bit [7] - W) - wird durch die Notation EVEX.W repräsentiert. EVEX.W wird verwendet, um die Granularität (Größe) des Datentyps zu definieren (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente).
  • EVEX.vvvv 920 (EVEX-Byte 2, Bits [6:3]-vvvv) - die Rolle von EVEX.vvvv kann Folgendes umfassen: 1) EVEX.vvvv codiert den ersten Quellregisteroperanden, angegeben in invertierter Form (Einerkomplement) und ist gültig für Befehle mit 2 oder mehr Quelloperanden; 2) EVEX.vvvv codiert den Zielregisteroperanden, angegeben in Einerkomplementform für gewisse Vektorverschiebungen; oder 3) EVEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Daher codiert EVEX.vvvv-Feld 920 die 4 Bits niedriger Ordnung des ersten Quellregisterspezifizierers, gespeichert in invertierter Form (Einerkomplement). In Abhängigkeit vom Befehl wird ein zusätzliches unterschiedliches EVEX-Bitfeld verwendet, um die Spezifizierergröße auf 32 Register zu erweitern.
  • EVEX.U-Klassenfeld 868 (EVEX-Byte 2, Bit [2]-U) - Wenn EVEX.U = 0, zeigt dies Klasse A oder EVEX.U0 an; wenn EVEX.U = 1, zeigt dies Klasse B oder EVEX.U1 an.
  • Präfixcodierungsfeld 925 (EVEX-Byte 2, Bits [1:0]-pp) bietet zusätzliche Bits für das Basisoperationsfeld. Zusätzlich zum Bereitstellen von Unterstützung für ältere SSE-Befehle im EVEX-Präfixformat hat dies auch den Vorteil des Kompaktierens des SIMD-Präfixes (anstatt dass ein Byte erforderlich ist, um das SIMD-Präfix auszudrücken, erfordert das EVEX-Präfix nur 2 Bits). In einer Ausführungsform werden, um die älteren SSE-Befehle zu unterstützen, die ein SIMD-Präfix (66H, F2H, F3H) sowohl im älteren Format als auch im EVEX-Präfixformat verwenden, diese älteren SIMD-Präfixe in das SIMD-Präfixcodierungsfeld codiert und werden bei Laufzeit in das ältere SIMD-Präfix erweitert, bevor Sie der PLA des Decodierers bereitgestellt werden (sodass die PLA sowohl das ältere als auch das EVEX-Format dieser älteren Befehle ohne Modifikationen ausführen kann). Obwohl neuere Befehle den Inhalt des EVEX-Präfixcodierungsfelds direkt als eine Opcode-Erweiterung verwenden können, erweitern gewisse Ausführungsformen aus Gründen der Konsistenz in einer ähnlichen Weise, erlauben aber, dass unterschiedliche Bedeutungen durch diese älteren SIMD-Präfixe angegeben werden. Eine alternative Ausführungsform kann die PLA neu konzipieren, um die 2-Bit-SIMD-Präfixcodierungen zu unterstützen, und daher die Erweiterung nicht benötigen.
  • Alpha-Feld 852 (EVEX-Byte 3, Bit [7] - EH; auch bekannt als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.write mask control (Schreibmaskensteuerung) und EVEX.N; auch dargestellt als α) - wie vorher beschrieben, ist dieses Feld kontextspezifisch.
  • Beta-Feld 854 (EVEX-Byte 3, Bits [6:4]-SSS, auch bekannt als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB; auch dargestellt durch βββ) - wie vorher beschrieben, ist dieses Feld kontextspezifisch.
  • REX'-Feld 810 - dies ist der Rest des REX'-Felds und ist das EVEX.V'-Bitfeld (EVEX-Byte 3, Bit [3] - V'), das verwendet werden kann, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Register-Satzes zu codieren. Dieses Bit wird im bitinvertierten Format gespeichert. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, V'VVVV wird durch Kombinieren von EVEX.V', EVEX.vvvv gebildet.
  • Schreibmaskenfeld 870 (EVEX-Byte 3, Bits [2:0]-kkk) - sein Inhalt gibt den Index eines Registers in den Schreibmaskenregistern an, wie vorher beschrieben. In einer Ausführungsform der Erfindung hat der spezifische Wert EVEX.kkk=000 ein spezielles Verhalten, implizierend, dass keine Schreibmaske für den bestimmten Befehl verwendet wird (dies kann auf verschiedene Weisen umgesetzt werden, einschließlich des Verwendens einer Schreibmaske, fest mit allen verdrahtet, oder von Hardware, die die Maskierungshardware umgeht).
  • Das Real-Opcode-Feld 930 (Byte 4) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes wird in diesem Feld angegeben.
  • MOD-R/M-Feld 940 (Byte 5) umfasst MOD-Feld 942, Reg-Feld 944 und R/M-Feld 946. Wie zuvor beschrieben, unterscheidet der Inhalt des MOD-Felds 942 zwischen Operationen mit Speicherzugriff und ohne Speicherzugriff. Die Rolle von Reg-Feld 944 kann für zwei Situationen zusammengefasst werden: Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden, oder als eine Opcode-Erweiterung behandelt zu werden und nicht zum Codieren eines Befehlsoperanden verwendet zu werden. Die Rolle von R/M-Feld 946 kann Folgendes umfassen: Codieren des Befehlsoperanden, der sich auf eine Speicheradresse bezieht, oder Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Skalierung-Index-Basis-Byte (SIB, Scale, Index, Base) (Byte 6) - Wie zuvor beschrieben, wird der Inhalt des Skalierungsfelds 850 für Speicheradressenerzeugung verwendet. SIB.xxx 954 und SIB.bbb 956 - auf die Inhalte dieser Felder wurde vorher im Zusammenhang mit den Registerindizes Xxxx und Bbbb Bezug genommen.
  • Verschiebungsfeld 862A (Bytes 7-10) - wenn MOD-Feld 942 eine 10 beinhaltet, sind Bytes 7-10 das Verschiebungsfeld 862A, und es funktioniert genau so wie die ältere 32-Bit-Verschiebung (disp32) und arbeitet mit Bytegranularität.
  • Verschiebungsfaktorfeld 862B (Byte 7) - wenn MOD-Feld 942 eine 01 enthält, ist Byte 7 das Verschiebungsfaktorfeld 862B. Der Ort dieses Felds ist der gleiche wie der der älteren 8-Bit-Verschiebung (disp8) im x86-Befehlssatz, die mit Bytegranularität arbeitet. Da disp8 vorzeichenerweitert ist, kann es nur Versätze zwischen -128 und 127 Bytes adressieren; in Verbindung mit 64-Byte-Cache-Zeilen verwendet disp8 acht (8) Bits, die auf nur vier wirklich sinnvolle Werte -128, -64, 0 und 64 gesetzt werden können; da häufig ein größerer Bereich benötigt ist, wird disp32 verwendet; disp32 erfordert allerdings 4 Bytes. Im Gegensatz zu disp8 und disp32 ist das Verschiebungsfaktorfeld 862B eine Neuinterpretation von disp8; bei Verwenden von Verschiebungsfaktorfeld 862B wird die tatsächliche Verschiebung durch den Inhalt des Verschiebungsfaktorfelds, multipliziert mit der Größe des Speicheroperandenzugriffs (N) bestimmt. Dieser Typ von Verschiebung wird als disp8*N bezeichnet. Dies verringert die durchschnittliche Befehlslänge (ein einzelnes Byte wird für die Verschiebung verwendet, aber mit einem viel größeren Bereich). Eine solche komprimierte Verschiebung basiert auf der Annahme, dass die effektive Verschiebung ein Vielfaches der Granularität des Speicherzugriffs ist und dass daher die redundanten Bits niedrigerer Ordnung des Adressenversatzes nicht codiert werden müssen. Mit anderen Worten, das Verschiebungsfaktorfeld 862B ersetzt die 8-Bit-Verschiebung des älteren x86-Befehlssatzes. Daher wird das Verschiebungsfaktorfeld 862B auf die gleiche Weise codiert wie eine 8-Bit-Verschiebung des x86-Befehlssatzes (also keine Änderungen in den ModRM/SIB-Codierregeln), mit der einzigen Ausnahme, dass disp8 auf disp8*N überladen wird. Mit anderen Worten, es gibt keine Änderungen in den Codierregeln oder Codierlängen, sondern nur bei der Interpretation des Verschiebungswertes durch Hardware (die die Verschiebung um die Größe des Speicheroperanden skalieren muss, um einen byteweisen Adressenversatz zu erhalten). Direktoperandenfeld 872 arbeitet, wie zuvor beschrieben.
  • Volles Opcode-Feld
  • 9B ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 900, die das volle Opcode-Feld 874 bilden, darstellend, gemäß einer Ausführungsform der Erfindung. Insbesondere umfasst das volle Opcode-Feld 874 das Formatfeld 840, das Basisoperationsfeld 842 und das Datenelementbreitenfeld (W) 864. Das Basisoperationsfeld 842 umfasst das Präfixcodierungsfeld 925, das Opcode-Abbildungsfeld 915 und das Real-Opcode-Feld 930.
  • Registerindexfeld
  • 9C ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 900, die das Registerindexfeld 844 bilden, darstellend, gemäß einer Ausführungsform der Erfindung. Insbesondere umfasst das Registerindexfeld 844 das REX-Feld 905, das REX'-Feld 910, das MODR/M.reg-Feld 944, das MODR/M.r/m-Feld 946, das VVVV-Feld 920, das xxx-Feld 954 und das bbb-Feld 956.
  • Zusatzoperationsfeld
  • 9D ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 900, die das Zusatzoperationsfeld 850 bilden, darstellend, gemäß einer Ausführungsform der Erfindung. Wenn das Klassenfeld (U) 868 eine 0 enthält, bedeutet dies EVEX.U0 (Klasse A 868A); wenn es eine 1 enthält, bedeutet dies EVEX.U1 (Klasse B 868B). Wenn U=0 und das MOD-Feld 942 eine 11 enthält (eine Operation ohne Speicherzugriff bedeutend), wird das Alpha-Feld 852 (EVEX-Byte 3, Bit [7] - EH) als das rs-Feld 852A interpretiert. Wenn das rs-Feld 852A eine 1 enthält (Runden 852A.1), wird das Beta-Feld 854 (EVEX-Byte 3, Bits [6:4]-SSS) als das Rundungssteuerfeld 854A interpretiert. Das Rundungssteuerfeld 854A umfasst ein Ein-Bit-SAE-Feld 856 und ein Zwei-Bit-Rundungsoperationsfeld 858. Wenn das rs-Feld 852A eine 0 enthält (Datentransformation 852A.2), wird das Beta-Feld 854 (EVEX-Byte 3, Bits [6:4]- SSS) als das Drei-Bit-Datentransformationsfeld 854B interpretiert. Wenn U=0 und das MOD-Feld 942 eine 00, 01 oder 10 enthält (eine Operation mit Speicherzugriff bedeutend), wird das Alpha-Feld 852 (EVEX-Byte 3, Bit [7] - EH) als das Räumungshinweisfeld (EH, Eviction Hint) 852B interpretiert, und das Beta-Feld 854 (EVEX-Byte 3, Bits [6:4]- SSS) wird als ein Drei-Bit-Datenmanipulationsfeld 854C interpretiert.
  • Wenn U=1, wird das Alpha-Feld 852 (EVEX-Byte 3, Bit [7] - EH) als das Schreibmaskensteuerfeld (Z) 852C interpretiert. Wenn U=1 und das MOD-Feld 942 eine 11 enthält (eine Operation ohne Speicherzugriff bedeutend), wird ein Teil des Beta-Felds 854 (EVEX-Byte 3, Bit [4]- So) als das RL-Feld 857A interpretiert; wenn es eine 1 enthält (Runden 857A.1), wird der Rest des Beta-Felds 854 (EVEX-Byte 3, Bit [6-5]- S2-1) als das Rundungsoperationsfeld 859A interpretiert, während wenn das RL-Feld 857A eine 0 enthält (VSIZE 857.A2), wird der Rest des Beta-Felds 854 (EVEX-Byte 3, Bit [6-5]- S2-1) als das Vektorlängenfeld 859B (EVEX-Byte 3, Bit [6-5]- L1-0) interpretiert. Wenn U=1 und das MOD-Feld 942 eine 00, 01 oder 10 enthält (eine Operation mit Speicherzugriff bedeutend), wird das Beta-Feld 854 (EVEX-Byte 3, Bits [6:4]- SSS) als das Vektorlängenfeld 859B (EVEX-Byte 3, Bit [6-5]- L1-0) und das Sendefeld 857B (EVEX-Byte 3, Bit [4]- B) interpretiert.
  • Beispielhafte Registerarchitektur
  • 10 ist ein Blockdiagramm einer Registerarchitektur 1000, gemäß einer Ausführungsform der Erfindung. In der dargestellten Ausführungsform gibt es 32 Vektorregister 1010, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die 256 Bits niedrigerer Ordnung der unteren 16 zmm-Register werden auf Register ymm0-16 überlagert. Die 128 Bits niedrigerer Ordnung der unteren 16 zmm-Register (die 128 Bit niedriger Ordnung der ymm-Register) werden auf Register xmm0-15 überlagert. Das spezifische vektorfreundliche Befehlsformat 900 operiert auf dieser überlagerten Registerdatei, wie in den folgenden Tabellen dargestellt.
    Anpassbare Vektorlänge Klasse Operationen Register
    Befehlsvorlagen, die das Vektorlängenfeld 859B nicht umfassen A ( 8A; U=0) 810, 815, 825, 830 zmm-Register (die Vektorlänge ist 64 Byte)
    B ( 8B; U=1) 812 zmm-Register (die Vektorlänge ist 64 Byte)
    Befehlsvorlagen, die das Vektorlängenfeld 859B umfassen B ( 8B; U=1) 817, 827 zmm-, ymm- oder xmm-Register (die Vektorlänge ist 64 Byte, 32 Byte oder 16 Byte) in Abhängigkeit vom Vektorlängenfeld 859B
  • Mit anderen Worten, das Vektorlängenfeld 859B wählt zwischen einer maximalen Länge und einer oder mehreren anderen kürzeren Längen aus, wobei jede der solchen kürzeren Längen die halbe Länge der vorhergehenden Länge ist, und Befehlsvorlagen ohne das Vektorlängenfeld 859B operieren auf der maximalen Vektorlänge. Ferner operieren, in einer Ausführungsform, die Klasse-B-Befehlsvorlagen des spezifischen vektorfreundlichen Befehlsformats 900 auf gepackten oder skalaren Gleitkommadaten mit einfacher/doppelter Genauigkeit und gepackten oder skalaren ganzzahligen Daten. Skalare Operationen sind Operationen, die auf der Datenelementposition der niedrigsten Ordnung in einem zmm/ymm/xmm-Register durchgeführt werden; die Datenelementpositionen der höheren Ordnung werden, in Abhängigkeit von der Ausführungsform, entweder so gelassen, wie sie vor dem Befehl waren, oder genullt.
  • Schreibmaskenregister 1015 - bei der illustrierten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7), jeweils mit einer Größe von 64 Bit. In einer alternativen Ausführungsform haben die Schreibmaskenregister 1015 eine Größe von 16 Bit. Wie zuvor beschrieben, kann, in einer Ausführungsform der Erfindung, das Vektormaskenregister k0 nicht als eine Schreibmaske verwendet werden; wenn die Codierung, die normalerweise k0 anzeigen würde, für eine Schreibmaske verwendet wird, wählt sie eine fest verdrahtete Schreibmaske 0xFFFF aus, dadurch effektiv die Schreibmaskierung für diesen Befehl deaktivierend.
  • Universelle Register 1025 - in der dargestellten Ausführungsform gibt es sechzehn universelle 64-Bit-Register, die zusammen mit den vorhandenen x86-Adressierungsmodi verwendet werden, um Speicheroperanden zu adressieren. Diese Register sind mit RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Die skalare Gleitkommastapelregisterdatei (x87-Stapel) 1045, die als Alias für die gepackte ganzzahlige flache MMX-Registerdatei 1050 verwendet wird - in der dargestellten Ausführungsform ist der x87-Stapel ein Acht-Elemente-Stapel, der verwendet wird, um skalare Gleitkommaoperationen auf 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung durchzuführen; während die MMX-Register verwendet werden, um Operationen auf gepackten ganzzahligen 64-Bit-Daten durchzuführen sowie um Operanden für einige Operationen zu halten, die zwischen dem MMX- und dem XMM-Register durchgeführt werden.
  • Alternative Ausführungsformen der Erfindung können weitere oder engere Register verwenden. Zusätzlich können alternative Ausführungsformen der Erfindung mehr, weniger oder unterschiedliche Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf verschiedene Arten, für verschiedene Zwecke und in unterschiedlichen Prozessoren umgesetzt sein. Beispielsweise können Umsetzungen solcher Kerne Folgendes umfassen: 1) einen universellen reihenfolgetreuen (In-order) Kern, gedacht für universelles Rechnen; 2) einen universellen reihenfolgeveränderten (Out-of-order) Hochleistungskern, gedacht für universelles Rechnen; 3) einen speziellen Kern, primär gedacht für Grafik und/oder wissenschaftliche (Durchsatz) Berechnung. Umsetzungen von unterschiedlichen Prozessoren können umfassen: 1) eine CPU, einen oder mehrere universelle reihenfolgetreue (In-order) Kerne, gedacht für universelles Rechnen, umfassend, und/oder einen oder mehrere universelle reihenfolgeveränderte (Out-of-order) Kerne, gedacht für universelles Rechnen; und 2) einen Koprozessor, einen oder mehrere spezielle Kerne, primär gedacht für Grafik und/oder Wissenschaft (Durchsatz), umfassend. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die Folgendes umfassen können: 1) den Koprozessor auf einem von der CPU separaten Chip; 2) den Koprozessor auf einem separaten Die im gleichen Chipgehäuse wie eine CPU; 3) den Koprozessor auf dem gleichen Die wie eine CPU (in diesem Fall wird ein solcher Koprozessor manchmal als spezielle Logik, wie etwa als integrierte Grafik und/oder wissenschaftliche (Durchsatz) Logik, oder als spezielle Kerne bezeichnet); und 4) ein System auf einem Chip, das auf demselben Die die beschriebene CPU (manchmal als der bzw. die Anwendungskerne oder Anwendungsprozessoren bezeichnet), den oben beschriebenen Koprozessor und zusätzliche Funktionalität umfassen kann. Beispielhafte Kernarchitekturen werden als nächstes beschrieben, gefolgt von Beschreibungen von beispielhaften Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen
  • Blockdiagramm zu reihenfolgetreuem (In-order) und reihenfolgeverändertem (Out-of-order) Kern
  • 11A ist ein Blockdiagramm, das sowohl eine beispielhafte reihenfolgetreue (In-order) Pipeline als auch eine beispielhafte reihenfolgeveränderte (Out-of-order) Ausgabe-/Ausführungspipeline mit Registerumbenennung gemäß Ausführungsformen der Erfindung darstellt. 11B ist ein Blockdiagramm, das sowohl ein Ausführungsbeispiel für einen reihenfolgetreuen Architekturkern als auch einen beispielhaften reihenfolgeveränderten Registerumbenennungs-Ausgabe/Ausführungs-Architekturkern, der in einem Prozessor aufzunehmen ist, gemäß Ausführungsformen der Erfindung darstellt. Die Felder mit durchgezogenen Linien in 11A-B stellen die reihenfolgetreue Pipeline und den reihenfolgetreuen Kern dar, während die optionale Hinzufügung von Feldern mit gestrichelten Linien die/den reihenfolgeveränderte(n) Ausgabe-/Ausführungspipeline bzw. -kern mit Registerumbenennung darstellt. Angesichts der Tatsache, dass der reihenfolgetreue (In-order) Aspekt eine Teilmenge des reihenfolgeveränderten (Out-of-order) Aspekts ist, wird der reihenfolgeveränderte Aspekt beschrieben.
  • In 11A umfasst eine Prozessorpipeline 1100 eine Abrufstufe 1102, eine Längendecodierstufe 1104, eine Decodierstufe 1106, eine Zuordnungsstufe 1108, eine Umbenennungsstufe 1110, eine Ablaufsteuerungsstufe (Scheduling, auch als Verteilung oder Ausgabe bekannt) 1112, eine Registerlese-/Speicherlesestufe 1114, eine Ausführungsstufe 1116, eine Zurückschreibe-/Speicherschreibestufe 1118, eine Ausnahmenbehandlungsstufe 1122 und eine Übergabestufe 1124.
  • 11B zeigt Prozessorkern 1190, eine Frontendeinheit 1130 umfassend, gekoppelt mit einer Ausführungsengineeinheit 1150, und beide sind mit einer Speichereinheit 1170 gekoppelt. Der Kern 1190 kann ein Kern mit reduziertem Befehlssatz (RISC, Reduced Instruction Set Computing), ein Kern mit komplexem Befehlssatz (CISC, Complex Instruction Set Computing), ein Kern mit sehr langen Befehlswörtern (VLIW, Very Long Instruction Word) oder ein hybrider oder alternativer Kerntyp sein. Als noch eine weitere Option kann der Kern 1190 ein spezieller Kern sein, wie etwa, beispielsweise, ein Netzwerk- oder Kommunikationskern, eine Komprimierungsengine, ein Koprozessorkern, ein universeller Berechnungskern für Grafikprozessoreinheiten (GPGPU, General Purpose Computing Graphics Processing Unit), ein Grafikkern oder ähnliches.
  • Die Frontendeinheit 1130 umfasst eine Verzweigungsvorhersageeinheit 1132, gekoppelt mit einer Befehlscacheeinheit 1134, die mit einem Befehlsübersetzungspuffer (TLB, Instruction Translation Lookaside Buffer) 1136 gekoppelt ist, der mit einer Befehlsabrufeinheit 1138 gekoppelt ist, die mit einer Decodiereinheit 1140 gekoppelt ist. Die Decodiereinheit 1140 (oder der Decodierer) kann Befehle decodieren und eine(n) oder mehrere Mikrooperationen, Mikrocodeeinstiegspunkte, Mikrobefehle oder andere Befehle oder andere Steuersignale, die aus den ursprünglichen Befehlen decodiert wurden oder diese anderweitig reflektieren oder anderweitig von diesen abgeleitet sind, als eine Ausgabe erzeugen. Die Decodiereinheit 1140 kann unter Verwendung verschiedener unterschiedlicher Mechanismen umgesetzt sein. Beispiele von geeigneten Mechanismen umfassen, sind aber nicht beschränkt auf, Nachschlagetabellen, Hardwareumsetzungen, programmierbare Logikarrays (PLAs), Mikrocode-Nur-Lese-Speicher (ROMs, Read Only Memories) usw. In einer Ausführungsform umfasst der Kern 1190 einen Mikrocode-ROM oder ein anderes Medium, das Mikrocode für gewisse Makrobefehle speichert (z. B. in Decodiereinheit 1140 oder anderweitig innerhalb der Frontendeinheit 1130). Die Decodiereinheit 1140 ist mit einer Umbenennungs-/Zuordnungseinheit 1152 in der Ausführungsengineeinheit 1150 gekoppelt.
  • Die Ausführungsengineeinheit 1150 umfasst die Umbenennungs-/Zuordnungseinheit 1152, gekoppelt mit einer Rückzugseinheit 1154 und einer Menge von einer oder mehreren Ablaufsteuerungseinheiten 1156. Die Ablaufsteuerungseinheit(en) 1156 stellt bzw. stellen eine beliebige Anzahl von unterschiedlichen Ablaufsteuerungseinheiten dar, einschließlich Reservierungsstationen, zentralem Befehlsfenster usw. Ablaufsteuerungseinheit(en) 1156 ist bzw. sind mit der bzw. den physischen Registerdateieinheiten 1158 gekoppelt. Jede der physischen Registerdatei(en)-Einheiten 1158 stellt eine oder mehrere physische Registerdateien dar, von denen unterschiedliche einen oder mehrere unterschiedliche Datentypen speichern, wie etwa skalare Ganzzahlen, skalare Gleitkommazahlen, gepackte Ganzzahlen, gepackte Gleitkommazahlen, Vektorganzzahlen, Vektorgleitkommazahlen, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. In einer Ausführungsform umfasst die physische Registerdatei(en)-Einheit 1158 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister und universelle Register bereitstellen. Die physische(n) Registerdatei(en)einheit(en) 1158 wird bzw. werden von der Rückzugseinheit 1154 überlappt, um verschiedene Weisen darzustellen, in denen Registerumbenennung und reihenfolgeveränderte Ausführung umgesetzt werden können (z. B. unter Verwendung eines Neuordnungspuffers und einer Rückzugsregisterdatei; unter Verwendung einer Zukunftsdatei, eines Verlaufspuffers und einer Rückzugsregisterdatei; unter Verwendung einer Registerabbildung und einer Sammlung von Registern usw.). Die Rückzugseinheit 1154 und die physischen Registerdatei(en)einheit(en) 1158 ist bzw. sind mit dem bzw. den Ausführungsclustern 1160 gekoppelt. Das bzw. die Ausführungscluster 1160 umfassen eine Menge von einer oder mehreren Ausführungseinheiten 1162 und eine Menge von einer oder mehreren Speicherzugriffseinheiten 1164. Die Ausführungseinheiten 1162 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) auf verschiedenen Typen von Daten (z. B. skalare Gleitkommadaten, gepackte ganzzahlige Daten, gepackte Gleitkommadaten, Vektorganzzahl, Vektorgleitkomma) durchführen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten, speziell für spezifische Funktionen oder Mengen von Funktionen bestimmt, umfassen können, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten umfassen, die allesamt alle Funktionen durchführen. Die Ablaufsteuerungseinheit(en) 1156, die physischen Registerdatei(en)einheit(en) 1158 und das bzw. die Ausführungscluster 1160 werden als möglicherweise mehrere gezeigt, da gewisse Ausführungsformen separate Pipelines für gewisse Typen von Daten/Operationen erzeugen (z. B. eine skalare ganzzahlige Pipeline, eine skalare Gleitkomma-/gepackte ganzzahlige/gepackte Gleitkomma-/Vektorganzzahl-/Vektorgleitkomma-Pipeline und/oder eine Speicherzugriffspipeline, die jeweils ihr(e) eigene(s) Ablaufsteuerungseinheit, physische Registerdatei(en)einheit und/oder Ausführungscluster haben - und im Falle einer separaten Speicherzugriffspipeline sind gewisse Ausführungsformen umgesetzt, bei denen nur das Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 1164 hat). Es versteht sich auch, dass dort, wo separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines reihenfolgeveränderte Ausgabe-/Ausführungspipelines und die restlichen reihenfolgetreue sein können.
  • Die Menge von Speicherzugriffseinheiten 1164 ist mit der Speichereinheit 1170 gekoppelt, die eine Daten-TLB-Einheit 1172 umfasst, gekoppelt mit einer Datencacheeinheit 1174, gekoppelt mit einer Level-2-Cacheeinheit (L2) 1176. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 1164 eine Ladeeinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit umfassen, die jeweils mit der Daten-TLB-Einheit 1172 in der Speichereinheit 1170 gekoppelt sind. Die Befehlscacheeinheit 1134 ist weiterhin mit einer Level-2-Cacheeinheit (L2) 1176 in der Speichereinheit 1170 gekoppelt. Die L2-Cacheeinheit 1176 ist mit einer oder mehreren anderen Cacheebenen und eventuell mit dem Hauptspeicher gekoppelt.
  • Als Beispiel kann die beispielhafte, Register umbenennende reihenfolgeveränderte Ausgabe-/Ausführungskernarchitektur die Pipeline 1100 wie folgt umsetzen: 1) der Befehlsabruf 1138 führt die Abruf- und die Längendecodierstufen 1102 und 1104 durch; 2) die Decodiereinheit 1140 führt die Decodierstufe 1106 durch; 3) die Umbenennungs-/Zuordnungseinheit 1152 führt die Zuordnungsstufe 1108 und die Umbenennungsstufe 1110 durch; 4) die Ablaufsteuerungseinheit(en) 1156 führt bzw. führen die Ablaufsteuerungsstufe 1112 durch; 5) die physische(n) Registerdatei(en)einheit(en) 1158 und die Speichereinheit 1170 führen die Registerlese-/Speicherlesestufe 1114 durch; das Ausführungscluster 1160 führt die Ausführungsstufe 1116 durch; 6) die Speichereinheit 1170 und die physische(n) Registerdatei(en)einheit(en) 1158 führen die Zurückschreibe-/Speicherschreibestufe 1118 durch; 7) verschiedene Einheiten können bei der Ausnahmenbehandlungsstufe 1122 beteiligt sein; und 8) die Rückzugseinheit 1154 und die physische(n) Registerdatei(en)einheit(en) 1158 führen die Übergabestufe 1124 durch.
  • Der Kern 1190 kann einen oder mehrere Befehlssätze (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, CA; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen, wie etwa NEON) von ARM Holdings aus Sunnyvale, CA) unterstützen, einschließlich der hier beschriebenen Befehle. In einer Ausführungsform umfasst der Kern 1190 Logik zum Unterstützen einer Befehlssatzerweiterung mit gepackten Daten (z. B. AVX1, AVX2), dadurch ermöglichend, dass Operationen, die von vielen Multimedia-Anwendungen verwendet werden, mit gepackten Daten durchgeführt werden.
  • Es versteht sich, dass der Kern Mehrsträngigkeit (oder Multithreading, Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies auf vielfältige Weisen vornehmen kann, einschließlich Zeitscheiben-Multithreading, Simultan-Multithreading (wobei ein einziger physischer Kern einen logischen Kern für jeden der Threads bereitstellt, die der physische Kern simultan im Multithreading behandelt), oder eine Kombination davon (z. B. Zeitscheiben-Abruf und -Decodierung und Simultan-Multithreading danach, wie etwa bei der Intel® Hyperthreading-Technologie).
  • Während Registerumbenennung im Kontext von reihenfolgeveränderter (Out-of-order) Ausführung beschrieben ist, versteht es sich, dass Registerumbenennung in einer reihenfolgetreuen (In-order) Architektur verwendet werden kann. Während die dargestellte Ausführungsform des Prozessors auch separate Befehls- und Datencacheeinheiten 1134/1174 und eine gemeinsam genutzte L2-Cacheeinheit 1176 umfasst, können alternative Ausführungsformen einen einzelnen internen Cache für Befehle und Daten haben, wie etwa, beispielsweise, einen internen Level-1-Cache (L1) oder mehrere Ebenen von internem Cache. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache umfassen, die extern zum Kern und/oder zum Prozessor ist. Alternativ kann der gesamte Cache extern zum Kern und/oder zum Prozessor sein.
  • Spezifische beispielhafte reihenfolgetreue (In-order) Kernarchitektur
  • 12A-B stellen ein Blockdiagramm einer spezifischeren beispielhaften reihenfolgetreuen (In-order) Kernarchitektur dar, deren Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne vom gleichen Typ und/oder anderen Typen) in einem Chip wäre; Die Logikblöcke kommunizieren über ein Verbindungsnetzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit einigen festen Funktionslogiken, Speicher-E/A-Schnittstellen und anderen notwendigen E/A-Logiken, in Abhängigkeit von der Anwendung.
  • 12A ist ein Blockdiagramm eines einzelnen Prozessorkerns, zusammen mit seiner Verbindung zu dem On-Die-Verbindungsnetzwerk 1202 und mit seinem lokalen Teilsatz des Level-2-Caches (L2) 1204, gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdecodierer 1200 den x86-Befehlssatz mit einer Befehlssatzerweiterung mit gepackten Daten. Ein L1-Cache 1206 ermöglicht Zugriffe mit geringer Latenz auf einen Cachespeicher in die skalaren und Vektoreinheiten. Während in einer Ausführungsform (zum Vereinfachen der Konzeption) eine skalare Einheit 1208 und eine Vektoreinheit 1210 separate Registersätze verwenden (skalare Register 1212 bzw. Vektorregister 1214) und Daten, die zwischen ihnen transferiert werden, in Speicher geschrieben und dann von einem Level-1-Cache (L1) 1206 zurückgelesen werden, können alternative Ausführungsformen der Erfindung einen unterschiedlichen Ansatz verwenden (z. B. einen einzelnen Registersatz verwenden oder einen Kommunikationspfad umfassen, der Daten ermöglicht, zwischen den zwei Registerdateien transferiert zu werden, ohne geschrieben und zurückgelesen zu werden).
  • Der lokale Teilsatz des L2-Caches 1204 ist Teil eines globalen L2-Caches, der in separate lokale Teilsätze unterteilt wird, einen pro Prozessorkern. Jeder Prozessorkern hat einen direkten Zugriffspfad auf seinen eigenen lokalen Teilsatz des L2-Caches 1204. Daten, die von einem Prozessorkern gelesen werden, werden in dessen L2-Cacheteilsatz 1204 gespeichert, und auf sie kann schnell zugegriffen werden, parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cacheteilsätze zugreifen. Daten, die durch einen Prozessorkern geschrieben werden, werden in dessen eigenem L2-Cacheteilsatz 1204 gespeichert und werden, wenn nötig, aus anderen Teilsätzen ausgeräumt. Das Ringnetzwerk sichert Kohärenz der gemeinsam genutzten Daten. Das Ringnetzwerk ist bidirektional, um Agenten, wie etwa Prozessorkernen, L2-Caches und anderen Logikblöcken zu ermöglichen, innerhalb des Chips miteinander zu kommunizieren. Jeder Ringdatenpfad ist pro Richtung 1012 Bit breit.
  • 12B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 12A gemäß Ausführungsformen der Erfindung. 12B umfasst einen L1-Datencache 1206A als Teil des L1-Caches 1204, sowie weitere Details hinsichtlich der Vektoreinheit 1210 und der Vektorregister 1214. Insbesondere ist die Vektoreinheit 1210 eine 16-breite Vektorverarbeitungseinheit (VPU, Vector Processing Unit) (siehe die 16-breite ALU 1228), die einen oder mehrere Ganzzahlbefehle, Gleitkommabefehle mit einfacher Genauigkeit und Gleitkommabefehle mit doppelter Genauigkeit ausführt. Die VPU unterstützt Mischen der Registereingänge mit Mischeinheit 1220, numerische Umwandlung mit numerischen Umwandlungseinheiten 1222A-B und Replikation mit Replikationseinheit 1224 auf dem Speichereingang. Schreibmaskenregister 1226 ermöglichen das Prädizieren von resultierenden Vektorschreibvorgängen.
  • 13 ist ein Blockdiagramm eines Prozessors 1300, der mehr als einen Kern haben kann, der eine integrierte Speichersteuerung haben kann und der integrierte Grafik haben kann, gemäß Ausführungsformen der Erfindung; Die Felder mit den durchgezogenen Linien in 13 stellen einen Prozessor 1300 mit einem einzelnen Kern 1302A, einen Systemagenten 1310 und eine Menge von einer oder mehreren Bussteuerungseinheiten 1316 dar, während die optionale Hinzufügung von Feldern mit gestrichelten Linien einen alternativen Prozessor 1300 mit mehreren Kernen 1302A-N, eine Menge von einer oder mehreren integrierten Speichersteuerungeinheiten 1314 in der Systemagenteneinheit 1310 und spezieller Logik 1308 darstellt.
  • Daher können unterschiedliche Umsetzungen des Prozessors 1300 umfassen: 1) eine CPU, wobei die spezielle Logik 1308 integrierte Grafik und/oder wissenschaftliche (Durchsatz) Logik ist (die einen oder mehrere Kerne umfassen kann), und wobei die Kerne 1302A-N ein oder mehrere universelle Kerne sind (z. B. universelle reihenfolgetreue (In-order) Kerne, universelle reihenfolgeveränderte (Out-of-order) Kerne, eine Kombination aus den zwei); 2) einen Koprozessor, wobei die Kerne 1302A-N eine große Anzahl von speziellen Kernen sind, primär für Grafik und/oder wissenschaftliches (Durchsatz) Rechnen gedacht; und 3) einen Koprozessor, wobei die Kerne 1302A-N eine große Anzahl von universellen reihenfolgetreuen (In-order) Kernen sind. Daher kann der Prozessor 1300 ein universeller Prozessor, Koprozessor oder spezieller Prozessor sein, wie etwa, beispielsweise, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsengine, ein Grafikprozessor, eine universelle Grafikprozessor-Berechnungseinheit (GPGPU, General Purpose Graphics Processing Unit), ein Koprozessor mit hohem Durchsatz und vielen integrierten Kernen (MIC, Many Integrated Core) (30 oder mehr Kerne umfassend), ein eingebetteter Prozessor oder ähnliches. Der Prozessor kann auf einem oder mehreren Chips umgesetzt sein. Der Prozessor 1300 kann ein Teil eines und/oder kann auf einem oder mehreren Substraten unter Verwendung einer beliebigen Anzahl von Prozesstechnologien umgesetzt sein, wie etwa, beispielsweise, BiCMOS, CMOS oder NMOS.
  • Die Speicherhierarchie umfasst eine oder mehrere Cacheebenen innerhalb der Kerne, einen Satz von einer oder mehreren gemeinsam genutzten Cacheeinheiten 1306 und externen Speicher (nicht gezeigt), gekoppelt mit der Menge von integrierten Speichersteuerungseinheiten 1314. Die Menge von gemeinsam genutzten Cacheeinheiten 1306 kann einen oder mehrere Mid-Level-Caches, wie etwa Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cacheebenen, einen Cache auf der untersten Ebene (LLC, Last Level Cache) und/oder Kombinationen davon umfassen. Während in einer Ausführungsform eine ringbasierte Verbindungseinheit 1312 die integrierte Grafiklogik 1308 (integrierte Grafiklogik 1308 ist ein Beispiel für spezielle Logik und wird hier als solche bezeichnet), die Menge von gemeinsam genutzten Cacheeinheiten 1306 und die Systemagenteneinheit 1310/die integrierte(n) Speichersteuerungseinheit(en) 1314 verbinden, können alternative Ausführungsformen eine beliebige Anzahl von wohlbekannten Techniken zum Verbinden solcher Einheiten verwenden. In einer Ausführungsform wird Kohärenz zwischen einer oder mehreren Cacheeinheiten 1306 und Kernen 1302-A-N gewahrt.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 1302A-N in der Lage, Multithreading durchzuführen. Der Systemagent 1310 umfasst diejenigen Komponenten, die Kerne 1302A-N koordinieren und betreiben. Die Systemagenteneinheit 1310 kann, beispielsweise, eine Leistungssteuerungseinheit (PCU, Power Control Unit) und eine Anzeigeeinheit umfassen. Die PCU kann Logik und Komponenten, die zum Regeln des Leistungszustands der Kerne 1302A-N und der integrierten Grafiklogik 1308 benötigt werden, sein oder umfassen. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 1302A-N können homogen oder heterogen in Bezug auf den Architekturbefehlssatz sein; das heißt, zwei oder mehr der Kerne 1302A-N können zur Ausführung des gleichen Befehlssatzes in der Lage sein, während andere möglicherweise in der Lage sind, nur einen Teilsatz dieses Befehlssatzes oder einen unterschiedlichen Befehlssatz auszuführen.
  • Beispielhafte Computerarchitekturen
  • 14-17 sind Blockdiagramme beispielhafter Rechnerarchitekturen. Andere im Fachgebiet bekannte Systemkonzeptionen und -auslegungen für Laptops, Desktops, handgestützte PCs, persönliche digitale Assistenten, technische Workstations, Server, Netzwerkvorrichtungen, Netzwerkknoten, Weichen, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrosteuerungen, Mobiltelefone, tragbare Medienabspielvorrichtungen, handgestützte Vorrichtungen und verschiedene andere elektronische Vorrichtungen sind ebenfalls geeignet. Im Allgemeinen ist eine riesige Vielfalt von Systemen oder elektronischen Vorrichtungen, die in der Lage sind, einen Prozessor und/oder andere Ausführungslogik, wie hier offenbart, zu integrieren, allgemein geeignet.
  • Jetzt Bezug nehmend auf 14 ist ein Blockdiagramm eines Systems 1400 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 1400 kann einen oder mehrere Prozessoren 1410, 1415 umfassen, die mit einem Steuerungsknoten 1420 gekoppelt sind. In einer Ausführungsform umfasst der Steuerungsknoten 1420 einen Grafikspeichersteuerungsknoten (GMCH, Graphics Memory Controller Hub) 1490 und einen Eingabe-/Ausgabe-Knoten (IOH, Input/Output Hub) 1450 (die sich auf separaten Chips befinden können); der GMCH 1490 umfasst Speicher- und Grafiksteuerungen, mit denen Speicher 1440 und ein Koprozessor 1445 gekoppelt sind; der IOH 1450 koppelt Eingabe-/Ausgabevorrichtungen (E/A) 1460 mit dem GMCH 1490. Alternativ sind die Speicher- und/oder die Grafiksteuerung in den Prozessor integriert (wie hier beschrieben), der Speicher 1440 und der Koprozessor 1445 sind direkt mit dem Prozessor 1410 gekoppelt, und der Steuerungsknoten 1420 in einem einzelnen Chip mit dem IOH 1450.
  • Die optionale Natur der zusätzlichen Prozessoren 1415 wird in 14 durch unterbrochene Linien gekennzeichnet. Jeder Prozessor 1410, 1415 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne umfassen und kann eine Version des Prozessors 1300 sein.
  • Der Speicher 1440 kann, beispielsweise, ein dynamischer Direktzugriffsspeicher (DRAM, Dynamic Random Access Memory), ein Phasenwechselspeicher (PCM, Phase Change Memory) oder eine Kombination aus den zweien sein. In zumindest einer Ausführungsform kommuniziert der Steuerungsknoten 1420 mit dem bzw. den Prozessoren 1410, 1415 über einen Multi-Drop-Bus, wie etwa einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie etwa QuickPath Interconnect (QPI) oder eine ähnliche Verbindung 1495.
  • In einer Ausführungsform ist der Koprozessor 1445 ein spezieller Prozessor, wie etwa, beispielsweise, ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder ein Kommunikationsprozessor, eine Komprimierungsengine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder ähnliches. In einer Ausführungsform kann der Steuerungsknoten 1420 einen integrierten Grafikbeschleuniger umfassen.
  • Es kann eine Vielzahl von Unterschieden zwischen den physischen Ressourcen 1410, 1415 im Hinblick auf ein Spektrum von relevanten Metriken geben, einschließlich architektonisch, mikroarchitektonisch, thermisch, der Stromverbrauchscharakteristiken und ähnliches.
  • In einer Ausführungsform führt der Prozessor 1410 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. Eingebettet in die Befehle können Koprozessorbefehle sein. Der Prozessor 1410 erkennt, dass diese Koprozessorbefehle von einem Typ sind, der durch den angeführten Koprozessor 1445 ausgeführt werden soll. Entsprechend gibt der Prozessor 1410 diese Koprozessorbefehle (oder Steuersignale, die Koprozessorbefehle darstellend) auf einem Koprozessorbus oder einer anderen Verbindung, an den Koprozessor 1445 aus. Ein oder mehrere Koprozessoren 1445 akzeptieren die empfangenen Koprozessorbefehle und führen sie aus.
  • Jetzt Bezug nehmend auf 15 ist ein Blockdiagramm eines ersten spezifischeren Systems 1500 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 15 gezeigt, ist Mehrprozessorsystem 1500 ein Punkt-zu-Punkt-Verbindungssystem und umfasst einen ersten Prozessor 1570 und einen zweiten Prozessor 1580, die über eine Punkt-zu-Punkt-Verbindung 1550 gekoppelt sind. Jeder der Prozessoren 1570 und 1580 kann eine Version des Prozessors 1300 sein. In einer Ausführungsform der Erfindung sind Prozessoren 1570 und 1580 Prozessoren 1410 bzw. 1415, während Koprozessor 1538 Koprozessor 1445 ist. In einer anderen Ausführungsform sind Prozessoren 1570 und 1580 Prozessor 1410 bzw. Koprozessor 1445.
  • Prozessoren 1570 und 1580 sind als integrierte Speichersteuerungseinheiten (IMC, Integrated Memory Controller) 1572 bzw. 1582 umfassend gezeigt. Prozessor 1570 umfasst auch als Teil seiner Bussteuerungseinheiten Punkt-zu-Punkt-Schnittstellen (P-P) 1576 und 1578; in ähnlicher Weise umfasst der zweite Prozessor 1580 P-P-Schnittstellen 1586 und 1588. Prozessoren 1570, 1580 können Informationen über eine Punkt-zu-Punkt-Schnittstelle (P-P) 1550 unter Verwendung von P-P-Schnittstellenschaltungen 1578, 1588 austauschen. Wie in 15 gezeigt, koppeln IMCs 1572 und 1582 die Prozessoren mit jeweiligen Speichern, insbesondere einem Speicher 1532 und einem Speicher 1534, die Teile des lokal mit den jeweiligen Prozessoren verbundenen Hauptspeichers sein können.
  • Prozessoren 1570, 1580 können auch jeweils Informationen mit einem Chipsatz 1590 über individuelle P-P-Schnittstellen 1552, 1554 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 1576, 1594, 1586, 1598 austauschen. Der Chipsatz 1590 kann optional Informationen mit dem Koprozessor 1538 über eine Hochleistungsschnittstelle 1592 austauschen. In einer Ausführungsform ist der Koprozessor 1538 ein spezieller Prozessor, wie etwa, beispielsweise, ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder ein Kommunikationsprozessor, eine Komprimierungsengine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder ähnliches.
  • Ein gemeinsam genutzter Cache (nicht gezeigt) kann in einem der beiden Prozessoren oder außerhalb beider Prozessoren enthalten sein; jedoch kann er über eine P-P-Verschaltung mit den Prozessoren verbunden sein, sodass lokale Cache-Informationen eines oder beider Prozessoren in dem gemeinsam genutzten Cache gespeichert werden können, wenn ein Prozessor in einen Niederleistungsmodus gesetzt wird.
  • Chipsatz 1590 kann mit einem ersten Bus 1516 über eine Schnittstelle 1596 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1516 ein peripherer Komponentenverbindungsbus (PCI, Peripheral Component Interconnect) oder ein Bus, wie etwa ein PCI-Express-Bus oder ein anderer E/A-Verbindungsbus der dritten Generation sein, obwohl der Schutzumfang der vorliegenden Erfindung nicht so beschränkt ist.
  • Wie in 15 gezeigt, können verschiedene E/A-Vorrichtungen 1514 mit dem ersten Bus 1516 gekoppelt sein, zusammen mit einer Busbrücke 1518, die den ersten Bus 1516 mit einem zweiten Bus 1520 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 1515, wie etwa Koprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie etwa, z. B. Grafikbeschleuniger oder Digitalsignalverarbeitungseinheiten (DSPs)), feldprogrammierbare Gate-Arrays oder jeder andere Prozessor, mit dem ersten Bus 1516 gekoppelt. In einer Ausführungsform kann der zweite Bus 1520 ein Bus mit niedriger Pinzahl (LPC, Low Pin Count) sein. Verschiedene Vorrichtungen können mit einem zweiten Bus 1520 gekoppelt sein, einschließlich, beispielsweise eine Tastatur und/oder eine Maus 1522, Kommunikationsvorrichtungen 1527 und eine Speichereinheit 1528, wie etwa ein Plattenlaufwerk oder eine andere Massenspeichervorrichtung, die, in einer Ausführungsform, Befehle/Code und Daten 1530 umfassen kann. Ferner kann eine Audio-E/A 1524 mit dem zweiten Bus 1520 gekoppelt sein. Es ist anzumerken, dass andere Architekturen möglich sind. Beispielsweise kann ein System anstelle der Punkt-zu-Punkt-Architektur aus 15 einen Multi-Drop-Bus oder eine andere solche Architektur umsetzen.
  • Jetzt Bezug nehmend auf 16 ist ein Blockdiagramm eines zweiten spezifischeren Systems 1600 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in 15 und 16 tragen ähnliche Bezugszeichen, und gewisse Aspekte von 15 wurden in 16 ausgelassen, um Eintrüben von anderen Aspekten aus 16 zu verhindern.
  • 16 stellt dar, dass die Prozessoren 1570, 1580 integrierten Speicher und E/A-Steuerlogik („CL“, Control Logic) 1572 bzw. 1582 umfassen können. Daher umfasst die CL 1572, 1582 integrierte Speichersteuerungseinheiten und umfasst E/A-Steuerlogik. 16 stellt dar, dass nicht nur die Speicher 1532, 1534 mit der CL 1572, 1582 gekoppelt sind, sondern dass auch E/A-Vorrichtungen 1614 ebenfalls mit der Steuerlogik 1572, 1582 gekoppelt sind. Ältere E/A-Vorrichtungen 1615 sind mit dem Chipsatz 1590 gekoppelt.
  • Jetzt Bezug nehmend auf 17 ist ein Blockdiagramm eines SoC 1700 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in 13 tragen ähnliche Bezugszeichen. Außerdem sind Felder mit gestrichelten Linien optionale Merkmale auf weiterentwickelten SoCs. In 17 ist bzw. sind Verbindungseinheit(en) 1702 gekoppelt mit: einem Anwendungsprozessor 1710, der einen Satz von einem oder mehreren Kernen 1302A-N umfasst, die Cacheeinheiten 1304A-N und gemeinsam genutzte Cacheeinheit(en) 1306 umfassen; einer Systemagenteneinheit 1310; einer oder mehreren Bussteuerungseinheiten 1316; einer oder mehreren integrierten Speichersteuerungseinheiten 1314; einem Satz aus einem oder mehreren Koprozessoren 1720, der integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor umfassen kann; einer statischen Direktzugriffsspeichereinheit (SRAM, Static Random Access Memory) 1730; einer Direktzugriffsspeichereinheit (DMA, Direct Memory Access) 1732; und einer Anzeigeeinheit 1740 zum Koppeln mit einer oder mehreren externen Anzeigen. In einer Ausführungsform umfasst bzw. umfassen der/die Koprozessor(en) 1720 einen speziellen Prozessor, wie etwa, beispielsweise, einen Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsengine, eine GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder ähnliches.
  • Ausführungsformen der hier offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination aus solchen Umsetzungsansätzen umgesetzt sein. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode umgesetzt sein, die bzw. der auf programmierbaren Systemen, zumindest einen Prozessor, ein Speichersystem (einschließlich flüchtiger und nicht-flüchtiger Speicher und/oder Speicherelemente), zumindest eine Eingabevorrichtung und zumindest eine Ausgabevorrichtung umfassend, ausgeführt werden bzw. wird.
  • Programmcode, wie etwa Code 1530, dargestellt in 15, kann auf die Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen durchzuführen und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können in bekannter Weise auf eine oder mehrere Ausgabevorrichtungen angewendet werden. Im Zusammenhang mit dieser Anmeldung umfasst ein Verarbeitungssystem jedes System, das einen Prozessor hat, wie etwa, beispielsweise, einen Digitalsignalprozessor (DSP), eine Mikrosteuerung, eine anwendungsspezifische integrierte Schaltung (ASIC, Application Specific Integrated Circuit) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren prozeduralen oder objektorientierten Programmiersprache umgesetzt sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann auch, wenn gewünscht, in Assembler- oder Maschinensprache umgesetzt sein. Tatsächlich sind die hier beschriebenen Mechanismen in ihrem Umfang nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte von zumindest einer Ausführungsform können durch repräsentative Befehle, gespeichert auf einem maschinenlesbaren Medium, das unterschiedliche Logik innerhalb des Prozessors repräsentiert, umgesetzt sein, die, wenn von einer Maschine gelesen, die Maschine veranlassen, Logik zu erzeugen, um die hier beschriebenen Techniken durchzuführen. Solche Repräsentationen, auch als „IP-Kerne“ bekannt, können auf einem greifbaren, maschinenlesbaren Medium gespeichert und verschiedenen Kunden oder Fertigungseinrichtungen bereitgestellt werden, um in die Fertigungsmaschinen geladen zu werden, die die Logik oder den Prozessor tatsächlich fertigen.
  • Solche maschinenlesbaren Speichermedien können unter anderem umfassen: nicht-flüchtige, greifbare Anordnungen von Artikeln, die durch eine Maschine gefertigt oder gebildet werden, einschließlich Speichermedien, wie etwa Festplatten, jeder andere Typ von Platte, einschließlich Floppy Disks, optische Platten, CD-Nur-Lese-Speicher (CD-ROMs, Compact Disk Read-Only Memories), wiederbeschreibbare Compact Disks (CD-RWs) und magnetooptische Platten, Halbleitervorrichtungen, wie etwa Nur-Lese-Speicher (ROMs, Read-Only Memories), Direktzugriffsspeicher (RAMs, Random Access Memories), wie etwa dynamische Direktzugriffsspeicher (DRAMs, Dynamic Random Access Memories), statische Direktzugriffsspeicher (SRAMs, Static Random Access Memories), löschbare, programmierbare Nur-Lese-Speicher (EPROMs, Erasable Programmable Read-Only Memories), Flash-Speicher, elektrisch löschbare, programmierbare Nur-Lese-Speicher (EEPROMs, Electrically Erasable Programmable Read-Only Memories), Phasenwechselspeicher (PCM, Phase Change Memory), magnetische oder optische Karten oder jeden anderen Typ von zum Speichern von elektronischen Befehlen geeigneten Medien.
  • Entsprechend umfassen Ausführungsformen der Erfindung auch nicht-flüchtige, greifbare, maschinenlesbare Medien, Befehle enthaltend oder Konzeptionsdaten enthaltend, wie etwa Hardwarebeschreibungssprache (HDL, Hardware Description Language), die Strukturen, Schaltungen, Einrichtungen, Prozessoren und/oder Systemmerkmale, wie hier beschrieben, definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulierung (einschließlich binäre Übersetzung, Code-Morphing usw.)
  • In einigen Fällen kann ein Befehlsumwandler verwendet werden, um einen Befehl aus einem Quellbefehlssatz in einen Zielbefehlssatz umzuwandeln. Beispielsweise kann der Befehlsumwandler einen Befehl in einen oder mehrere andere Befehle, die durch den Kern zu verarbeiten sind, übersetzen (z. B. unter Verwendung von statischer binärer Übersetzung, dynamischer binärer Übersetzung, einschließlich dynamischer Kompilierung), morphen, emulieren oder anderweitig umwandeln. Der Befehlsumwandler kann in Software, Hardware, Firmware oder einer Kombination daraus umgesetzt sein. Der Befehlsumwandler kann auf dem Prozessor, außerhalb des Prozessors oder teilweise auf und teilweise außerhalb des Prozessors sein.
  • 18 ist ein Blockdiagramm, die Verwendung eines Softwarebefehlsumwandlers zum Umwandeln binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz abgesetzt darstellend, gemäß Ausführungsformen der Erfindung. In der dargestellten Ausführungsform ist der Befehlsumwandler ein Softwarebefehlsumwandler, obwohl der Befehlsumwandler alternativ in Software, Firmware, Hardware oder verschiedenen Kombinationen daraus umgesetzt sein kann. 18 zeigt, wie ein Programm in einer höheren Sprache 1802 mit einem x86-Compiler 1804 kompiliert werden kann, um x86-Binärcode 1806 zu erzeugen, der systemintern durch einen Prozessor mit zumindest einem x86-Befehlssatzkern 1816 ausgeführt werden kann. Der Prozessor mit zumindest einem x86-Befehlssatzkern 1816 repräsentiert jeden Prozessor, der im Wesentlichen die gleichen Funktionen durchführen kann wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern durch kompatibles Ausführen oder anderweitiges Verarbeiten (1) eines wesentlichen Teils des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) von Objektcodeversionen von Anwendungen oder anderer Software, dazu bestimmt, auf einem Intel-Prozessor mit zumindest einem x86-Befehlssatzkern ausgeführt zu werden, um im Wesentlichen das gleiche Ergebnis zu erreichen wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern. Der x86-Compiler 1804 repräsentiert einen Compiler, der betreibbar ist, um x86-Binärcode 1806 (z. B. Objektcode) zu erzeugen, der mit oder ohne zusätzliche Verknüpfungsverarbeitung auf dem Prozessor mit zumindest einem x86-Befehlssatzkern 1816 ausgeführt werden kann. In ähnlicher Weise zeigt 18, wie das Programm in der höheren Sprache 1802 mit einem alternativen Befehlssatzcompiler 1808 kompiliert werden kann, um alternativen Befehlssatz-Binärcode 1810 zu erzeugen, der systemintern durch einen Prozessor ohne zumindest einen x86-Befehlssatzkern 1814 (z. B. einen Prozessor mit Kernen, die den MIPS Befehlssatz von MIPS Technologies aus Sunnyvale, CA ausführen und/oder den ARM-Befehlssatz von ARM Holdings aus Sunnyvale, CA, ausführen) ausgeführt werden kann. Der Befehlsumwandler 1812 wird verwendet, um den x86-Binärcode 1806 in Code umzuwandeln, der systemintern durch den Prozessor ohne einen x86-Befehlssatzkern 1814 ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht der gleiche wie der alternative Befehlssatz-Binärcode 1810, da ein Befehlsumwandler, der dies erreichen könnte, schwierig zu erstellen ist; allerdings erfüllt der umgewandelte Code die allgemeine Operation und besteht aus Befehlen aus dem alternativen Befehlssatz. Daher repräsentiert der Befehlsumwandler 1812 Software, Firmware, Hardware oder eine Kombination daraus, die, durch Emulierung, Simulation oder jeden anderen Prozess, einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen x86-Befehlssatzprozessor oder -kern hat, ermöglicht, den x86-Binärcode 1806 auszuführen.
  • Beispiel verschiedener Ausführungsformen sind im Folgenden erläutert.
  • Beispiel 1: ein Prozessor, der Folgendes umfasst:
    • Decodierungsschaltungsanordnungen zum Decodieren eines Befehls mit Feldern für einen Opcode, eine Kennung einer ersten Quellbitmatrix, eine Kennung einer zweiten Quellbitmatrix, eine Kennung einer Zielbitmatrix und einen Direktoperanden, und
    • Ausführungsschaltungsanordnungen zum Ausführen des decodierten Befehls zum Durchführen einer Bitmatrixmultiplikation der identifizierten ersten Quellbitmatrix mit der identifizierten zweiten Quellbitmatrix, wobei die Multiplikations- und Akkumulationsoperationen durch den Operationsselektor ausgewählt werden und ein Ergebnis der Bitmatrixmultiplikation in die identifizierte Zielbitmatrix speichern.
  • Beispiel 2. Der Prozessor aus Beispiel 1, wobei der Operationsselektor ein 8-Bit-Direktoperand ist.
  • Beispiel 3. Der Prozessor aus einem der Beispiele 1-2, wobei vier Bits des Direktoperanden verwendet werden, um die Akkumulationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  • Beispiel 4. Der Prozessor aus einem der Beispiele 1-2, wobei vier Bits des Direktoperanden verwendet werden, um die Multiplikationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  • Beispiel 5. Der Prozessor aus einem der Beispiele 1-4, wobei die identifizierte erste Quellmatrix eine 8x8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8x64-Bit-Matrix ist.
  • Beispiel 6. Der Prozessor aus einem der Beispiele 1-4, wobei die identifizierte erste Quellmatrix eine 64x8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8x8-Bit-Matrix ist.
  • Beispiel 7. Der Prozessor aus einem der Beispiele 1-4, wobei die identifizierte erste Quellmatrix eine 8×64-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64x64-Bit-Matrix ist.
  • Beispiel 8. Der Prozessor aus einem der Beispiele 1-7, wobei die identifizierte zweite Quellbitmatrix im Speicher gespeichert wird.
  • Beispiel 9. Der Prozessor aus einem der Beispiele 1-4, wobei die identifizierte erste Quellmatrix eine 64x8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64x8-Bit-Matrix ist.
  • Beispiel 10. Der Prozessor aus einem der Beispiele 1-8, wobei die identifizierte erste Quellbitmatrix im Speicher gespeichert wird.
  • Beispiel 11. Der Prozessor aus einem der Beispiele 1-10, wobei die Bitmatrixmultiplikation Folgendes umfasst: für jede Bitposition im Ziel, Multiplizieren eines Werts von jeder Bitposition einer entsprechenden Zeile in der identifizierten ersten Quellbitmatrix mit einem Wert der entsprechenden S-Bit-Position einer entsprechenden Spalte in der identifizierten zweiten Quellbitmatrix, Akkumulieren jeder der Multiplikationen und Speichern eines Ergebnisses des Akkumulierens.
  • Beispiel 12. Ein Prozessor, der Folgendes umfasst:
    • Decodierungsschaltungsanordnungen zum Decodieren eines Befehls mit Feldern für einen Opcode, eine Kennung einer ersten Quellbitmatrix, eine Kennung einer zweiten Quellbitmatrix, eine Kennung einer Zielbitmatrix und einen Direktoperanden, und
    • Ausführungsschaltungsanordnungen zum Ausführen des decodierten Befehls zum Durchführen einer Multiplikation einer Matrix aus S-Bit-Elementen der identifizierten ersten Quellbitmatrix mit S-Bit-Elementen der identifizierten zweiten Quellbitmatrix, wobei die Multiplikations- und
    • Akkumulationsoperationen durch den Operationsselektor ausgewählt werden und ein Ergebnis der Matrixmultiplikation in die identifizierte Zielbitmatrix speichern, wobei S eine Mehrfachbitgröße anzeigt.
  • Beispiel 13. Der Prozessor aus Beispiel 12, wobei S eine Bitgröße von 1, 2, 4 oder 8 anzeigt.
  • Beispiel 14. Der Prozessor aus einem der Beispiele 12-13, wobei der Operationsselektor ein 8-Bit-Direktoperand ist.
  • Beispiel 15. Der Prozessor aus einem der Beispiele 12-14, wobei vier Bits des Direktoperanden verwendet werden, um die Akkumulationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  • Beispiel 16. Der Prozessor aus einem der Beispiele 12-15, wobei vier Bits des Direktoperanden verwendet werden, um die Multiplikationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  • Beispiel 17. Der Prozessor aus einem der Beispiele 12-16, wobei die identifizierte erste Quellmatrix eine 8x8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8x64-Bit-Matrix ist.
  • Beispiel 18. Der Prozessor aus einem der Beispiele 12-16, wobei die identifizierte erste Quellmatrix eine 64x8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8x8-Bit-Matrix ist.
  • Beispiel 19. Der Prozessor aus einem der Beispiele 12-16, wobei die identifizierte erste Quellmatrix eine 8×64-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64x64-Bit-Matrix ist.
  • Beispiel 20. Der Prozessor aus einem der Beispiele 12-19, wobei die identifizierte zweite Quellbitmatrix im Speicher gespeichert wird.
  • Beispiel 21. Der Prozessor aus einem der Beispiele 12-16, wobei die identifizierte erste Quellmatrix eine 64×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64×8-Bit-Matrix ist.
  • Beispiel 22. Der Prozessor aus einem der Beispiele 12-21, wobei die identifizierte erste Quellbitmatrix im Speicher gespeichert wird.
  • Beispiel 23. Der Prozessor aus einem der Beispiele 12-22, wobei die Bitmatrixmultiplikation Folgendes umfasst: für jede S-Bit-Positionsgruppe im Ziel, Multiplizieren eines S-Bitgruppenwerts jeder S-Bit-Positionsgruppe einer entsprechenden Zeile in der identifizierten ersten Quellbitmatrix mit einem Wert der entsprechenden S-Bit-Positionsgruppe einer entsprechenden Spalte in der identifizierten zweiten Quellbitmatrix, Akkumulieren jeder der Multiplikationen und Speichern eines Ergebnisses des Akkumulierens.
  • Beispiel 24. Verfahren, das Folgendes umfasst:
  • Decodieren eines Befehls mit Feldern für einen Opcode, eine Kennung einer ersten Quellbitmatrix, eine Kennung einer zweiten Quellbitmatrix, eine Kennung einer Zielbitmatrix und einen Direktoperanden, und Ausführen des decodierten Befehls zum Durchführen einer Multiplikation einer Matrix aus S-Bit-Elementen der identifizierten ersten Quellbitmatrix mit S-Bit-Elementen der identifizierten zweiten Quellbitmatrix, wobei die Multiplikations- und Akkumulationsoperationen durch den Operationsselektor ausgewählt werden und ein Ergebnis der Matrixmultiplikation in die identifizierte Zielbitmatrix speichern, wobei S eine Mehrfachbitgröße anzeigt.
  • Beispiel 25. Das Verfahren aus Beispiel 24, wobei S eine Bitgröße von 1, 2, 4 oder 8 anzeigt.
  • Beispiel 26. Das Verfahren aus einem der Beispiele 24-25, wobei der Operationsselektor ein 8-Bit-Direktoperand ist.
  • Beispiel 27. Das Verfahren aus einem der Beispiele 24-26, wobei vier Bits des Direktoperanden verwendet werden, um die Akkumulationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  • Beispiel 28. Das Verfahren aus einem der Beispiele 24-27, wobei vier Bits des Direktoperanden verwendet werden, um die Multiplikationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  • Beispiel 29. Das Verfahren aus einem der Beispiele 24-28, wobei die identifizierte erste Quellmatrix eine 8×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8×64-Bit-Matrix ist.
  • Beispiel 30. Das Verfahren aus einem der Beispiele 24-28, wobei die identifizierte erste Quellmatrix eine 64×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8×8-Bit-Matrix ist.
  • Beispiel 31. Das Verfahren aus einem der Beispiele 24-28, wobei die identifizierte erste Quellmatrix eine 8×64-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64×64-Bit-Matrix ist.
  • Beispiel 32. Das Verfahren aus einem der Beispiele 24-31, wobei die identifizierte zweite Quellbitmatrix im Speicher gespeichert wird.
  • Beispiel 33. Das Verfahren aus einem der Beispiele 24-27, wobei die identifizierte erste Quellmatrix eine 64×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64×8-Bit-Matrix ist.
  • Beispiel 34. Das Verfahren aus einem der Beispiele 24-33, wobei die identifizierte erste Quellbitmatrix im Speicher gespeichert wird.
  • Beispiel 35. Das Verfahren aus einem der Beispiele 24-34, wobei die Bitmatrixmultiplikation Folgendes umfasst: für jede S-Bit-Positionsgruppe im Ziel, Multiplizieren eines S-Bitgruppenwerts jeder S-Bit-Positionsgruppe einer entsprechenden Zeile in der identifizierten ersten Quellbitmatrix mit einem Wert der entsprechenden S-Bit-Positionsgruppe einer entsprechenden Spalte in der identifizierten zweiten Quellbitmatrix, Akkumulieren jeder der Multiplikationen und Speichern eines Ergebnisses des Akkumulierens.
  • Beispiel 36. Ein nichtflüchtiges maschinenlesbares Medium, das einen Befehl speichert, der, wenn er durch einen Prozessor ausgeführt wird, den Prozessor veranlasst, ein Verfahren durchzuführen, wobei das Verfahren Folgendes umfasst: Decodieren eines Befehls mit Feldern für einen Opcode, eine Kennung einer ersten Quellbitmatrix, eine Kennung einer zweiten Quellbitmatrix, eine Kennung einer Zielbitmatrix und einen Direktoperanden, und Ausführen des decodierten Befehls zum Durchführen einer Multiplikation einer Matrix aus S-Bit-Elementen der identifizierten ersten Quellbitmatrix mit S-Bit-Elementen der identifizierten zweiten Quellbitmatrix, wobei die Multiplikations- und Akkumulationsoperationen durch den Operationsselektor ausgewählt werden und ein Ergebnis der Matrixmultiplikation in die identifizierte Zielbitmatrix speichern, wobei S eine Mehrfachbitgröße anzeigt.
  • Beispiel 37. Das nichtflüchtige maschinenlesbare Medium aus Beispiel 36, wobei S eine Bitgröße von 1, 2, 4 oder 8 anzeigt.
  • Beispiel 38. Das nichtflüchtige maschinenlesbare Medium aus einem der Beispiele 36-37, wobei der Operationsselektor ein 8-Bit-Direktoperand ist.
  • Beispiel 39. Das nichtflüchtige maschinenlesbare Medium aus einem der Beispiele 36-38, wobei vier Bits des Direktoperanden verwendet werden, um die Akkumulationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  • Beispiel 40. Das nichtflüchtige maschinenlesbare Medium aus einem der Beispiele 36-39, wobei vier Bits des Direktoperanden verwendet werden, um die Multiplikationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  • Beispiel 41. Das nichtflüchtige maschinenlesbare Medium aus einem der Beispiele 36-40, wobei die identifizierte erste Quellmatrix eine 8×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8×64-Bit-Matrix ist.
  • Beispiel 42. Das nichtflüchtige maschinenlesbare Medium aus einem der Beispiele 36-40, wobei die identifizierte erste Quellmatrix eine 64×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8×8-Bit-Matrix ist.
  • Beispiel 43. Das nichtflüchtige maschinenlesbare Medium aus einem der Beispiele 36-40, wobei die identifizierte erste Quellmatrix eine 8×64-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64×64-Bit-Matrix ist.
  • Beispiel 44. Das nichtflüchtige maschinenlesbare Medium aus einem der Beispiele 36-40, wobei die identifizierte zweite Quellbitmatrix im Speicher gespeichert wird.
  • Beispiel 45. Das nichtflüchtige maschinenlesbare Medium aus einem der Beispiele 36-40, wobei die identifizierte erste Quellmatrix eine 64×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64×8-Bit-Matrix ist.
  • Beispiel 46. Das nichtflüchtige maschinenlesbare Medium aus einem der Beispiele 36-45, wobei die identifizierte erste Quellbitmatrix im Speicher gespeichert wird.
  • Beispiel 47. Das nichtflüchtige maschinenlesbare Medium aus einem der Beispiele 36-46, wobei die Bitmatrixmultiplikation Folgendes umfasst: für jede S-Bit-Positionsgruppe im Ziel, Multiplizieren eines S-Bitgruppenwerts jeder S-Bit-Positionsgruppe einer entsprechenden Zeile in der identifizierten ersten Quellbitmatrix mit einem Wert der entsprechenden S-Bit-Positionsgruppe einer entsprechenden Spalte in der identifizierten zweiten Quellbitmatrix, Akkumulieren jeder der Multiplikationen und Speichern eines Ergebnisses des Akkumulierens.
  • Beispiel 48. Eine Einrichtung, die Folgendes umfasst: Decodiermittel zum Decodieren eines Befehls mit Feldern für einen Opcode, eine Kennung einer ersten Quellbitmatrix, eine Kennung einer zweiten Quellbitmatrix, eine Kennung einer Zielbitmatrix und einen Direktoperanden, und Ausführungsmittel zum Ausführen des decodierten Befehls zum Durchführen einer Multiplikation einer Matrix aus S-Bit-Elementen der identifizierten ersten Quellbitmatrix mit S-Bit-Elementen der identifizierten zweiten Quellbitmatrix, wobei die Multiplikations- und Akkumulationsoperationen durch den Operationsselektor ausgewählt werden und ein Ergebnis der Matrixmultiplikation in die identifizierte Zielbitmatrix speichern, wobei S eine Mehrfachbitgröße anzeigt.
  • Beispiel 49. Die Einrichtung aus Beispiel 48, wobei S eine Bitgröße von 1, 2, 4 oder 8 anzeigt.
  • Beispiel 50. Die Einrichtung aus einem der Beispiele 48-49, wobei der Operationsselektor ein 8-Bit-Direktoperand ist.
  • Beispiel 51. Die Einrichtung aus einem der Beispiele 48-50, wobei vier Bits des Direktoperanden verwendet werden, um die Akkumulationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  • Beispiel 52. Die Einrichtung aus einem der Beispiele 48-51, wobei vier Bits des Direktoperanden verwendet werden, um die Multiplikationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  • Beispiel 53. Die Einrichtung aus einem der Beispiele 48-52, wobei die identifizierte erste Quellmatrix eine 8×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8×64-Bit-Matrix ist.
  • Beispiel 54. Die Einrichtung aus einem der Beispiele 48-52, wobei die identifizierte erste Quellmatrix eine 64×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8×8-Bit-Matrix ist.
  • Beispiel 55. Die Einrichtung aus einem der Beispiele 48-52, wobei die identifizierte erste Quellmatrix eine 8×64-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64×64-Bit-Matrix ist.
  • Beispiel 56. Die Einrichtung aus einem der Beispiele 48-55, wobei die identifizierte zweite Quellbitmatrix im Speicher gespeichert wird.
  • Beispiel 57. Die Einrichtung aus einem der Beispiele 48-52, wobei die identifizierte erste Quellmatrix eine 64×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64×8-Bit-Matrix ist.
  • Beispiel 58. Die Einrichtung aus einem der Beispiele 48-57, wobei die identifizierte erste Quellbitmatrix im Speicher gespeichert wird.
  • Beispiel 59. Die Einrichtung aus einem der Beispiele 48-58, wobei die Bitmatrixmultiplikation Folgendes umfasst: für jede S-Bit-Positionsgruppe im Ziel, Multiplizieren eines S-Bitgruppenwerts jeder S-Bit-Positionsgruppe einer entsprechenden Zeile in der identifizierten ersten Quellbitmatrix mit einem Wert der entsprechenden S-Bit-Positionsgruppe einer entsprechenden Spalte in der identifizierten zweiten Quellbitmatrix, Akkumulieren jeder der Multiplikationen und Speichern eines Ergebnisses des Akkumulierens.

Claims (25)

  1. Prozessor, der Folgendes umfasst: Decodierschaltungsanordnung zum Decodieren eines Befehls mit Feldern für einen Opcode, eine Kennung einer ersten Quellbitmatrix, eine Kennung einer zweiten Quellbitmatrix, eine Kennung einer Zielbitmatrix und einen Direktoperanden; und Ausführungsschaltungsanordnung zum Ausführen des decodierten Befehls zum Durchführen einer Bitmatrixmultiplikation der identifizierten ersten Quellbitmatrix mit der identifizierten zweiten Quellbitmatrix, wobei die Multiplikations- und Akkumulationsoperationen durch den Operationsselektor ausgewählt werden und ein Ergebnis der Bitmatrixmultiplikation in die identifizierte Zielbitmatrix speichern.
  2. Prozessor nach Anspruch 1, wobei der Operationsselektor ein 8-Bit-Direktoperand ist.
  3. Prozessor nach einem der Ansprüche 1-2, wobei vier Bits des Direktoperanden verwendet werden, um die Akkumulationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  4. Prozessor nach einem der Ansprüche 1-2, wobei vier Bits des Direktoperanden verwendet werden, um die Multiplikationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  5. Prozessor nach einem der Ansprüche 1-4, wobei die identifizierte erste Quellmatrix eine 8×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8×64-Bit-Matrix ist.
  6. Prozessor nach einem der Ansprüche 1-4, wobei die identifizierte erste Quellmatrix eine 64×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8×8-Bit-Matrix ist.
  7. Prozessor nach einem der Ansprüche 1-4, wobei die identifizierte erste Quellmatrix eine 8×64-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64×64-Bit-Matrix ist.
  8. Prozessor nach einem der Ansprüche 1-7, wobei die identifizierte zweite Quellbitmatrix im Speicher gespeichert wird.
  9. Prozessor nach einem der Ansprüche 1-4, wobei die identifizierte erste Quellmatrix eine 64×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64×8-Bit-Matrix ist.
  10. Prozessor nach einem der Ansprüche 1-8, wobei die identifizierte erste Quellbitmatrix im Speicher gespeichert wird.
  11. Prozessor nach einem der Ansprüche 1-10, wobei die Bitmatrixmultiplikation Folgendes umfasst: für jede Bitposition im Ziel, Multiplizieren eines Werts von jeder Bitposition einer entsprechenden Zeile in der identifizierten ersten Quellbitmatrix mit einem Wert der entsprechenden S-Bit-Position einer entsprechenden Spalte in der identifizierten zweiten Quellbitmatrix, Akkumulieren jeder der Multiplikationen und Speichern eines Ergebnisses des Akkumulierens.
  12. Prozessor, der Folgendes umfasst: Decodierschaltungsanordnung zum Decodieren eines Befehls mit Feldern für einen Opcode, eine Kennung einer ersten Quellbitmatrix, eine Kennung einer zweiten Quellbitmatrix, eine Kennung einer Zielbitmatrix und einen Direktoperanden; und Ausführungsschaltungsanordnung zum Ausführen des decodierten Befehls zum Durchführen einer Multiplikation einer Matrix aus S-Bit-Elementen der identifizierten ersten Quellbitmatrix mit S-Bit-Elementen der identifizierten zweiten Quellbitmatrix, wobei die Multiplikations- und Akkumulationsoperationen durch den Operationsselektor ausgewählt werden und ein Ergebnis der Matrixmultiplikation in die identifizierte Zielbitmatrix speichern, wobei S eine Mehrfachbitgröße anzeigt.
  13. Prozessor nach Anspruch 12, wobei S eine Bitgröße von 1, 2, 4 oder 8 anzeigt.
  14. Prozessor nach einem der Ansprüche 12-13, wobei der Operationsselektor ein 8-Bit-Direktoperand ist.
  15. Prozessor nach einem der Ansprüche 12-14, wobei vier Bits des Direktoperanden verwendet werden, um die Akkumulationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  16. Prozessor nach einem der Ansprüche 12-15, wobei vier Bits des Direktoperanden verwendet werden, um die Multiplikationsoperation der Gruppe aus exklusivem OR (XOR), AND, OR und NOR auszuwählen.
  17. Prozessor nach einem der Ansprüche 12-16, wobei die identifizierte erste Quellmatrix eine 8x8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8×64-Bit-Matrix ist.
  18. Prozessor nach einem der Ansprüche 12-16, wobei die identifizierte erste Quellmatrix eine 64×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 8×8-Bit-Matrix ist.
  19. Prozessor nach einem der Ansprüche 12-16, wobei die identifizierte erste Quellmatrix eine 8×64-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64×64-Bit-Matrix ist.
  20. Prozessor nach einem der Ansprüche 12-19, wobei die identifizierte zweite Quellbitmatrix im Speicher gespeichert wird.
  21. Prozessor nach einem der Ansprüche 12-16, wobei die identifizierte erste Quellmatrix eine 64×8-Bit-Matrix ist und die identifizierte zweite Quellbitmatrix eine 64×8-Bit-Matrix ist.
  22. Prozessor nach einem der Ansprüche 12-21, wobei die identifizierte erste Quellbitmatrix im Speicher gespeichert wird.
  23. Prozessor nach einem der Ansprüche 12-22, wobei die Bitmatrixmultiplikation Folgendes umfasst: für jede S-Bit-Positionsgruppe im Ziel, Multiplizieren eines S-Bitgruppenwerts jeder S-Bit-Positionsgruppe einer entsprechenden Zeile in der identifizierten ersten Quellbitmatrix mit einem Wert der entsprechenden S-Bit-Positionsgruppe einer entsprechenden Spalte in der identifizierten zweiten Quellbitmatrix, Akkumulieren jeder der Multiplikationen und Speichern eines Ergebnisses des Akkumulierens.
  24. Verfahren, das Folgendes umfasst: Decodieren eines Befehls mit Feldern für einen Opcode, eine Kennung einer ersten Quellbitmatrix, eine Kennung einer zweiten Quellbitmatrix, eine Kennung einer Zielbitmatrix und einen Direktoperanden; und Ausführen des decodierten Befehls zum Durchführen einer Multiplikation einer Matrix aus S-Bit-Elementen der identifizierten ersten Quellbitmatrix mit S-Bit-Elementen der identifizierten zweiten Quellbitmatrix, wobei die Multiplikations- und Akkumulationsoperationen durch den Operationsselektor ausgewählt werden und ein Ergebnis der Matrixmultiplikation in die identifizierte Zielbitmatrix speichern, wobei S eine Mehrfachbitgröße anzeigt.
  25. Vorrichtung, die Folgendes umfasst: Decodiermittel zum Decodieren eines Befehls mit Feldern für einen Opcode, eine Kennung einer ersten Quellbitmatrix, eine Kennung einer zweiten Quellbitmatrix, eine Kennung einer Zielbitmatrix und einen Direktoperanden; und Ausführungsmittel zum Ausführen des decodierten Befehls zum Durchführen einer Multiplikation einer Matrix aus S-Bit-Elementen der identifizierten ersten Quellbitmatrix mit S-Bit-Elementen der identifizierten zweiten Quellbitmatrix, wobei die Multiplikations- und Akkumulationsoperationen durch den Operationsselektor ausgewählt werden und ein Ergebnis der Matrixmultiplikation in die identifizierte Zielbitmatrix speichern, wobei S eine Mehrfachbitgröße anzeigt.
DE102018006744.1A 2017-09-29 2018-08-24 Bitmatrixmultiplikation Pending DE102018006744A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/721,529 US10534838B2 (en) 2017-09-29 2017-09-29 Bit matrix multiplication
US15/721,529 2017-09-29

Publications (1)

Publication Number Publication Date
DE102018006744A1 true DE102018006744A1 (de) 2019-04-04

Family

ID=65727752

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018006744.1A Pending DE102018006744A1 (de) 2017-09-29 2018-08-24 Bitmatrixmultiplikation

Country Status (3)

Country Link
US (4) US10534838B2 (de)
CN (3) CN113791820B (de)
DE (1) DE102018006744A1 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10776699B2 (en) * 2017-05-05 2020-09-15 Intel Corporation Optimized compute hardware for machine learning operations
JP7160441B2 (ja) * 2018-01-31 2022-10-25 日本電気株式会社 情報処理装置及び制御方法
CN110597487B (zh) * 2019-08-26 2021-10-08 华中科技大学 一种矩阵向量乘法电路及计算方法
US20210279055A1 (en) * 2020-03-03 2021-09-09 Nvidia Corporation Technique for performing bit-linear transformations
US11392384B2 (en) * 2020-09-04 2022-07-19 Alibaba Group Holding Limited Methods of breaking down coarse-grained tasks for fine-grained task re-scheduling
CN112182496B (zh) * 2020-09-24 2022-09-16 成都海光集成电路设计有限公司 用于矩阵乘法的数据处理方法及装置
US20240103858A1 (en) * 2022-09-22 2024-03-28 Apple Inc. Instruction Support for Matrix Multiplication

Family Cites Families (84)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2413712A1 (fr) 1977-12-30 1979-07-27 Ibm France Microprocesseur specialise pour le calcul de la somme de produits de deux operandes complexes
US5119484A (en) 1987-02-24 1992-06-02 Digital Equipment Corporation Selections between alternate control word and current instruction generated control word for alu in respond to alu output and current instruction
US4937775A (en) 1988-11-21 1990-06-26 General Electric Company Apparatus for the cross-correlation of a pair of complex sampled signals
US5170370A (en) * 1989-11-17 1992-12-08 Cray Research, Inc. Vector bit-matrix multiply functional unit
US5442577A (en) 1994-03-08 1995-08-15 Exponential Technology, Inc. Sign-extension of immediate constants in an alu
US5953241A (en) 1995-08-16 1999-09-14 Microunity Engeering Systems, Inc. Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction
US5721892A (en) 1995-08-31 1998-02-24 Intel Corporation Method and apparatus for performing multiply-subtract operations on packed data
US6385634B1 (en) 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US7395298B2 (en) 1995-08-31 2008-07-01 Intel Corporation Method and apparatus for performing multiply-add operations on packed data
US6237016B1 (en) 1995-09-05 2001-05-22 Intel Corporation Method and apparatus for multiplying and accumulating data samples and complex coefficients
US5936872A (en) 1995-09-05 1999-08-10 Intel Corporation Method and apparatus for storing complex numbers to allow for efficient complex multiplication operations and performing such complex multiplication operations
US5983253A (en) 1995-09-05 1999-11-09 Intel Corporation Computer system for performing complex digital filters
US6058408A (en) 1995-09-05 2000-05-02 Intel Corporation Method and apparatus for multiplying and accumulating complex numbers in a digital filter
US6470370B2 (en) 1995-09-05 2002-10-22 Intel Corporation Method and apparatus for multiplying and accumulating complex numbers in a digital filter
US5880985A (en) 1996-10-18 1999-03-09 Intel Corporation Efficient combined array for 2n bit n bit multiplications
US7395302B2 (en) 1998-03-31 2008-07-01 Intel Corporation Method and apparatus for performing horizontal addition and subtraction
US6839728B2 (en) 1998-10-09 2005-01-04 Pts Corporation Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture
US6272512B1 (en) 1998-10-12 2001-08-07 Intel Corporation Data manipulation instruction for enhancing value and efficiency of complex arithmetic
US6523055B1 (en) 1999-01-20 2003-02-18 Lsi Logic Corporation Circuit and method for multiplying and accumulating the sum of two products in a single cycle
US6366937B1 (en) 1999-03-11 2002-04-02 Hitachi America Ltd. System and method for performing a fast fourier transform using a matrix-vector multiply instruction
FR2793971B1 (fr) 1999-05-20 2001-08-31 France Telecom Multiplieur de nombres complexes
US6675187B1 (en) 1999-06-10 2004-01-06 Agere Systems Inc. Pipelined linear array of processor elements for performing matrix computations
US6542916B1 (en) 1999-07-28 2003-04-01 Arm Limited Data processing apparatus and method for applying floating-point operations to first, second and third operands
US6609140B1 (en) 1999-11-30 2003-08-19 Mercury Computer Systems, Inc. Methods and apparatus for fast fourier transforms
US7072929B2 (en) 2000-11-01 2006-07-04 Pts Corporation Methods and apparatus for efficient complex long multiplication and covariance matrix implementation
JP2003016051A (ja) 2001-06-29 2003-01-17 Nec Corp 複素ベクトル演算プロセッサ
US6922716B2 (en) 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
US6813627B2 (en) 2001-07-31 2004-11-02 Hewlett-Packard Development Company, L.P. Method and apparatus for performing integer multiply operations using primitive multi-media operations that operate on smaller operands
US7624138B2 (en) 2001-10-29 2009-11-24 Intel Corporation Method and apparatus for efficient integer transform
US7376812B1 (en) 2002-05-13 2008-05-20 Tensilica, Inc. Vector co-processor for configurable and extensible processor architecture
US7392368B2 (en) 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
JP3958662B2 (ja) 2002-09-25 2007-08-15 松下電器産業株式会社 プロセッサ
US20040122887A1 (en) * 2002-12-20 2004-06-24 Macy William W. Efficient multiplication of small matrices using SIMD registers
KR101005718B1 (ko) 2003-05-09 2011-01-10 샌드브리지 테크놀로지스, 인코포레이티드 포화와 함께 또는 포화 없이 다중 오퍼랜드들의 누산을 위한 프로세서 감소 유닛
US7546329B2 (en) 2003-09-29 2009-06-09 Broadcom Corporation Systems for performing multiplication operations on operands representing complex numbers
US7546330B2 (en) 2003-09-30 2009-06-09 Broadcom Corporation Systems for performing multiply-accumulate operations on operands representing complex numbers
US9465611B2 (en) 2003-10-02 2016-10-11 Broadcom Corporation Processor execution unit with configurable SIMD functional blocks for complex number operations
GB2409065B (en) 2003-12-09 2006-10-25 Advanced Risc Mach Ltd Multiplexing operations in SIMD processing
GB2409062C (en) 2003-12-09 2007-12-11 Advanced Risc Mach Ltd Aliasing data processing registers
US7769797B2 (en) 2004-01-20 2010-08-03 Samsung Electronics Co., Ltd. Apparatus and method of multiplication using a plurality of identical partial multiplication modules
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US8229991B2 (en) 2005-05-05 2012-07-24 Mips Technologies, Inc. Processor core and multiplier that support a multiply and difference operation by inverting sign bits in booth recoding
US7555514B2 (en) 2006-02-13 2009-06-30 Atmel Corportation Packed add-subtract operation in a microprocessor
US7797366B2 (en) 2006-02-15 2010-09-14 Qualcomm Incorporated Power-efficient sign extension for booth multiplication methods and systems
US8307196B2 (en) 2006-04-05 2012-11-06 Freescale Semiconductor, Inc. Data processing system having bit exact instructions and methods therefor
US8261155B2 (en) * 2007-03-09 2012-09-04 Qualcomm Incorporated Methods and apparatus for encoding and decoding low density parity check (LDPC) codes
US20080288756A1 (en) * 2007-05-18 2008-11-20 Johnson Timothy J "or" bit matrix multiply vector instruction
US20120072704A1 (en) * 2007-05-18 2012-03-22 Cray Inc. "or" bit matrix multiply vector instruction
JP2009048532A (ja) 2007-08-22 2009-03-05 Nec Electronics Corp マイクロプロセッサ
JP2009075676A (ja) 2007-09-18 2009-04-09 Nec Electronics Corp マイクロプロセッサ
US8325403B1 (en) * 2008-02-28 2012-12-04 Compass Electro-Optical Systems Ltd Optical programmable matrix processor
GB2464292A (en) 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US9104510B1 (en) 2009-07-21 2015-08-11 Audience, Inc. Multi-function floating point unit
US8577950B2 (en) * 2009-08-17 2013-11-05 International Business Machines Corporation Matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US8650240B2 (en) 2009-08-17 2014-02-11 International Business Machines Corporation Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US8458442B2 (en) 2009-08-26 2013-06-04 International Business Machines Corporation Method and structure of using SIMD vector architectures to implement matrix multiplication
GB2474901B (en) 2009-10-30 2015-01-07 Advanced Risc Mach Ltd Apparatus and method for performing multiply-accumulate operations
US20120166511A1 (en) 2010-12-22 2012-06-28 Hiremath Chetan D System, apparatus, and method for improved efficiency of execution in signal processing algorithms
US8788549B2 (en) 2011-05-02 2014-07-22 Saankhya Labs Private Limited Zero overhead block floating point implementation in CPU's
US9092227B2 (en) 2011-05-02 2015-07-28 Anindya SAHA Vector slot processor execution unit for high speed streaming inputs
WO2013095552A1 (en) 2011-12-22 2013-06-27 Intel Corporation Vector instruction for presenting complex conjugates of respective complex numbers
WO2013095614A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Super multiply add (super madd) instruction
EP2798475A4 (de) 2011-12-30 2016-07-13 Intel Corp Transponierte anweisung
JP5727107B2 (ja) 2012-09-21 2015-06-03 インテル コーポレイション バイナリトランスレーションを実行する方法及びシステム
WO2014105154A1 (en) 2012-12-24 2014-07-03 Intel Corporation Systems, methods, and computer program products for performing mathematical operations
US8935468B2 (en) 2012-12-31 2015-01-13 Cadence Design Systems, Inc. Audio digital signal processor
US9489197B2 (en) 2013-07-09 2016-11-08 Texas Instruments Incorporated Highly efficient different precision complex multiply accumulate to enhance chip rate functionality in DSSS cellular systems
US9118631B1 (en) 2013-08-16 2015-08-25 Google Inc. Mixing secure and insecure data and operations at server database
CN104462016B (zh) 2013-09-22 2018-06-05 南京中兴软件有限责任公司 一种矢量运算核以及矢量处理器
US9792118B2 (en) 2013-11-15 2017-10-17 Qualcomm Incorporated Vector processing engines (VPEs) employing a tapped-delay line(s) for providing precision filter vector processing operations with reduced sample re-fetching and power consumption, and related vector processor systems and methods
GB2520571B (en) 2013-11-26 2020-12-16 Advanced Risc Mach Ltd A data processing apparatus and method for performing vector processing
FR3021428B1 (fr) * 2014-05-23 2017-10-13 Kalray Multiplication de matrices de bits utilisant des registres explicites
KR101753467B1 (ko) * 2014-06-26 2017-07-03 인텔 코포레이션 범용 gf(256) simd 암호용 산술 기능성을 제공하는 명령어 및 로직
US9519460B1 (en) 2014-09-25 2016-12-13 Cadence Design Systems, Inc. Universal single instruction multiple data multiplier and wide accumulator unit
US20160179523A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Apparatus and method for vector broadcast and xorand logical instruction
US11544214B2 (en) 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
US20170161069A1 (en) * 2015-12-08 2017-06-08 Knuedge, Inc. Microprocessor including permutation instructions
US9778905B1 (en) 2016-01-13 2017-10-03 Xilinx, Inc. Multiplier circuits configurable for real or complex operation
US10180820B2 (en) 2016-09-30 2019-01-15 HEWLETT PACKARD ENTERPRlSE DEVELOPMENT LP Multiply-accumulate circuits
US11023231B2 (en) 2016-10-01 2021-06-01 Intel Corporation Systems and methods for executing a fused multiply-add instruction for complex numbers
US10146535B2 (en) 2016-10-20 2018-12-04 Intel Corporatoin Systems, apparatuses, and methods for chained fused multiply add
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US10489154B2 (en) 2017-11-28 2019-11-26 Intel Corporation Apparatus and method for complex multiply and accumulate
US10452394B2 (en) 2017-11-28 2019-10-22 Intel Corporation Apparatus and method for complex multiplication

Also Published As

Publication number Publication date
US20190102357A1 (en) 2019-04-04
CN117130578A (zh) 2023-11-28
US11568022B2 (en) 2023-01-31
US20200167407A1 (en) 2020-05-28
US20210271733A1 (en) 2021-09-02
US20230195835A1 (en) 2023-06-22
CN109582283A (zh) 2019-04-05
US10534838B2 (en) 2020-01-14
CN113791820A (zh) 2021-12-14
US10929504B2 (en) 2021-02-23
CN113791820B (zh) 2023-09-19

Similar Documents

Publication Publication Date Title
DE102018006744A1 (de) Bitmatrixmultiplikation
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE112013005236T5 (de) Verfahren und Vorrichtung für Integralbild-Berechnungsbefehle
DE102019100009A1 (de) Vereinheitlichter Hardwarebeschleuniger für Verschlüsselungssysteme mit symmetrischen Schlüsseln
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE102018125232A1 (de) Einrichtung und Verfahren für komplexe Multiplikation und Akkumulation
DE112011105122T5 (de) Systeme, Vorrichtungen und Verfahren zum Vermischen zweier Quelloperanden in einem einzigen Ziel unter Verwendung einer Schreibmaske
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE102019109845A1 (de) Vereinheitlichte Beschleunigung eines Blockgeheimcodes eines symmetrischen Schlüssels für AES-SMS4-Camellia
DE112013005343T5 (de) Befehle für Codierungsalgorithemen mit gleitendem Fenster
DE102008061062A1 (de) Befehle und Logik zum Durchführen von Maskenlade- und -speicheroperationen
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE112012007063T5 (de) Zusammenfügen von benachbarten Sammel-/Streuoperationen
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE112013004798T5 (de) Befehlssatz zur Nachrichtenplanung des SHA256-Algorithmus
DE112011105818T5 (de) Systeme, Vorrichtungen und Verfahren zum Expandieren einer Speicherquelle in ein Zielregister und komprimieren eines Quellenregisters in eine Zielspeicherstelle
DE112017003336T5 (de) Vorrichtungen, verfahren und systeme zum elementsortieren von vektoren
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
DE112013004783T5 (de) Durch Lese- und Schreibmasken gesteuerter Vektor-Verschiebebefehl
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102018124919A1 (de) Skalierbare speicheroptimierte Hardware für Matrix-Solve
DE102015002253A1 (de) Verfahren und Vorrichtung zum Ausführen mehrerer Multiplikationsoperationen
DE112016004348T5 (de) Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: SAMSON & PARTNER PATENTANWAELTE MBB, DE

R130 Divisional application to

Ref document number: 102018010454

Country of ref document: DE

R130 Divisional application to

Ref document number: 102018010454

Country of ref document: DE