DE102018128949A1 - Einrichtung und verfahren zum nach-rechts-verschieben von gepackten quadrupelwörtern und extrahieren von gepackten doppelwörtern - Google Patents

Einrichtung und verfahren zum nach-rechts-verschieben von gepackten quadrupelwörtern und extrahieren von gepackten doppelwörtern Download PDF

Info

Publication number
DE102018128949A1
DE102018128949A1 DE102018128949.9A DE102018128949A DE102018128949A1 DE 102018128949 A1 DE102018128949 A1 DE 102018128949A1 DE 102018128949 A DE102018128949 A DE 102018128949A DE 102018128949 A1 DE102018128949 A1 DE 102018128949A1
Authority
DE
Germany
Prior art keywords
bit
register
packed
word data
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102018128949.9A
Other languages
English (en)
Inventor
Elmoustapha Ould-Ahmed-Vall
Robert Valentine
Mark Charney
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 DE102018128949A1 publication Critical patent/DE102018128949A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Eine Einrichtung und ein Verfahren zum Durchführen von Nach-links-Verschiebeoperationen an gepackten Quadrupelwort-Daten. Beispielsweise umfasst eine Ausführungsform eines Prozessors: einen Decodierer zum Decodieren eines Nach-rechts-Verschiebungsbefehls zum Erzeugen eines decodierten Nach-rechts-Verschiebungsbefehls; ein erstes Quellregister zum Speichern von mehreren gepackten Quadrupelwort-Datenelementen, wobei jedes der gepackten Quadrupelwort-Datenelemente ein Vorzeichenbit umfasst; eine Ausführungsschaltungsanordnung zum Ausführen des decodierten Nach-rechts-Verschiebungsbefehls, wobei die Ausführungsschaltungsanordnung eine Verschiebungsschaltungsanordnung mit Vorzeichenbeibehaltungslogik, zum Nach-rechts-Verschieben von ersten und zweiten gepackten Quadrupelwort-Datenelementen von ersten bzw. zweiten gepackten Quadrupelwort-Datenelementorten in dem ersten Quellregister um einen Betrag, der in einem Direktausführungswert oder in einem Steuerwert in einem zweiten Quellregister angegeben ist, umfasst wobei das Nach-rechts-Verschieben dazu dient, erste und zweite nach rechts verschobene Quadrupelwörter zu erzeugen, die Vorzeichenbeibehaltungslogik zum Einschieben des Vorzeichenbits in beliebige Bitpositionen, die durch das Nach-rechts-Verschieben der ersten und zweiten Quadrupelwörter freigelegt sind; wobei die Ausführungsschaltungsanordnung die Auswahl von 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter, einschließlich des Vorzeichenbits, die jeweils in 32 niedrigstwertige Bit-Regionen der ersten und zweiten Quadrupelwort-Datenelementorte eines Zielregisters zu schreiben sind, veranlasst.

