DE102018124945A1 - Einrichtung und verfahren für komplexe multiplikation - Google Patents

Einrichtung und verfahren für komplexe multiplikation Download PDF

Info

Publication number
DE102018124945A1
DE102018124945A1 DE102018124945.4A DE102018124945A DE102018124945A1 DE 102018124945 A1 DE102018124945 A1 DE 102018124945A1 DE 102018124945 A DE102018124945 A DE 102018124945A DE 102018124945 A1 DE102018124945 A1 DE 102018124945A1
Authority
DE
Germany
Prior art keywords
term
operand
real part
imaginary part
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
DE102018124945.4A
Other languages
English (en)
Inventor
Robert Valentine
Mark Charney
Raanan Sade
Elmoustapha Ould-Ahmed-Vall
Jesus Corbal
Roman S. Dubstov
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 DE102018124945A1 publication Critical patent/DE102018124945A1/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
    • 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
    • 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/4806Computations with complex numbers
    • G06F7/4812Complex multiplication
    • 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
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/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/4806Computations with complex numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

Eine Ausführungsform der Erfindung ist ein Prozessor, umfassend eine Ausführungsschaltungsanordnung zum Berechnen, in Reaktion auf einen decodierten Befehl, eines Ergebnisses einer komplexen Multiplikation einer ersten komplexen Zahl mit einer zweiten komplexen Zahl. Die Berechnung umfasst eine erste Operation zum Berechnen eines ersten Terms eines Realteils des Ergebnisses und eines ersten Terms des Imaginärteils des Ergebnisses. Die Berechnung umfasst auch eine zweite Operation zum Berechnen eines zweiten Terms des Realteils des Ergebnisses und eines zweiten Terms des Imaginärteils des Ergebnisses. Der Prozessor umfasst auch einen Decodierer, ein erstes Quellregister und ein zweites Quellregister. Der Decodierer dient zum Decodieren eines Befehls zum Erzeugen des decodierten Befehls. Das erste Quellregister dient dazu, die erste komplexe Zahl bereitzustellen, und das zweite Quellregister dient dazu, die zweite komplexe Zahl bereitzustellen.

