DE102018131484A1 - Einrichtung und verfahren zum vektormultiplizieren und zur subtraktion von vorzeichenbehafteten doppelwörtern - Google Patents

Einrichtung und verfahren zum vektormultiplizieren und zur subtraktion von vorzeichenbehafteten doppelwörtern Download PDF

Info

Publication number
DE102018131484A1
DE102018131484A1 DE102018131484.1A DE102018131484A DE102018131484A1 DE 102018131484 A1 DE102018131484 A1 DE 102018131484A1 DE 102018131484 A DE102018131484 A DE 102018131484A DE 102018131484 A1 DE102018131484 A1 DE 102018131484A1
Authority
DE
Germany
Prior art keywords
signed
packed
word
quadruple
accumulated
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
DE102018131484.1A
Other languages
English (en)
Inventor
Elmoustapha Ould-Ahmed-Vall
Robert Valentine
Mark Charney
Jesus Corbal
Venkateswara Madduri
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 DE102018131484A1 publication Critical patent/DE102018131484A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

Eine Einrichtung und ein Verfahren zum Durchführen von vorzeichenbehafteter Multiplikation von gepackten vorzeichenbehafteten Doppelwörtern und Akkumulation mit einem vorzeichenbehafteten Quadrupelwort. Zum Beispiel umfasst eine Ausführungsform eines Prozessors Folgendes: ein erstes Quellregister zum Speichern von mehreren gepackten vorzeichenbehafteten Doppelwort-Datenelementen; ein zweites Quellregister zum Speichern von mehreren gepackten vorzeichenbehafteten Doppelwort-Datenelementen; ein drittes Quellregister zum Speichern von mehreren gepackten vorzeichenbehafteten Quadrupelwort-Datenelementen; eine Ausführungsschaltungsanordnung zum Ausführen des decodierten Befehls, wobei die Ausführungsschaltungsanordnung Folgendes umfasst: eine Multipliziererschaltungsanordnung zum Multiplizieren eines ersten und zweiten gepackten vorzeichenbehafteten Doppelwort-Datenelements aus dem ersten Quellregister mit einem dritten bzw. vierten gepackten vorzeichenbehafteten Doppelwort-Datenelement aus dem zweiten Quellregister, um ein erstes und zweites temporäres vorzeichenbehaftetes Quadrupelwortprodukt zu erzeugen, wobei die Multipliziererschaltungsanordnung dazu dient, ein erstes, zweites, drittes und viertes vorzeichenbehaftetes Doppelwort-Datenelement auf Basis des Opcodes des Befehls auszuwählen;eine Akkumulationsschaltungsanordnung zum Kombinieren des ersten temporären vorzeichenbehafteten Quadrupelwortprodukts mit einem ersten gepackten vorzeichenbehafteten Quadrupelwortwert, der aus dem dritten Quellregister gelesen wird, um ein erstes akkumuliertes vorzeichenbehaftetes Quadrupelwortergebnis zu erzeugen, und Kombinieren des zweiten temporären vorzeichenbehafteten Quadrupelwortprodukts mit einem zweiten gepackten vorzeichenbehafteten