Description

  • STAND DER TECHNIK
  • Gebiet der Erfindung
  • Die Ausführungsformen der Erfindung betreffen allgemein das Gebiet von Computerprozessoren. Genauer betreffen die Ausführungsformen eine Einrichtung und ein Verfahren zum Verschieben und Extrahieren von gepackten Datenelementen.
  • 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 eine gepackte Datenverarbeitungsarchitektur gemäß einer Ausführungsform der Erfindung dar;
    • 15 stellt eine Ausführungsform dar, die eine Nach-rechts-Verschiebung von Quadrupelwort-Datenelementen basierend auf einem Wert in einem Direktoperanden durchführt;
    • 16 stellt eine Ausführungsform dar, die eine Nach-rechts-Verschiebung von Quadrupelwort-Datenelementen basierend auf einem Wert in einem Quellregister durchführt;
    • 17 stellt ein Verfahren zum Durchführen einer Nach-rechts-Verschiebung von Quadrupelwort-Datenelementen gemäß einer Ausführungsform der Erfindung dar;
    • 18 stellt ein Verfahren zum Durchführen einer Nach-rechts-Verschiebung von Quadrupelwort-Datenelementen gemäß einer weiteren Ausführungsform der Erfindung dar;
    • 19 stellt eine Ausführungsform dar, die eine Nach-links-Verschiebung von Quadrupelwort-Datenelementen basierend auf einem Wert in einem Direktoperanden durchführt;
    • 20 stellt eine Ausführungsform dar, die eine Nach-links-Verschiebung von Quadrupelwort-Datenelementen basierend auf einem Wert in einem Quellregister durchführt;
    • 21 stellt ein Verfahren zum Durchführen einer Nach-links-Verschiebung von Quadrupelwort-Datenelementen gemäß einer Ausführungsform der Erfindung dar; und
    • 22 stellt ein Verfahren zum Durchführen einer Nach-links-Verschiebung von Quadrupelwort-Datenelementen gemäß einer weiteren 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, 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-timekompiliert 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 IMM8 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-Byte-wert 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 (IMM8) 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 niedriger Ordnung der unteren 6 zmm-Register werden auf Register ymm0-15 überlagert. Die 128 Bits niedriger Ordnung der unteren 6 zmm-Register (die 128 Bits 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-Cache-einheit (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 finites Impulsantwort-Filtern (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-Digital-Umsetzung (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 y1 = w1x1+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.
  • Nach-rechts-Verschieben von gepackten Quadrupelwörtern und Extrahieren von gepackten Doppelwörtern
  • Eine Ausführungsform der Erfindung umfasst einen Befehl, der eine Nach-rechts-Verschiebung von zwei oder mehr gepackten vorzeichenbehafteten Quadrupelwörtern durchführt und vorzeichenbehaftete Doppelwörter aus angegebenen Positionen der verschobenen vorzeichenbehafteten Quadrupelwörter extrahiert. Wie hier verwendet, umfasst ein gepacktes Doppelwort ein gepacktes 32-Bit-Datenelement, und ein Quadrupelwort umfasst ein gepacktes 64-Bit-Datenelement.
  • Eine Ausführungsform behält während der Verschiebe- und Extraktionsoperationen das höchstwertige Bit (das Vorzeichenbit) von jedem der ausgerichteten Quadrupelwörter bei und verbreitet es. In einer bestimmten Umsetzung wird eine Nach-rechts-Verschiebung auf den Bits in jedem der zwei ausgerichteten Quadrupelwörter eines 128-Bit-Quellregisters oder Speicherortes (z. B. xmm2/m128) durchgeführt, wobei ein 6-Bit-Zähler den in imm8[5:0] gespeicherten zu verschiebenden Betrag angibt. In einer anderen Umsetzung ist der 6-Bit-Zähler in einem anderen Quellregister angegeben. Beispielsweise können, in einer Ausführungsform, Bits [5:0] und/oder [69:64] von xmm3/m128 den Verschiebungsbetrag für das erste bzw. zweite Quadrupelwort codieren.
  • Unabhängig davon, wie der Verschiebungsbetrag bestimmt wird, werden dann die höchstwertigen 32 Bits [63:32] von jedem der extrahierten Quadrupelwörter extrahiert und in die Bits [31:0] des entsprechenden Quadrupelwortorts im Zielregister (z. B. xmm1) geschrieben.
  • In einer Ausführungsform werden die verschobenen oberen 32 Bits von jedem der Quadrupelwörter gerundet. Insbesondere kann ein Zwei-Bit-Rundungssteuerungsfeld in einem Steuerregister (z. B. MXCSR[0:1]) angegeben werden, das einen von mehreren unterschiedlichen Rundungsmodi anzeigt, wenn der Befehl ausgeführt wird. Es können vier Rundungsmodi angegeben werden: Runden zur nächstgelegenen Rundungszahl, Aufrunden, Abrunden und Runden Richtung Null. Runden zur nächstgelegenen Rundungszahl bedeutet, dass das gerundete Ergebnis am nächsten zum unendlich genauen Ergebnis ist. Wenn zwei Werte gleichermaßen nah sind, ist das Ergebnis der gerade Wert (derjenige mit dem niedrigstwertigen Bit von Null). In einer Ausführungsform ist der Standardrundungsmodus Runden zur nächstgelegenen Rundungszahl, da dieser Modus die genaueste und eine statistisch nicht vorbelastete Schätzung des wahren Ergebnisses bietet und für die meisten Anwendungen geeignet ist. Aufrunden bedeutet, dass das gerundete Ergebnis am nächsten zum, aber nicht größer als das unendlich genaue Ergebnis ist, Abrunden bedeutet, dass das gerundete Ergebnis am nächsten zum, aber nicht kleiner als das unendlich genaue Ergebnis ist, und Runden Richtung Null bedeutet, dass das gerundete Ergebnis am nächsten zum unendlich genauen Ergebnis ist, aber keinen größeren Absolutwert hat. Es sei jedoch angemerkt, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf einen bestimmten Typ von Runden beschränkt sind.
  • Zusätzlich kann Sättigung auf den resultierenden 32 Bits durchgeführt werden. Beispielsweise kann der 32-Bit-Wert in Übereinstimmung mit dem ausgewählten Rundungsmodus gerundet und auf ein Doppelwort gesättigt werden. Wenn eine Sättigung erfolgt, kann das Sättigungs-Flag in einem Steuerregister (z. B. dem MXCSR-Statusregister) gesetzt werden.
  • In einer Ausführungsform sind die xmm1-, xmm2- und xmm3-Register 128-Bit-Register mit gepackten Daten, die duale Quadrupelwortwerte, vier Doppelwortwerte, acht Wortwerte oder sechzehn Bytes speichern. 13 stellt beispielhafte Datenelement- und Bitverteilungen für ein beispielhaftes Quellregister und/oder Zielregister dar. Datenelemente können in das Quellregister und/oder Zielregister in Bytes (8 Bits), Wörtern (16 Bits), Doppelwörtern (32 Bits) und/oder Quadrupelwörtern (64 Bits) gepackt werden, wie dargestellt ist.
  • Die hier beschriebenen Operationen können in Reaktion auf die Ausführung eines einzigen Befehls durchgeführt werden. Beispielsweise führt VPSRARSWQ xmm1, xmm2/m128, imm8 eine logische Nach-rechts-Verschiebung von gepackten, vorzeichenbehafteten Quadrupelwörtern in xmm2/m128 um einen auf einem Direktoperanden (imm8) basierenden Betrag durch und wählt die höchstwertigen Doppelwörter aus dem verschobenen Ergebnis aus (einschließlich des Vorzeichenbits), die im Ziel, xmm1, gespeichert werden sollen. Zusätzlich führt VPSRAVRSWQ xmm1, xmm2, xmm3/m128 eine logische Nach-rechts-Verschiebung von gepackten, vorzeichenbehafteten Quadrupelwörtern in xmm2 um einen auf Werten in xmm3/m128 basierenden Betrag durch und wählt die höchstwertigen Doppelwörter aus dem verschobenen Ergebnis aus (einschließlich des Vorzeichenbits), die im Ziel, xmm1, gespeichert werden sollen.
  • 14 veranschaulicht eine beispielhafte Architektur zum Ausführen der Befehle und Durchführen der hierin beschriebenen Operationen. Obwohl viele der funktionalen Elemente in 14 nicht für die hier beschriebenen Befehle erforderlich sind, können bestimmte Komponenten der dargestellten Architektur genutzt werden. Acht Multiplikatoren 1405 sind enthalten, um ein Datenelement in SRC1 1401 mit einem Datenelement in SRC2 1402 gemäß dem Befehl, der ausgeführt wird, zu multiplizieren, um mehrere Produkte zu erzeugen. Wenn die Multiplikationen nicht durchgeführt werden, können die Werte direkt Addierernetzwerken 1410-1411 bereitgestellt werden, welche addieren, subtrahieren und verschiedene logische Operationen bei den Datenelementen gemäß dem Befehl durchführen. In Abhängigkeit von der Umsetzung kann die hier beschriebene Verschiebungsschaltungsanordnung durch die Multiplikatoren 1405 oder die Addierernetzwerke 1410-1411 umgesetzt sein.
  • Die Akkumulationsschaltungsanordnung 1420-1421 kann die vorherigen Ergebnisse mit zuvor akkumulierten Ergebnissen (falls vorhanden), die in dem SRC3/DEST-Register 1460 gespeichert sind, kombinieren, wenngleich bestimmte hierin beschriebene Ausführungsformen keine Akkumulationen durchführen. Die Ergebnisse können dann durch die Sättigungsschaltungsanordnung 1440 gesättigt werden (d. h., wenn einer oder mehrere der Werte größer als der maximal zugelassene Wert sind, dann wird der maximale Wert ausgegeben) und zurück in dem Zielregister (SRC1/DEST) 1460 über den Ausgangsmultiplexer 1450 gespeichert werden.
  • Eine Ausführungsform einer Architektur zum Nach-rechts-Verschieben von gepackten vorzeichenbehafteten Quadrupelwörtern um einen Betrag basierend auf einem Direktoperanden 1501, unter Beibehaltung des Vorzeichenbits (b63 in diesem Beispiel) und Schreiben der höchstwertigen 32 Bits des resultierenden nach rechts verschobenen Quadrupelworts in die unteren 32 Bits des Ziels 1460, ist in 15 dargestellt. Insbesondere sind zwei gepackte vorzeichenbehaftete Quadrupelwörter in SRC1 1401 dargestellt, die als Quadrupelwort 0 (bei Bits 63:0 gespeichert) und Quadrupelwort 1 (bei Bits 127:64 gespeichert) gekennzeichnet sind. In Reaktion auf einen Wert, der in dem Direktoperanden 1501 (z. B. imm8[5:0]) enthalten ist, verschiebt eine Verschiebungseinheit 1503 die Werte in jedem Quadrupelwort um N Bits nach rechts, wobei die Ergebnisse in einem temporären Register oder Speicherort 1520 gespeichert werden. Eine Ausführungsform der dargestellten Schaltungsanordnung umfasst Vorzeichenbeibehaltungslogik, um das Vorzeichenbit in alle Bitpositionen einzuschieben, die durch die Verschiebeoperation freigelegt werden (d. h. so, dass das bitverschobene Ergebnis vorzeichenerweitert ist).
  • Im Anschluss an das Verschieben werden die höchstwertigen 32 Bits der verschobenen Quadrupelwörter durch die Rundungs-/Sättigungsschaltungsanordnung 1504 gerundet (in Übereinstimmung mit dem Rundungsmodus) und gesättigt (sofern notwendig) und in die 32 niedrigstwertigen Bitpositionen im Zielregister 1460 kopiert (Bits [31:0]). Wie dargestellt, bleibt aufgrund der während der Verschiebeoperation durchgeführten Vorzeichenerweiterung das Vorzeichen in dem resultierenden Doppelwort innerhalb des Ziels 1460 erhalten.
  • Vorausgesetzt, dass 6 Direktoperandenbits in dieser Ausführungsform verwendet werden, um einen Verschiebungsbetrag zu kennzeichnen, kann N einen Wertebereich zwischen 0 und 64 aufweisen (d. h., 26 = 64). In dem bestimmten Beispiel, das in 15 gezeigt ist, sind die Bits b64 und b63 um einen Wert von N, welcher zwischen 0 und 64 liegt, verschoben gezeigt. In einer Ausführungsform fügt die Verschiebungseinheit 1503 Nullen in die Bitpositionen ein, von welchen die Werte verschoben werden. Somit sind in dem veranschaulichten Beispiel die höchstwertigen Bitpositionen, die von b64, b63 und b62 belegt sind, mit Nullen gefüllt.
  • Wie erwähnt, kann in einer Ausführungsform das 32-Bit-Ergebnis aus jedem der nach rechts verschobenen Quadrupelwörter extrahiert werden, ohne die arithmetischen Flags in dem Prozessor zu beeinträchtigen. Zusätzlich können die gerundeten oberen 32-Bits von jedem der Quadrupelwörter auf Grundlage einer Rundungssteuerung gerundet und zu dem Doppelwortwert gesättigt werden, falls nötig. Wenn eine Sättigung erfolgt, kann die Rundungs-/Sättigungsschaltungsanordnung ein Sättigungs-Flag 1510 (z. B. im MXCSR-Statusregister) setzen.
  • In einer Ausführungsform ist die Verschiebungseinheit 1503 in die Addierernetzwerke 1410-1411 in 14 integriert, und die Rundungs-/Sättigungsschaltungsanordnung 1504 ist in die Sättigungsschaltungsanordnung 1440-1440 integriert. Alternativ können die Verschiebungseinheit 1503 und die Rundungsschaltungsanordnung als von den in 14 gezeigten architektonischen Komponenten separate Schaltungsanordnung/Logik umgesetzt sein.
  • 16 stellt eine Ausführungsform dar, in welcher der Verschiebungswert (N), der den Betrag, um welchen die Verschiebungseinheit 1503 die beiden Quadrupelwörter nach rechts verschieben soll, spezifiziert, in einem anderen Quellregister, wie zum Beispiel SRC3 1402, spezifiziert ist. Der 6-Bit-Wert kann in den niedrigstwertigen oder höchstwertigen Positionen eines gepackten Datenelements, wie zum Beispiel einem gepackten Byte oder gepackten Doppelwort, gespeichert werden, wobei die Bits außerhalb der 6 Bits auf Null gesetzt oder ignoriert werden. In einer Ausführungsform ist die Operation der Verschiebungseinheit 1503 ansonsten im Wesentlichen dieselbe wie zuvor unter Bezugnahme auf 15 beschrieben.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 17 dargestellt. Das Verfahren kann im Kontext der hier beschriebenen Prozessor-/Systemarchitekturen umgesetzt sein, ist aber nicht auf eine spezielle Prozessor-/Systemarchitektur beschränkt.
  • Bei 1701 wird ein Befehl abgerufen, der Felder für einen Opcode, ein Direktausführungselement und einen ersten Quelloperanden, der gepackte Quadrupelwort-Datenelemente kennzeichnet, und einen gepackten Quadrupelwort-Datenzieloperanden aufweist. Bei 1702 wird der Befehl decodiert (z. B. in mehrere Mikrooperationen, die auf der hierin beschriebenen Architektur auszuführen sind). Bei 1703 werden mindestens zwei Quadrupelwörter, die mit dem ersten Quelloperanden verknüpft sind, abgerufen (z. B. aus dem Cache, Speicher usw.) und in dem ersten Quellregister gespeichert. Der decodierte Befehl wird dann zur Ausführung geplant.
  • Bei 1704 wird der decodierte Befehl ausgeführt, um die mindestens zwei gepackten Quadrupelwort-Datenelemente basierend auf einem Wert in dem Direktausführungselement nach rechts zu verschieben, um nach rechts verschobene Quadrupelwörter zu erzeugen. Wie beschrieben, kann das Direktausführungselement ein 6-Bit-Feld umfassen, das einen Nach-rechts-Verschiebungswert codiert, der von dem Befehl zu verwenden ist. Das nach rechts verschobene Quadrupelwort kann zum Beispiel in einem temporären Register oder Speicherort gespeichert werden. Das Vorzeichenbit (b63, das höchstwertige Bit jedes Quadrupelworts) wird in die durch das Verschieben freigelegten Bitpositionen verschoben. Wenn beispielsweise das Quadrupelwort um 4 Bits nach rechts verschoben wird, wird das Vorzeichenbit 4 Mal repliziert und füllt jeweils die freigelegten Bitpositionen.
  • Bei 1705 werden die 32 höchstwertigen Bits der nach rechts verschobenen Quadrupelwörter in die 32 niedrigstwertigen Bitpositionen in ersten und zweiten gepackten Quadrupelwortregionen des Zielregisters (durch den Zieloperanden identifiziert) geschrieben. In den hierin bereitgestellten Beispielen bedeutet dies Bits 31:0 von ersten und zweiten Quadrupelwort-Datenelementorten im Zielregister.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 18 dargestellt. Das Verfahren kann im Kontext der hier beschriebenen Prozessor-/Systemarchitekturen umgesetzt sein, ist aber nicht auf eine spezielle Prozessor-/Systemarchitektur beschränkt.
  • Bei 1801 wird ein Befehl abgerufen, der Felder für einen Opcode, einen ersten Quelloperanden, der gepackte Quadrupelwort-Datenelemente identifiziert, einen zweiten Quelloperanden, der einen Verschiebungswert identifiziert, und einen gepackten Quadrupelwort-Datenzieloperanden aufweist. Bei 1802 wird der Befehl decodiert (z. B. in mehrere Mikrooperationen, die auf der hierin beschriebenen Architektur auszuführen sind). Bei 1803 werden mindestens zwei Quadrupelwörter, die mit dem ersten Quelloperanden verknüpft sind, abgerufen (z. B. aus dem Cache, Speicher usw.) und in dem ersten Quellregister gespeichert. Der Verschiebungswert wird abgerufen und in einem zweiten Quellregister gespeichert. Der decodierte Befehl wird dann zur Ausführung geplant.
  • Bei 1804 wird der decodierte Befehl ausgeführt, um die mindestens zwei gepackten Quadrupelwort-Datenelemente basierend auf dem Verschiebungswert nach rechts zu verschieben, um nach rechts verschobene Quadrupelwörter zu erzeugen. Wie beschrieben, kann der Verschiebungswert ein 6-Bit-Feld sein, das einen Nach-rechts-Verschiebungswert codiert, der von dem Befehl zu verwenden ist. Das nach rechts verschobene Quadrupelwort kann zum Beispiel in einem temporären Register oder Speicherort gespeichert werden. Das Vorzeichenbit (b63, das höchstwertige Bit jedes Quadrupelworts) wird in die durch das Verschieben freigelegten Bitpositionen verschoben. Wenn beispielsweise das Quadrupelwort um 4 Bits nach rechts verschoben wird, wird das Vorzeichenbit 4 Mal repliziert und füllt jeweils die freigelegten Bitpositionen.
  • Bei 1805 werden die 32 höchstwertigen Bits der nach rechts verschobenen Quadrupelwörter in die 32 niedrigstwertigen Bitpositionen in ersten und zweiten gepackten Quadrupelwortregionen des Zielregisters (durch den Zieloperanden identifiziert) geschrieben. In den hierin bereitgestellten Beispielen bedeutet dies Bits 31:0 von ersten und zweiten Quadrupelwort-Datenelementorten im Zielregister.
  • Die hierin beschriebenen Verschiebungsbefehle können innerhalb des Kontexts eines größeren Befehlsstroms ausgeführt werden, was alles von der Architektur verarbeitet wird, die in 14 gezeigt ist. Beispielhaft kann diese Architektur verwendet werden, um verschiedene Formen von Multiplikations-Additions- und Multiplikations-Akkumulationsbefehlen auszuführen, welche komplexe Zahlen mit realen und imaginären Komponenten verarbeiten. In einer solchen Umsetzung können reale Zahlen und imaginäre Zahlen als Datenelemente innerhalb der Datenelementorte der Quell- und Zielregister gespeichert werden.
  • Nach-links-Verschieben von gepackten Quadrupelwörtern und Extrahieren von gepackten Doppelwörtern
  • Eine Ausführungsform der Erfindung umfasst einen Befehl, der eine Nach-links-Verschiebung von zwei oder mehr gepackten vorzeichenbehafteten Quadrupelwörtern durchführt und vorzeichenbehaftete Doppelwörter aus angegebenen Positionen der verschobenen vorzeichenbehafteten Quadrupelwörter extrahiert. Wie hier verwendet, umfasst ein gepacktes Doppelwort ein gepacktes 32-Bit-Datenelement, und ein Quadrupelwort umfasst ein gepacktes 64-Bit-Datenelement.
  • Eine Ausführungsform behält während der Verschiebe- und Extraktionsoperationen das Vorzeichenbit von jedem der ausgerichteten Quadrupelwörter bei und verbreitet es. In einer bestimmten Umsetzung wird eine Nach-links-Verschiebung auf den Bits in jedem der zwei ausgerichteten Quadrupelwörter eines 128-Bit-Quellregisters oder Speicherortes (z. B. xmm2/m128) durchgeführt, wobei ein 6-Bit-Zähler den in imm8[5:0] gespeicherten zu verschiebenden Betrag angibt. In einer anderen Umsetzung ist der 6-Bit-Zähler in einem anderen Quellregister angegeben. Beispielsweise können, in einer Ausführungsform, Bits [5:0] und/oder [69:64] von xmm3/m128 den Verschiebungsbetrag für das erste bzw. zweite Quadrupelwort codieren.
  • Unabhängig davon, wie der Nach-links-Verschiebungsbetrag bestimmt wird, werden dann die höchstwertigen 32 Bits [63:32] von jedem der extrahierten Quadrupelwörter extrahiert und in die Bits [31:0] des entsprechenden Quadrupelwortorts im Zielregister (z. B. xmm1) geschrieben.
  • In einer Ausführungsform werden die verschobenen oberen 32 Bits von jedem der Quadrupelwörter gerundet. Insbesondere kann ein Zwei-Bit-Rundungssteuerungsfeld in einem Steuerregister (z. B. MXCSR[0:1]) angegeben werden, das einen von mehreren unterschiedlichen Rundungsmodi anzeigt, wenn der Befehl ausgeführt wird. Es können vier Rundungsmodi angegeben werden: Runden zur nächstgelegenen Rundungszahl, Aufrunden, Abrunden und Runden Richtung Null. Runden zur nächstgelegenen Rundungszahl bedeutet, dass das gerundete Ergebnis am nächsten zum unendlich genauen Ergebnis ist. Wenn zwei Werte gleichermaßen nah sind, ist das Ergebnis der gerade Wert (derjenige mit dem niedrigstwertigen Bit von Null). In einer Ausführungsform ist der Standardrundungsmodus Runden zur nächstgelegenen Rundungszahl, da dieser Modus die genaueste und eine statistisch nicht vorbelastete Schätzung des wahren Ergebnisses bietet und für die meisten Anwendungen geeignet ist. Aufrunden bedeutet, dass das gerundete Ergebnis am nächsten zum, aber nicht größer als das unendlich genaue Ergebnis ist, Abrunden bedeutet, dass das gerundete Ergebnis am nächsten zum, aber nicht kleiner als das unendlich genaue Ergebnis ist, und Runden Richtung Null bedeutet, dass das gerundete Ergebnis am nächsten zum unendlich genauen Ergebnis ist, aber keinen größeren Absolutwert hat. Es sei jedoch angemerkt, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf einen bestimmten Typ von Runden beschränkt sind.
  • Zusätzlich kann Sättigung auf den resultierenden 32 Bits durchgeführt werden. Beispielsweise kann der 32-Bit-Wert in Übereinstimmung mit dem ausgewählten Rundungsmodus gerundet und auf ein Doppelwort gesättigt werden. Wenn eine Sättigung erfolgt, kann das Sättigungs-Flag in einem Steuerregister (z. B. dem MXCSR-Statusregister) gesetzt werden.
  • Die hier beschriebenen Operationen können in Reaktion auf die Ausführung eines einzigen Befehls durchgeführt werden. Beispielsweise führt VPSLLRSWQ xmm1, xmm2/m128, imm8 eine logische Nach-links-Verschiebung von gepackten, vorzeichenbehafteten Quadrupelwörtern in xmm2/m128 um einen auf einem Direktoperanden (imm8) basierenden Betrag durch und wählt die höchstwertigen Doppelwörter aus dem verschobenen Ergebnis aus (einschließlich des Vorzeichenbits), die im Ziel, xmm1, gespeichert werden sollen. Zusätzlich führt VPSLLVRSWQ xmm1, xmm2, xmm3/m128 eine logische Nach-links-Verschiebung von gepackten, vorzeichenbehafteten Quadrupelwörtern in xmm2 um einen auf Werten in xmm3/m128 basierenden Betrag durch und wählt die höchstwertigen Doppelwörter aus dem verschobenen Ergebnis aus (einschließlich des Vorzeichenbits), die im Ziel, xmm1, gespeichert werden sollen.
  • Eine Ausführungsform einer Architektur zum Nach-links-Verschieben von gepackten vorzeichenbehafteten Quadrupelwörtern um einen Betrag basierend auf einem Direktoperanden 1901, unter Beibehaltung des Vorzeichenbits (b63 in diesem Beispiel) und Schreiben der höchstwertigen 32 Bits des resultierenden nach links verschobenen Quadrupelworts in die unteren 32 Bits des Ziels 1460, ist in 19 dargestellt. Insbesondere sind zwei gepackte vorzeichenbehaftete Quadrupelwörter in SRC1 1401 dargestellt, die als Quadrupelwort 0 (bei Bits 63:0 gespeichert) und Quadrupelwort 1 (bei Bits 127:64 gespeichert) gekennzeichnet sind. In Reaktion auf einen Wert, der in dem Direktoperanden 1901 (z. B. imm8 [5:0]) enthalten ist, verschiebt eine Verschiebungseinheit 1503 die Werte in jedem Quadrupelwort um N Bits nach links, wobei die Ergebnisse in einem temporären Register oder Speicherort 1520 gespeichert werden. Eine Ausführungsform der dargestellten Schaltungsanordnung umfasst Vorzeichenbeibehaltungslogik, um das Vorzeichenbit während der Verschiebeoperation beizubehalten. In einer Ausführungsform verschiebt die Verschiebeeinheit 1503 Nullen in die durch das Verschieben der Quadrupelwörter freigelegten niedrigstwertigen Bitpositionen.
  • Im Anschluss an das Verschieben werden die höchstwertigen 32 Bits der verschobenen Quadrupelwörter durch die Rundungs-/Sättigungsschaltungsanordnung 1504 gerundet (in Übereinstimmung mit dem Rundungsmodus) und gesättigt (sofern notwendig) und in die 32 niedrigstwertigen Bitpositionen im Zielregister 1460 kopiert (Bits [31:0]).
  • Vorausgesetzt, dass 6 Direktoperandenbits in dieser Ausführungsform verwendet werden, um einen Verschiebungsbetrag zu kennzeichnen, kann N einen Wertebereich zwischen 0 und 64 aufweisen (d. h., 26 = 64). In dem bestimmten Beispiel, das in 15 gezeigt ist, sind die Bits b63 (das Vorzeichenbit) und b62 um einen Wert von N, welcher zwischen 0 und 64 liegt, verschoben gezeigt. In einer Ausführungsform fügt die Verschiebungseinheit 1503 Nullen in die Bitpositionen ein, von welchen die Werte verschoben werden. Somit werden in dem veranschaulichten Beispiel die niedrigstwertigen Bitpositionen, die von b0, b1 und b2 usw. geräumt sind, mit Nullen gefüllt.
  • Wie erwähnt, kann in einer Ausführungsform das 32-Bit-Ergebnis aus jedem der nach links verschobenen Quadrupelwörter extrahiert werden, ohne die arithmetischen Flags in dem Prozessor zu beeinträchtigen. Aufgrund der während der Verschiebeoperation durchgeführten Vorzeichenbeibehaltung wird das Vorzeichen in die höchstwertige Bitposition (d. h. [15]) des resultierenden Doppelworts innerhalb des Ziels 1460 kopiert. Zusätzlich können die gerundeten oberen 32-Bits von jedem der Quadrupelwörter auf Grundlage einer Rundungssteuerung gerundet und zu dem Doppelwortwert gesättigt werden, falls nötig. Wenn eine Sättigung erfolgt, kann die Rundungs-/Sättigungsschaltungsanordnung ein Sättigungs-Flag 1510 (z. B. im MXCSR-Statusregister) setzen.
  • 20 stellt eine Ausführungsform dar, in welcher der Verschiebungswert (N), der den Betrag, um welchen die Verschiebungseinheit 1503 die beiden Quadrupelwörter nach links verschieben soll, spezifiziert, in einem anderen Quellregister, wie zum Beispiel SRC3 1402, spezifiziert ist. Der 6-Bit-Wert kann in den niedrigstwertigen oder höchstwertigen Positionen eines gepackten Datenelements, wie zum Beispiel einem gepackten Byte oder gepackten Doppelwort, gespeichert werden, wobei die Bits außerhalb der 6 Bits auf Null gesetzt oder ignoriert werden. In einer Ausführungsform ist die Operation der Verschiebungseinheit 1503 ansonsten im Wesentlichen dieselbe wie zuvor unter Bezugnahme auf 19 beschrieben.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 21 dargestellt. Das Verfahren kann im Kontext der hier beschriebenen Prozessor-/Systemarchitekturen umgesetzt sein, ist aber nicht auf eine spezielle Prozessor-/Systemarchitektur beschränkt.
  • Bei 2101 wird ein Befehl abgerufen, der Felder für einen Opcode, ein Direktausführungselement und einen ersten Quelloperanden, der gepackte Quadrupelwort-Datenelemente kennzeichnet, und einen gepackten Quadrupelwort-Datenzieloperanden aufweist. Bei 2102 wird der Befehl decodiert (z. B. in mehrere Mikrooperationen, die auf der hierin beschriebenen Architektur auszuführen sind). Bei 2103 werden mindestens zwei Quadrupelwörter, die mit dem ersten Quelloperanden verknüpft sind, abgerufen (z. B. aus dem Cache, Speicher usw.) und in dem ersten Quellregister gespeichert. Der decodierte Befehl wird dann zur Ausführung geplant.
  • Bei 2104 wird der decodierte Befehl ausgeführt, um die mindestens zwei gepackten Quadrupelwort-Datenelemente basierend auf einem Wert in dem Direktausführungselement nach links zu verschieben, um nach links verschobene Quadrupelwörter zu erzeugen. Wie beschrieben, kann das Direktausführungselement ein 6-Bit-Feld umfassen, das einen Nach-links-Verschiebungswert codiert, der von dem Befehl zu verwenden ist. Das nach links verschobene Quadrupelwort kann zum Beispiel in einem temporären Register oder Speicherort gespeichert werden. Das Vorzeichenbit (b63, das höchstwertige Bit jedes Quadrupelworts) wird in die durch das Verschieben freigelegten Bitpositionen verschoben. Wenn beispielsweise das Quadrupelwort um 4 Bits nach links verschoben wird, wird das Vorzeichenbit 4 Mal repliziert und füllt jeweils die freigelegten Bitpositionen.
  • Bei 2105 werden die 32 höchstwertigen Bits der nach links verschobenen Quadrupelwörter in die 32 niedrigstwertigen Bitpositionen in ersten und zweiten gepackten Quadrupelwortregionen des Zielregisters (durch den Zieloperanden identifiziert) geschrieben. In den hierin bereitgestellten Beispielen bedeutet dies Bits 31:0 von ersten und zweiten Quadrupelwort-Datenelementorten im Zielregister.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 22 dargestellt. Das Verfahren kann im Kontext der hier beschriebenen Prozessor-/Systemarchitekturen umgesetzt sein, ist aber nicht auf eine spezielle Prozessor-/Systemarchitektur beschränkt.
  • Bei 2201 wird ein Befehl abgerufen, der Felder für einen Opcode, einen ersten Quelloperanden, der gepackte Quadrupelwort-Datenelemente identifiziert, einen zweiten Quelloperanden, der einen Verschiebungswert identifiziert, und einen gepackten Quadrupelwort-Datenzieloperanden aufweist. Bei 2202 wird der Befehl decodiert (z. B. in mehrere Mikrooperationen, die auf der hierin beschriebenen Architektur auszuführen sind). Bei 2203 werden mindestens zwei Quadrupelwörter, die mit dem ersten Quelloperanden verknüpft sind, abgerufen (z. B. aus dem Cache, Speicher usw.) und in dem ersten Quellregister gespeichert. Der Verschiebungswert wird abgerufen und in einem zweiten Quellregister gespeichert. Der decodierte Befehl wird dann zur Ausführung geplant.
  • Bei 2204 wird der decodierte Befehl ausgeführt, um die mindestens zwei gepackten Quadrupelwort-Datenelemente basierend auf dem Verschiebungswert nach links zu verschieben, um nach links verschobene Quadrupelwörter zu erzeugen. Wie beschrieben, kann der Verschiebungswert ein 6-Bit-Feld sein, das einen Nach-links-Verschiebungswert codiert, der von dem Befehl zu verwenden ist. Das nach links verschobene Quadrupelwort kann zum Beispiel in einem temporären Register oder Speicherort gespeichert werden. Das Vorzeichenbit (b63, das höchstwertige Bit jedes Quadrupelworts) wird in die durch das Verschieben freigelegten Bitpositionen verschoben. Wenn beispielsweise das Quadrupelwort um 4 Bits nach links verschoben wird, wird das Vorzeichenbit 4 Mal repliziert und füllt jeweils die freigelegten Bitpositionen.
  • Bei 2205 werden die 32 höchstwertigen Bits der nach links verschobenen Quadrupelwörter in die 32 niedrigstwertigen Bitpositionen in ersten und zweiten gepackten Quadrupelwortregionen des Zielregisters (durch den Zieloperanden identifiziert) geschrieben. In den hierin bereitgestellten Beispielen bedeutet dies Bits 31:0 von ersten und zweiten Quadrupelwort-Datenelementorten im Zielregister.
  • Die hierin beschriebenen Verschiebungsbefehle können innerhalb des Kontexts eines größeren Befehlsstroms ausgeführt werden, was alles von der Architektur verarbeitet wird, die in 14 gezeigt ist. Beispielhaft kann diese Architektur verwendet werden, um verschiedene Formen von Multiplikations-Additions- und Multiplikations-Akkumulationsbefehlen auszuführen, welche komplexe Zahlen mit realen und imaginären Komponenten verarbeiten. In einer solchen Umsetzung können reale Zahlen und imaginäre Zahlen als Datenelemente innerhalb der Datenelementorte der Quell- und Zielregister gespeichert werden.
  • Wenngleich in den zuvor beschriebenen Ausführungsformen Blöcke von Daten in 32-Bit-Blöcke (Doppelwörter) verschoben und geschrieben werden, sind die zugrundeliegenden Prinzipien der Erfindung nicht auf irgendeine bestimmte Anzahl von Bits beschränkt. Beispielsweise können andere Ausführungsformen in einer ähnliche Weise auf Bytes, 32-Bit-Datenelementen, 64-Bit-Datenelementen oder sogar 128-Bit-Datenelementen operieren.
  • Wenngleich in den zuvor beschriebenen Ausführungsformen Blöcke von Daten in 32-Bit-Blöcke (Doppelwörter) verschoben und geschrieben werden, sind die zugrundeliegenden Prinzipien der Erfindung nicht auf irgendeine bestimmte Anzahl von Bits beschränkt. Beispielsweise können andere Ausführungsformen in einer ähnliche Weise auf Bytes, 32-Bit-Datenelementen, 64-Bit-Datenelementen oder sogar 128-Bit-Datenelementen operieren.
  • 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 hier 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 (25)

  1. Prozessor, der Folgendes umfasst: einen Decodierer zum Decodieren eines Nach-rechts-Verschiebungsbefehls zum Erzeugen eines decodierten Nach-rechts-Verschiebungsbefehls; ein erstes Quellregister zum Speichern von mehreren gepackten Quadrupelwort-Datenelementen, wobei jedes der gepackten Quadrupelwort-Datenelemente ein Vorzeichenbit umfasst; eine Ausführungsschaltungsanordnung zum Ausführen des decodierten Nach-rechts-Verschiebungsbefehls, wobei die Ausführungsschaltungsanordnung eine Verschiebungsschaltungsanordnung mit Vorzeichenbeibehaltungslogik zum Nach-rechts-Verschieben von ersten und zweiten gepackten Quadrupelwort-Datenelementen von ersten bzw. zweiten gepackten Quadrupelwort-Datenelementorten in dem ersten Quellregister um einen Betrag, der in einem Direktausführungswert oder in einem Steuerwert in einem zweiten Quellregister angegeben ist, umfasst, wobei das Nach-rechts-Verschieben dazu dient, erste und zweite nach rechts verschobene Quadrupelwörter zu erzeugen; die Vorzeichenbeibehaltungslogik zum Einschieben des Vorzeichenbits in beliebige Bitpositionen, die durch das Nach-rechts-Verschieben der ersten und zweiten Quadrupelwörter freigelegt sind; wobei die Ausführungsschaltungsanordnung die Auswahl von 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter, einschließlich des Vorzeichenbits, die jeweils in 32 niedrigstwertige Bit-Regionen der ersten und zweiten Quadrupelwort-Datenelementorte eines Zielregisters zu schreiben sind, veranlasst.
  2. Prozessor nach Anspruch 1, der ferner Folgendes umfasst: eine Rundungsschaltungsanordnung zum Durchführen einer Rundungsoperation an den 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter in Übereinstimmung mit einem in einem Steuerregister angegebenen Rundungsmodus.
  3. Prozessor nach Anspruch 1 oder 2, der ferner Folgendes umfasst: eine Sättigungsschaltungsanordnung zum Sättigen von Werten, die in den 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter codiert sind, vor Speicherung in dem Zielregister.
  4. Prozessor nach Anspruch 3, wobei ein oder mehrere Sättigungs-Flags als Reaktion darauf, dass die 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter gesättigt sind, aktualisiert werden sollen.
  5. Prozessor nach Anspruch 1 oder 4, wobei die 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter alle Werte des Vorzeichenbits umfassen, wenn der Betrag, der in dem Direktausführungswert oder in dem Steuerwert angegeben ist, oberhalb einer Schwellenzahl liegt.
  6. Prozessor nach Anspruch 1 oder 5, wobei der Direktausführungswert oder Steuerwert des zweiten Quellregisters einen 6-Bit-Wert zum Angeben des Verschiebungsbetrags umfasst.
  7. Prozessor nach Anspruch 1 oder 6, wobei das erste Quellregister und das Zielregister gepackte 128-Bit-Datenregister umfassen.
  8. Prozessor nach Anspruch 7, wobei die gepackten 128-Bit-Datenregister xmm-Register umfassen.
  9. Verfahren, das Folgendes umfasst: Decodieren eines Nach-rechts-Verschiebungsbefehls zum Erzeugen eines decodierten Nach-rechts-Verschiebungsbefehls; Speichern von mehreren gepackten Quadrupelwort-Datenelementen in einem ersten Quellregister, wobei jedes der gepackten Quadrupelwort-Datenelemente ein Vorzeichenbit umfasst; Ausführen des decodierten Nach-rechts-Verschiebungsbefehls, wobei Ausführen des decodierten Nach-rechts-Verschiebungsbefehls Folgendes umfasst: Nach-rechts-Verschieben von ersten und zweiten gepackten Quadrupelwort-Datenelementen von ersten bzw. zweiten gepackten Quadrupelwort-Datenelementorten in dem ersten Quellregister um einen Betrag, der in einem Direktausführungswert oder in einem Steuerwert in einem zweiten Quellregister angegeben ist, wobei das Nach-rechts-Verschieben dazu dient, erste und zweite nach rechts verschobene Quadrupelwörter zu erzeugen; Einschieben des Vorzeichenbits in beliebige Bitpositionen, die durch das Nach-rechts-Verschieben der ersten und zweiten Quadrupelwörter freigelegt sind; Auswählen von 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter, einschließlich des Vorzeichenbits, die jeweils in 32 niedrigstwertige Bit-Regionen der ersten und zweiten Quadrupelwort-Datenelementorte eines Zielregisters zu schreiben sind.
  10. Verfahren nach Anspruch 9, das ferner Folgendes umfasst: Durchführen einer Rundungsoperation an den 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter in Übereinstimmung mit einem in einem Steuerregister angegebenen Rundungsmodus.
  11. Verfahren nach Anspruch 9 oder 10, das ferner Folgendes umfasst: Sättigen von Werten, die in den 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter codiert sind, vor Speicherung in dem Zielregister.
  12. Verfahren nach Anspruch 11, wobei ein oder mehrere Sättigungs-Flags als Reaktion darauf, dass die 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter gesättigt sind, aktualisiert werden sollen.
  13. Verfahren nach Anspruch 9 oder 12, wobei die 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter alle Werte des Vorzeichenbits umfassen, wenn der Betrag, der in dem Direktausführungswert oder in dem Steuerwert angegeben ist, oberhalb einer Schwellenzahl liegt.
  14. Verfahren nach Anspruch 9 oder 13, wobei der Direktausführungswert oder Steuerwert des zweiten Quellregisters einen 6-Bit-Wert zum Angeben des Verschiebungsbetrags umfasst.
  15. Verfahren nach Anspruch 9 oder 14, wobei das erste Quellregister und das Zielregister gepackte 128-Bit-Datenregister umfassen.
  16. Verfahren nach Anspruch 15, wobei die gepackten 128-Bit-Datenregister xmm-Register umfassen.
  17. Maschinenlesbares Medium mit darauf gespeichertem Programmcode, der bei Ausführung durch eine Maschine die Maschine dazu veranlasst, die folgenden Operationen durchzuführen: Decodieren eines Nach-rechts-Verschiebungsbefehls zum Erzeugen eines decodierten Nach-rechts-Verschiebungsbefehls; Speichern von mehreren gepackten Quadrupelwort-Datenelementen in einem ersten Quellregister, wobei jedes der gepackten Quadrupelwort-Datenelemente ein Vorzeichenbit umfasst; Ausführen des decodierten Nach-rechts-Verschiebungsbefehls, wobei Ausführen des decodierten Nach-rechts-Verschiebungsbefehls Folgendes umfasst: Nach-rechts-Verschieben von ersten und zweiten gepackten Quadrupelwort-Datenelementen von ersten bzw. zweiten gepackten Quadrupelwort-Datenelementorten in dem ersten Quellregister um einen Betrag, der in einem Direktausführungswert oder in einem Steuerwert in einem zweiten Quellregister angegeben ist, wobei das Nach-rechts-Verschieben dazu dient, erste und zweite nach rechts verschobene Quadrupelwörter zu erzeugen; Einschieben des Vorzeichenbits in beliebige Bitpositionen, die durch das Nach-rechts-Verschieben der ersten und zweiten Quadrupelwörter freigelegt sind; Auswählen von 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter, einschließlich des Vorzeichenbits, die jeweils in 32 niedrigstwertige Bit-Regionen der ersten und zweiten Quadrupelwort-Datenelementorte eines Zielregisters zu schreiben sind.
  18. Maschinenlesbares Medium nach Anspruch 17, ferner umfassend Programmcode, der die Maschine veranlasst, die folgende Operation durchzuführen: Durchführen einer Rundungsoperation an den 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter in Übereinstimmung mit einem in einem Steuerregister angegebenen Rundungsmodus.
  19. Maschinenlesbares Medium nach Anspruch 17 oder 18, ferner umfassend Programmcode, der die Maschine veranlasst, die folgende Operation durchzuführen: Sättigen von Werten, die in den 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter codiert sind, vor Speicherung in dem Zielregister.
  20. Maschinenlesbares Medium nach Anspruch 19, wobei ein oder mehrere Sättigungs-Flags als Reaktion darauf, dass die 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter gesättigt sind, aktualisiert werden sollen.
  21. Maschinenlesbares Medium nach Anspruch 17 oder 20, wobei die 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter alle Werte des Vorzeichenbits umfassen, wenn der Betrag, der in dem Direktausführungswert oder in dem Steuerwert angegeben ist, oberhalb einer Schwellenzahl liegt.
  22. Maschinenlesbares Medium nach Anspruch 17 oder 20, wobei der Direktausführungswert oder Steuerwert des zweiten Quellregisters einen 6-Bit-Wert zum Angeben des Verschiebungsbetrags umfasst.
  23. Maschinenlesbares Medium nach Anspruch 17 oder 20, wobei das erste Quellregister und das Zielregister gepackte 128-Bit-Datenregister umfassen.
  24. Maschinenlesbares Medium nach Anspruch 23, wobei die gepackten 128-Bit-Datenregister xmm-Register umfassen.
  25. Einrichtung, die Folgendes umfasst: Mittel zum Decodieren eines Nach-rechts-Verschiebungsbefehls zum Erzeugen eines decodierten Nach-rechts-Verschiebungsbefehls; Mittel zum Speichern von mehreren gepackten Quadrupelwort-Datenelementen in einem ersten Quellregister, wobei jedes der gepackten Quadrupelwort-Datenelemente ein Vorzeichenbit umfasst; Mittel zum Ausführen des decodierten Nach-rechts-Verschiebungsbefehls, wobei Ausführen des decodierten Nach-rechts-Verschiebungsbefehls Folgendes umfasst: Nach-rechts-Verschieben von ersten und zweiten gepackten Quadrupelwort-Datenelementen von ersten bzw. zweiten gepackten Quadrupelwort-Datenelementorten in dem ersten Quellregister um einen Betrag, der in einem Direktausführungswert oder in einem Steuerwert in einem zweiten Quellregister angegeben ist, wobei das Nach-rechts-Verschieben dazu dient, erste und zweite nach rechts verschobene Quadrupelwörter zu erzeugen; Mittel zum Einschieben des Vorzeichenbits in beliebige Bitpositionen, die durch das Nach-rechts-Verschieben der ersten und zweiten Quadrupelwörter freigelegt sind; Mittel zum Auswählen von 32 höchstwertigen Bits der ersten und zweiten nach rechts verschobenen Quadrupelwörter, einschließlich des Vorzeichenbits, die jeweils in 32 niedrigstwertige Bit-Regionen der ersten und zweiten Quadrupelwort-Datenelementorte eines Zielregisters zu schreiben sind.
DE102018128949.9A 2017-12-21 2018-11-19 Einrichtung und verfahren zum nach-rechts-verschieben von gepackten quadrupelwörtern und extrahieren von gepackten doppelwörtern Pending DE102018128949A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/850,765 US20190196820A1 (en) 2017-12-21 2017-12-21 Apparatus and method for right shifting packed quadwords and extracting packed doublewords
US15/850,765 2017-12-21

Publications (1)

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

Family

ID=66768604

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018128949.9A Pending DE102018128949A1 (de) 2017-12-21 2018-11-19 Einrichtung und verfahren zum nach-rechts-verschieben von gepackten quadrupelwörtern und extrahieren von gepackten doppelwörtern

Country Status (3)

Country Link
US (2) US20190196820A1 (de)
CN (1) CN109947697A (de)
DE (1) DE102018128949A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112181355B (zh) * 2020-10-12 2021-08-06 上海芯旺微电子技术有限公司 一种移位饱和处理方法及其应用
CN114296798A (zh) * 2021-12-10 2022-04-08 龙芯中科技术股份有限公司 向量移位方法、处理器及电子设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3105738B2 (ja) * 1994-06-10 2000-11-06 日本電気株式会社 情報処理装置
US7185180B2 (en) * 2002-04-02 2007-02-27 Ip-First, Llc Apparatus and method for selective control of condition code write back
US6836434B2 (en) * 2002-11-21 2004-12-28 Micron Technology, Inc. Mode selection in a flash memory device
US8504807B2 (en) * 2009-12-26 2013-08-06 Intel Corporation Rotate instructions that complete execution without reading carry flag

Also Published As

Publication number Publication date
US20190196820A1 (en) 2019-06-27
CN109947697A (zh) 2019-06-28
US20220129267A1 (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
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
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
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102018005859A1 (de) Einrichtung und Verfahren zur Multiplikation und Akkumulation von komplexen und echten gepackten Datenelementen
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102014003659A1 (de) Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters
DE112013003735T5 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE102018128626A1 (de) Systeme, Verfahren und Vorrichtungen für Matrixoperationen
DE102018005976A1 (de) Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten
DE102018125971A1 (de) Systeme und verfahren zum berechnen von skalaprodukten von halbbytes in operanden aus zwei kacheln
DE102018131484A1 (de) Einrichtung und verfahren zum vektormultiplizieren und zur subtraktion von vorzeichenbehafteten doppelwörtern

Legal Events

Date Code Title Description
R012 Request for examination validly filed