Description

  • GEBIET DER ERFINDUNG
  • Ausführungsformen der Erfindung betreffen allgemein das Gebiet von Computerprozessoren. Insbesondere betreffen die Ausführungsformen eine Einrichtung und ein Verfahren für komplexe Multiplikation.
  • STAND DER TECHNIK
  • Ein Befehlssatz oder eine Befehlssatzarchitektur (Instruction Set Architecture, ISA) ist der Teil der Computerarchitektur im Zusammenhang mit dem Programmieren, einschließlich der nativen Datentypen, Befehle, Registerarchitektur, Adressierungsmodi, Speicherarchitektur, Unterbrechungs- und Ausnahmebehandlung und externen Eingabe und Ausgabe (E/A). Es sei angemerkt, dass sich der Begriff „Befehl“ hierin im Allgemeinen auf Makrobefehle bezieht, d. h. Befehle, die dem Prozessor zur Ausführung bereitgestellt werden, im Gegensatz zu Mikrobefehlen oder Mikrooperationen (Mikro-Ops), die das Ergebnis der Decodierung von Makrobefehlen durch einen Decodierer des Prozessors sind. Die Mikrobefehle oder Mikro-Ops können dazu ausgelegt sein, eine Ausführungseinheit auf dem Prozessor anzuweisen, Operationen zum Umsetzen der mit dem Makrobefehl verknüpften Logik durchzuführen.
  • Die ISA unterscheidet sich von der Mikroarchitektur, die die Menge von Prozessorausgestaltungstechniken ist, die verwendet werden, um den Befehlssatz umzusetzen. Prozessoren mit unterschiedlichen Mikroarchitekturen können einen gemeinsamen Befehlssatz gemeinsam nutzen. Beispielsweise setzen Intel® Pentium 4 Prozessoren, Intel® Core™ Prozessoren und Prozessoren von Advanced Micro Devices, Inc., Sunnyvale, CA, nahezu identische Versionen des x86-Befehlssatzes (mit einigen Erweiterungen, die neueren Versionen hinzugefügt worden sind) um, weisen jedoch unterschiedliche interne Ausgestaltungen auf. Zum Beispiel kann die gleiche Registerarchitektur der ISA unter Anwendung bekannter Techniken auf unterschiedliche Arten in unterschiedlichen Mikroarchitekturen umgesetzt werden, einschließlich zweckbestimmter physischer Register, eines oder mehrerer dynamisch zugeordneter physischer Register unter Verwendung eines Registerumbenennungsmechanismus (z. B. unter Verwendung einer Register-Alias-Tabelle (RAT), eines Umordnungspuffers (ROB) und einer Rückzugregisterdatei). Soweit nicht anders angegeben, beziehen sich die hier verwendeten Begriffe Registerarchitektur, Registerdatei und Register darauf, was für die Software/den Programmierer sichtbar ist, und die Art und Weise, wie diese Befehle Register angeben. Wenn eine Unterscheidung erforderlich ist, werden die Adjektive „logisch“, „architektonisch“ oder „für Software sichtbar“ verwendet, um Register/Dateien der Registerarchitektur anzugeben, während andere Adjektive zur Bezeichnung von Registern in einer bestimmten Mikroarchitektur verwendet werden (z. B. physisches Register, Umordnungspuffer, Rückzugregister, Register-Pool).
  • 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:
    • 1A-1B sind Blockdiagramme, ein generisches vektorfreundliches Befehlsformat und Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Erfindung;
    • 1A ist ein Blockdiagramm, ein generisches vektorfreundliches Befehlsformat und Klasse-A-Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Erfindung;
    • 1B ist ein Blockdiagramm, das generische vektorfreundliche Befehlsformat und Klasse-B-Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Erfindung;
    • 2A ist ein Blockdiagramm, ein beispielhaftes spezielles vektorfreundliches Befehlsformat darstellend, gemäß Ausführungsformen der Erfindung;
    • 2B ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 200, die das volle Opcode-Feld 174 bilden, darstellend, gemäß einer Ausführungsform der Erfindung;
    • 2C ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 200, die das Registerindexfeld 144 bilden, darstellend, gemäß einer Ausführungsform der Erfindung;
    • 2D ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 200, die das Zusatzoperationsfeld 150 bilden, darstellend, gemäß einer Ausführungsform der Erfindung;
    • 3 ist ein Blockdiagramm einer Registerarchitektur 300, gemäß einer Ausführungsform der Erfindung;
    • 4A ist ein Blockdiagramm, sowohl eine beispielhafte reihenfolgetreue (In-order) Pipeline als auch eine beispielhafte reihenfolgeveränderte (Out-of-order) Ausgabe-/Ausführungspipeline mit Registerumbenennung darstellend, gemäß Ausführungsformen der Erfindung;
    • 4B ist ein Blockdiagramm, 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, darstellend, gemäß Ausführungsformen der Erfindung;
    • 5A-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;
    • 5A ist ein Blockdiagramm eines einzelnen Prozessorkerns, zusammen mit seiner Verbindung zu dem On-Die-Verbindungsnetzwerk 502 und mit seinem lokalen Teilsatz des Level-2-Caches (L2) 504, gemäß Ausführungsformen der Erfindung;
    • 5B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 5A gemäß Ausführungsformen der Erfindung;
    • 6 ist ein Blockdiagramm eines Prozessors 600, der mehr als einen Kern haben kann, der eine integrierte Speichersteuerung haben kann und der integrierte Grafik haben kann, gemäß Ausführungsformen der Erfindung;
    • 7-10 sind Blockdiagramme von beispielhaften Computerarchitekturen;
    • 7 zeigt ein Blockdiagramm eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 8 ist ein Blockdiagramm eines ersten spezielleren beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 9 ist ein Blockdiagramm eines zweiten spezielleren beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 10 ist ein Blockdiagramm eines SoC (System-on-a-Chip) gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 11 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.
    • 12 ist ein Blockdiagramm einer Einrichtung zum Multiplizieren komplexer Zahlen gemäß einer Ausführungsform der Erfindung;
    • 13 ist ein Flussdiagramm eines Verfahrens zum Multiplizieren komplexer Zahlen gemäß einer Ausführungsform 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. Wenn ein bestimmtes Merkmal, eine bestimmte Struktur oder ein bestimmtes Charakteristikum in Verbindung mit einer Ausführungsform beschrieben wird, wird außerdem angenommen, dass es im Kenntnisbereich eines Fachmannes liegt, auf ein derartiges Merkmal, eine derartige Struktur oder eine derartige Charakteristik in Verbindung mit anderen Ausführungsformen einzuwirken, ob explizit beschrieben oder nicht.
  • Wie in dieser Beschreibung und den Ansprüchen verwendet, und sofern nicht anderweitig angegeben, gibt die Verwendung der Ordinaladjektive „erste“, „zweite“, „dritte“ usw. zur Beschreibung eines Elements lediglich an, dass auf eine bestimmte Instanz eines Elements oder auf verschiedene Instanzen von ähnlichen Elementen Bezug genommen wird, wobei nicht impliziert werden soll, dass die so beschriebenen Elemente in einer bestimmten Abfolge vorliegen müssen, und zwar weder zeitlich, räumlich, in einer Rangfolge oder auf irgendeine andere Weise.
  • Befehle, die durch einen Prozessorkern gemäß Ausführungsformen der Erfindung auszuführen sind, können in einem „generischen vektorfreundlichen Befehlsformat“ ausgeführt sein, das weiter unten ausführlich beschrieben wird. In anderen Ausführungsformen wird ein solches Format nicht genutzt, und ein anderes Befehlsformat wird genutzt, allerdings ist die folgende Beschreibung der Schreibmaskenregister, verschiedenen Datentransformationen (Mischen (Swizzle), Broadcast usw.), Adressierung usw. im Allgemeinen auf die obige Beschreibung der Ausführungsformen des Befehls bzw. der Befehle anwendbar. Zusätzlich werden beispielhafte Systeme, Architekturen und Pipelines nachfolgend ausführlich beschrieben. Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf diese aufgeführten beschränkt.
  • 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. Beispielsweise können die Befehlsvorlagen eines gegebenen Befehlsformats so definiert sein, dass sie unterschiedliche Teilsätze der Felder des Befehlsformats haben (die enthaltenen Felder sind typischerweise in der gleichen Reihenfolge, aber zumindest einige haben unterschiedliche Bitpositionen, da weniger Felder enthalten sind) und/oder so definiert sein, dass ein gegebenes Feld 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 (Quelle1/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, als Advanced Vector Extensions (AVX, AVX2 und AVX-512) bezeichnet und das VEX-Codierschema (Vector Extensions) verwendend, wurde freigegeben und/oder veröffentlicht (siehe z. B. Intel® 64 and IA-32 Architectures Software Developer's Manual, September 2014; Intel® Advanced Vector Extensions Programming Reference, Oktober 2014; und Intel® Architecture Instruction Set Extensions Programming Reference, Oktober 2016).
  • 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.
  • 1A-1B sind Blockdiagramme, ein generisches vektorfreundliches Befehlsformat und Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Erfindung. 1A ist ein Blockdiagramm, ein generisches vektorfreundliches Befehlsformat und Klasse-A-Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Erfindung; während 1B ein Blockdiagramm ist, das generische vektorfreundliche Befehlsformat und Klasse-B-Befehlsvorlagen davon darstellend, gemäß Ausführungsformen der Erfindung. Insbesondere ein generisches vektorfreundliches Befehlsformat 100, für das Klasse-A- und Klasse-B-Befehlsvorlagen definiert sind, die beide Befehlsvorlagen ohne Speicherzugriff 105 und Befehlsvorlagen mit Speicherzugriff 120 umfassen. Der Begriff „generisch“ im Kontext des vektorfreundlichen Befehlsformats bezieht sich darauf, dass das Befehlsformat an keinen 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 1A umfassen: 1) innerhalb der Befehlsvorlagen ohne Speicherzugriff 105 ist eine Befehlsvorlage für eine Operation vom vollen Rundungssteuerungstyp ohne Speicherzugriff 110 und eine Befehlsvorlage für eine Operation vom Datentransformationstyp ohne Speicherzugriff 115 gezeigt; und 2) innerhalb der Befehlsvorlagen mit Speicherzugriff 120 ist eine temporale Befehlsvorlage mit Speicherzugriff 125 und eine nicht-temporale Befehlsvorlage mit Speicherzugriff 130 gezeigt. Die Klasse-B-Befehlsvorlagen in 1B umfassen: 1) innerhalb der Befehlsvorlagen ohne Speicherzugriff 105 ist eine Befehlsvorlage für eine Operation vom teilweisen Rundungssteuerungstyp mit Schreibmaskensteuerung ohne Speicherzugriff 112 und eine Befehlsvorlage für eine Operation vom vsize-Typ mit Schreibmaskensteuerung ohne Speicherzugriff 117 gezeigt; und 2) innerhalb der Befehlsvorlagen mit Speicherzugriff 120 ist eine Befehlsvorlage mit Schreibmaskensteuerung mit Speicherzugriff 127 gezeigt.
  • Das generische vektorfreundliche Befehlsformat 100 umfasst die folgenden Felder, nachfolgend in der in 1A-1B dargestellten Reihenfolge aufgeführt.
  • Formatfeld 140 - ein spezifischer Wert (ein 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 142 - sein Inhalt unterscheidet die unterschiedlichen Basisoperationen.
  • Registerindexfeld 144 - 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 146 - 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 105 und Befehlsvorlagen mit Speicherzugriff 120. 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 Wege zum Durchführen von Speicheradressberechnungen unterstützen.
  • Zusatzoperationsfeld 150 - 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 168, ein Alpha-Feld 152 und ein Beta-Feld 154 unterteilt. Das Zusatzoperationsfeld 150 ermöglicht gängigen Gruppen von Operationen, in einem einzelnen Befehl durchgeführt zu werden, anstatt in 2, 3 oder 4 Befehlen.
  • Skalierungsfeld 160 - sein Inhalt ermöglicht das Skalieren des Inhalts des Indexfelds zur Speicheradresserzeugung (z. B. für Adresserzeugung, die 2Skalierung * Index + Basis verwendet).
  • Verschiebungsfeld 162A - sein Inhalt wird als Teil einer Speicheradresserzeugung verwendet (z. B. für Adresserzeugung, die 2Skalierung * Index + Basis + Verschiebung verwendet).
  • Verschiebungsfaktorfeld 162B (es ist anzumerken, dass die Stellung von Verschiebungsfeld 162A direkt über Verschiebungsfaktorfeld 162B 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 174 (hier später beschrieben) und dem Datenmanipulationsfeld 154C bestimmt. Das Verschiebungsfeld 162A und das Verschiebungsfaktorfeld 162B sind optional in dem Sinn, dass sie nicht für die Befehlsvorlagen ohne Speicherzugriff 105 verwendet werden, und/oder unterschiedliche Ausführungsformen können nur eins oder keins der zwei umsetzen.
  • Datenelementbreitenfeld 164 - 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 170 - 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 170 teilweise Vektoroperationen, einschließlich Ladeoperationen, Speicherungen, arithmetisch, logisch usw. Während Ausführungsformen der Erfindung beschrieben werden, in denen der Inhalt des Schreibmaskenfelds 170 eines aus einer Anzahl von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält (und daher identifiziert der Inhalt des Schreibmaskenfelds 170 indirekt die durchzuführende Maskierung), erlauben alternative Ausführungsformen stattdessen oder zusätzlich dem Inhalt des Schreibmaskenfelds 170, die durchzuführende Maskierung direkt anzugeben.
  • Direktoperandenfeld 172 - 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 keinen Direktoperanden unterstützt, nicht vorhanden ist, und dass es nicht in Befehlen vorhanden ist, die keine Direktoperanden verwenden.
  • Klassenfeld 168 - sein Inhalt unterscheidet zwischen unterschiedlichen Klassen von Befehlen. Bezug nehmend auf 1A-B, wählen die Inhalte dieses Felds zwischen Klasse-A- und Klasse-B-Befehlen aus. In 1A-B werden Quadrate mit abgerundeten Ecken verwendet, um anzuzeigen, dass ein spezifischer Wert in einem Feld vorhanden ist (z. B. Klasse A 168A bzw. Klasse B 168B für das Klassenfeld 168 in 1A-B).
  • Befehlsvorlagen der Klasse A
  • Im Falle der Befehlsvorlagen der Klasse A ohne Speicherzugriff 105 wird das Alpha-Feld 152 als ein RS-Feld 152A interpretiert, dessen Inhalt unterscheidet, welche der unterschiedlichen Zusatzoperationstypen durchzuführen sind (z. B. Runden 152A.1 und Datentransformation 152A.2 sind jeweils für die Befehlsvorlagen für Operation vom Rundungstyp ohne Speicherzugriff 110 bzw. die Operation vom Datentransformationstyp 115 ohne Speicherzugriff angegeben), während das Beta-Feld 154 unterscheidet, welche der Operationen des angegebenen Typs durchzuführen sind. In den Befehlsvorlagen ohne Speicherzugriff 105 sind das Skalierungsfeld 160, das Verschiebungsfeld 162A und das Verschiebungsskalierungsfeld 162B nicht vorhanden.
  • Befehlsvorlagen ohne Speicherzugriff - Operation vom vollen Rundungssteuerungstyp
  • In der Befehlsvorlage für die Operation vom vollen Rundungssteuerungstyp ohne Speicherzugriff 110 wird das Beta-Feld 154 als Rundungsteuerungsfeld 154A interpretiert, dessen Inhalt(e) statisches Runden bietet bzw. bieten. Während in den beschriebenen Ausführungsformen der Erfindung das Rundungssteuerungsfeld 154A ein Feld zum Unterdrücken aller Gleitkommaausnahmen (SAE) 156 und ein Rundungsoperationssteuerungsfeld 158 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 158 haben).
  • SAE-Feld 156 - sein Inhalt unterscheidet, ob oder ob nicht Melden von Ausnahmeereignissen deaktiviert werden soll; wenn der Inhalt des SAE-Felds 156 anzeigt, dass Unterdrückung aktiviert ist, meldet ein gegebener Befehl keinen Typ von Gleitkommaausnahmen-Flag und zeigt keinen Gleitkommaausnahmen-Handler an.
  • Rundungsoperationssteuerfeld 158 - 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 158 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 150 diesen Registerwert.
  • Befehlsvorlagen ohne Speicherzugriff - Operation vom Datentransformationstyp
  • In der Befehlsvorlage der Operation vom Datentransformationstyp ohne Speicherzugriff 115 wird das Beta-Feld 154 als ein Datentransformationsfeld 154B 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 120 wird das Alpha-Feld 152 als ein Räumungshinweisfeld 152B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise zu verwenden ist (in 1A sind temporal 152B.1 und nicht-temporal 152B.2 angegeben für die temporale Befehlsvorlage mit Speicherzugriff 125 bzw. die nicht-temporale Befehlsvorlage mit Speicherzugriff 130), während das Beta-Feld 154 als ein Datenmanipulationsfeld 154C 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 120 umfassen das Skalierungsfeld 160 und optional das Verschiebungsfeld 162A oder das Verschiebungsskalierungsfeld 162B.
  • 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 der Klasse B
  • Im Falle der Befehlsvorlagen der Klasse B wird das Alpha-Feld 152 als ein Schreibmaskensteuerfeld (Z) 152C interpretiert, dessen Inhalt unterscheidet, ob die durch das Schreibmaskenfeld 170 gesteuerte Schreibmaskierung zusammenführend oder nullend sein soll.
  • Im Falle der Befehlsvorlagen der Klasse B ohne Speicherzugriff 105 wird ein Teil des Beta-Felds 154 als ein RL-Feld 157A interpretiert, dessen Inhalt unterscheidet, welche der unterschiedlichen Zusatzoperationstypen durchzuführen sind (z. B. Runden 157A.1 und Vektorlänge (VSIZE) 157A.2 sind jeweils für die Befehlsvorlage für Schreibmaskensteuerungsoperation vom teilweisen Rundungssteuerungstyp ohne Speicherzugriff 112 bzw. die Befehlsvorlage für Schreibmaskensteuerungsoperation vom VSIZE-Typ ohne Speicherzugriff 117 angegeben), während der Rest des Beta-Felds 154 unterscheidet, welche der Operationen des angegebenen Typs durchzuführen sind. In den Befehlsvorlagen ohne Speicherzugriff 105 sind das Skalierungsfeld 160, das Verschiebungsfeld 162A und das Verschiebungsskalierungsfeld 162B nicht vorhanden.
  • In der Befehlsvorlage für Schreibmaskensteuerungsoperation vom teilweisen Rundungssteuerungstyp ohne Speicherzugriff 110 wird der Rest des Beta-Felds 154 als ein Rundungsoperationsfeld 159A interpretiert, und Melden von Ausnahmeereignissen ist deaktiviert (ein gegebener Befehl meldet keinen Typ von Gleitkommaausnahmen-Flag und zeigt keinen Gleitkommaausnahmen-Handler an).
  • Rundungsoperationssteuerfeld 159A - wie bei Rundungsoperationssteuerfeld 158, 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 159A 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 150 diesen Registerwert.
  • In der Befehlsvorlage der Schreibmaskensteuerungsoperation vom VSIZE-Typ ohne Speicherzugriff 117 wird der Rest des Beta-Felds 154 als ein Vektorlängenfeld 159B 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 120 wird ein Teil des Beta-Felds 154 als ein Sendefeld 157B interpretiert, dessen Inhalt unterscheidet, ob oder ob nicht die Datenmanipulationsoperation vom Sendetyp durchzuführen ist, während der Rest des Beta-Felds 154 als das Vektorlängenfeld 159B interpretiert wird. Die Befehlsvorlagen mit Speicherzugriff 120 umfassen das Skalierungsfeld 160 und optional das Verschiebungsfeld 162A oder das Verschiebungsskalierungsfeld 162B.
  • Hinsichtlich des generischen vektorfreundlichen Befehlsformats 100 ist ein volles Opcode-Feld 174 gezeigt, das Formatfeld 140, das Basisoperationsfeld 142 und das Datenelementbreitenfeld 164 umfassend. Während eine Ausführungsform gezeigt ist, bei der das volle Opcode-Feld 174 all diese Felder umfasst, umfasst das volle Opcode-Feld 174 in Ausführungsformen, die nicht alle unterstützen, weniger als alle diese Felder. Das volle Opcode-Feld 174 stellt den Operationscode (Opcode) bereit.
  • Das Zusatzoperationsfeld 150, das Datenelementbreitenfeld 164 und das Schreibmaskenfeld 170 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
  • 2A ist ein Blockdiagramm, ein beispielhaftes spezielles vektorfreundliches Befehlsformat darstellend, gemäß Ausführungsformen der Erfindung; 2A zeigt ein spezifisches vektorfreundliches Befehlsformat 200, das 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 200 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 1B, in die die Felder aus 2A abgebildet werden, sind dargestellt.
  • Es versteht sich, dass, obwohl Ausführungsformen der Erfindung zu Darstellungszwecken unter Bezugnahme auf das spezifische vektorfreundliche Befehlsformat 200 im Kontext des generischen vektorfreundlichen Befehlsformats 100 beschrieben sind, die Erfindung nicht auf das spezifische vektorfreundliche Befehlsformat 200 beschränkt ist, ausgenommen dort, wo beansprucht. Beispielsweise berücksichtigt das generische vektorfreundliche Befehlsformat 100 eine Vielzahl möglicher Größen für die verschiedenen Felder, während das spezifische vektorfreundliche Befehlsformat 200 als Felder mit spezifischen Größen aufweisend gezeigt ist. Als spezifisches Beispiel, während das Datenelementbreitenfeld 164 als ein Ein-Bit-Feld im spezifischen vektorfreundlichen Befehlsformat 200 dargestellt ist, ist die Erfindung nicht so beschränkt (das heißt, das generische vektorfreundliche Befehlsformat 100 zieht andere Größen für das Datenelementbreitenfeld 164 in Betracht).
  • Das generische vektorfreundliche Befehlsformat 100 umfasst die folgenden Felder, nachfolgend in der in 2A dargestellten Reihenfolge aufgeführt.
  • EVEX-Präfix (Bytes 0-3) 202 - ist in einer Vier-Byte-Form codiert.
  • Formatfeld 140 (EVEX-Byte 0, Bits [7:0]) - das erste Byte (EVEX-Byte 0) ist das Formatfeld 140, 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 205 (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 157BEX-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 Registerindizes, 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 110 - dies ist der erste Teil des REX'-Felds 110 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-Register-Satzes 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 215 (EVEX-Byte 1, Bits [3:0] - mmmm) - sein Inhalt codiert ein impliziertes führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelementbreitenfeld 164 (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 220 (EVEX-Byte 2, Bits [6:3]-wvv) - 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 220 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 168 (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 225 (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 152 (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 154 (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 110 - 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 170 (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 230 (Byte 4) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes wird in diesem Feld angegeben.
  • MOD-R/M-Feld 240 (Byte 5) umfasst MOD-Feld 242, Reg-Feld 244 und R/M-Feld 246. Wie zuvor beschrieben, unterscheidet der Inhalt des MOD-Felds 242 zwischen Operationen mit Speicherzugriff und ohne Speicherzugriff. Die Rolle von Reg-Feld 244 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 des R/M-Felds 246 kann Folgendes umfassen: Codieren des Befehlsoperanden, der eine Speicheradresse referenziert, 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 150 für Speicheradressenerzeugung verwendet. SIB.xxx 254 und SIB.bbb 256 - auf die Inhalte dieser Felder wurde vorher im Zusammenhang mit den Registerindizes Xxxx und Bbbb Bezug genommen.
  • Verschiebungsfeld 162A (Bytes 7-10) - wenn MOD-Feld 242 eine 10 beinhaltet, sind Bytes 7-10 das Verschiebungsfeld 162A, und es funktioniert genau so wie die ältere 32-Bit-Verschiebung (disp32) und arbeitet mit Bytegranularität.
  • Verschiebungsfaktorfeld 162B (Byte 7) - wenn MOD-Feld 242 eine 01 enthält, ist Byte 7 das Verschiebungsfaktorfeld 162B. 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 162B eine Neuinterpretation von disp8; bei Verwenden von Verschiebungsfaktorfeld 162B 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 162B ersetzt die 8-Bit-Verschiebung des älteren x86-Befehlssatzes. Daher wird das Verschiebungsfaktorfeld 162B 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 172 arbeitet, wie zuvor beschrieben.
  • Volles Opcode-Feld
  • 2B ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 200, die das volle Opcode-Feld 174 bilden, darstellend, gemäß einer Ausführungsform der Erfindung. Insbesondere umfasst das volle Opcode-Feld 174 das Formatfeld 140, das Basisoperationsfeld 142 und das Datenelementbreitenfeld (W) 164. Das Basisoperationsfeld 142 umfasst das Präfixcodierungsfeld 225, das Opcode-Abbildungsfeld 215 und das Real-Opcode-Feld 230.
  • Registerindexfeld
  • 2C ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 200, die das Registerindexfeld 144 bilden, darstellend, gemäß einer Ausführungsform der Erfindung. Insbesondere umfasst das Registerindexfeld 144 das REX-Feld 205, das REX'-Feld 210, das MODR/M.reg-Feld 244, das MODR/M.r/m-Feld 246, das VVVV-Feld 220, das xxx-Feld 254 und das bbb-Feld 256.
  • Zusatzoperationsfeld
  • 2D ist ein Blockdiagramm, die Felder des spezifischen vektorfreundlichen Befehlsformats 200, die das Zusatzoperationsfeld 150 bilden, darstellend, gemäß einer Ausführungsform der Erfindung. Wenn das Klassenfeld (U) 168 eine 0 enthält, bedeutet dies EVEX.U0 (Klasse A 168A); wenn es eine 1 enthält, bedeutet dies EVEX.U1 (Klasse B 168B). Wenn U=0 und das MOD-Feld 242 eine 11 enthält (eine Operation ohne Speicherzugriff bedeutend), wird das Alpha-Feld 152 (EVEX-Byte 3, Bit [7] - EH) als das rs-Feld 152A interpretiert. Wenn das rs-Feld 152A eine 1 enthält (Runden 152A.1), wird das Beta-Feld 154 (EVEX-Byte 3, Bits [6:4]- SSS) als das Rundungssteuerfeld 154A interpretiert. Das Rundungssteuerfeld 154A umfasst ein Ein-Bit-SAE-Feld 156 und ein Zwei-Bit-Rundungsoperationsfeld 158. Wenn das rs-Feld 152A eine 0 enthält (Datentransformation 152A.2), wird das Beta-Feld 154 (EVEX-Byte 3, Bits [6:4]- SSS) als das Drei-Bit-Datentransformationsfeld 154B interpretiert. Wenn U=0 und das MOD-Feld 242 eine 00, 01 oder 10 enthält (eine Operation mit Speicherzugriff bedeutend), wird das Alpha-Feld 152 (EVEX-Byte 3, Bit [7] - EH) als das Räumungshinweisfeld (EH, Eviction Hint) 152B interpretiert, und das Beta-Feld 154 (EVEX-Byte 3, Bits [6:4]- SSS) wird als ein Drei-Bit-Datenmanipulationsfeld 154C interpretiert.
  • Wenn U=l, wird das Alpha-Feld 152 (EVEX-Byte 3, Bit [7] - EH) als das Schreibmaskensteuerfeld (Z) 152C interpretiert. Wenn U=1 und das MOD-Feld 242 eine 11 enthält (eine Operation ohne Speicherzugriff bedeutend), wird ein Teil des Beta-Felds 154 (EVEX-Byte 3, Bit [4] - S0) als das RL-Feld 157A interpretiert; wenn es eine 1 enthält (Runden 157A. 1), wird der Rest des Beta-Felds 154 (EVEX-Byte 3, Bit [6-5]- S2-1) als das Rundungsoperationsfeld 159A interpretiert, während wenn das RL-Feld 157A eine 0 enthält (VSIZE 157.A2), wird der Rest des Beta-Felds 154 (EVEX-Byte 3, Bit [6-5]- S2-1) als das Vektorlängenfeld 159B (EVEX-Byte 3, Bit [6-5]- Ll-0) interpretiert. Wenn U=1 und das MOD-Feld 242 eine 00, 01 oder 10 enthält (eine Operation mit Speicherzugriff bedeutend), wird das Beta-Feld 154 (EVEX-Byte 3, Bits [6:4]- SSS) als das Vektorlängenfeld 159B (EVEX-Byte 3, Bit [6-5]- L1-0) und das Sendefeld 157B (EVEX-Byte 3, Bit [4]- B) interpretiert.
  • Beispielhafte Registerarchitektur
  • 3 ist ein Blockdiagramm einer Registerarchitektur 300, gemäß einer Ausführungsform der Erfindung; In der dargestellten Ausführungsform gibt es 32 Vektorregister 310, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet (der zmm-Registersatz). Andere Ausführungsformen können, anstelle des zmm-Registersatzes, einen Satz von sechzehn Vektorregistern umfassen, die 256 Bits breit sind; diese Register werden als ymm0 bis ymm15 bezeichnet (der ymm-Registersatz). Andere Ausführungsformen können, anstelle des zmm-Registersatzes oder des ymm-Registersatzes, einen Satz von sechzehn Vektorregistern umfassen, die 128 Bits breit sind; diese Register werden als xmm0 bis xmm15 bezeichnet (der xmm-Registersatz). In 3 werden die 256 Bits niedriger Ordnung der unteren 16 zmm-Register auf Register ymm0-15 überlagert, und die 128 Bits niedriger Ordnung der unteren 16 zmm-Register (die 128 Bits niedriger Ordnung der ymm-Register) werden auf Register xmm0-15 überlagert.
  • Das spezifische vektorfreundliche Befehlsformat 200 operiert auf dieser überlagerten Registerdatei, wie in der folgenden Tabelle dargestellt.
    Anpassbare Vektorlänge Klasse Operationen Register
    Befehlsvorlagen, die das Vektorlängenfeld 159B nicht umfassen A (1A; U=0) 110,115,125,130 zmm-Register (die Vektorlänge ist 64 Byte)
    B (1B; U=1) 112 zmm-Register (die Vektorlänge ist 64 Byte)
    Befehlsvorlagen, die das Vektorlängenfeld 159B umfassen B (1B; U=1) 117,127 zmm-, ymm- oder xmm-Register (die Vektorlänge ist 64 Byte, 32 Byte oder 16 Byte) in Abhängigkeit vom Vektorlängenfeld 159B
  • Mit anderen Worten, das Vektorlängenfeld 159B 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 159B operieren auf der maximalen Vektorlänge. Ferner operieren, in einer Ausführungsform, die Klasse-B-Befehlsvorlagen des spezifischen vektorfreundlichen Befehlsformats 200 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 315 - in der dargestellten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7), die jeweils 64 Bit groß sind. In einer alternativen Ausführungsform haben die Schreibmaskenregister 315 eine Größe von 16 Bit. Bei einer Ausführungsform kann das Vektormaskenregister k0 nicht als eine Schreibmaske verwendet werden; wenn die Codierung, welche normalerweise k0 angeben würde, für eine Schreibmaske verwendet wird, wählt sie eine festverdrahtete Schreibmaske von OxFFFF aus, wodurch eine Schreibmaskierung für diesen Befehl wirksam deaktiviert wird.
  • Universelle Register 325 - 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) 345, die als Alias für die gepackte ganzzahlige flache MMX-Registerdatei 350 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 breitere 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, in denen die Erfindung ausgeführt sein kann, können auf unterschiedliche Weisen, für unterschiedliche 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 Zentraleinheit (CPU), einen oder mehrere universelle reihenfolgetreue (In-order) Kerne, gedacht für universelles Rechnen, und/oder einen oder mehrere universelle reihenfolgeveränderte (Out-of-order) Kerne, gedacht für universelles Rechnen, umfassend; und 2) einen Koprozessor, einen oder mehrere spezielle Kerne, primär gedacht für Grafik und/oder wissenschaftliche (Durchsatz) Berechnung, 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 (SoC), 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
  • Blockdiagramm zu reihenfolgetreuem (In-order) und reihenfolgeverändertem (Out-of-order) Kern
  • 4A ist ein Blockdiagramm, sowohl eine beispielhafte reihenfolgetreue (In-order) Pipeline als auch eine beispielhafte reihenfolgeveränderte (Out-of-order) Ausgabe-/Ausführungspipeline mit Registerumbenennung darstellend, gemäß Ausführungsformen der Erfindung. 4B 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 veranschaulicht. Die Felder mit durchgezogenen Linien in 4A-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. Unter der Voraussetzung, dass der reihenfolgetreue Aspekt eine Teilmenge des reihenfolgeveränderten Aspekts ist, wird der reihenfolgeveränderte Aspekt beschrieben.
  • In 4A umfasst eine Prozessorpipeline 400 eine Abrufstufe 402, eine Längendecodierstufe 404, eine Decodierstufe 406, eine Zuordnungsstufe 408, eine Umbenennungsstufe 410, eine Ablaufsteuerungsstufe (Scheduling, auch als Verteilung oder Ausgabe bekannt) 412, eine Registerlese-/Speicherlesestufe 414, eine Ausführungsstufe 416, eine Zurückschreibe-/Speicherschreibestufe 418, eine Ausnahmenbehandlungsstufe 422 und eine Übergabestufe 424.
  • 4B zeigt Prozessorkern 490, eine Frontendeinheit 430 umfassend, gekoppelt mit einer Ausführungsengineeinheit 450, und beide sind mit einer Speichereinheit 470 gekoppelt. Der Kern 490 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 490 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 430 umfasst eine Verzweigungsvorhersageeinheit 432, gekoppelt mit einem Mikrooperationscache 433 und einer Befehlscacheeinheit 434, die mit einem Befehlsübersetzungspuffer (TLB, Instruction Translation Lookaside Buffer) 436 gekoppelt ist, der mit einer Befehlsabrufeinheit 438 gekoppelt ist, die mit einer Decodiereinheit 440 gekoppelt ist. Die Decodiereinheit 440 (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 440 kann unter Verwendung verschiedener unterschiedlicher Mechanismen umgesetzt sein. Beispiele von geeigneten Mechanismen umfassen, unter anderem, Nachschlagetabellen, Hardwareumsetzungen, programmierbare Logikarrays (PLAs), Mikrocode-Nur-Lese-Speicher (ROMs, Read Only Memories) usw. In einer Ausführungsform umfasst der Kern 490 einen Mikrocode-ROM oder ein anderes Medium, das Mikrocode für gewisse Makrobefehle speichert (z. B. in Decodiereinheit 440 oder anderweitig innerhalb der Frontendeinheit 430). Der Mikrooperationscache 433 und die Decodiereinheit 440 sind mit einer Umbenennungs-/Zuordnungseinheit 452 in der Ausführungsengineeinheit 450 gekoppelt. In verschiedenen Ausführungsformen kann ein Mikrooperationscache 433 auch oder stattdessen als ein Operationscache bezeichnet werden.
  • Die Ausführungsengineeinheit 450 umfasst die Umbenennungs-/Zuordnungseinheit 452, gekoppelt mit einer Rückzugseinheit 454 und einer Menge von einer oder mehreren Ablaufsteuerungseinheiten 456. Die Ablaufsteuerungseinheit(en) 456 repräsentiert bzw. repräsentieren eine beliebige Anzahl unterschiedlicher Ablaufsteuerungen, welche Reservierungsstationen, ein zentrales Befehlsfenster usw. umfassen. Die Ablaufsteuerungseinheit(en) 456 ist bzw. sind mit der/den physischen Registerdatei(en)einheit(en) 458 gekoppelt. Jede der physischen Registerdatei(en)-Einheiten 458 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 458 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Universalregister bereitstellen. Die physische(n) Registerdatei(en)einheit(en) 458 wird bzw. werden von der Rückzugseinheit 454 ü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 454 und die physischen Registerdatei(en)einheit(en) 458 ist bzw. sind mit dem bzw. den Ausführungsclustern 460 gekoppelt. Das bzw. die Ausführungscluster 460 umfassen eine Menge von einer oder mehreren Ausführungseinheiten 462 und eine Menge von einer oder mehreren Speicherzugriffseinheiten 464. Die Ausführungseinheiten 462 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) 456, die physischen Registerdatei(en)einheit(en) 458 und das bzw. die Ausführungscluster 460 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) 464 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 464 ist mit der Speichereinheit 470 gekoppelt, die eine Daten-TLB-Einheit 472 umfasst, gekoppelt mit einer Datencacheeinheit 474, gekoppelt mit einer Level-2-Cacheeinheit (L2) 476. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 464 eine Ladeeinheit, eine Adressspeichereinheit und eine Datenspeichereinheit beinhalten, von denen jede mit der Daten-TLB-Einheit 472 in der Speichereinheit 470 gekoppelt ist. Die Befehlscacheeinheit 434 ist ferner mit einer Level-2-Cacheeinheit (L2) 476 in der Speichereinheit 470 gekoppelt. Die L2-Cacheeinheit 476 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 400 wie folgt umsetzen: 1) der Befehlsabruf 438 führt die Abruf- und die Längendecodierstufen 402 und 404 durch; 2) die Decodiereinheit 440 führt die Decodierstufe 406 durch; 3) die Umbenennungs-/Zuordnungseinheit 452 führt die Zuordnungsstufe 408 und die Umbenennungsstufe 410 durch; 4) die Ablaufsteuerungseinheit(en) 456 führt bzw. führen die Ablaufsteuerungsstufe 412 durch; 5) die physische(n) Registerdatei(en)einheit(en) 458 und die Speichereinheit 470 führen die Registerlese-/Speicherlesestufe 414 durch; das Ausführungscluster 460 führt die Ausführungsstufe 416 durch; 6) die Speichereinheit 470 und die physische(n) Registerdatei(en)einheit(en) 458 führen die Zurückschreibe-/Speicherschreibestufe 418 durch; 7) verschiedene Einheiten können bei der Ausnahmenbehandlungsstufe 422 beteiligt sein; und 8) die Rückzugseinheit 454 und die physische(n) Registerdatei(en)einheit(en) 458 führen die Übergabestufe 424 durch.
  • Der Kern 490 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 490 Logik zum Unterstützen einer Befehlssatzerweiterung mit gepackten Daten (z. B. AVX, AVX2, AVX-512), 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, SMT (z. B. ein einziger physischer Kern stellt einen logischen Kern für jeden der Threads bereit, die der physische Kern simultan im Multithreading behandelt), oder eine Kombination davon (z. B. Zeitscheiben-Abruf und -Decodierung und SMT 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 434/474 und eine gemeinsam genutzte L2-Cacheeinheit 476 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 Kernarchitektur
  • 5A-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.
  • 5A ist ein Blockdiagramm eines einzelnen Prozessorkerns, zusammen mit seiner Verbindung zu dem On-Die-Verbindungsnetzwerk 502 und mit seinem lokalen Teilsatz des Level-2-Caches (L2) 504, gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdecodierer 500 den x86-Befehlssatz mit einer Befehlssatzerweiterung mit gepackten Daten. Ein L1-Cache 506 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 508 und eine Vektoreinheit 510 separate Registersätze verwenden (skalare Register 512 bzw. Vektorregister 514) und Daten, die zwischen ihnen transferiert werden, in Speicher geschrieben und dann von einem Level-1-Cache (L1) 506 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 504 ist Teil eines globalen L2-Caches, der in separate lokale Teilsätze unterteilt wird, einen pro Prozessorkern. Jeder Prozessorkern weist einen direkten Zugriffspfad auf seinen eigenen lokalen Teilsatz des L2-Cache 504 auf. Daten, die von einem Prozessorkern gelesen werden, werden in dessen L2-Cacheteilsatz 504 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 504 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.
  • 5B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 5A gemäß Ausführungsformen der Erfindung. 5B umfasst einen L1-Datencache 506A als Teil des L1-Caches 504, sowie weitere Details hinsichtlich der Vektoreinheit 510 und der Vektorregister 514. Insbesondere ist die Vektoreinheit 510 eine 16-breite Vektorverarbeitungseinheit (VPU, Vector Processing Unit) (siehe die 16-breite ALU 528), 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 520, numerische Umwandlung mit numerischen Umwandlungseinheiten 522A-B und Replikation mit Replikationseinheit 524 auf dem Speichereingang. Schreibmaskenregister 526 ermöglichen das Prädizieren von resultierenden Vektorschreibvorgängen.
  • Spezifische Prozessorarchitekturen
  • 6 ist ein Blockdiagramm eines Prozessors 600, 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 6 stellen einen Prozessor 600 mit einem einzelnen Kern 602A, einen Systemagenten 610, eine Menge von einer oder mehreren Bussteuerungseinheiten 616 dar, während die optionale Hinzufügung von Feldern mit gestrichelten Linien einen alternativen Prozessor 600 mit mehreren Kernen 602A-N, eine Menge von einer oder mehreren integrierten Speichersteuerungseinheiten 614 in der Systemagenteneinheit 610 und spezieller Logik 608 darstellt.
  • Daher können unterschiedliche Umsetzungen des Prozessors 600 umfassen: 1) eine CPU, wobei die spezielle Logik 608 integrierte Grafik und/oder wissenschaftliche (Durchsatz) Logik ist (die einen oder mehrere Kerne umfassen kann), und wobei die Kerne 602A-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 602A-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 602A-N eine große Anzahl von universellen reihenfolgetreuen (In-order) Kernen sind. Daher kann der Prozessor 600 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 600 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 606 und externen Speicher (nicht gezeigt), gekoppelt mit der Menge von integrierten Speichersteuerungseinheiten 614. Die Menge von gemeinsam genutzten Cacheeinheiten 606 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 612 die integrierte Grafiklogik 608 (integrierte Grafiklogik 608 ist ein Beispiel für spezielle Logik und wird hier als solche bezeichnet), die Menge von gemeinsam genutzten Cacheeinheiten 606 und die Systemagenteneinheit 610/die integrierte(n) Speichersteuerungseinheit(en) 614 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 606 und Kernen 602-A-N gewahrt.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 602A-N zu Multithreading fähig. Der Systemagent 610 umfasst diejenigen Komponenten, die Kerne 602A-N koordinieren und betreiben. Die Systemagenteneinheit 610 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 602A-N und der integrierten Grafiklogik 608 benötigt werden, sein oder umfassen. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 602A-N können homogen oder heterogen in Bezug auf den Architekturbefehlssatz sein; das heißt, zwei oder mehr der Kerne 602A-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
  • 7-10 sind Blockdiagramme von beispielhaften Computerarchitekturen; 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 7 ist ein Blockdiagramm eines Systems 700 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 700 kann einen oder mehrere Prozessoren 710, 715 umfassen, die mit einem Steuerungsknoten 720 gekoppelt sind. In einer Ausführungsform umfasst der Steuerungsknoten 720 einen Grafikspeichersteuerungsknoten (GMCH, Graphics Memory Controller Hub) 790 und einen Eingabe-/Ausgabe-Knoten (IOH, Input/Output Hub) 750 (die sich auf separaten Chips befinden können); der GMCH 790 umfasst Speicher- und Grafiksteuerungen, mit denen Speicher 740 und ein Koprozessor 745 gekoppelt sind; der IOH 750 koppelt Eingabe-/Ausgabevorrichtungen (E/A) 760 mit dem GMCH 790. Alternativ sind die Speicher- und/oder die Grafiksteuerung in den Prozessor integriert (wie hier beschrieben), der Speicher 740 und der Koprozessor 745 sind direkt mit dem Prozessor 710 gekoppelt, und der Steuerungsknoten 720 in einem einzelnen Chip mit dem IOH 750.
  • Die optionale Natur der zusätzlichen Prozessoren 715 wird in 7 durch unterbrochene Linien gekennzeichnet. Jeder Prozessor 710, 715 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne umfassen und kann eine Version des Prozessors 600 sein.
  • Der Speicher 740 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 720 mit dem bzw. den Prozessoren 710, 715 ü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 795.
  • In einer Ausführungsform ist der Koprozessor 745 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 720 einen integrierten Grafikbeschleuniger umfassen.
  • Es kann eine Vielzahl von Unterschieden zwischen den physischen Ressourcen 710, 715 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 710 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. Eingebettet in die Befehle können Koprozessorbefehle sein. Der Prozessor 710 erkennt, dass diese Koprozessorbefehle von einem Typ sind, der durch den angeführten Koprozessor 745 ausgeführt werden soll. Entsprechend gibt der Prozessor 710 diese Koprozessorbefehle (oder Steuersignale, die Koprozessorbefehle darstellend) auf einem Koprozessorbus oder einer anderen Verbindung, an den Koprozessor 745 aus. Ein oder mehrere Koprozessoren 745 akzeptieren die empfangenen Koprozessorbefehle und führen sie aus.
  • Jetzt Bezug nehmend auf 8 ist ein Blockdiagramm eines ersten spezifischeren Systems 800 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 8 gezeigt, ist Mehrprozessorsystem 800 ein Punkt-zu-Punkt-Verbindungssystem und umfasst einen ersten Prozessor 870 und einen zweiten Prozessor 880, die über eine Punkt-zu-Punkt-Verbindung 850 gekoppelt sind. Jeder der Prozessoren 870 und 880 kann eine Version des Prozessors 600 sein. In einer Ausführungsform der Erfindung sind Prozessoren 870 und 880 Prozessoren 710 bzw. 715, während Koprozessor 838 Koprozessor 745 ist. In einer anderen Ausführungsform sind Prozessoren 870 und 880 Prozessor 710 bzw. Koprozessor 745.
  • Prozessoren 870 und 880 sind als integrierte Speichersteuerungseinheiten (IMC, Integrated Memory Controller) 872 bzw. 882 umfassend gezeigt. Prozessor 870 umfasst auch als Teil seiner Bussteuerungseinheiten Punkt-zu-Punkt-Schnittstellen (P-P) 876 und 878; in ähnlicher Weise umfasst der zweite Prozessor 880 P-P-Schnittstellen 886 und 888. Prozessoren 870, 880 können Informationen über eine Punkt-zu-Punkt-Schnittstelle (P-P) 850 unter Verwendung von P-P-Schnittstellenschaltungen 878, 888 austauschen. Wie in 8 gezeigt, koppeln IMCs 872 und 882 die Prozessoren mit jeweiligen Speichern, insbesondere einem Speicher 832 und einem Speicher 834, die Teile des lokal mit den jeweiligen Prozessoren verbundenen Hauptspeichers sein können.
  • Prozessoren 870, 880 können auch jeweils Informationen mit einem Chipsatz 890 über individuelle P-P-Schnittstellen 852, 854 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 876, 894, 886, 898 austauschen. Der Chipsatz 890 kann optional Informationen mit dem Koprozessor 838 über eine Hochleistungsschnittstelle 892 austauschen. In einer Ausführungsform ist der Koprozessor 838 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 890 kann mit einem ersten Bus 816 über eine Schnittstelle 896 gekoppelt sein. In einer Ausführungsform kann der erste Bus 816 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 8 gezeigt, können verschiedene E/A-Vorrichtungen 814 mit dem ersten Bus 816 gekoppelt sein, zusammen mit einer Busbrücke 818, die den ersten Bus 816 mit einem zweiten Bus 820 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 815, 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 816 gekoppelt. In einer Ausführungsform kann der zweite Bus 820 ein Bus mit niedriger Pinzahl (LPC, Low Pin Count) sein. Verschiedene Vorrichtungen können mit einem zweiten Bus 820 gekoppelt sein, einschließlich, beispielsweise eine Tastatur und/oder eine Maus 822, Kommunikationsvorrichtungen 827 und eine Speichereinheit 828, wie etwa ein Plattenlaufwerk oder eine andere Massenspeichervorrichtung, die, in einer Ausführungsform, Befehle/Code und Daten 830 umfassen kann. Ferner kann eine Audio-E/A 824 mit dem zweiten Bus 820 gekoppelt sein. Es ist zu beachten, dass andere Architekturen möglich sind. Beispielsweise kann ein System anstelle der Punkt-zu-Punkt-Architektur aus 8 einen Multi-Drop-Bus oder eine andere solche Architektur umsetzen.
  • Jetzt Bezug nehmend auf 9 ist ein Blockdiagramm eines zweiten spezifischeren Systems 900 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in 8 und 9 tragen ähnliche Bezugszeichen, und gewisse Aspekte von 8 wurden in 9 ausgelassen, um Eintrüben von anderen Aspekten aus 9 zu verhindern.
  • 9 stellt dar, dass die Prozessoren 870, 880 integrierten Speicher und E/A-Steuerlogik („CL“, Control Logic) 872 bzw. 882 umfassen können. Daher umfasst die CL 872, 882 integrierte Speichersteuerungseinheiten und umfasst E/A-Steuerlogik. 9 veranschaulicht, dass nicht nur die Speicher 832, 834 mit der CL 872, 882 gekoppelt sind, sondern auch, dass E/A-Geräte 914 auch mit der Steuerlogik 872, 882 gekoppelt sind. Ältere E/A-Vorrichtungen 915 sind mit dem Chipsatz 890 gekoppelt.
  • Jetzt Bezug nehmend auf 10 ist ein Blockdiagramm eines SoC 1000 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in 6 tragen ähnliche Bezugszeichen. Außerdem sind Felder mit gestrichelten Linien optionale Merkmale auf weiterentwickelten SoCs. In 10 ist bzw. sind Verbindungseinheit(en) 1002 gekoppelt mit: einem Anwendungsprozessor 1010, der einen Satz von einem oder mehreren Kernen 602A-N umfasst, die Cacheeinheiten 604A-N und gemeinsam genutzte(n) Cacheeinheit(en) 606 umfassen; einer Systemagenteneinheit 610; einer oder mehreren Bussteuerungseinheiten 616; einer oder mehreren integrierten Speichersteuerungseinheiten 614; einem Satz aus einem oder mehreren Koprozessoren 1020, der integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor umfassen kann; einer statischen Direktzugriffsspeichereinheit (SRAM, Static Random Access Memory) 1030; einer Direktzugriffsspeichereinheit (DMA, Direct Memory Access) 1032; und einer Anzeigeeinheit 1040 zum Koppeln mit einer oder mehreren externen Anzeigen. In einer Ausführungsform umfasst bzw. umfassen der/die Koprozessor(en) 1020 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 830, dargestellt in 8, 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.
  • 11 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. 11 zeigt, wie ein Programm in einer höheren Sprache 1102 mit einem x86-Compiler 1104 kompiliert werden kann, um x86-Binärcode 1106 zu erzeugen, der systemintern durch einen Prozessor mit zumindest einem x86-Befehlssatzkern 1116 ausgeführt werden kann. Der Prozessor mit zumindest einem x86-Befehlssatzkern 1116 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 1104 repräsentiert einen Compiler, der betreibbar ist, um x86-Binärcode 1106 (z. B. Objektcode) zu erzeugen, der mit oder ohne zusätzliche Verknüpfungsverarbeitung auf dem Prozessor mit zumindest einem x86-Befehlssatzkern 1116 ausgeführt werden kann. In ähnlicher Weise zeigt 11, wie das Programm in der höheren Sprache 1102 mit einem alternativen Befehlssatzcompiler 1108 kompiliert werden kann, um alternativen Befehlssatz-Binärcode 1110 zu erzeugen, der systemintern durch einen Prozessor ohne zumindest einen x86-Befehlssatzkern 1114 (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 1112 wird verwendet, um den x86-Binärcode 1106 in Code umzuwandeln, der systemintern durch den Prozessor ohne einen x86-Befehlssatzkern 1114 ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht der gleiche wie der alternative Befehlssatz-Binärcode 1110, 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 1112 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 1106 auszuführen.
  • Komplexe Multiplikation
  • Ausführungsformen der Erfindung können die in 12 gezeigte Einrichtung verwenden, um komplexe Multiplikation unter Verwendung von gepackten Real- und Imaginär-Datenelementen durchzuführen. Die Einrichtung aus 12 kann in einem Prozessor und/oder System aus 4 bis 10 enthalten sein, jeweils wie oben beschrieben, die Prozessoren und Systeme einschließlich Ausführungsformen der Erfindung darstellen, in denen Prozessoren 490, 600, 710, 715, 870, 880 und 1010 und Systeme 700, 800, 900 und 1000 beliebige oder alle der in 12 gezeigten Blöcke und/oder Elemente umfassen, die gemäß den bzw. dem in den Beschreibungen von 13 beschriebenen Techniken und/oder Verfahren arbeiten.
  • Die beschriebenen Ausführungsformen führen Operationen auf 16-Bit-Gleitkommawerten mit halber Genauigkeit in gepackten 128-Bit-, 256-Bit- und 512-Bit-Datenregistern und Speicherorten durch. Beispielsweise werden in einer Ausführungsform gepackte Datenwerte in xmm2 und xmm3/m128 multipliziert, wobei xmm2 und xmm3/m128 Realteile von komplexen Zahlen in geradzahligen Elementen und Imaginärteile von komplexen Zahlen in ungeradzahligen Elementen speichern. Allerdings können andere Ausführungsformen Operationen auf anderen Größen und/oder Datentypen durchführen.
  • In einer Ausführungsform führt eine Verarbeitungshardware, einen Multiplizierer umfassend, eine erste Berechnung durch, um einen Realteil eines Ergebnisses zu berechnen, und eine zweite Berechnung durch, um einen Imaginärteil des Ergebnisses zu berechnen. Unter Verwendung der Notation X=Xr+i*Xi und Y=Yr+i*Yi zum Darstellen einer ersten komplexen Zahl X mit einem Realteil Xr und einem Imaginärteil Xi bzw. einer zweiten komplexen Zahl Y mit einem Realteil Yr und einem Imaginärteil Yi kann die erste Berechnung dargestellt werden als Xr*Yr-Xi*Yi, und die zweite Berechnung kann dargestellt werden als Xr*Yi+Yr*Xi, da (Xr+i*Xi)(Yr+i*Yi) = [Xr*Yr+i2(Xi*Yi)]+i[Xr*Yi+Yr*Xi].
  • Eine Ausführungsform verwendet Verarbeitungshardware zum Durchführen beider Berechnungen in Reaktion auf Decodieren eines einzelnen Befehls, hier mit der Mnemonik VCFMULPH identifiziert. Im Gegensatz dazu können andere Ansätze zum Durchführen komplexer Multiplikation mehr als einen Befehl verwenden, beispielsweise, eine Kombination von Befehlen, umfassend einen oder mehrere Umstellbefehle und einen oder mehrere Multiplizierbefehle.
  • Der folgende Pseudocode gibt die Berechnungen an, die in einer Ausführungsform durchgeführt werden, wobei SRC 1 und SRC2 Quellregister oder Speicherorte sind, TEMP ein Register zum Speichern von Zwischenwerten ist, DEST ein Zielregister ist, Realteile in den geradzahligen Elementen (z. B. den unteren 16 Bits jedes 32-Bit-Worts) der Quell- und Zielregister oder Speicherorte gespeichert werden und Imaginärteile in den ungeradzahligen Elementen (z. B. den oberen 16 Bits jedes 32-Bit-Worts) der Quell- und Zielregister oder Speicherorte gespeichert werden.
  • Beispielhafter Pseudocode zum Berechnen eines geradzahligen Elements: TEMP [ 15 : 0 ] < SRC1 [ 15 : 0 ] * SRC2 [ 15 : 0 ]
    Figure DE102018124945A1_0001
    DEST [ 15 : 0 ] < TEMP [ 15 : 0 ] SRC1 [ 31 : 16 ] * SRC2 [ 31 : 16 ]
    Figure DE102018124945A1_0002
  • Beispielhafter Pseudocode zum Berechnen eines ungeradzahligen Elements: TEMP [ 31 : 16 ] < SRC1 [ 31 : 16 ] * SRC2 [ 15 : 0 ]
    Figure DE102018124945A1_0003
    DEST [ 31 : 16 ] < TEMP [ 31 : 16 ] SRC1 [ 15 : 0 ] * SRC2 [ 31 : 16 ]
    Figure DE102018124945A1_0004
  • Daher wird der Realteil des Ergebnisses in dem geradzahligen Element von DEST gespeichert, und der Imaginärteil des Ergebnisses wird im ungeradzahligen Element von DEST gespeichert.
  • Ferner kann Ausführung eines einzelnen VCFMULPH-Befehls auch beide Operationen zum Berechnen des Realteils und des Imaginärteils der anderen Wörter eines gepackten Ergebnisses durchführen, beispielsweise die anderen drei Wörter eines gepackten 128-Bit-Ergebnisses, die anderen sieben Wörter eines gepackten 256-Bit-Ergebnisses oder die anderen fünfzehn Wörter eines gepackten 512-Bit-Ergebnisses.
  • In einer Ausführungsform kann die ISA eines Prozessors einen ersten Einzelbefehl (z. B. VCFMULPH) zum Durchführen von komplexer Multiplikation, wie oben beschrieben, und einen zweiten Einzelbefehl, hier mit der Mnemonik VCFCMULPH identifiziert, zum Durchführen einer konjugierten Version der durch VCFMULPH durchgeführten komplexen Multiplikation umfassen. Beispielsweise dient in einer Ausführungsform, in der VCFMULPH dazu dient, ein geradzahliges Element durch Subtrahieren des Produkts zweier ungeradzahliger Eingangselemente von dem Produkt zweier entsprechender geradzahliger Eingangselemente zu berechnen, VCFCMULPH dazu, ein geradzahliges Element durch Addieren des Produkts zweiter ungeradzahliger Eingangselemente zum Produkt der zwei entsprechenden geradzahligen Eingangselemente zu berechnen.
  • In verschiedenen Ausführungsformen kann ein VCFMULPH-Befehl oder ein VCFCMULPH-Befehl oder beide optional Schreibmaskierung, Senden (Broadcast) und/oder Nullen bereitstellen.
  • Zurückkehrend zu 12, kann Registerdatei 1210 einen ersten Vektor X in einem ersten Quellregister und einen zweiten Vektor Y in einem zweiten Quellregister speichern, wobei jeder der Vektoren X und Y eine Menge von n komplexen Zahlen repräsentieren kann. Jedes Paar aus geradzahligen und ungeradzahligen Elementen von X (z. B. X[0] und X[1], X[2] und X[3], ... X[2n-2] und X[2n-1]) kann einen Realteil einer komplexen Zahl in einem geradzahligen Element und den Imaginärteil der komplexen Zahl in dem ungeradzahligen Element speichern. In ähnlicher Weise kann jedes Paar aus geradzahligen und ungeradzahligen Elementen von Y (z. B. Y[0] und Y[1], Y[2] und Y[3], ... Y[2n-2] und Y[2n-1]) einen Realteil einer komplexen Zahl in einem geradzahligen Element und den Imaginärteil einer komplexen Zahl in dem ungeradzahligen Element speichern.
  • Der Duplikationsmultiplexer (dup mux) 1220 kann das Kopieren von Werten aus den ungeradzahligen Elementen in geradzahlige Elementpositionen durchführen (transformiert z. B. {a,b,c,d} in {b,b,d,d}). In einer Ausführungsform kann der Duplikationsmultiplexer 1220 in Hardware mit einer Multiplexerschaltung mit zwei Eingangsvektoren und einem Ausgangsvektor umgesetzt sein. Der Tauschmultiplexer (swap mux) 1230 kann, basierend auf dem Wert von einem oder mehreren Steuersignalen, das Kopieren von Werten von ungeradzahligen Elementen in geradzahlige Elementpositionen (transformiert z. B. {a,b,c,d} in {b,b,d,d}), das Kopieren von Werten von geradzahligen Elementen in ungeradzahlige Elementpositionen (transformiert {a,b,c,d} in {a,a,c,c}) oder das Vertauschen von ungeradzahligen und geradzahligen Elementen (transformiert z. B. {a,b,c,d} in {b,a,d,c}) durchführen. In einer Ausführungsform kann der Tauschmultiplexer 1230 in Hardware mit zwei Multiplexerschaltungen mit zwei Eingangsvektoren und einem Ausgangsvektor umgesetzt sein.
  • Der fusionierte Multiplizierer-Addierer (FMA) 1240 kann von einem beliebigen Typ von Multiplizierer- und Addiererschaltung sein. In einer Ausführungsform kann FMA 1240 in Hardware mit einer Gleitkommavektor-FMA-Schaltung umgesetzt sein. FMA 1240 kann jedes Element einer beliebigen Größe (z. B. sechzehn Bits) eines ersten Eingangsvektors mit jedem Element der gleichen Größe eines zweiten Eingangsvektors multiplizieren und das Produkt zu jedem Element der gleichen Größe eines dritten Eingangsvektors addieren.
  • In einer Ausführungsform kann ein VCFMULPH-Befehl in zwei Mikrooperationen decodiert werden, die die Verarbeitungshardware, wie etwa die aus 12, veranlassen, sowohl die geradzahligen als auch die ungeradzahligen Elemente eines Vektors von komplexen Zahlen zu berechnen.
  • Beispielsweise kann eine erste Mikrooperation Steuersignale verwenden, um die Hardware zu veranlassen, einen ersten Operanden (z. B. X) aus einem ersten Quellregister in Registerdatei 1210 als einen Eingang für den Duplikationsmultiplexer 1220 zu verwenden; einen zweiten Operanden (z. B. Y) aus einem zweiten Quellregister als einen Eingang für den Tauschmultiplexer 1230 zu verwenden; den Duplikationsmultiplexer 1220 zu verwenden, um den ersten Operanden, unverändert, an einen ersten Eingang 1241 von FMA 1240 zu übergeben; den Tauschmultiplexer 1230 zu verwenden, um die geradzahligen Elemente des zweiten Operanden in die ungeradzahligen Elemente zu kopieren und den transformierten zweiten Operanden an einen zweiten Eingang 1242 von FMA 1240 zu übergeben; einen genullten Vektor als einen dritten Eingang 1243 von FMA 1240 zu verwenden; die FMA-Operation durchzuführen; und das Ergebnis der FMA-Operation in einem temporären Register zu speichern. Daher wird, beispielsweise, der erste Eingang 1241 von FMA 1240 {X[0], X[1], X[2], X[3], ..., X[2n-2], X[2n-1]} sein; der zweite Eingang 1242 von FMA 1240 wird {Y[0], Y[0], Y[2], Y[2], ..., Y[2n-2], Y[2n-2]} sein; FMA 1240 wird den ersten Eingang mit dem zweiten Eingang multiplizieren und Null zu dem Produkt addieren; und das im temporären Register gespeicherte FMA-Ergebnis wird {X[0]*Y[0], X[1]*Y[0], X[2]*Y[2], X[3]*Y[2], ..., X[2n-2]*Y[2n-2], X[2n-1]*Y[2n-2]} sein.
  • Fortfahrend mit dem vorherigen Beispiel, kann eine entsprechende zweite Mikrooperation Steuersignale verwenden, um die gleiche Hardware zu veranlassen, den zweiten Operanden (z. B. Y) aus dem zweiten Quellregister in Registerdatei 1210 als einen Eingang für den Duplikationsmultiplexer 1220 zu verwenden; den ersten Operanden (z. B. X) aus dem ersten Quellregister als einen Eingang für den Tauschmultiplexer 1230 zu verwenden; den Duplikationsmultiplexer 1220 zu verwenden, um die ungeradzahligen Elemente des zweiten Operanden in die geradzahligen Elemente zu kopieren und den transformierten zweiten Operanden an den ersten Eingang 1241 von FMA 1240 zu übergeben; den Tauschmultiplexer 1230 zu verwenden, um die geradzahligen und ungeradzahligen Elemente des ersten Operanden zu tauschen und den transformierten ersten Operanden an den zweiten Eingang 1242 von FMA 1240 zu übergeben; das Ergebnis der ersten Mikrooperation aus dem temporären Register als den dritten Eingang 1243 von FMA 1240 zu verwenden; den Multiplikationsteil der FMA-Operation durchzuführen; eine Negationsschaltungsanordnung, wie etwa FMA-Steuerlogik, zu verwenden, um die geradzahligen Elemente des Multiplikationsergebnisses zu negieren; den Additionsteil der FMA-Operation durchzuführen; und das Ergebnis der FMA-Operation in einem Zielregister in Registerdatei 1210 zu speichern. Daher wird, beispielsweise, der erste Eingang 1241 von FMA 1240 {Y[1], Y[1], Y[3], Y[3], ..., Y[2n-1], Y[2n-1]} sein; der zweite Eingang 1242 von FMA 1240 wird {X[1], X[0], X[3], X[2], ..., X[2n-1], X[2n-2]} sein; das Multiplikationsergebnis wird {X[1]*Y[1], X[0]*Y[1], X[3]*Y[3], X[2]*Y[3], ..., X[2n-1]*Y[2n-1], X[2n-2]*Y[2n-1]} sein; und das im Zielregister gespeicherte FMA-Ergebnis wird {X[0]*Y[0]-X[1]*Y[1], X[1]*Y[0]+X[0]*Y[1], X[2]*Y[2]-X[3]*Y[3], X[3]*Y[2]+X[2]*Y[3], ..., X[2n-2]*Y[2n-2]-X[2n-1]*Y[2n-1], X[2n-1]*Y[2n-2]+X[2n-2]*Y[2n-1]} sein.
  • Daher werden die Realteile des Ergebnisses in den geradzahligen Elementen des Zielregisters gespeichert, und die Imaginärteile des Ergebnisses werden in den ungeradzahligen Elementen des Zielregisters gespeichert.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 13 dargestellt. Das Verfahren kann im Kontext der hier beschriebenen Prozessorarchitektur umgesetzt sein, ist aber nicht auf eine spezielle Prozessorarchitektur beschränkt.
  • Bei 1302 wird ein erster Befehl (z. B. VCFMULPH) abgerufen, wobei der Befehl Felder zum Angeben eines Opcode, eines ersten und zweiten Quelloperanden und eines Zieloperanden aufweist. In einer Ausführungsform dienen das erste und zweite Quelloperandenfeld dazu, gepackte 128-Bit-, 256-Bit- oder 512-Bit-Datenregister anzugeben, die Mengen von komplexen Zahlen mit gepackten 16-Bit-Datenelementen speichern, wobei jedes geradzahlige Datenelement einen Realteil einer komplexen Zahl darstellt und jedes entsprechende ungeradzahlige Datenelement einen entsprechenden Imaginärteil der entsprechenden komplexen Zahl darstellt.
  • Bei 1304 wird der erste Befehl decodiert. In einer Ausführungsform wird der Befehl in eine erste Mikrooperation und eine zweite Mikrooperation decodiert.
  • Bei 1310 beginnt die Ausführung der ersten Mikrooperation. Ausführung der ersten Mikrooperation umfasst 1312, 1314, 1316 und 1318.
  • Bei 1312 wird ein erster Operand aus einem ersten Quellregister als ein Eingang für einen Duplikationsmultiplexer verwendet, und ein zweiter Operand aus einem zweiten Quellregister wird als ein Eingang für einen Tauschmultiplexer verwendet. Bei 1314 übergibt der Duplikationsmultiplexer den ersten Operanden, unverändert, an einen ersten Eingang eines FMA; der Tauschmultiplexer kopiert die geradzahligen Elemente des zweiten Operanden in die ungeradzahligen Elemente und übergibt den transformierten zweiten Operanden an einen zweiten Eingang des FMA; und ein genullter Vektor wird für einen dritten Eingang des FMA verwendet. Bei 1316 wird eine FMA-Operation durchgeführt durch Multiplizieren der Vektoren, die am ersten und zweiten Eingang bereitgestellt sind, und Addieren der Vektoren, die am dritten Eingang bereitgestellt sind, zum Produkt. Bei 1318 wird das Ergebnis der FMA-Operation in einem temporären Register gespeichert.
  • Bei 1320 beginnt die Ausführung der zweiten Mikrooperation. Ausführung der ersten Mikrooperation umfasst 1322, 1324, 1326 und 1328.
  • Bei 1322 wird der zweite Operand als ein Eingang für den Duplikationsmultiplexer verwendet, und der erste Operand wird als ein Eingang für den Tauschmultiplexer verwendet. Bei 1324 kopiert der Duplikationsmultiplexer die ungeradzahligen Elemente des zweiten Operanden in die geradzahligen Elemente und übergibt den transformierten zweiten Operanden an den ersten Eingang des FMA, der Tauschmultiplexer tauscht die geradzahligen und ungeradzahligen Elemente des ersten Operanden und übergibt den transformierten ersten Operanden an den zweiten Eingang des FMA, und das Ergebnis der ersten Mikrooperation aus dem temporären Register wird für den dritten Eingang des FMA verwendet. Bei 1326 wird eine FMA-Operation durchgeführt durch Multiplizieren der Vektoren, die am ersten und zweiten Eingang bereitgestellt sind, Negieren der geradzahligen Elemente des Multiplikationsergebnisses und Addieren des Vektors, der am dritten Eingang bereitgestellt ist, zum Produkt. Bei 1328 wird das Ergebnis der FMA-Operation in einem Zielregister gespeichert.
  • Während die weiter oben beschriebenen Real- und Imaginärwerte eine Länge von 16 Bits aufweisen, können die zugrunde liegenden Prinzipien der Erfindung unter Verwendung von Datenelementen einer beliebigen Größe umgesetzt sein. Beispielsweise können die Real- und Imaginärteile 8 Bit, 32 Bit oder 64 Bit aufweisen, und trotzdem den zugrundeliegenden Prinzipien der Erfindung entsprechen. Verschiedene andere Verfahrensausführungsformen und Änderungen an der Verfahrensausführungsform aus 13 sind innerhalb des Schutzumfangs der vorliegenden Erfindung möglich. Als ein Beispiel kann ein zweiter Befehl (z. B. VCFCMULPH) bei 1302 abgerufen, bei 1304 decodiert und bei 1326 durch Auslassen der Negation der geradzahligen Elemente des Multiplikationsergebnisses ausgeführt werden. Als ein weiteres Beispiel können das erste und zweite Quelloperandenfeld 128-Bit-, 256-Bit- oder 512-Bit-Speicherpositionen angeben, die Mengen von komplexen Zahlen mit gepackten 16-Bit-Datenelementen speichern, wobei jedes geradzahlige Datenelement einen Realteil einer komplexen Zahl darstellt und jedes entsprechende ungeradzahlige Datenelement einen entsprechenden Imaginärteil der entsprechenden komplexen Zahl darstellt.
  • Die Operationen in den Flussdiagrammen können unter Bezugnahme auf die beispielhaften Ausführungsformen von anderen Figuren beschrieben worden sein. Allerdings versteht es sich, dass die Operationen der Flussdiagramme durch andere Ausführungsformen der Erfindung als jene, die unter Bezugnahme auf andere Figuren beschrieben sind, ausgeführt werden, und dass die Ausführungsformen der Erfindung, die unter Bezugnahme auf diese anderen Figuren beschrieben sind, unterschiedliche Operationen als jene, die unter Bezugnahme auf die Flussdiagramme beschrieben sind, ausführen können. Ferner, während die Flussdiagramme in den Figuren eine bestimmte Reihenfolge von Operationen zeigen, die durch bestimme Ausführungsformen der Erfindung durchgeführt werden, versteht es sich, dass eine solche Reihenfolge beispielhaft ist (z. B. können alternative Ausführungsformen die Operationen in einer anderen Reihenfolge durchführen, bestimmte Operationen kombinieren, bestimmte Operationen überlappen usw.).
  • Entsprechend kann die Erfindung in maschinenausführbaren Befehlen ausgeführt sein, die verwendet werden können, um einen universellen oder speziellen Prozessor zu veranlassen, die Operationen durchzuführen. Alternativ können diese Operationen durch spezifische Hardwarekomponenten, die fest verdrahtete Logik zum Durchführen der Vorgänge haben, oder durch eine beliebige Kombination aus programmierten Computerkomponenten und maßgeschneiderten Hardwarekomponenten durchgeführt werden.
  • Daher können ein oder mehrere Teile von Ausführungsformen der Erfindung unter Verwendung verschiedener Kombinationen von Software, Firmware und/oder Hardware umgesetzt werden. Ausführungsformen können unter Verwendung einer elektronischen Vorrichtung umgesetzt werden, die Code (der sich aus Softwarebefehlen zusammensetzt und manchmal als Computerprogrammcode oder ein Computerprogramm bezeichnet wird) und/oder Daten unter Verwendung von maschinenlesbaren Medien (auch als computerlesbare Medien bezeichnet), wie etwa maschinenlesbaren Speichermedien (z. B. magnetischen Platten, optischen Platten, Nur-Lese-Speicher (ROM, Read-Only Memory), Flash-Speichervorrichtungen, Phasenwechselspeicher) und maschinenlesbaren Übertragungsmedien (auch als Träger bezeichnet) (z. B. elektrische, optische, Funk-, akustische oder eine andere Form von verbreiteten Signalen - wie etwa Trägerwellen, Infrarotsignale) speichert und überträgt (intern und/oder mit anderen elektronischen Vorrichtungen über ein Netzwerk). Daher kann eine elektronische Vorrichtung (z. B. ein Computer) Hardware und Software umfassen, wie etwa eine Menge von einem oder mehreren Prozessoren, die mit einem oder mehreren maschinenlesbaren Speichermedien zum Speichern von Code zur Ausführung auf der Menge von Prozessoren und/oder zum Speichern von Daten gekoppelt sind. Beispielsweise kann eine elektronische Vorrichtung nicht-flüchtigen Speicher umfassen, der den Code enthält, da Code/Daten im nicht-flüchtigen Speicher erhalten bleiben können, selbst wenn die elektronische Vorrichtung ausgeschaltet ist (wenn die Stromversorgung entfernt wird), und während die elektronische Vorrichtung eingeschaltet ist, wird dieser Teil des Codes, der durch den bzw. die Prozessoren dieser elektronischen Vorrichtung ausgeführt werden soll, in der Regel aus dem langsameren nicht-flüchtigen Speicher in den flüchtigen Speicher (z. B. dynamischen Direktzugriffsspeicher (DRAM, Dynamic Random Access Memory), statischen Direktzugriffsspeicher (SRAM, Static Random Access Memory) dieser elektronischen Vorrichtung kopiert. Typische elektronische Vorrichtungen umfassen auch eine Menge oder eine oder mehrere physische Netzwerkschnittstellen zum Herstellen von Netzwerkverbindungen (zum Senden und/oder Empfangen von Code und/oder Daten unter Verwendung sich ausbreitenden Signalen) mit anderen elektronischen Vorrichtungen.
  • Eine Ausführungsform der Erfindung ist ein Prozessor, umfassend eine Ausführungsschaltungsanordnung zum Berechnen, in Reaktion auf einen decodierten Befehl, eines Ergebnisses einer komplexen Multiplikation einer ersten komplexen Zahl mit einer zweiten komplexen Zahl. Die Berechnung umfasst eine erste Operation zum Berechnen eines ersten Terms eines Realteils des Ergebnisses und eines ersten Terms des Imaginärteils des Ergebnisses. Die Berechnung umfasst auch eine zweite Operation zum Berechnen eines zweiten Terms des Realteils des Ergebnisses und eines zweiten Terms des Imaginärteils des Ergebnisses. Der Prozessor umfasst auch einen Decodierer, ein erstes Quellregister und ein zweites Quellregister. Der Decodierer dient zum Decodieren eines Befehls zum Erzeugen des decodierten Befehls. Das erste Quellregister dient dazu, die erste komplexe Zahl bereitzustellen, und das zweite Quellregister dient dazu, die zweite komplexe Zahl bereitzustellen.
  • Der Prozessor kann ein Zielregister umfassen, in dem das Ergebnis gespeichert werden soll. Die erste komplexe Zahl kann eine aus einer ersten Menge von komplexen Zahlen sein, die durch einen ersten Vektor repräsentiert werden soll, der in dem ersten Quellregister gespeichert werden soll, die zweite komplexe Zahl kann eine aus einer zweiten Menge von komplexen Zahlen sein, die durch einen zweiten Vektor repräsentiert werden soll, der in dem zweiten Quellregister gespeichert werden soll, und das Ergebnis kann ein dritter Vektor sein, der eine dritte Menge von komplexen Zahlen repräsentieren soll. Der erste Vektor kann eine erste Menge von Elementen zum Repräsentieren von Realteilen der ersten Menge von komplexen Zahlen und eine zweite Menge von Elementen zum Repräsentieren von Imaginärteilen der ersten Menge von komplexen Zahlen umfassen, der zweite Vektor kann eine dritte Menge von komplexen Zahlen zum Repräsentieren von Realteilen der zweiten Menge von komplexen Zahlen und eine vierte Menge von komplexen Zahlen zum Repräsentieren von Imaginärteilen der zweiten Menge von komplexen Zahlen umfassen, und der dritte Vektor kann eine fünfte Menge von Elementen zum Repräsentieren von Realteilen der dritten Menge von komplexen Zahlen und eine sechste Menge von Elementen zum Repräsentieren von Imaginärteilen der dritten Menge von komplexen Zahlen umfassen. Die ersten, dritten und fünften Mengen von Elementen können geradzahlige Elemente sein, und die zweiten, vierten und sechsten Mengen von Elementen können ungeradzahlige Elemente sein. Der erste Realteil kann durch ein erstes geradzahliges Element eines ersten Operanden repräsentiert sein, der erste Imaginärteil kann durch ein erstes ungeradzahliges Element des ersten Operanden repräsentiert sein, der zweite Realteil kann durch ein zweites geradzahliges Element eines zweiten Operanden repräsentiert sein, der zweite Imaginärteil kann durch ein zweites ungeradzahliges Element des zweiten Operanden repräsentiert sein, der dritte Realteil kann durch ein drittes geradzahliges Element des Ergebnisses repräsentiert sein, und der dritte Imaginärteil kann durch ein drittes ungeradzahliges Element des Ergebnisses repräsentiert sein. Die Ausführungsschaltungsanordnung kann einen ersten Multiplexer zum Kopieren des zweiten Realteils aus dem zweiten geradzahligen Element des zweiten Operanden in ein zweites ungeradzahliges Element eines transformierten zweiten Operanden der ersten Operation umfassen. Die Ausführungsschaltungsanordnung kann einen zweiten Multiplexer zum Kopieren des ersten Realteils aus dem ersten geradzahligen Element des ersten Operanden in ein erstes ungeradzahliges Element eines transformierten ersten Operanden der zweiten Operation und zum Kopieren des ersten Imaginärteils aus dem ersten ungeradzahligen Element des ersten Operanden in ein erstes geradzahliges Element des transformierten ersten Operanden der zweiten Operation umfassen, und der erste Multiplexer kann den zweiten Imaginärteil aus dem zweiten ungeradzahligen Element des zweiten Operanden in ein zweites geradzahliges Element eines transformierten zweiten Operanden der zweiten Operation kopieren. Die Ausführungsschaltungsanordnung kann eine Multiplikationsschaltungsanordnung umfassen, um, als Teil der ersten Operation, das erste geradzahlige Element des ersten Operanden mit einem zweiten geradzahligen Element des transformierten zweiten Operanden der ersten Operation zu multiplizieren, um den ersten Term des dritten Realteils zu berechnen, und das erste ungeradzahlige Element des ersten Operanden mit dem zweiten geradzahligen Element des transformierten zweiten Operanden der ersten Operation zu multiplizieren, um den ersten Term des dritten Imaginärteils zu berechnen. Der Prozessor kann ein temporäres Register umfassen, in dem der erste Term des dritten Realteils und der erste Term des dritten Imaginärteils gespeichert werden sollen. Die Multiplikationsschaltungsanordnung kann, als Teil der zweiten Operation, das erste ungeradzahlige Element des transformierten ersten Operanden der zweiten Operation mit dem zweiten ungeradzahligen Element des transformierten zweiten Operanden der zweiten Operation multiplizieren, um den zweiten Term des dritten Realteils zu berechnen, und das erste geradzahlige Element des transformierten ersten Operanden der zweiten Operation mit dem zweiten ungeradzahligen Element des transformierten zweiten Operanden der zweiten Operation multiplizieren, um den zweiten Term des dritten Imaginärteils zu berechnen. Die Ausführungsschaltungsanordnung kann eine Negierungsschaltungsanordnung zum Negieren des zweiten Terms des dritten Realteils zum Erzeugen eines negierten zweiten Terms des dritten Realteils umfassen. Die Ausführungsschaltungsanordnung kann eine Additionsschaltungsanordnung umfassen, um den ersten Term des dritten Realteils und den negierten zweiten Term des dritten Realteils zu addieren, um den dritten Realteil zu berechnen, und den ersten Term des dritten Imaginärteils und den zweiten Term des dritten Imaginärteils zu addieren, um den dritten Imaginärteil zu berechnen. Die Ausführungsschaltungsanordnung kann einen fusionierten Multiplizierer-Addierer umfassen, der die Multiplikationsschaltungsanordnung und die Additionsschaltungsanordnung umfasst. Der Decodierer kann auch einen zweiten Befehl decodieren, um einen zweiten decodierten Befehl zu erzeugen, und die Ausführungsschaltungsanordnung kann den zweiten decodierten Befehl ausführen, wobei Ausführung des zweiten decodierten Befehls dazu dient, die Negierungsschaltungsanordnung zu umgehen und den ersten Term des dritten Realteils und den zweiten Term des dritten Realteils zu addieren, um den dritten Realteil zu berechnen.
  • Eine Ausführungsform der Erfindung ist ein System, umfassend den Prozessor und einen Systemspeicher. Der Systemspeicher kann die zweite komplexe Zahl bereitstellen.
  • In einer Ausführungsform kann ein Verfahren umfassen: Decodieren des ersten Befehls zum Erzeugen einer ersten Mikrooperation und einer zweiten Mikrooperation, wobei der erste Befehl dazu dient, einen ersten Operanden mit einem ersten Realteil und einem ersten Imaginärteil und einen zweiten Operanden mit einem zweiten Realteil und einem zweiten Imaginärteil anzugeben; Ausführen der ersten Mikrooperation zum Berechnen eines ersten Terms eines dritten Realteils und eines ersten Terms eines dritten Imaginärteils; Ausführen der zweiten Mikrooperation zum Berechnen eines zweiten Terms des dritten Realteils und eines zweiten Terms des dritten Imaginärteils, Negieren des zweiten Terms des dritten Realteils zum Erzeugen eines negierten zweiten Terms des dritten Realteils, Addieren des ersten Terms des dritten Realteils und des negierten zweiten Terms des dritten Realteils zum Berechnen des dritten Realteils, und Addieren des zweiten Terms des dritten Imaginärteils zum zweiten Term des dritten Imaginärteils zum Berechnen des dritten Imaginärteils; und Speichern des dritten Realteils und des dritten Imaginärteils in einem Zielregister.
  • Ausführen der ersten Mikrooperation kann Multiplizieren des ersten Realteils mit dem zweiten Realteil zum Berechnen des ersten Terms des dritten Realteils und Multiplizieren des ersten Imaginärteils mit dem zweiten Realteil zum Berechnen des ersten Terms des dritten Imaginärteils umfassen. Ausführen der zweiten Mikrooperation kann Multiplizieren des ersten Imaginärteils mit dem zweiten Imaginärteil zum Berechnen des zweiten Terms des dritten Realteils und Multiplizieren des ersten Realteils mit dem zweiten Imaginärteil zum Berechnen des zweiten Terms des dritten Imaginärteils umfassen.
  • In einer Ausführungsform kann eine Einrichtung Mittel zum Durchführen eines der oben beschriebenen Verfahren umfassen. In einer Ausführungsform kann ein maschinenlesbares, greifbares Medium Befehle speichern, die, wenn sie durch eine Maschine ausgeführt werden, die Maschine veranlassen, eines der oben beschriebenen Verfahren durchzuführen.
  • Obwohl die Erfindung im Hinblick auf verschiedene Ausführungsformen beschrieben wurde, ist die Erfindung nicht auf die beschriebenen Ausführungsformen beschränkt, und sie kann mit verschiedenen Änderungen umgesetzt werden, ohne vom Geist und Schutzumfang der Erfindung, wie in den beigefügten Ansprüchen dargelegt, abzuweichen. Entsprechend sind die Spezifikation und Zeichnung in einem veranschaulichenden Sinne zu betrachten, nicht in einem einschränkenden Sinne.

Claims (26)

  1. Beansprucht wird:
  2. Prozessor, der Folgendes umfasst: einen Decodierer zum Decodieren eines ersten Befehls zum Erzeugen eines ersten decodierten Befehls; ein erstes Quellregister, in dem eine erste komplexe Zahl mit einem ersten Realteil und einem ersten Imaginärteil zu speichern ist; ein zweites Quellregister, in dem eine zweite komplexe Zahl mit einem zweiten Realteil und einem zweiten Imaginärteil zu speichern ist; eine Ausführungsschaltungsanordnung zum Ausführen des ersten decodierten Befehls, wobei Ausführung des ersten decodierten Befehls Durchführen einer Berechnung, umfassend eine erste Operation und eine zweite Operation, umfassen soll, wobei die Berechnung zum Berechnen eines Ergebnisses einer komplexen Multiplikation der ersten komplexen Zahl mit der zweiten komplexen Zahl dient, wobei das Ergebnis einen dritten Realteil und einen dritten Imaginärteil umfassen soll, wobei die erste Operation dazu dient, einen ersten Term des dritten Realteils und einen ersten Term des dritten Imaginärteils zu berechnen, und die zweite Operation dazu dient, einen zweiten Term des dritten Realteils und einen zweiten Term des dritten Imaginärteils zu berechnen.
  3. Prozessor nach Anspruch 1, ferner umfassend ein Zielregister, in dem das Ergebnis zu speichern ist.
  4. Prozessor nach Anspruch 1, wobei: die erste komplexe Zahl eine aus einer ersten Menge von komplexen Zahlen ist, die durch einen ersten, in dem ersten Quellregister zu speichernden Vektor zu repräsentieren ist; die zweite komplexe Zahl eine aus einer zweiten Menge von komplexen Zahlen ist, die durch einen zweiten, in dem zweiten Quellregister zu speichernden Vektor zu repräsentieren ist; und das Ergebnis ein dritter Vektor ist, der eine dritte Menge von komplexen Zahlen repräsentiert.
  5. Prozessor nach Anspruch 3, wobei: der erste Vektor eine erste Menge von Elementen zum Repräsentieren von Realteilen der ersten Menge von komplexen Zahlen und eine zweite Menge von Elementen zum Repräsentieren von Imaginärteilen der ersten Menge von komplexen Zahlen umfassen soll; der zweite Vektor eine dritte Menge von Elementen zum Repräsentieren von Realteilen der zweiten Menge von komplexen Zahlen und eine vierte Menge von Elementen zum Repräsentieren von Imaginärteilen der zweiten Menge von komplexen Zahlen umfassen soll; und der dritte Vektor eine fünfte Menge von Elementen zum Repräsentieren von Realteilen der dritten Menge von komplexen Zahlen und eine sechste Menge von Elementen zum Repräsentieren von Imaginärteilen der dritten Menge von komplexen Zahlen umfassen soll.
  6. Prozessor nach Anspruch 4, wobei die ersten, dritten und fünften Mengen von Elementen geradzahlige Elemente sind und die zweiten, vierten und sechsten Mengen von Elementen ungeradzahlige Elemente sind.
  7. Prozessor nach Anspruch 1, wobei: der erste Realteil durch ein erstes geradzahliges Element eines ersten Operanden zu repräsentieren ist und der erste Imaginärteil durch ein erstes ungeradzahliges Element des ersten Operanden zu repräsentieren ist; der zweite Realteil durch ein zweites geradzahliges Element eines zweiten Operanden zu repräsentieren ist und der zweite Imaginärteil durch ein zweites ungeradzahliges Element des zweiten Operanden zu repräsentieren ist; und der dritte Realteil durch ein drittes geradzahliges Element des Ergebnisses zu repräsentieren ist und der dritte Imaginärteil durch ein drittes ungeradzahliges Element des Ergebnisses zu repräsentieren ist.
  8. Prozessor nach Anspruch 6, wobei die Ausführungsschaltungsanordnung einen ersten Multiplexer zum Kopieren des zweiten Realteils aus dem zweiten geradzahligen Element des zweiten Operanden in ein zweites ungeradzahliges Element eines transformierten zweiten Operanden der ersten Operation umfasst.
  9. Prozessor nach Anspruch 7, wobei die Ausführungsschaltungsanordnung einen zweiten Multiplexer zum Kopieren des ersten Realteils aus dem ersten geradzahligen Element des ersten Operanden in ein erstes ungeradzahliges Element eines transformierten ersten Operanden der zweiten Operation und zum Kopieren des ersten Imaginärteils aus dem ersten ungeradzahligen Element des ersten Operanden in ein erstes geradzahliges Element des transformierten ersten Operanden der zweiten Operation umfasst, und wobei der erste Multiplexer auch dazu dient, den zweiten Imaginärteil aus dem zweiten ungeradzahligen Element des zweiten Operanden in ein zweites geradzahliges Element eines transformierten zweiten Operanden der zweiten Operation zu kopieren.
  10. Prozessor nach Anspruch 8, wobei die Ausführungsschaltungsanordnung auch eine Multiplikationsschaltungsanordnung umfasst zum, als Teil der ersten Operation: Multiplizieren des ersten geradzahligen Elements des ersten Operanden mit einem zweiten geradzahligen Element des transformierten zweiten Operanden der ersten Operation zum Berechnen des ersten Terms des dritten Realteils, und Multiplizieren des ersten ungeradzahligen Elements des ersten Operanden mit dem zweiten geradzahligen Element des transformierten zweiten Operanden der ersten Operation zum Berechnen des ersten Terms des dritten Imaginärteils.
  11. Prozessor nach Anspruch 9, ferner umfassend ein temporäres Register, in dem der erste Term des dritten Realteils und der erste Term des dritten Imaginärteils gespeichert werden sollen.
  12. Prozessor nach Anspruch 10, wobei die Multiplikationsschaltungsanordnung auch dient zum, als Teil der zweiten Operation: Multiplizieren des ersten ungeradzahligen Elements des transformierten ersten Operanden der zweiten Operation mit dem zweiten ungeradzahligen Element des transformierten zweiten Operanden der zweiten Operation zum Berechnen des zweiten Terms des dritten Realteils, und Multiplizieren des ersten geradzahligen Elements des transformierten ersten Operanden der zweiten Operation mit dem zweiten ungeradzahligen Element des transformierten zweiten Operanden der zweiten Operation zum Berechnen des zweiten Terms des dritten Imaginärteils.
  13. Prozessor nach Anspruch 11, wobei die Ausführungsschaltungsanordnung auch eine Negierungsschaltungsanordnung zum Negieren des zweiten Terms des dritten Realteils zum Erzeugen eines negierten zweiten Terms des dritten Realteils umfasst.
  14. Prozessor nach Anspruch 12, wobei die Ausführungsschaltungsanordnung auch eine Additionsschaltungsanordnung umfasst zum: Addieren des ersten Terms des dritten Realteils und des negierten zweiten Terms des dritten Realteils zum Berechnen des dritten Realteils; und Addieren des ersten Terms des dritten Imaginärteils und des zweiten Terms des dritten Imaginärteils zum Berechnen des dritten Imaginärteils.
  15. Prozessor nach Anspruch 13, wobei die Ausführungsschaltungsanordnung auch einen fusionierten Multiplizierer-Addierer umfasst, der die Multiplikationsschaltungsanordnung und die Additionsschaltungsanordnung umfasst.
  16. Prozessor nach Anspruch 14, wobei: der Decodierer auch zum Decodieren eines zweiten Befehls zum Erzeugen eines zweiten decodierten Befehls dient; und die Ausführungsschaltungsanordnung auch dazu dienen kann, den zweiten decodierten Befehl auszuführen, wobei Ausführung des zweiten decodierten Befehls umfassen soll, die Negierungsschaltungsanordnung zu umgehen und den ersten Term des dritten Realteils und den zweiten Term des dritten Realteils zu addieren, um den dritten Realteil zu berechnen.
  17. Verfahren, das Folgendes umfasst: Decodieren eines ersten Befehls zum Erzeugen einer ersten Mikrooperation und einer zweiten Mikrooperation, wobei der erste Befehl dazu dient, einen ersten Operanden mit einem ersten Realteil und einem ersten Imaginärteil und einen zweiten Operanden mit einem zweiten Realteil und einem zweiten Imaginärteil anzugeben; Ausführen der ersten Mikrooperation zum Berechnen eines ersten Terms eines dritten Realteils und eines ersten Terms eines dritten Imaginärteils; Ausführen der zweiten Mikrooperation zum Berechnen eines zweiten Terms des dritten Realteils und eines zweiten Terms des dritten Imaginärteils, Negieren des zweiten Terms des dritten Realteils zum Erzeugen eines negierten zweiten Terms des dritten Realteils, Addieren des ersten Terms des dritten Realteils und des negierten zweiten Terms des dritten Realteils zum Berechnen des dritten Realteils und Addieren des zweiten Terms des dritten Imaginärteils zum zweiten Term des dritten Imaginärteils zum Berechnen des dritten Imaginärteils; und Speichern des dritten Realteils und des dritten Imaginärteils in einem Zielregister.
  18. Verfahren nach Anspruch 16, wobei Ausführen der ersten Mikrooperation Folgendes umfasst: Multiplizieren des ersten Realteils mit dem zweiten Realteil zum Berechnen des ersten Terms des dritten Realteils; und Multiplizieren des ersten Imaginärteils mit dem zweiten Realteil zum Berechnen des ersten Terms des dritten Imaginärteils.
  19. Verfahren nach Anspruch 17, wobei Ausführen der zweiten Mikrooperation Folgendes umfasst: Multiplizieren des ersten Imaginärteils mit dem zweiten Imaginärteil zum Berechnen des zweiten Terms des dritten Realteils; und Multiplizieren des ersten Realteils mit dem zweiten Imaginärteil zum Berechnen des zweiten Terms des dritten Imaginärteils.
  20. Maschinenlesbares Medium mit darauf gespeichertem Programmcode, der bei Ausführung durch eine Maschine die Maschine dazu veranlasst, die folgenden Operationen durchzuführen: Decodieren eines ersten Befehls zum Erzeugen einer ersten Mikrooperation und einer zweiten Mikrooperation, wobei der erste Befehl dazu dient, einen ersten Operanden mit einem ersten Realteil und einem ersten Imaginärteil und einen zweiten Operanden mit einem zweiten Realteil und einem zweiten Imaginärteil anzugeben; Ausführen der ersten Mikrooperation zum Berechnen eines ersten Terms eines dritten Realteils und eines ersten Terms eines dritten Imaginärteils; Ausführen der zweiten Mikrooperation zum Berechnen eines zweiten Terms des dritten Realteils und eines zweiten Terms des dritten Imaginärteils, Negieren des zweiten Terms des dritten Realteils zum Erzeugen eines negierten zweiten Terms des dritten Realteils, Addieren des ersten Terms des dritten Realteils und des negierten zweiten Terms des dritten Realteils zum Berechnen des dritten Realteils und Addieren des zweiten Terms des dritten Imaginärteils zum zweiten Term des dritten Imaginärteils zum Berechnen des dritten Imaginärteils; und Speichern des dritten Realteils und des dritten Imaginärteils in einem Zielregister.
  21. Maschinenlesbares Medium nach Anspruch 19, wobei: Ausführen der ersten Mikrooperation Multiplizieren des ersten Realteils mit dem zweiten Realteil zum Berechnen des ersten Terms des dritten Realteils und Multiplizieren des ersten Imaginärteils mit dem zweiten Realteil zum Berechnen des ersten Terms des dritten Imaginärteils umfasst; und Ausführen der zweiten Mikrooperation Multiplizieren des ersten Imaginärteils mit dem zweiten Imaginärteil zum Berechnen des zweiten Terms des dritten Realteils und Multiplizieren des ersten Realteils mit dem zweiten Imaginärteil zum Berechnen des zweiten Terms des dritten Imaginärteils umfasst.
  22. Prozessor, der Folgendes umfasst: einen Decodierer zum Decodieren eines ersten Befehls zum Erzeugen eines ersten decodierten Befehls; ein erstes Quellregister, in dem eine erste komplexe Zahl mit einem ersten Realteil und einem ersten Imaginärteil zu speichern ist; ein zweites Quellregister, in dem eine zweite komplexe Zahl mit einem zweiten Realteil und einem zweiten Imaginärteil zu speichern ist; Mittel zum Ausführen des ersten decodierten Befehls, wobei Ausführung des ersten decodierten Befehls Durchführen einer Berechnung, umfassend eine erste Operation und eine zweite Operation, umfassen soll, wobei die Berechnung zum Berechnen eines Ergebnisses einer komplexen Multiplikation der ersten komplexen Zahl mit der zweiten komplexen Zahl dient, wobei das Ergebnis einen dritten Realteil und einen dritten Imaginärteil umfassen soll, wobei die erste Operation dazu dient, einen ersten Term des dritten Realteils und einen ersten Term des dritten Imaginärteils zu berechnen, und die zweite Operation dazu dient, einen zweiten Term des dritten Realteils und einen zweiten Term des dritten Imaginärteils zu berechnen.
  23. Prozessor nach Anspruch 21, wobei: der erste Realteil durch ein erstes geradzahliges Element eines ersten Operanden zu repräsentieren ist und der erste Imaginärteil durch ein erstes ungeradzahliges Element des ersten Operanden zu repräsentieren ist; der zweite Realteil durch ein zweites geradzahliges Element eines zweiten Operanden zu repräsentieren ist und der zweite Imaginärteil durch ein zweites ungeradzahliges Element des zweiten Operanden zu repräsentieren ist; und der dritte Realteil durch ein drittes geradzahliges Element des Ergebnisses zu repräsentieren ist und der dritte Imaginärteil durch ein drittes ungeradzahliges Element des Ergebnisses zu repräsentieren ist.
  24. Prozessor nach Anspruch 22, wobei die Mittel zum Ausführen des ersten decodierten Befehls Folgendes umfassen: einen ersten Multiplexer zum Kopieren des zweiten Realteils aus dem zweiten geradzahligen Element des zweiten Operanden in ein zweites ungeradzahliges Element eines transformierten zweiten Operanden der ersten Operation; und einen zweiten Multiplexer zum Kopieren des zweiten Realteils aus dem ersten geradzahligen Element des ersten Operanden in ein erstes ungeradzahliges Element eines transformierten ersten Operanden der zweiten Operation und zum Kopieren des ersten Imaginärteils aus dem ersten ungeradzahligen Element des ersten Operanden in ein erstes geradzahliges Element des transformierten ersten Operanden der zweiten Operation, wobei der erste Multiplexer auch dazu dient, den zweiten Imaginärteil aus dem zweiten ungeradzahligen Element des zweiten Operanden in ein zweites geradzahliges Element eines transformierten zweiten Operanden der zweiten Operation zu kopieren.
  25. Prozessor nach Anspruch 23, wobei die Mittel zum Ausführen des ersten decodierten Befehls auch, als Teil der ersten Operation, Multiplikationsmittel umfassen zum: Multiplizieren des ersten geradzahligen Elements des ersten Operanden mit einem zweiten geradzahligen Element des transformierten zweiten Operanden der ersten Operation zum Berechnen des ersten Terms des dritten Realteils, und Multiplizieren des ersten ungeradzahligen Elements des ersten Operanden mit dem zweiten geradzahligen Element des transformierten zweiten Operanden der ersten Operation zum Berechnen des ersten Terms des dritten Imaginärteils; und wobei die Multiplikationsmittel auch, als Teil der zweiten Operation, dienen zum: Multiplizieren des ersten ungeradzahligen Elements des transformierten ersten Operanden der zweiten Operation mit dem zweiten ungeradzahligen Element des transformierten zweiten Operanden der zweiten Operation zum Berechnen des zweiten Terms des dritten Realteils, und Multiplizieren des ersten geradzahligen Elements des transformierten ersten Operanden der zweiten Operation mit dem zweiten ungeradzahligen Element des transformierten zweiten Operanden der zweiten Operation zum Berechnen des zweiten Terms des dritten Imaginärteils.
  26. Prozessor nach Anspruch 24, wobei die Mittel zum Ausführen des ersten decodierten Befehls auch Negierungsmittel zum Negieren des zweiten Terms des dritten Realteils zum Erzeugen eines negierten zweiten Terms des dritten Realteils umfassen, und wobei die Mittel zum Ausführen des ersten decodierten Befehls auch Additionsmittel umfassen zum: Addieren des ersten Terms des dritten Realteils und des negierten zweiten Terms des dritten Realteils zum Berechnen des dritten Realteils; und Addieren des ersten Terms des dritten Imaginärteils und des zweiten Terms des dritten Imaginärteils zum Berechnen des dritten Imaginärteils.
DE102018124945.4A 2017-11-28 2018-10-10 Einrichtung und verfahren für komplexe multiplikation Pending DE102018124945A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/824,333 2017-11-28
US15/824,333 US10452394B2 (en) 2017-11-28 2017-11-28 Apparatus and method for complex multiplication

Publications (1)

Publication Number Publication Date
DE102018124945A1 true DE102018124945A1 (de) 2019-05-29

Family

ID=66442666

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018124945.4A Pending DE102018124945A1 (de) 2017-11-28 2018-10-10 Einrichtung und verfahren für komplexe multiplikation

Country Status (3)

Country Link
US (3) US10452394B2 (de)
CN (2) CN109840068A (de)
DE (1) DE102018124945A1 (de)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10795677B2 (en) 2017-09-29 2020-10-06 Intel Corporation Systems, apparatuses, and methods for multiplication, negation, and accumulation of vector packed signed values
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US10514924B2 (en) 2017-09-29 2019-12-24 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US11243765B2 (en) 2017-09-29 2022-02-08 Intel Corporation Apparatus and method for scaling pre-scaled results of complex multiply-accumulate operations on packed real and imaginary data elements
US10664277B2 (en) 2017-09-29 2020-05-26 Intel Corporation Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words
US10802826B2 (en) 2017-09-29 2020-10-13 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US11074073B2 (en) 2017-09-29 2021-07-27 Intel Corporation Apparatus and method for multiply, add/subtract, and accumulate of packed data elements
US10795676B2 (en) 2017-09-29 2020-10-06 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US10552154B2 (en) * 2017-09-29 2020-02-04 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US10534838B2 (en) 2017-09-29 2020-01-14 Intel Corporation Bit matrix multiplication
US10452394B2 (en) 2017-11-28 2019-10-22 Intel Corporation Apparatus and method for complex multiplication
US20210349719A1 (en) * 2018-09-25 2021-11-11 Nec Corporation Information processing apparatus, information processing method, and program

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5179530A (en) * 1989-11-03 1993-01-12 Zoran Corporation Architecture for integrated concurrent vector signal processor
US6385634B1 (en) * 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US5862067A (en) * 1995-12-29 1999-01-19 Intel Corporation Method and apparatus for providing high numerical accuracy with packed multiply-add or multiply-subtract operations
US5996066A (en) * 1996-10-10 1999-11-30 Sun Microsystems, Inc. Partitioned multiply and add/subtract instruction for CPU with integrated graphics functions
US6651159B1 (en) * 1999-11-29 2003-11-18 Ati International Srl Floating point register stack management for CISC
US6922716B2 (en) * 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
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
GB2409060B (en) * 2003-12-09 2006-08-09 Advanced Risc Mach Ltd Moving data between registers of different register data stores
JP2009075676A (ja) * 2007-09-18 2009-04-09 Nec Electronics Corp マイクロプロセッサ
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
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
US20190163473A1 (en) 2019-05-30
US20220129264A1 (en) 2022-04-28
US20200192663A1 (en) 2020-06-18
CN114791795A (zh) 2022-07-26
US10452394B2 (en) 2019-10-22
CN109840068A (zh) 2019-06-04
US11960884B2 (en) 2024-04-16
US11169800B2 (en) 2021-11-09

Similar Documents

Publication Publication Date Title
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE102018125232A1 (de) Einrichtung und Verfahren für komplexe Multiplikation und Akkumulation
DE112017001804T5 (de) Vorrichtung und Verfahren für träge synchrone Seitentabellenaktualisierungen mit geringem Aufwand
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE112013005236T5 (de) Verfahren und Vorrichtung für Integralbild-Berechnungsbefehle
DE112011105122T5 (de) Systeme, Vorrichtungen und Verfahren zum Vermischen zweier Quelloperanden in einem einzigen Ziel unter Verwendung einer Schreibmaske
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
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
DE102019100009A1 (de) Vereinheitlichter Hardwarebeschleuniger für Verschlüsselungssysteme mit symmetrischen Schlüsseln
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE112013005343T5 (de) Befehle für Codierungsalgorithemen mit gleitendem Fenster
DE102018006744A1 (de) Bitmatrixmultiplikation
DE102015002253A1 (de) Verfahren und Vorrichtung zum Ausführen mehrerer Multiplikationsoperationen
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102015007422A1 (de) Befehlssatz zum Eliminieren fehlausgerichteter Speicherzugriffe während der Verarbeitung eines Arrays mit fehlausgerichteten Datenzeilen
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE102018124944A1 (de) Vorrichtung und Verfahren zum Umsetzen eines Gleitkommawertes von halber Genauigkeit in einfache Genauigkeit
DE102018126036A1 (de) Systeme und verfahren zum setzen eines kachelregisterpaars auf null
DE112011105123T5 (de) Systeme, Vorrichtungen und Verfahren für Sprünge unter Verwendung eines Maskenregisters

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R130 Divisional application to

Ref document number: 102018010490

Country of ref document: DE