Description

  • STAND DER TECHNIK
  • Gebiet der Erfindung
  • Die Ausführungsformen der Erfindung betreffen allgemein das Gebiet von Computerprozessoren. Insbesondere betreffen die Ausführungsformen eine Vorrichtung und ein Verfahren zum Durchführen von Vektormultiplizieren und Subtraktion von vorzeichenbehafteten Doppelwörtern.
  • Beschreibung des Standes 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).
  • Multiplizieren-Akkumulieren ist eine übliche digitale Signalverarbeitungsoperation, bei der das Produkt von zwei Zahlen berechnet und zu einem akkumulierten Wert addiert wird. Vorhandene SIMD-Mikroarchitekturen (Single Instruction Multiple Data; ein Befehl, mehrere Daten) setzen Multiplizieren-Akkumulieren-Operationen durch Ausführen einer Befehlssequenz um. Ein Multiplizieren-Akkumulieren kann beispielsweise mit einem Multiplizierbefehl durchgeführt werden, gefolgt von einer 4-Wege-Addition und einer anschließenden Akkumulation mit den Ziel-Quadrupelwort-Daten zur Erzeugung von zwei gesättigten 64-Bit-Ergebnissen.
  • Figurenliste
  • Ein besseres Verständnis der vorliegenden Erfindung kann aus der folgenden detaillierten Beschreibung in Verbindung mit den folgenden Zeichnungen erhalten werden, wobei Folgendes gilt:
    • 1A und 1B sind Blockdiagramme, die ein allgemeines vektorfreundliches Befehlsformat und Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulichen;
    • 2A-C sind Blockdiagramme, die ein beispielhaftes VEX-Befehlsformat gemäß Ausführungsformen der Erfindung darstellen;
    • 3 ist ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform der Erfindung; und
    • 4A ist ein Blockdiagramm, das sowohl eine beispielhafte reihenfolgetreue (In-order) Abruf-, Decodier-, Rückzugspipeline als auch eine beispielhafte reihenfolgeveränderte (Out-of-order) Ausgabe-/Ausführungspipeline mit Registerumbenennung gemäß Ausführungsformen der Erfindung darstellt;
    • 4B ist ein Blockdiagramm, das sowohl ein Ausführungsbeispiel für einen reihenfolgetreuen (In-order) Abruf-, Decodier-, Rückzugskern als auch einen beispielhaften reihenfolgeveränderten (Out-of-order) Registerumbenennungs-Ausgabe/Ausführungs-Architekturkern, der in einem Prozessor aufzunehmen ist, gemäß Ausführungsformen der Erfindung darstellt;
    • 5A ist ein Blockdiagramm eines einzelnen Prozessorkerns zusammen mit seiner Verbindung zu einem On-Die-Verbindungsnetzwerk;
    • 5B stellt eine erweiterte Ansicht eines Teils des Prozessorkerns in 5A gemäß Ausführungsformen der Erfindung dar;
    • 6 ist ein Blockdiagramm eines Einzelkernprozessors und eines Mehrkernprozessors mit integrierter Speichersteuerung und integrierter Grafik gemäß Ausführungsformen der Erfindung;
    • 7 stellt ein Blockdiagramm eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung dar;
    • 8 stellt ein Blockdiagramm eines zweiten Systems gemäß einer Ausführungsform der vorliegenden Erfindung dar;
    • 9 stellt ein Blockdiagramm eines dritten Systems gemäß einer Ausführungsform der vorliegenden Erfindung dar;
    • 10 stellt ein Blockdiagramm eines Systemon-a-Chip (SoC) gemäß einer Ausführungsform der vorliegenden Erfindung dar;
    • 11 stellt ein Blockdiagramm dar, 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 stellt eine Prozessorarchitektur dar, auf der Ausführungsformen der Erfindung umgesetzt werden können;
    • 13 stellt mehrere gepackte Datenelemente, die reelle und komplexe Werte enthalten, gemäß einer Ausführungsform dar;
    • 14 stellt Ausführungsformen einer gepackten Datenverarbeitungs-Architektur dar;
    • 15 stellt ein Verfahren gemäß einer Ausführungsform der Erfindung dar; und
    • 16 stellt ein Verfahren gemäß einer Ausführungsform der Erfindung dar.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der folgenden Beschreibung werden, zum Zwecke der Erläuterung, zahlreiche spezifische Details dargelegt, um ein gründliches Verständnis der nachfolgend beschriebenen Ausführungsformen der Erfindung zu bieten. Es ist allerdings für Fachleute auf dem Gebiet offensichtlich, dass die Ausführungsformen der Erfindung ohne einige dieser spezifischen Details umgesetzt werden können. In anderen Fällen sind gut bekannte Strukturen und Einrichtungen in Blockdiagrammform dargestellt, um zu vermeiden, dass die zugrundeliegenden Prinzipien der Ausführungsformen der Erfindung unklar werden.
  • BEISPIELHAFTE PROZESSORARCHITEKTUREN, BEFEHLSFORMATE UND DATENTYPEN
  • Ein Befehlssatz umfasst ein oder mehrere Befehlsformate. Ein gegebenes Befehlsformat definiert 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. 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.
  • 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 nicht an einen spezifischen Befehlssatz gebunden ist.
  • Während Ausführungsformen der Erfindung beschrieben werden, in denen das vektorfreundliche Befehlsformat Folgendes unterstützt: eine 64-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 32 Bit (4 Byte) oder 64 Bit (8 Byte) (und daher besteht ein 64-Byte-Vektor entweder aus 16 Elementen in Doppelwortgröße oder alternativ aus 8 Elementen in Quadrupelwortgröße); eine 64-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 16 Bit (2 Byte) oder 8 Bit (1 Byte); eine 32-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); und eine 16-Byte-Vektoroperandenlänge (oder Größe) mit Datenelementbreiten (oder Größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); können alternative Ausführungsformen mehr, weniger und/oder verschiedene Vektoroperandengrößen (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder verschiedenen Datenelementbreiten (z. B. Datenelementbreiten von 128 Bit (16 Byte)) unterstützen.
  • Die Klasse-A-Befehlsvorlagen in 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. 32x512, 16x128, 32x1024, 64x1024). 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/oder 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, unter 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.
  • VEX-Befehlsformat
  • VEX-Codierung ermöglicht es Befehlen, mehr als zwei Operanden zu haben, und ermöglicht SIMD-Vektorregistern, länger als 28 Bit zu sein. Die Verwendung eines VEX-Präfixes ermöglicht eine Syntax mit drei Operanden (oder mehr). Beispielsweise führten vorherige Zwei-Operanden-Befehle Operationen wie etwa A = A + B durch, wobei ein Quelloperand überschrieben wird. Die Verwendung eines VEX-Präfixes ermöglicht Operanden, nicht-destruktive Operationen durchzuführen, wie etwa A = B + C.
  • 2A stellt ein beispielhaftes AVX-Befehlsformat dar, einschließlich eines VEX-Präfixes 202, eines Real-Opcode-Feldes 230, eines Mod-R/M-Bytes 240, eines SIB-Bytes 250, eines Verschiebungsfelds 262 und einer lMM8 272. 2B stellt dar, welche Felder aus 2A ein volles Opcode-Feld 274 und ein Basisoperationsfeld 241 bilden. 2C stellt dar, welche Felder aus 2A ein Registerindexfeld 244 bilden.
  • VEX-Präfix (Bytes 0-2) 202 ist in einer Drei-Byte-Form codiert. Das erste Byte ist das Formatfeld 290 (VEX-Byte 0, Bits [7:0]), das einen expliziten C4-Bytewert enthält (den eindeutigen Wert, der zum Unterscheiden des C4-Befehlsformats verwendet wird). Das zweite-dritte Byte (VEX-Bytes 1-2) umfassen eine Anzahl von Bitfeldern, die eine spezifische Fähigkeit bieten. Insbesondere besteht REX-Feld 205 (VEX-Byte 1, Bits [7-5]) aus einem VEX.R-Bitfeld (VEX-Byte 1, Bit [7] - R), einem VEX.X-Bitfeld (VEX-Byte 1, Bit [6] - X) und einem VEX.B-Bitfeld (VEX-Byte 1, Bit[5] - B). 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 VEX.R, VEX.X und VEX.B gebildet werden können. Opcode-Abbildungsfeld 215 (VEX-Byte 1, Bits [4:0] - mmmmm) umfasst Inhalt zum Codieren eines implizierten führenden Opcode-Bytes. W-Feld 264 (VEX-Byte 2, Bit [7] - W) - ist durch die Notation VEX.W dargestellt und bietet unterschiedliche Funktionen in Abhängigkeit vom Befehl. Die Rolle von VEX.vvvv 220 (VEX-Byte 2, Bits [6:3]-vvvv) kann Folgendes umfassen: 1) VEX.vvvv codiert den ersten Quellregisteroperanden, angegeben in invertierter Form (Einerkomplement) und ist gültig für Befehle mit 2 oder mehr Quelloperanden; 2) VEX.vvvv codiert den Zielregisteroperanden, angegeben in Einerkomplementform für gewisse Vektorverschiebungen; oder 3) VEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Wenn Größenfeld VEX.L 268 (VEX-Byte 2, Bit [2]-L) = 0, zeigt es einen 28-Bit-Vektor an; wenn VEX.L = 1, zeigt es einen 256-Bit-Vektor an. Präfixcodierungsfeld 225 (VEX-Byte 2, Bits [1:0]-pp) bietet zusätzliche Bits für das Basisoperationsfeld 241.
  • Das Real-Opcode-Feld 230 (Byte 3) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes wird in diesem Feld angegeben.
  • MOD-R/M-Feld 240 (Byte 4) umfasst MOD-Feld 242 (Bits [7-6]), Reg-Feld 244 (Bits [5-3]) und R/M-Feld 246 (Bits [2-0]). Die Rolle des Reg-Feldes 244 kann Folgendes umfassen: Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden (das rrr von Rrrr) oder als eine Opcode-Erweiterung behandelt werden und nicht zum Codieren von jeglichen Befehlsoperanden verwendet 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 (SIB, Scale, Index, Base) - Der Inhalt des Skalierungsfelds (Scale) 250 (Byte 5) umfasst SS252 (Bits [7-6]), was für Speicheradresserzeugung verwendet wird. Auf die Inhalte von SIB.xxx 254 (Bits [5-3]) und SIB.bbb 256 (Bits [2-0]) wurde vorher hinsichtlich der Registerindizes Xxxx und Bbbb Bezug genommen.
  • Das Verschiebungsfeld 262 und das Direktoperandenfeld (lMM8) 272 enthalten Adressdaten.
  • 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. Die 256 Bits niedrigerer Ordnung der unteren 6 zmm-Register werden auf Register ymm0-15 überlagert. Die 128 Bits niedrigerer Ordnung der unteren 6 zmm-Register (die 128 Bit niedriger Ordnung der ymm-Register) werden auf Register xmm0-15 überlagert.
  • 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 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 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 Wissenschaft (Durchsatz), umfassend. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die Folgendes umfassen können: 1) den Koprozessor auf einem von der CPU separaten Chip; 2) den Koprozessor auf einem separaten Die im gleichen Chipgehäuse wie eine CPU; 3) den Koprozessor auf dem gleichen Die wie eine CPU (in diesem Fall wird ein solcher Koprozessor manchmal als spezielle Logik, wie etwa als integrierte Grafik und/oder wissenschaftliche (Durchsatz) Logik, oder als spezielle Kerne bezeichnet); und 4) ein System auf einem Chip, das auf demselben Die die beschriebene CPU (manchmal als der bzw. die Anwendungskerne oder Anwendungsprozessoren bezeichnet), den oben beschriebenen Koprozessor und zusätzliche Funktionalität umfassen kann. Beispielhafte Kernarchitekturen werden als nächstes beschrieben, gefolgt von Beschreibungen von beispielhaften Prozessoren und Computerarchitekturen. Hierin sind Schaltungen (Einheiten) ausführlich beschrieben, die beispielhafte Kerne, Prozessoren usw. umfassen.
  • Beispielhafte Kernarchitekturen
  • 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 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). Die Decodiereinheit 440 ist mit einer Umbenennungs-/Zuordnungseinheit 452 in der Ausführungsengineeinheit 450 gekoppelt.
  • 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 und eine skalare Registereinheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister und universelle Register 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. Der 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 der 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 ihre(n) eigene(n) Ablaufsteuerungseinheit, physische Registerdatei(en)einheit und/oder Ausführungscluster haben - und im Falle einer separaten Speicherzugriffspipeline sind gewisse Ausführungsformen umgesetzt, bei denen nur der 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; der 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. AVX1, AVX2), dadurch ermöglichend, dass Operationen, die von vielen Multimedia-Anwendungen verwendet werden, mit gepackten Daten durchgeführt werden.
  • Es versteht sich, dass der Kern Mehrsträngigkeit (oder Multithreading, Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies auf vielfältige Weisen vornehmen kann, einschließlich Zeitscheiben-Multithreading, Simultan-Multithreading (wobei ein einziger physischer Kern einen logischen Kern für jeden der Threads bereitstellt, die der physische Kern simultan im Multithreading behandelt), oder eine Kombination davon (z. B. Zeitscheiben-Abruf und -Decodierung und Simultan-Multithreading danach, wie etwa bei der Intel® Hyperthreading-Technologie) .
  • Während Registerumbenennung im Kontext von reihenfolgeveränderter (Out-of-order) Ausführung beschrieben ist, versteht es sich, dass Registerumbenennung in einer reihenfolgetreuen (In-order) Architektur verwendet werden kann. Während die dargestellte Ausführungsform des Prozessors auch separate Befehls- und Datencacheeinheiten 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 reihenfolgetreue (In-order) 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 in einigen Ausführungsformen je Richtung 1024 Bits 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 6-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.
  • Prozessor mit integrierter Speichersteuerung und Grafik
  • 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 aus einer Anzahl von Prozesstechnologien umgesetzt sein, wie etwa, beispielsweise, BiCMOS, CMOS oder NMOS.
  • Die Speicherhierarchie umfasst eine oder mehrere Cacheebenen innerhalb der Kerne 604A-N, 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, 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 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, 7155 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-Verbindung 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 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 816 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) 972 bzw. 982 umfassen können. Daher umfasst die CL 972, 982 integrierte Speichersteuerungseinheiten und umfasst E/A-Steuerlogik. 9 stellt dar, 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 102A-N, Cacheeinheiten 604A-N und gemeinsam genutzte(n) Cacheeinheit(en) 606 umfasst; 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 ersten Compiler 1104 kompiliert werden kann, um einen ersten Binärcode (z. B. x86) 1106 zu erzeugen, der systemintern durch einen Prozessor mit zumindest einem ersten Befehlssatzkern 1116 ausgeführt werden kann. In einigen Ausführungsformen stellt der Prozessor mit zumindest einem ersten Befehlssatzkern 1116 jeden Prozessor dar, 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 erste Compiler 1104 stellt einen Compiler dar, der betrieben werden kann, um Binärcode des ersten Befehlssatzes 1106 (zum Beispiel Objektcode) zu erzeugen, der, mit oder ohne zusätzliche Verknüpfungsverarbeitung, auf dem Prozessor mit mindestens einem ersten 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 ersten 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 ersten Binärcode 1106 in Code umzuwandeln, der systemintern durch den Prozessor ohne einen ersten 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 ersten Befehlssatzprozessor oder -kern hat, ermöglicht, den ersten Binärcode 1106 auszuführen.
  • EINRICHTUNG UND VERFAHREN FÜR DIGITALE SIGNALVERARBEITUNGSBEFEHLE
  • Befehle für die digitale Signalverarbeitung (DSP) sind nachstehend beschrieben. In einer Ausführungsform sind die Schaltungsanordnungen und die Logik zum Durchführen der DSP-Operationen in die in 4B gezeigte Ausführungsengineeinheit 450 in den verschiedenen vorstehend beschriebenen Kernen (siehe z. B. Kerne 602A-N in den 6 und 10) und/oder in die in 5A gezeigte Vektoreinheit 510 integriert. Die verschiedenen Quell- und Zielregister können beispielsweise SIMD-Register in der/den physikalischen Registerdateieinheit (en) 458 in 4B und oder Vektorregistern 310 in 3 sein. Die nachstehend beschriebenen Multiplikationsschaltungen, Additionsschaltungen, Akkumulationsschaltungen und anderen Schaltungsanordnungen können in die Ausführungskomponenten der vorstehend beschriebenen Architekturen integriert sein, einschließlich beispielsweise und ohne Einschränkung der Ausführungseinheit (en) 462 in 4B. Es sei jedoch angemerkt, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifischen Architekturen beschränkt sind.
  • Eine Ausführungsform der Erfindung umfasst eine Schaltungsanordnung und/oder Logik zum Verarbeiten von Befehlen für die digitale Signalverarbeitung (DSP). Insbesondere umfasst eine Ausführungsform eine Multiplizieren-Akkumulieren-Architektur (MAC) mit acht 16x16-Bit-Multiplikatoren und zwei 64-Bit-Akkumulatoren. Die nachstehend beschriebene Befehlssatzarchitektur (ISA) kann verschiedene Multiplikations- und MAC-Operationen auf gepackten 128-Bit (8-Bit-, 16-Bit- oder 32-Bit-Datenelementen)-Ganzzahl-, Fixpunkt- und Komplexdatentypen verarbeiten. Darüber hinaus werden bestimmte Befehle direkt für eine hocheffiziente schnelle Fouriertransformation (FFT, Fast Fourier Transform) und Filtern mit endlicher Impulsantwort (FIR, Finite Impulse Response) sowie die Nachverarbeitung akkumulierter Daten durch Verschiebungs-, Rundungs- und Sättigungsoperationen unterstützt.
  • Eine Ausführungsform der neuen DSP-Befehle verwendet eine Opcode-Codierung auf der Grundlage eines VEX.128-Präfixes, und mehrere SSE/SSE2/AVX-Befehle, die die Nachverarbeitung von Daten handhaben, werden mit der DSP-ISA verwendet. Die VEX-codierten 128-Bit-DSP-Befehle mit Speicheroperanden können weniger strenge Speicherausrichtungsanforderungen aufweisen.
  • In einer Ausführungsform unterstützen die Befehle auch eine Vielfalt von Ganzzahl- und Fixpunktdatentypen, einschließlich:
    1. 1) eines Q31-Datentyps für Signale, die Analog-DigitalUmsetzung (ADC) und Digital-Analog-Umsetzung (DAC) mit mehr als 16 Bits erfordern;
    2. 2) eines Q15-Datentyps, wie er in DSP-Algorithmen üblich ist;
    3. 3) eines komplexen 16-Bit-Datentyps; und
    4. 4) eines komplexen 32-Bit-Datentyps.
  • Die hier beschriebene Befehlssatzarchitektur zielt auf einen großen Bereich an Standard-DSP (z. B. FFT, Filtern, Musterabgleich, Korrelation, Polynombeurteilung usw.) und statistischen Operationen (z. B. Mittelwert, gleitender Durchschnitt, Varianz usw.) ab.
  • Zu Zielanwendungen der Ausführungsformen der Erfindung gehören Sensor-, Audio-, Klassifikationsaufgaben für Computervision und Spracherkennung. Die hier beschriebene DSP-ISA beinhaltet einen großen Bereich an Befehlen, die für tiefe neuronale Netzwerke (DNN, Deep Neural Network), automatische Spracherkennung (ASR, Automatic Speech Recognition), Sensorfusion mit Kalman-Filtern, andere wichtige DSP-Anwendungen usw. anwendbar sind. Angesichts der Sequenz der Gewichtungen {w1, w2, ...wk} und der Eingabesequenz {x1, x2, x3, ....xn} verlangen zahlreiche Bildverarbeitungs- und Maschinenlernaufgaben die Berechnung der Ergebnissequenz {y1, y2, y3, ...yn+1-k}, definiert durch yi = w1xi+w2xi+1+ ... + wkxi+k-1.
  • 12 stellt einen beispielhaften Prozessor 1255 dar, auf dem Ausführungsformen der Erfindung umgesetzt werden können und der mehrere Kerne 0-N für die gleichzeitige Ausführung einer Vielzahl von Befehlsthreads umfasst. Die dargestellte Ausführungsform umfasst eine DSP-Befehlsdecodier-Schaltungsanordnung/Logik 1231 im Decodierer 1230 und eine DSP-Befehlsausführungs-Schaltungsanordnung/Logik 1341 in der Ausführungseinheit 1240. Diese Pipeline-Komponenten können die hier beschriebenen Operationen als Reaktion auf die Decodierung und Ausführung der DSP-Befehle durchführen. In 12 sind zwar nur Einzelheiten eines einzigen Kerns (Kern 0) gezeichnet, es ist jedoch offensichtlich, dass jeder der anderen Kerne des Prozessors 1255 ähnliche Komponenten umfassen kann.
  • Vor der Beschreibung bestimmter Einzelheiten der Ausführungsformen der Erfindung ist unmittelbar nachstehend eine Beschreibung der verschiedenen Komponenten des beispielhaften Prozessors 1255 bereitgestellt. Die mehreren Kerne 0-N können jeweils eine Speicherverwaltungseinheit 1290 zum Durchführen von Speicheroperationen (z. B. Lade-/Speicheroperationen), einen Satz universelle Register (GPR, General Purpose Register) 1205, einen Satz Vektorregister 1206 und einen Satz Maskenregister 1207 umfassen. In einer Ausführungsform sind mehrere Vektordatenelemente in jedes Vektorregister 1206 gepackt, das eine Breite von 512 Bit zum Speichern von zwei 256-Bit-Werten, vier 128-Bit-Werten, acht 64-Bit-Werten, sechzehn 32-Bit-Werten usw. aufweisen kann. Die zugrundeliegenden Prinzipien der Erfindung sind jedoch nicht auf eine bestimmte Größe/Art von Vektordaten beschränkt. In einer Ausführungsform umfassen die Maskenregister 1207 acht 64-Bit-Operandenmaskenregister, die zum Durchführen von Bitmaskierungsoperationen an den in den Vektorregistern 1206 gespeicherten Werten verwendet werden (z. B. umgesetzt als hier beschriebene Maskenregister k0-k7). Die zugrundeliegenden Prinzipien der Erfindung sind jedoch nicht auf eine bestimmte Größe/Art von Maskenregistern beschränkt.
  • Jeder Kern 0-N kann einen dedizierten Level-1-Cache (L1) 1212 und Level-2-Cache (L2) 1211 zum Caching von Befehlen und Daten gemäß einer bestimmten Cacheverwaltungsrichtlinie umfassen. Der L1-Cache 1212 umfasst einen separaten Befehlscache 1220 zum Speichern von Befehlen und einen separaten Datencache 1221 zum Speichern von Daten. Die in den verschiedenen Prozessorcaches gespeicherten Befehle und Daten werden an der Granularität von Cachezeilen verwaltet, die eine feste Größe aufweisen können (z. B. eine Länge von 64, 128, 512 Byte). Jeder Kern dieser beispielhaften Ausführungsform weist eine Befehlsabrufeinheit 1210 zum Abrufen von Befehlen vom Hauptspeicher 1200 und/oder einen gemeinsam genutzten Level-3-Cache (L3) 1216 auf. Die Befehlsabrufeinheit 1210 umfasst verschiedene gut bekannte Komponenten, einschließlich eines Zeigers 1203 zum nächsten Befehl zum Speichern der Adresse des nächsten aus dem Speicher 1200 (oder einem der anderen Caches) abzurufenden Befehls; eines Befehlsübersetzungspuffers (ITLB, Instruction Translation Look-aside Buffer) 1204 zum Speichern einer Abbildung kürzlich verwendeter virtueller-zu-physischer Befehlsadressen zum Verbessern der Geschwindigkeit der Adressenübersetzung; einer Verzweigungsvorhersageeinheit 1202 zum spekulativen Vorhersagen von Befehlsverzweigungsadressen und Verzweigungszielpuffer (BTB, Branch Target Buffer) 1201 zum Speichern von Verzweigungsadressen und Zieladressen.
  • Wie erwähnt, umfasst eine Decodiereinheit 1230 eine DSP-Befehlsdecodier-Schaltungsanordnung/Logik 1231 zum Decodieren der hier beschriebenen DSP-Befehle in Mikrooperationen oder „uops“, und die Ausführungseinheit 1240 umfasst eine DSP-Befehlsausführungs-Schaltungsanordnung/Logik 1241 zum Ausführen der DSP-Befehle. Eine Rückschreib-/Rückzugeinheit 1250 zieht ausgeführte Befehle zurück und schreibt die Ergebnisse zurück.
  • Ausführungsformen zum Durchführen dualer Multiplikationen von gepackten vorzeichenbehafteten Doppelwörtern und Subtraktion von akkumulierten Quadrupelwörtern
  • Eine Ausführungsform der Erfindung umfasst einen Befehl zum Durchführen einer dualen Multiplikation von zwei gepackten vorzeichenbehafteten Doppelwörtern in jedem von ersten und zweiten Quellregistern zum Erzeugen von zwei vorzeichenbehafteten Quadrupelwortwerten, die dann von akkumulierten Werten aus einem dritten Quell-/Zielregister (d. h. einem Register, das sowohl Quelle als auch Ziel ist) subtrahiert werden. Eine besondere Implementierung beinhaltet den Befehl VPNMACDLLSQ xmm0, xmm1, xmm2/m128, der ein gepacktes duales vorzeichenbehaftetes Vektormultiplizieren der beiden unteren Doppelwörter (32-Bitwerte) von xmm1 und xmm2/m128 durchführt. Jedes der resultierenden Quadrupelwörter (64-Bit-Werte) wird dann von jedem der akkumulierten Quadrupelwörter in xmm0 subtrahiert. In einer Ausführungsform ist jede der aus der Subtraktion resultierenden 65-Bit-Akkumulatorausgaben gesättigt und wird in die zwei Quadrupelwörter des xmm0-Registers geschrieben. Eine Ausführungsform umfasst auch den Befehl VPNMACDLLQ xmm0, xmm1, xmm2/m128, der die gleichen Operationen wie VPNMACDLLSQ durchführt, jedoch ohne Sättigung.
  • Zusätzlich umfasst eine Umsetzung den Befehl VPNMACDHHSQ xmm0, xmm1, xmm2/m128, der ein gepacktes duales vorzeichenbehaftetes Vektormultiplizieren der beiden hohen Doppelwörter von xmm1 und xmm2/m128 durchführt. Jedes der zwei vorzeichenbehafteten Quadrupelwortergebnisse wird dann von jedem der vorzeichenbehafteten Quadrupelwörter aus xmm0 subtrahiert. In einer Ausführungsform ist jede der 65-Bit-Akkumulatorausgaben gesättigt und wird in die zwei Quadrupelwörter des xmm0-Registers geschrieben. Eine Ausführungsform umfasst auch den Befehl VPNMACDHHQ xmm0, xmm1, xmm2/m128, der die gleichen Operationen wie VPNMACDHHSQ durchführt, jedoch ohne Sättigung.
  • In einer Umsetzung sind die xmm1-, xmm2- und xmm3-Register gepackte 128-Bit-Datenregister, die duale Quadrupelwortwerte oder vier Doppelwortwerte speichern, und xmm2/m128 gibt an, dass der entsprechende 128-Bit-Quellwert aus Speicher oder einem Register (xmm2) abgerufen werden kann.
  • 13 stellt beispielhafte Datenelement- und Bitverteilungen für ein beispielhaftes Quellregister und/oder Zielregister (SRCx/DESTx) dar. Datenelemente können in das Quellregister und/oder Zielregister in Wörtern (16 Bits), Doppelwörtern (32 Bits) und/oder Quadrupelwörtern (64 Bits) gepackt werden, wie dargestellt ist. In den hier beschriebenen Umsetzungen speichern beispielsweise das erste und zweite Quellregister Doppelwörter (dargestellt als Elemente B-A, D-C, F-E und H-G), und das dritte Quellregister speichert Quadrupelwörter (dargestellt als ein niedriges Quadrupelwort D-A und ein hohes Quadrupelwort H-E). Die zugrundeliegenden Prinzipien der Erfindung sind jedoch nicht auf bestimmte Datengrößen beschränkt.
  • 14 stellt eine beispielhafte Architektur für Ausführen eines Befehls zum Durchführen einer gepackten dualen Multiplikation von zwei in jeweils einem ersten und zweiten Quellregister gespeicherten gepackten Doppelwörtern zum Erzeugen von zwei Quadrupelwortwerten dar, die von zwei Quadrupelwortwerten aus einem dritten Quell-/Zielregister subtrahiert werden. Eine Ausführungsform dieses Befehls verwendet duale gepackte Doppelwort-Datenelemente, die in den Registern SRC1 1401 und SRC2 1402 gespeichert sind. Zur Erläuterung: Die Wortwerte in der 14 werden als 16-Bit-Elemente A - H, die Doppelwortwerte als 32-Bit-Elemente HG, FE, DC und BA und die Quadrupelwortwerte als 64-Bit-Elemente HE und DA identifiziert. In den hierin beschriebenen Umsetzungen sind die Doppelwortwerte vorzeichenbehaftete gepackte Datenwerte.
  • In einer bestimmten Umsetzung multiplizieren die Multiplizierer 1405 die niedrigeren Doppelwörter jedes Quadrupelworts. Zum Beispiel wird das vorzeichenbehaftete Doppelwort-Datenelement BA aus SRC1 1401 mit dem vorzeichenbehafteten Doppelwort-Datenelement BA aus SRC2 1402 multipliziert, um ein erstes temporäres Quadrupelwortprodukt zu erzeugen, und das Doppelwort-Datenelement FE aus SRC1 wird mit dem Doppelwort-Datenelement FE aus SRC2 1402 multipliziert, um ein zweites temporäres Quadrupelwortprodukt zu erzeugen. Das erste und das zweite temporäre Quadrupelwortprodukt können in einem oder mehreren Registern und/oder Speicherplätzen (nicht dargestellt) gespeichert werden.
  • In einer Ausführungsform subtrahiert ein erster Akkumulator 1420 das erste temporäre Quadrupelwortprodukt vom Quadrupelwortwert DA aus dem SRC3/DEST-Register 1460, und ein zweiter Akkumulator 1421 subtrahiert das zweite temporäre Quadrupelwortprodukt vom Quadrupelwortwert HE aus dem SRC3/DEST-Register 1460. In einer Umsetzung können, zum Durchführen der Subtraktion, die ersten und zweiten temporären Quadrupelwortprodukte negiert und dann durch die Akkumulatoren 1420-1421 zu den gespeicherten Quadrupelwortwerten addiert werden. Insbesondere kann Negation unter Verwendung von Zweierkomplementen durchgeführt werden, wobei die Bits der ersten und zweiten temporären Quadrupelwortprodukte invertiert und eine binäre 1 zu den resultierenden Werten addiert wird, um die temporären Quadrupelwortprodukte zu negieren.
  • Die 65-Bit-Ausgabe aus jedem Akkumulator 1420 - 1421 kann durch die Sättigungsschaltungsanordnung 1440 - 1441 gesättigt werden, falls erforderlich, um zwei endgültige (potenziell gesättigte) vorzeichenbehaftete Quadrupelwortwerte zu erzeugen. Der Ausgabemultiplexer 1450 leitet den ersten Quadrupelwortwert zu den niedrigen 64 Bits von SRC3/DEST 1460 (gezeigt als DA in der 14) und den zweiten Quadrupelwortwert zu den hohen 64 Bits von SRC/DEST 1460 (gezeigt als HE). Zusätzliche, durch zusätzliche Befehle erzeugte Quadrupelwortprodukte können dann von den akkumulierten Quadrupelwortwerten in SRC3/DEST 1460 subtrahiert oder zu diesen addiert werden.
  • In einer Ausführungsform werden die Sättigungsschaltungsanordnungen 1440-1441 nicht verwendet. Zum Beispiel führt eine Ausführungsform des VPMACDLLQ-Befehls alle oben beschriebenen Operationen außer der Sättigung durch. In solch einem Fall können nur 64 Bits der 65-Bit-Ausgaben aus den Akkumulatoren 1420 - 1421 im SRC3/DEST-Register 1460 gespeichert werden (z. B. können das höchstwertigste oder das niedrigstwertige Bit ignoriert werden).
  • Es sei darauf hingewiesen, dass gewisse Komponenten, die in 14 gezeigt sind, wie zum Beispiel die Addierernetzwerke 1410-1411 und die Sättigungsschaltungsanordnungen 1440-1441, nicht zum Ausführen der beschriebenen Operationen benötigt werden. In solchen Fällen wird davon ausgegangen, dass Daten diese Schaltungen einfach ohne Modifikation passieren.
  • Wie erwähnt, umfasst eine Ausführungsform den Befehl VPMACDHHSQ xmm0, xmm1, xmm2/m128, der, wiederum Bezug nehmend auf 14, ein gepacktes duales vorzeichenbehaftetes Vektormultiplizieren der zwei hohen Doppelwörter in jedem Quadrupelwort in SRC1 1401 und SRC2 1402 durchführt. Insbesondere multiplizieren die Multiplizierer 1405 das vorzeichenbehaftete Doppelwort-Datenelement DC aus SRC1 1401 mit dem vorzeichenbehafteten Doppelwort-Datenelement DC aus SRC2 1402 und multiplizieren gleichzeitig das vorzeichenbehaftete Doppelwort-Datenelement HG aus SRC1 1401 mit dem vorzeichenbehafteten Doppelwort-Datenelement HG aus SRC2 1402, um ein erstes und zweites temporäres Quadrupelwortprodukt zu erzeugen. Das erste und das zweite temporäre Quadrupelwortprodukt können in einem oder mehreren Registern und/oder Speicherplätzen (nicht dargestellt) gespeichert werden.
  • In einer Ausführungsform subtrahiert ein erster Akkumulator 1420 das erste temporäre Quadrupelwortprodukt und den Quadrupelwortwert DA aus dem SRC3/DEST-Register 1460, und ein zweiter Akkumulator 1421 subtrahiert das zweite temporäre Quadrupelwortprodukt und den Quadrupelwortwert HE aus dem SRC3/DEST-Register 1460.
  • Die 65-Bit-Ausgabe aus jedem Akkumulator 1420 - 1421 kann durch die Sättigungsschaltungsanordnung 1440 - 1441 gesättigt werden, falls erforderlich, um zwei endgültige (potenziell gesättigte) vorzeichenbehaftete Quadrupelwortwerte zu erzeugen. Der Ausgabemultiplexer 1450 leitet den ersten endgültigen vorzeichenbehafteten Quadrupelwortwert zu den niedrigen 64 Bits von SRC3/DEST 1460 (DA in der 14) und den zweiten endgültigen vorzeichenbehafteten Quadrupelwortwert zu den hohen 64 Bits von SRC/DEST 1460 (HE in der 14). Die resultierenden Quadrupelwortwerte können dann durch zusätzliche Quadrupelwortprodukte akkumuliert werden, die durch zusätzliche Befehle erzeugt werden.
  • In einer Ausführungsform werden die Sättigungsschaltungsanordnungen 1440-1441 nicht verwendet. Zum Beispiel führt eine Ausführungsform des VPNMACDHHQ-Befehls alle oben beschriebenen Operationen außer der Sättigung durch. In solch einem Fall können nur 64 Bits der 65-Bit-Ausgaben aus den Akkumulatoren 1420 - 1421 im SRC3/DEST-Register 1460 gespeichert werden (z. B. können das höchstwertigste oder das niedrigstwertige Bit ignoriert werden).
  • Eine Ausführungsform des VPNMACDHHQ-Befehls wird durch die folgende Code-Sequenz dargestellt: TEMP0[63:0] <- (SRC2[63:32] * SRC3[63:32]); TEMPI[63:0] <- (SRC2[127:96] * SRC3[127:96]); TEMP2[63:0] <- (~TEMP0 [63:0] + 1'b1); TEMP3[63:0] <- (~TEMP1 [63:0] + 1'b1); DEST[63:0] <- AddToSignedQuadword(TEMP2[63:0], DEST[63:0]); DEST[127:64] <- AddToSignedQuadword(TEMP3[63:0], DEST[127:64]);
  • Eine Ausführungsform des VPNMACDHHSQ-Befehls wird durch die folgende Code-Sequenz dargestellt: TEMP0[63:0] <- (SRC2[63:32] * SRC3[63:32]); (* vorzeichenbehaftete Multiplikation *) TEMP1[63:0] <- (SRC2[127:96] * SRC3[127:96]); TEMP2[63:0] <- (~TEMP0 [63:0] + 1'b1); TEMP3[63:0] <- (~TEMP1 [63:0] + 1'b1); DEST[63:0] <- AddSaturateToSignedQuadword(TEMP2[63:0], DEST[63:0]); DEST[127:64] <- AddSaturateToSignedQuadword(TEMP3[63:0], DEST[127:64]);
  • Eine Ausführungsform des VPNMACDLLQ-Befehls wird durch die folgende Code-Sequenz dargestellt: TEMP0[63:0] <- (SRC2[31:0] * SRC3[31:0]); TEMPI[63:0] <- (SRC2[95:64] * SRC3[95:64]); TEMP2[63:0] <- (~TEMP0 [63:0] + 1'b1); TEMP3[63:0] <- (~TEMP1 [63:0] + 1'b1); DEST[63:0] <- AddToSignedQuadword(TEMP2[63:0], DEST[63:0]); DEST[127:64] <- AddToSignedQuadword(TEMP3[63:0], DEST[127:64]);
  • Eine Ausführungsform des VPNMACDLLSQ-Befehls wird durch die folgende Code-Sequenz dargestellt: TEMP0[63:0] <- (SRC2[31:0] * SRC3[31:0]); TEMPI[63:0] <- (SRC2[95:64] * SRC3[95:64]); TEMP2[63:0] <- (~TEMP0 [63:0] + 1'b1); TEMP3[63:0] <- (~TEMP1 [63:0] + 1'b1); DEST[63:0] <- AddSaturateToSignedQuadword(TEMP2[63:0], DEST[63:0]); DEST[127:64] <- AddSaturateToSignedQuadword(TEMP3[63:0], DEST[127:64]);
  • Im obigen Code negieren die Operationen ∼TEMP0[63:0] + 1'b1 und ∼TEMP1[63:0] + 1'b1 die temporären Quadrupelwortprodukte durch Invertieren der temporären Ergebnisse, wie durch das Zeichen „∼“ angezeigt, und addieren dann 1, wie durch die Zeichenfolge 1'b1 angezeigt. Sobald negiert, erfolgt die Subtraktion durch Addieren dernegierten Werte zu den vorhandenen, im dritten Quell-/Zielregister 1460 gespeicherten Quadrupelwörtern.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 15 dargestellt. Das Verfahren kann innerhalb des Kontexts der Prozessor- und Systemarchitekturen, die oben beschrieben sind, umgesetzt werden, ist jedoch nicht auf irgendeine bestimmte Systemarchitektur beschränkt.
  • Bei 1501 wird ein Befehl abgerufen, der Felder für einen Opcode und erste und zweite Quelloperanden, die gepackte vorzeichenbehaftete Doppelwörter angeben, einen dritten Quelloperanden, der gepackte vorzeichenbehaftete Quadrupelwörter angibt, und einen Zieloperanden, der gepackte vorzeichenbehaftete Quadrupelwörter angibt, aufweist. Bei 1502 wird der Befehl decodiert, um einen ersten decodierten Befehl zu erzeugen (z. B. in mehrere Mikrooperationen). Bei 1503 werden die gepackten vorzeichenbehafteten Doppelwortwerte für den ersten und den zweiten Operanden abgerufen (z. B. aus dem Speicher, einem Daten-Cache usw.) und in einem ersten bzw. zweiten Quellregister gespeichert. Wie erwähnt, werden, in einer Ausführungsform, die vorzeichenbehafteten Doppelwortwerte in den höheren und niedrigeren 32 Bits der ersten und zweiten Quadrupelwörter innerhalb von Quellregistern mit gepackten 128-Bit-Daten gespeichert.
  • In 1504 wird der decodierte Befehl ausgeführt, um gleichzeitig jeden gepackten niedrigen vorzeichenbehafteten Doppelwortwert von jedem Quadrupelwort des ersten Quellregisters mit einem entsprechenden gepackten niedrigen vorzeichenbehafteten Doppelwortwert von jedem Quadrupelwort des zweiten Quellregisters zu multiplizieren, um das erste bzw. das zweite temporäre vorzeichenbehaftete Quadrupelwortprodukt zu erzeugen. In dem in 14 gezeigten Beispiel werden beispielsweise die Multiplikationen DC*DC und HG*HG durchgeführt. Das erste und zweite temporäre vorzeichenbehaftete Quadrupelwortprodukt werden dann (z. B. mittels Negation unter Verwendung von Zweierkomplementen) negiert, und die negierten Werte werden mit dem ersten und zweiten Quadrupelwortprodukt aus einem dritten Quellregister (das, wie erwähnt, das gleiche physikalische Register wie das Ziel sein kann) akkumuliert, um ein erstes und zweites vorzeichenbehaftetes Quadrupelwortergebnis zu erzeugen.
  • Einige Umsetzungen/Befehle sättigen dann das erste und zweite vorzeichenbehaftete Quadrupelwortergebnis, während andere dies nicht tun. In jedem Fall werden die Ergebnisse bei 1505 als gepackte vorzeichenbehaftete Quadrupelwörter im Zielregister (potenziell auch das dritte Quellregister) gespeichert.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 16 dargestellt. Das Verfahren kann innerhalb des Kontexts der Prozessor- und Systemarchitekturen, die oben beschrieben sind, umgesetzt werden, ist jedoch nicht auf irgendeine bestimmte Systemarchitektur beschränkt.
  • Bei 1601 wird ein Befehl abgerufen, der Felder für einen Opcode und erste und zweite Quelloperanden, die gepackte vorzeichenbehaftete Doppelwörter angeben, einen dritten Quelloperanden, der gepackte vorzeichenbehaftete Quadrupelwörter angibt, und einen Zieloperanden, der gepackte vorzeichenbehaftete Quadrupelwörter angibt, aufweist. Bei 1602 wird der Befehl decodiert, um einen ersten decodierten Befehl zu erzeugen (z. B. in mehrere Mikrooperationen). Bei 1603 werden die gepackten vorzeichenbehafteten Doppelwortwerte für den ersten und den zweiten Operanden abgerufen (z. B. aus dem Speicher, einem Daten-Cache usw.) und in einem ersten bzw. zweiten Quellregister gespeichert. Wie erwähnt, werden, in einer Ausführungsform, die durch den Befehl verarbeiteten vorzeichenbehafteten Doppelwortwerte in den höheren und niedrigeren 32 Bits der ersten und zweiten Quadrupelwörter innerhalb von Quellregistern mit gepackten 128-Bit-Daten gespeichert.
  • In 1604 wird der decodierte Befehl ausgeführt, um gleichzeitig jeden gepackten hohen vorzeichenbehafteten Doppelwortwert von jedem Quadrupelwort des ersten Quellregisters mit einem entsprechenden gepackten hohen vorzeichenbehafteten Doppelwortwert von jedem Quadrupelwort des zweiten Quellregisters zu multiplizieren, um das erste bzw. das zweite temporäre vorzeichenbehaftete Quadrupelwortprodukt zu erzeugen. In dem in 14 gezeigten Beispiel werden beispielsweise die Multiplikationen DC*DC und HG*HG durchgeführt. Das erste und zweite temporäre vorzeichenbehaftete Quadrupelwortprodukt werden dann (z. B. mittels Negation unter Verwendung von Zweierkomplementen) negiert, und die negierten Werte werden mit dem ersten und zweiten Quadrupelwortprodukt aus einem dritten Quellregister (das, wie erwähnt, das gleiche physikalische Register wie das Ziel sein kann) akkumuliert, um ein erstes und zweites vorzeichenbehaftetes Quadrupelwortergebnis zu erzeugen.
  • Einige Umsetzungen/Befehle sättigen dann das erste und zweite vorzeichenbehaftete Quadrupelwortergebnis, während andere dies nicht tun. In jedem Fall werden die Ergebnisse bei 1605 als gepackte vorzeichenbehaftete Quadrupelwörter im Zielregister (potenziell auch das dritte Quellregister) gespeichert.
  • In der vorstehenden Spezifikation wurden die Ausführungsformen der Erfindung unter Bezugnahme auf spezifische Ausführungsbeispiele davon beschrieben. Es ist, allerdings, offensichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne vom weiteren Geist und Schutzumfang der Erfindung, wie in den beigefügten Ansprüchen dargelegt, abzuweichen. Die Spezifikation und Zeichnungen sind, entsprechend, in einem veranschaulichenden Sinne zu betrachten, nicht in einem einschränkenden Sinne.
  • Ausführungsformen der Erfindung können verschiedene Schritte umfassen, die weiter oben beschrieben wurden. Die Schritte können in maschinenausführbaren Befehlen ausgeführt sein, die verwendet werden können, um einen universellen oder speziellen Prozessor zum Durchführen der Schritte zu veranlassen. Alternativ können diese Schritte durch spezifische Hardwarekomponenten, die fest verdrahtete Logik zum Durchführen der Schritte haben, oder durch eine beliebige Kombination aus programmierten Computerkomponenten und maßgeschneiderten Hardwarekomponenten durchgeführt werden.
  • Wie hierin beschrieben, können sich Befehle auf spezifische Auslegungen von Hardware, wie anwendungsspezifische integrierte Schaltungen (Application Specific Integrated Circuits, ASICs), die dazu ausgelegt sind, bestimmte Operationen durchzuführen, oder die eine vorher festgelegte Funktionalität aufweisen, oder Softwarebefehle, die in einem Speicher gespeichert sind, der in einem nicht-flüchtigen computerlesbaren Medium ausgeführt ist, beziehen. Somit können die in den Figuren gezeigten Techniken unter Verwendung von Code und Daten umgesetzt werden, die auf einer oder mehreren elektronischen Vorrichtungen (z. B. einer Endstation, einem Netzwerkelement usw.) gespeichert und ausgeführt werden. Diese elektronischen Vorrichtungen speichern und kommunizieren (intern und/oder mit anderen elektronischen Vorrichtungen über ein Netzwerk) Code und Daten unter Verwendung von computermaschinenlesbaren Medien, wie nicht-flüchtigen computermaschinenlesbaren Speichermedien (z. B. Magnetplatten; optische Platten; Direktzugriffsspeicher; Nur-Lese-Speicher; Flash-Speicher-Vorrichtungen; Phasenwechselspeicher) und transitorischen computermaschinenlesbaren Kommunikationsmedien (z. B. elektrische, optische, akustische oder eine andere Form propagierter Signale - wie Trägerwellen, Infrarotsignale, digitale Signale usw.). Außerdem schließen diese elektronischen Vorrichtungen üblicherweise einen Satz von einem oder mehreren Prozessoren, die an eine oder mehrere andere Komponenten, wie eine oder mehrere Speichervorrichtungen (nicht-flüchtige maschinenlesbare Speichermedien), Benutzereingabe/-ausgabevorrichtungen (z. B. eine Tastatur, ein Touchscreen und/oder eine Anzeige), gekoppelt sind, und Netzwerkverbindungen ein. Das Koppeln des Satzes von Prozessoren und anderen Komponenten erfolgt üblicherweise durch eine/n oder mehrere Busse und Brücken (auch als Bussteuerungen bezeichnet). Die Speichervorrichtung und die Signale, die den Netzwerkverkehr tragen, stellen ein oder mehrere maschinenlesbare Speichermedien bzw. maschinenlesbare Kommunikationsmedien dar. Somit speichert die Speichervorrichtung einer gegebenen elektronischen Vorrichtung üblicherweise Code und/oder Daten zur Ausführung auf dem Satz von einem oder mehreren Prozessoren dieser elektronischen Vorrichtung. Selbstverständlich können ein oder mehrere Teile einer Ausführungsform der Erfindung unter Verwendung verschiedener Kombinationen von Software, Firmware und/oder Hardware umgesetzt werden. Über diese gesamte detaillierte Beschreibung hinweg wurden zur Erläuterung zahlreiche konkrete Details dargelegt, um ein gründliches Verständnis der vorliegenden Erfindung zu schaffen. Es ist jedoch für den Fachmann ersichtlich, dass die Erfindung ohne einige dieser spezifischen Details ausgeführt werden kann. In bestimmten Fällen wurden hinlänglich bekannte Strukturen und Funktionen nicht in aufwändigem Detail beschrieben, um eine Verunklarung des Gegenstands der vorliegenden Erfindung zu vermeiden. Entsprechend sind der Umfang und das Wesen der Erfindung mittels der nachfolgenden Ansprüche zu beurteilen.

Claims (26)

  1. Beansprucht wird:
  2. Prozessor, der Folgendes umfasst: einen Decodierer zum Decodieren eines Befehls, um einen decodierten Befehl zu erzeugen, wobei der Befehl einen Opcode und Operanden umfasst, die mehrere gepackte Datenquellregister und ein gepacktes Datenzielregister identifizieren; ein erstes Quellregister zum Speichern einer ersten Vielzahl von gepackten vorzeichenbehafteten Doppelwort-Datenelementen; ein zweites Quellregister zum Speichern einer zweiten Vielzahl von gepackten vorzeichenbehafteten Doppelwort-Datenelementen; ein drittes Quellregister zum Speichern einer Vielzahl von gepackten vorzeichenbehafteten Quadrupelwort-Datenelementen; eine Ausführungsschaltungsanordnung zum Ausführen des decodierten Befehls, wobei die Ausführungsschaltungsanordnung Folgendes umfasst: eine Multipliziererschaltungsanordnung zum Multiplizieren eines ersten und zweiten gepackten vorzeichenbehafteten Doppelwort-Datenelements aus dem ersten Quellregister mit einem dritten bzw. vierten gepackten vorzeichenbehafteten Doppelwort-Datenelement aus dem zweiten Quellregister, um ein erstes und zweites temporäres vorzeichenbehaftetes Quadrupelwortprodukt zu erzeugen, wobei die Multipliziererschaltungsanordnung dazu dient, das erste, zweite, dritte und vierte vorzeichenbehaftete Doppelwort-Datenelement auf Basis des Opcodes des Befehls auszuwählen; eine Negierungsschaltungsanordnung zum Negieren des ersten und zweiten temporären vorzeichenbehafteten Quadrupelwortprodukts, um ein erstes und zweites negiertes vorzeichenbehaftetes Quadrupelwortprodukt zu erzeugen; eine Akkumulationsschaltungsanordnung zum Kombinieren des ersten negierten vorzeichenbehafteten Quadrupelwortprodukts mit einem ersten gepackten vorzeichenbehafteten Quadrupelwortwert, der aus dem dritten Quellregister gelesen wird, um ein erstes akkumuliertes vorzeichenbehaftetes Quadrupelwortergebnis zu erzeugen, und zum Kombinieren des zweiten negierten vorzeichenbehafteten Quadrupelwortprodukts mit einem zweiten gepackten vorzeichenbehafteten Quadrupelwortwert, der aus dem dritten Quellregister gelesen wird, um ein zweites akkumuliertes vorzeichenbehaftetes Quadrupelwortergebnis zu erzeugen; ein Zielregister oder das dritte Quellregister zum Speichern des ersten akkumulierten vorzeichenbehafteten Quadrupelwortergebnisses in einer ersten vorzeichenbehafteten Quadrupelwort-Datenelementeposition und zum Speichern des zweiten akkumulierten vorzeichenbehafteten Quadrupelwortergebnisses in einer zweiten vorzeichenbehafteten Quadrupelwort-Datenelementeposition.
  3. Prozessor nach Anspruch 1, der ferner Folgendes umfasst: eine Sättigungsschaltungsanordnung zum Sättigen des ersten und zweiten akkumulierten vorzeichenbehafteten Quadrupelwortergebnisses vor dem Speichern im Zielregister.
  4. Prozessor nach Anspruch 1 oder 2, wobei das erste, zweite, dritte und vierte gepackte vorzeichenbehaftete Doppelwort-Datenelement vorzeichenbehaftete Datenelemente sind und wobei das erste und zweite akkumulierte vorzeichenbehaftete Quadrupelwortergebnis vorzeichenbehaftete Datenelemente sind.
  5. Prozessor nach Anspruch 1 oder 3, wobei das erste, zweite und dritte Quellregister 128-Bit-Register umfassen, die dazu ausgelegt sind, vier gepackte vorzeichenbehaftete Doppelwort-Datenelemente und/oder zwei gepackte vorzeichenbehaftete Quadrupelwort-Datenelemente zu speichern.
  6. Prozessor nach Anspruch 4, wobei als Reaktion auf einen ersten Opcode das erste und das dritte gepackte vorzeichenbehaftete Doppelwort-Datenelement aus der gepackten vorzeichenbehafteten Doppelwortposition [31:0] des ersten bzw. des zweiten Quellregisters ausgewählt werden sollen, und das zweite und das vierte gepackte vorzeichenbehaftete Doppelwort-Datenelement aus der gepackten vorzeichenbehafteten Doppelwortposition [95:64] des ersten bzw. des zweiten Quellregisters ausgewählt werden sollen.
  7. Prozessor nach Anspruch 5, wobei als Reaktion auf einen zweiten Opcode das erste und das dritte gepackte vorzeichenbehaftete Doppelwort-Datenelement aus der gepackten vorzeichenbehafteten Doppelwortposition [63:32] des ersten bzw. des zweiten Quellregisters ausgewählt werden sollen, und das zweite und das vierte gepackte vorzeichenbehaftete Doppelwort-Datenelement aus der gepackten vorzeichenbehafteten Doppelwortposition [127:96] des ersten bzw. des zweiten Quellregisters ausgewählt werden sollen.
  8. Prozessor nach Anspruch 1 oder 6, wobei das erste akkumulierte vorzeichenbehaftete Quadrupelwortergebnis und das zweite akkumulierte vorzeichenbehaftete Quadrupelwortergebnis weiter mit einem oder mehreren zusätzlichen temporären vorzeichenbehafteten Quadrupelwortprodukten akkumuliert werden sollen, die als Reaktion auf die Ausführung eines oder mehrerer zusätzlicher Befehle erzeugt wurden.
  9. Verfahren, das Folgendes umfasst: Decodieren eines Befehls zum Erzeugen eines decodierten Befehls, wobei der Befehl einen Opcode und Operanden umfasst, die mehrere gepackte Datenquellregister und ein gepacktes Datenzielregister identifizieren; Speichern einer ersten Vielzahl von gepackten vorzeichenbehafteten Doppelwort-Datenelementen in einem ersten Quellregister; Speichern einer zweiten Vielzahl von gepackten vorzeichenbehafteten Doppelwort-Datenelementen in einem zweiten Quellregister; Speichern mehrerer gepackter vorzeichenbehafteter Quadrupelwort-Datenelemente in einem dritten Quellregister; Multiplizieren eines ersten und zweiten gepackten vorzeichenbehafteten Doppelwort-Datenelements aus dem ersten Quellregister mit einem dritten bzw. vierten gepackten vorzeichenbehafteten Doppelwort-Datenelement aus dem zweiten Quellregister, um ein erstes und zweites temporäres vorzeichenbehaftetes Quadrupelwortprodukt zu erzeugen, wobei das erste, zweite, dritte und vierte vorzeichenbehaftete Doppelwort-Datenelement auf Basis des Opcodes des Befehls ausgewählt werden sollen; Negieren des ersten und zweiten temporären vorzeichenbehafteten Quadrupelwortprodukts, um ein erstes und zweites negiertes vorzeichenbehaftetes Quadrupelwortprodukt zu erzeugen; Akkumulieren des ersten negierten vorzeichenbehafteten Quadrupelwortprodukts mit einem ersten gepackten vorzeichenbehafteten Quadrupelwortwert, der aus dem dritten Quellregister gelesen wird, um ein erstes akkumuliertes vorzeichenbehaftetes Quadrupelwortergebnis zu erzeugen, und Akkumulieren des zweiten negierten vorzeichenbehafteten Quadrupelwortprodukts mit einem zweiten gepackten vorzeichenbehafteten Quadrupelwortwert, der aus dem dritten Quellregister gelesen wird, um ein zweites akkumuliertes vorzeichenbehaftetes Quadrupelwortergebnis zu erzeugen; und Speichern des ersten akkumulierten vorzeichenbehafteten Quadrupelwortergebnisses in einer ersten vorzeichenbehafteten Quadrupelwort-Datenelementeposition in einem Zielregister oder dem dritten Quellregister und Speichern des zweiten akkumulierten vorzeichenbehafteten Quadrupelwortergebnisses in einer zweiten vorzeichenbehafteten Quadrupelwort-Datenelementeposition im Zielregister oder dem dritten Quellregister.
  10. Verfahren nach Anspruch 8, das ferner Folgendes umfasst: Sättigen des ersten und zweiten akkumulierten vorzeichenbehafteten Quadrupelwortergebnisses vor dem Speichern im Zielregister.
  11. Verfahren nach Anspruch 8 oder 9, wobei das erste, zweite, dritte und vierte gepackte vorzeichenbehaftete Doppelwort-Datenelement vorzeichenbehaftete Datenelemente sind und wobei das erste und zweite akkumulierte vorzeichenbehaftete Quadrupelwortergebnis vorzeichenbehaftete Datenelemente sind.
  12. Verfahren nach Anspruch 8 oder 10, wobei das erste, zweite und dritte Quellregister 128-Bit-Register umfassen, die dazu ausgelegt sind, vier gepackte vorzeichenbehaftete Doppelwort-Datenelemente und/oder zwei gepackte vorzeichenbehaftete Quadrupelwort-Datenelemente zu speichern.
  13. Verfahren nach Anspruch 11, wobei als Reaktion auf einen ersten Opcode das erste und das dritte gepackte vorzeichenbehaftete Doppelwort-Datenelement aus der gepackten vorzeichenbehafteten Doppelwortposition [31:0] des ersten bzw. des zweiten Quellregisters ausgewählt werden sollen, und das zweite und das vierte gepackte vorzeichenbehaftete Doppelwort-Datenelement aus der gepackten vorzeichenbehafteten Doppelwortposition [95:64] des ersten bzw. des zweiten Quellregisters ausgewählt werden sollen.
  14. Verfahren nach Anspruch 12, wobei als Reaktion auf einen zweiten Opcode das erste und das dritte gepackte vorzeichenbehaftete Doppelwort-Datenelement aus der gepackten vorzeichenbehafteten Doppelwortposition [63:32] des ersten bzw. des zweiten Quellregisters ausgewählt werden sollen, und das zweite und das vierte gepackte vorzeichenbehaftete Doppelwort-Datenelement aus der gepackten vorzeichenbehafteten Doppelwortposition [127:96] des ersten bzw. des zweiten Quellregisters ausgewählt werden sollen.
  15. Verfahren nach Anspruch 8 oder 13, wobei das erste akkumulierte vorzeichenbehaftete Quadrupelwortergebnis und das zweite akkumulierte vorzeichenbehaftete Quadrupelwortergebnis weiter mit einem oder mehreren zusätzlichen temporären vorzeichenbehafteten Quadrupelwortprodukten akkumuliert werden sollen, die als Reaktion auf die Ausführung eines oder mehrerer zusätzlicher Befehle erzeugt wurden.
  16. Maschinenlesbares Medium mit darauf gespeichertem Programmcode, der bei Ausführung durch eine Maschine die Maschine dazu veranlasst, die folgenden Operationen durchzuführen: Decodieren eines Befehls zum Erzeugen eines decodierten Befehls, wobei der Befehl einen Opcode und Operanden umfasst, die mehrere gepackte Datenquellregister und ein gepacktes Datenzielregister identifizieren; Speichern einer ersten Vielzahl von gepackten vorzeichenbehafteten Doppelwort-Datenelementen in einem ersten Quellregister; Speichern einer zweiten Vielzahl von gepackten vorzeichenbehafteten Doppelwort-Datenelementen in einem zweiten Quellregister; Speichern mehrerer gepackter vorzeichenbehafteter Quadrupelwort-Datenelemente in einem dritten Quellregister; Multiplizieren eines ersten und zweiten gepackten vorzeichenbehafteten Doppelwort-Datenelements aus dem ersten Quellregister mit einem dritten bzw. vierten gepackten vorzeichenbehafteten Doppelwort-Datenelement aus dem zweiten Quellregister, um ein erstes und zweites temporäres vorzeichenbehaftetes Quadrupelwortprodukt zu erzeugen, wobei das erste, zweite, dritte und vierte vorzeichenbehaftete Doppelwort-Datenelement auf Basis des Opcodes des Befehls ausgewählt werden sollen; Negieren des ersten und zweiten temporären vorzeichenbehafteten Quadrupelwortprodukts, um ein erstes und zweites negiertes vorzeichenbehaftetes Quadrupelwortprodukt zu erzeugen; Akkumulieren des ersten negierten vorzeichenbehafteten Quadrupelwortprodukts mit einem ersten gepackten vorzeichenbehafteten Quadrupelwortwert, der aus dem dritten Quellregister gelesen wird, um ein erstes akkumuliertes vorzeichenbehaftetes Quadrupelwortergebnis zu erzeugen, und Akkumulieren des zweiten negierten vorzeichenbehafteten Quadrupelwortprodukts mit einem zweiten gepackten vorzeichenbehafteten Quadrupelwortwert, der aus dem dritten Quellregister gelesen wird, um ein zweites akkumuliertes vorzeichenbehaftetes Quadrupelwortergebnis zu erzeugen; und Speichern des ersten akkumulierten vorzeichenbehafteten Quadrupelwortergebnisses in einer ersten vorzeichenbehafteten Quadrupelwort-Datenelementeposition in einem Zielregister oder dem dritten Quellregister und Speichern des zweiten akkumulierten vorzeichenbehafteten Quadrupelwortergebnisses in einer zweiten vorzeichenbehafteten Quadrupelwort-Datenelementeposition im Zielregister und/oder dem dritten Quellregister.
  17. Maschinenlesbares Medium nach Anspruch 15, das ferner Folgendes umfasst: Sättigen des ersten und zweiten akkumulierten vorzeichenbehafteten Quadrupelwortergebnisses vor dem Speichern im Zielregister.
  18. Maschinenlesbares Medium nach Anspruch 15 oder 16, wobei das erste, zweite, dritte und vierte gepackte vorzeichenbehaftete Doppelwort-Datenelement vorzeichenbehaftete Datenelemente sind und wobei das erste und zweite akkumulierte vorzeichenbehaftete Quadrupelwortergebnis vorzeichenbehaftete Datenelemente sind.
  19. Maschinenlesbares Medium nach Anspruch 15 oder 17, wobei das erste, zweite und dritte Quellregister 128-Bit-Register umfassen, die dazu ausgelegt sind, vier gepackte vorzeichenbehaftete Doppelwort-Datenelemente und/oder zwei gepackte vorzeichenbehaftete Quadrupelwort-Datenelemente zu speichern.
  20. Maschinenlesbares Medium nach Anspruch 18, wobei als Reaktion auf einen ersten Opcode das erste und das dritte gepackte vorzeichenbehaftete Doppelwort-Datenelement aus der gepackten vorzeichenbehafteten Doppelwortposition [31:0] des ersten bzw. des zweiten Quellregisters ausgewählt werden sollen, und das zweite und das vierte gepackte vorzeichenbehaftete Doppelwort-Datenelement aus der gepackten vorzeichenbehafteten Doppelwortposition [95:64] des ersten bzw. des zweiten Quellregisters ausgewählt werden sollen.
  21. Maschinenlesbares Medium nach Anspruch 19, wobei als Reaktion auf einen zweiten Opcode das erste und das dritte gepackte vorzeichenbehaftete Doppelwort-Datenelement aus der gepackten vorzeichenbehafteten Doppelwortposition [63:32] des ersten bzw. des zweiten Quellregisters ausgewählt werden sollen, und das zweite und das vierte gepackte vorzeichenbehaftete Doppelwort-Datenelement aus der gepackten vorzeichenbehafteten Doppelwortposition [127:96] des ersten bzw. des zweiten Quellregisters ausgewählt werden sollen.
  22. Maschinenlesbares Medium nach Anspruch 15 oder 20, wobei das erste akkumulierte vorzeichenbehaftete Quadrupelwortergebnis und das zweite akkumulierte vorzeichenbehaftete Quadrupelwortergebnis weiter mit einem oder mehreren zusätzlichen temporären vorzeichenbehafteten Quadrupelwortprodukten akkumuliert werden sollen, die als Reaktion auf die Ausführung eines oder mehrerer zusätzlicher Befehle erzeugt wurden.
  23. Einrichtung, die Folgendes umfasst: Mittel zum Decodieren eines Befehls zum Erzeugen eines decodierten Befehls, wobei der Befehl einen Opcode und Operanden umfasst, die mehrere gepackte Datenquellregister und ein gepacktes Datenzielregister identifizieren; Mittel zum Speichern einer ersten Vielzahl von gepackten vorzeichenbehafteten Doppelwort-Datenelementen in einem ersten Quellregister; Mittel zum Speichern einer zweiten Vielzahl von gepackten vorzeichenbehafteten Doppelwort-Datenelementen in einem zweiten Quellregister; Mittel zum Speichern mehrerer gepackter vorzeichenbehafteter Quadrupelwort-Datenelemente in einem dritten Quellregister; Mittel zum Multiplizieren eines ersten und zweiten gepackten vorzeichenbehafteten Doppelwort-Datenelements aus dem ersten Quellregister mit einem dritten bzw. vierten gepackten vorzeichenbehafteten Doppelwort-Datenelement aus dem zweiten Quellregister, um ein erstes und zweites temporäres vorzeichenbehaftetes Quadrupelwortprodukt zu erzeugen, wobei das erste, zweite, dritte und vierte vorzeichenbehaftete Doppelwort-Datenelement auf Basis des Opcodes des Befehls ausgewählt werden sollen; Mittel zum Negieren des ersten und zweiten temporären vorzeichenbehafteten Quadrupelwortprodukts, um ein erstes und zweites negiertes vorzeichenbehaftetes Quadrupelwortprodukt zu erzeugen; Mittel zum Akkumulieren des ersten negierten vorzeichenbehafteten Quadrupelwortprodukts mit einem ersten gepackten vorzeichenbehafteten Quadrupelwortwert, der aus dem dritten Quellregister gelesen wird, um ein erstes akkumuliertes vorzeichenbehaftetes Quadrupelwortergebnis zu erzeugen, und Akkumulieren des zweiten negierten vorzeichenbehafteten Quadrupelwortprodukts mit einem zweiten gepackten vorzeichenbehafteten Quadrupelwortwert, der aus dem dritten Quellregister gelesen wird, um ein zweites akkumuliertes vorzeichenbehaftetes Quadrupelwortergebnis zu erzeugen; und Mittel zum Speichern des ersten akkumulierten vorzeichenbehafteten Quadrupelwortergebnisses in einer ersten vorzeichenbehafteten Quadrupelwort-Datenelementeposition in einem Zielregister oder dem dritten Quellregister und Speichern des zweiten akkumulierten vorzeichenbehafteten Quadrupelwortergebnisses in einer zweiten vorzeichenbehafteten Quadrupelwort-Datenelementeposition im Zielregister oder dem dritten Quellregister.
  24. Einrichtung nach Anspruch 22, die ferner Folgendes umfasst: Mittel zum Sättigen des ersten und zweiten akkumulierten vorzeichenbehafteten Quadrupelwortergebnisses vor dem Speichern im Zielregister.
  25. Einrichtung nach Anspruch 22 oder 23, wobei das erste, zweite, dritte und vierte gepackte vorzeichenbehaftete Doppelwort-Datenelement vorzeichenbehaftete Datenelemente sind und wobei das erste und zweite akkumulierte vorzeichenbehaftete Quadrupelwortergebnis vorzeichenbehaftete Datenelemente sind.
  26. Einrichtung nach Anspruch 22 oder 24, wobei das erste, zweite und dritte Quellregister 128-Bit-Register umfassen, die dazu ausgelegt sind, vier gepackte vorzeichenbehaftete Doppelwort-Datenelemente und/oder zwei gepackte vorzeichenbehaftete Quadrupelwort-Datenelemente zu speichern.
DE102018131484.1A 2017-12-21 2018-12-10 Einrichtung und verfahren zum vektormultiplizieren und zur subtraktion von vorzeichenbehafteten doppelwörtern Pending DE102018131484A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/850,687 US20190196829A1 (en) 2017-12-21 2017-12-21 Apparatus and method for vector multiply and subtraction of signed doublewords
US15/850,687 2017-12-21

Publications (1)

Publication Number Publication Date
DE102018131484A1 true DE102018131484A1 (de) 2019-06-27

Family

ID=66768741

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018131484.1A Pending DE102018131484A1 (de) 2017-12-21 2018-12-10 Einrichtung und verfahren zum vektormultiplizieren und zur subtraktion von vorzeichenbehafteten doppelwörtern

Country Status (3)

Country Link
US (2) US20190196829A1 (de)
CN (1) CN110045945A (de)
DE (1) DE102018131484A1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11334319B2 (en) 2017-06-30 2022-05-17 Intel Corporation Apparatus and method for multiplication and accumulation of complex values
US11294679B2 (en) * 2017-06-30 2022-04-05 Intel Corporation Apparatus and method for multiplication and accumulation of complex values
US20190196829A1 (en) * 2017-12-21 2019-06-27 Elmoustapha Ould-Ahmed-Vall Apparatus and method for vector multiply and subtraction of signed doublewords

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5119484A (en) * 1987-02-24 1992-06-02 Digital Equipment Corporation Selections between alternate control word and current instruction generated control word for alu in respond to alu output and current instruction
US6738793B2 (en) * 1994-12-01 2004-05-18 Intel Corporation Processor capable of executing packed shift operations
GB2464292A (en) * 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US20140372493A1 (en) * 2013-06-14 2014-12-18 Texas Instruments Incorporated System and method for accelerating evaluation of functions
US20190196829A1 (en) * 2017-12-21 2019-06-27 Elmoustapha Ould-Ahmed-Vall Apparatus and method for vector multiply and subtraction of signed doublewords
US10514923B2 (en) * 2017-12-21 2019-12-24 Intel Corporation Apparatus and method for vector multiply and accumulate of signed doublewords
US10664270B2 (en) * 2017-12-21 2020-05-26 Intel Corporation Apparatus and method for vector multiply and accumulate of unsigned doublewords

Also Published As

Publication number Publication date
US20190196829A1 (en) 2019-06-27
CN110045945A (zh) 2019-07-23
US20220129273A1 (en) 2022-04-28

Similar Documents

Publication Publication Date Title
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE102018125232A1 (de) Einrichtung und Verfahren für komplexe Multiplikation und Akkumulation
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE112013003741T5 (de) Systeme, Vorrichtungen und Verfahren zum Durchführen einer Konfliktdetektion unf einer Übertragung von Inhalten eines Registers an Datenelementpositionen eines anderen Registers
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE102018005859A1 (de) Einrichtung und Verfahren zur Multiplikation und Akkumulation von komplexen und echten gepackten Datenelementen
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE112013003735T5 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE102014003659A1 (de) Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters
DE102018131484A1 (de) Einrichtung und verfahren zum vektormultiplizieren und zur subtraktion von vorzeichenbehafteten doppelwörtern
DE102018005976A1 (de) Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten

Legal Events

Date Code Title Description
R012 Request for examination validly filed