DE102018006736A1 - Einrichtung und Verfahren zum Durchführen von Transformationen von gepackten komplexen Daten mit echten und imaginären Komponenten - Google Patents

Einrichtung und Verfahren zum Durchführen von Transformationen von gepackten komplexen Daten mit echten und imaginären Komponenten Download PDF

Info

Publication number
DE102018006736A1
DE102018006736A1 DE102018006736.0A DE102018006736A DE102018006736A1 DE 102018006736 A1 DE102018006736 A1 DE 102018006736A1 DE 102018006736 A DE102018006736 A DE 102018006736A DE 102018006736 A1 DE102018006736 A1 DE 102018006736A1
Authority
DE
Germany
Prior art keywords
imaginary
real
data elements
data
packed
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
DE102018006736.0A
Other languages
English (en)
Inventor
Robert Valentine
Mark J. Charney
Jesus Corbal
Venkateswara Madduri
Elmoustapha Ould-Ahmed-Vall
Binwei Yang
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 DE102018006736A1 publication Critical patent/DE102018006736A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/4806Computations with complex numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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/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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing

Landscapes

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

Abstract

Eine Einrichtung und ein Verfahren zum Durchführen einer Transformation bei komplexen Daten. Zum Beispiel umfasst eine Ausführungsform eines Prozessors Folgendes: einen Decoder zum Decodieren eines ersten Befehls zum Erzeugen eines decodierten Befehls; ein erstes Quellregister zum Speichern einer ersten Vielzahl von gepackten echten und imaginären Datenelementen; ein zweites Quellregister zum Speichern einer zweiten Vielzahl von gepackten echten und imaginären Datenelementen; ein drittes Quellregister zum Speichern einer dritten Vielzahl von gepackten echten und imaginären Datenelementen; eine Ausführungsschaltung zum Ausführen des decodierten Befehls, die Ausführungsschaltung umfassend: eine Multipliziererschaltung zum Auswählen von echten und imaginären Datenelementen in den ersten und zweiten Quellregistern, um basierend auf einem unmittelbaren Element des ersten Befehls zu multiplizieren, wobei die Multipliziererschaltung erste gepackte Datenelemente aus dem ersten Quellregister mit zweiten gepackten Datenelementen aus dem zweiten Quellregister gemäß dem unmittelbaren Element multipliziert, um eine Vielzahl von echten und imaginären Produkten zu erzeugen, eine Addiererschaltung zum Auswählen von echten und imaginären Datenelementen in dem dritten Quellregister basierend auf dem unmittelbaren Element, wobei die Addiererschaltung ausgewählte echte und imaginäre Werte von den echten und imaginären Produkten addiert und subtrahiert, um erste echte und imaginäre Ergebnisse zu erzeugen; eine Skalierungs-, Rundungs- und/oder Sättigungsschaltung zum Skalieren, Runden und/oder Sättigen der ersten echten und imaginären Ergebnisse, um echte und imaginäre Enddatenelemente zu erzeugen; und ein Zielregister zum Speichern der echten und imaginären Enddatenelemente in vorgegebenen Datenelementpositionen.

Description

  • HINTERGRUND
  • 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 Durchführen von Transformationen von gepackten komplexen Daten mit echten und imaginären Komponenten.
  • Beschreibung der verwandten 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 darauf hingewiesen, dass sich der Begriff „Befehl“ hierin allgemein auf Makrobefehle bezieht, d. h. Befehle, die dem Prozessor zur Ausführung bereitgestellt werden, im Gegensatz zu Mikrobefehlen oder Micro-ops, d. h. dem Ergebnis des Decoders eines Prozessors, der Makrobefehle decodiert. Die Mikrobefehle oder Micro-ops können dazu konfiguriert sein, eine Ausführungseinheit auf dem Prozessor anzuweisen, Operationen durchzuführen, um die Logik in Verbindung mit dem Makrobefehl zu implementieren.
  • Die ISA unterscheidet sich von der Mikroarchitektur, die der Satz von Prozessordesigntechniken ist, der zum Implementieren des Befehlssatzes verwendet wird. Prozessoren mit verschiedenen Mikroarchitekturen können einen gemeinsamen Befehlssatz teilen. Zum Beispiel implementieren Intel® Pentium 4-Prozessoren, Intel® Core™-Prozessoren und Prozessoren von Advanced Micro Devices, Inc. in Sunnyvale, CA, USA, nahezu identische Versionen des x86-Befehlssatzes (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden), weisen jedoch verschiedene interne Designs auf. Zum Beispiel kann die gleiche Registerarchitektur der ISA auf verschiedene Weise in verschiedenen Mikroarchitekturen unter Verwendung hinlänglich bekannter Techniken implementiert werden, einschließlich dedizierter physikalischer Register, wobei ein oder mehrere dynamisch zugeordnete physikalische Register einen Registerumbenennungsmechanismus verwenden (z. B. die Verwendung einer Registeraliastabelle (Register Alias Table, RAT), eines Neuordnungspuffers (Reorder Buffer, ROB) und einer Rückzugsregisterdatei). Sofern nicht anderweitig angegeben, werden die Ausdrücke Registerarchitektur, Registerdatei und Register hierin verwendet, um darauf Bezug zu nehmen, was der Software/dem Programmierer sichtbar ist, und auf die Weise, in der Befehle Register angeben. Wo eine Unterscheidung erforderlich ist, wird der Begriff „logisch“, „Architektur-“ oder „für Software sichtbar“ verwendet, um Register/Dateien in der Registerarchitektur anzuzeigen, während verschiedene Adjektive verwendet werden, um Register in einer gegebenen Mikroarchitektur (z. B. physikalische Register, Neuordnungspuffer, Rückzugsregister, Registerpool) zu bezeichnen.
  • Multiply-Accumulate ist eine gebräuchliche Digitalsignalverarbeitungsoperation, die das Produkt von zwei Zahlen berechnet und dieses Produkt zu einem akkumulierten Wert addiert. Vorhandene Mikroarchitekturen für einen Befehl, mehrere Daten (Single Instruction, Multiple Data, SIMD) implementieren Multiply-Accumulate-Operationen durch das Ausführen einer Folge von Befehlen. Zum Beispiel kann eine Multiply-Accumulate mit einem Multiply-Befehl, gefolgt von einer 4-Wege-Addition und dann einer Akkumulation mit den Ziel-Quadword-Daten zum Erzeugen von zwei gesättigten 64-Bit-Ergebnissen durchgeführt werden.
  • 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 generisches 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 veranschaulichen;
    • 3 ist ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform der Erfindung; und
    • 4A ist ein Blockdiagramm, das sowohl eine beispielhafte In-order-Pipeline für Abrufen, Decodieren, Zurückziehen als auch eine beispielhafte Pipeline für Registerumbenennung, Out-of-order-Ausgabe/-Ausführung gemäß Ausführungsformen der Erfindung veranschaulicht;
    • 4B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines In-order-Kerns für Abrufen, Decodieren, Zurückziehen als auch eines beispielhaften Architekturkerns für Registerumbenennung, Out-of-order-Ausgabe/-Ausführung zur Aufnahme in einen Prozessor gemäß Ausführungsformen der Erfindung veranschaulicht;
    • 5A ist ein Blockdiagramm eines Einzelprozessorkerns zusammen mit dessen Verbindung zu einem On-Die-Verbindungsnetzwerk;
    • 5B veranschaulicht eine erweiterte Ansicht eines Teils des Prozessorkerns in 5A gemäß Ausführungsformen der Erfindung;
    • 6 ist ein Blockdiagramm eines Einzelkernprozessors und eines Mehrkernprozessors mit integriertem Speicher-Controller und integrierter Grafik gemäß Ausführungsformen der Erfindung;
    • 7 veranschaulicht ein Blockdiagramm eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 8 veranschaulicht ein Blockdiagramm eines zweiten Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 9 veranschaulicht ein Blockdiagramm eines dritten Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 10 veranschaulicht ein Blockdiagramm eines System-on-a-Chip (SOC) gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 11 veranschaulicht ein Blockdiagramm, das die Verwendung eines Softwarebefehlskonverters zum Konvertieren von binären Befehlen in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt;
    • 12 veranschaulicht eine Prozessorarchitektur, auf der Ausführungsformen der Erfindung implementiert werden können;
    • 13 veranschaulicht eine Vielzahl von gepackten Datenelementen, die echte und komplexe Werte gemäß einer Ausführungsform enthalten;
    • 14 veranschaulicht eine Architektur zum Verarbeiten von gepackten Daten gemäß einer Ausführungsform der Erfindung;
    • 15 veranschaulicht eine beispielhafte Implementierung einer schnellen Fourier-Transformation (Fast Fourier Transform, FFT);
    • 16 veranschaulicht eine Ausführungsform einer Datenverarbeitungsarchitektur zum Implementieren einer FFT-Operation;
    • 17A-B veranschaulichen ein Verfahren gemäß einer Ausführungsform der Erfindung.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung werden zu Erläuterungszwecken zahlreiche konkrete Details dargelegt, um ein gründliches Verständnis der weiter unten beschriebenen Ausführungsformen der Erfindung zu schaffen. Es ist jedoch für den Fachmann ersichtlich, dass die Ausführungsformen der Erfindung ohne einige dieser spezifischen Details ausgeführt werden können. In anderen Fällen sind hinlänglich bekannte Strukturen und Vorrichtungen in Blockdiagrammform gezeigt, um eine Verunklarung der zugrunde liegenden Prinzipien der Ausführungsformen der Erfindung zu vermeiden.
  • BEISPIELHAFTE PROZESSORARCHITEKTUREN, BEFEHLSFORMATE UND DATENTYPEN
  • Ein Befehlssatz schließt ein oder mehrere Befehlsformate ein. Ein gegebenes Befehlsformat definiert verschiedene Bereiche (Anzahl von Bits, Position von Bits), um unter anderem die Operation, die durchgeführt werden soll (Opcode), und die Operand(en), auf denen die Operation durchgeführt werden soll, anzugeben. Einige Befehlsformate sind durch die Definition von Befehlsvorlagen (oder Subformaten) weiter aufgeteilt. Zum Beispiel können die Befehlsvorlagen eines gegebenen Befehlsformats so definiert werden, dass sie verschiedene Teilsätze der Bereiche des Befehlsformats aufweisen (die enthaltenen Bereiche sind üblicherweise in der gleichen Reihenfolge, aber zumindest einige weisen verschiedene Bit-Positionen auf, weil weniger Bereiche enthalten sind), und/oder so definiert werden, dass ein gegebener Bereich verschieden interpretiert wird. Somit wird jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats (und, wenn definiert, in einer gegebenen der Befehlsvorlagen dieses Befehlsformats) ausgedrückt und schließt Bereiche zum Angeben der Operation und der Operanden ein. Zum Beispiel weist ein beispielhafter ADD-Befehl einen spezifischen Opcode und ein Befehlsformat auf, das einen Opcode-Bereich zum Angeben dieses Opcodes und Operand-Bereiche zum Auswählen von Operanden (Quelle1/Ziel und Quelle2) einschließt; und ein Vorhandensein dieses ADD-Befehls in einem Befehlsdatenstrom weist spezifische Inhalte in den Operand-Bereichen auf, die spezifische Operanden auswählen.
  • Ausführungsformen der hierin beschriebenen Befehl(e) können in verschiedenen Formaten ausgeführt werden. Außerdem sind Beispielsysteme, Architekturen und Pipelines weiter unten detailliert beschrieben. Ausführungsformen der Befehl(e) können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf die detailliert beschriebenen beschränkt.
  • Generisches vektorfreundliches Befehlsformat
  • Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (z. B. gibt es bestimmte Bereiche spezifisch für Vektoroperationen). Während Ausführungsformen beschrieben sind, in denen sowohl Vektor- als auch skalare Operationen durch das vektorfreundliche Befehlsformat unterstützt werden, verwenden alternative Ausführungsformen nur Vektoroperationen das vektorfreundliche Befehlsformat.
  • 1A-1B sind Blockdiagramme, die ein generisches vektorfreundliches Befehlsformat und Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulichen. 1A ist ein Blockdiagramm, das ein generisches vektorfreundliches Befehlsformat und Klasse-A-Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulicht; und 1B ist ein Blockdiagramm, das das generische vektorfreundliche Befehlsformat und Klasse-B-Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulicht. 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 einschließen. Der Begriff „generisch“ im Kontext des vektorfreundlichen Befehlsformats bezieht sich darauf, dass das Befehlsformat an keinen spezifischen Befehlssatz gebunden ist.
  • Während Ausführungsformen der Erfindung beschrieben werden, in denen das vektorfreundliche Befehlsformat Folgendes unterstützt: eine 64-Byte-Vektoroperandenlänge (oder -große) mit Datenelementbreiten (oder -großen) von 32 Bit (4 Byte) oder 64 Bit (8 Byte) (und somit besteht ein 64-Byte-Vektor entweder aus 16 Doppelwort-Größe-Elementen oder alternativ dazu aus 8 Quadword-Größe-Elementen); 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 -groß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 unterstützen (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder verschiedenen Datenelementbreiten (z. B. Datenelementbreiten von 128 Bit (16 Byte)).
  • Die Klasse-A-Befehlsvorlagen in 1A schließen Folgendes ein: 1) in den Befehlsvorlagen ohne Speicherzugriff 105 ist eine Befehlsvorlage ohne Speicherzugriff, mit Operation des Typs vollständige Rundensteuerung 110 und eine Befehlsvorlage ohne Speicherzugriff, mit Operation des Typs Datentransformation 115 gezeigt; und 2) in den Befehlsvorlagen mit Speicherzugriff 120 ist eine Befehlsvorlage mit Speicherzugriff, zeitlich 125 und eine Befehlsvorlage mit Speicherzugriff, nicht zeitlich 130 gezeigt. Die Klasse-B-Befehlsvorlagen in 1B schließen Folgendes ein: 1) in den Befehlsvorlagen ohne Speicherzugriff 105 ist eine Befehlsvorlage ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs teilweise Rundensteuerung 112 und eine Befehlsvorlage ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs vsize 117 gezeigt; und 2) in den Befehlsvorlagen mit Speicherzugriff 120 ist eine Befehlsvorlage mit Speicherzugriff, mit Schreibmaskensteuerung 127 gezeigt.
  • Das generische vektorfreundliche Befehlsformat 100 schließt die weiter unten aufgeführten folgenden Bereiche in der in den 1A-1B veranschaulichten Reihenfolge ein.
  • Formatbereich 140 - ein spezifischer Wert (ein Befehlsformatidentifikatorwert) in diesem Bereich identifiziert eindeutig das vektorfreundliche Befehlsformat und somit Fälle des Auftretens von Befehlen in dem vektorfreundlichen Befehlsformat in Befehlsströmen. Deshalb ist dieser Bereich in dem Sinne optional, dass er für einen Befehlssatz, der nur das generische vektorfreundliche Befehlsformat aufweist, nicht erforderlich ist.
  • Basisoperationsbereich 142 - dessen Inhalt unterscheidet verschiedene Basisoperationen.
  • Registerindexbereich 144 - dessen Inhalt gibt, direkt oder durch Adressgenerierung, die Orte der Quell- und Zieloperanden an, egal ob in Registern oder in Speicher. Diese schließen eine ausreichende Anzahl von Bits ein, um N Register aus einer PxQ-Registerdatei (z. B. 32×512, 16×128, 32×1024, 64×1024) auszuwählen. 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 sie bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel dient, können sie bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel dient, können sie bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifikatorbereich 146 - dessen Inhalt unterscheidet Fälle des Auftretens von Befehlen in dem generischen Vektorbefehlsformat, die einen Speicherzugriff angeben, von denen, die dies nicht tun; das heißt, er unterscheidet zwischen Befehlsvorlagen ohne Speicherzugriff 105 und Befehlsvorlagen mit Speicherzugriff 120. Speicherzugriffsoperationen lesen aus der Speicherhierarchie und/oder schreiben in diese (in einigen Fällen unter Angabe der Quell- und/oder Zieladressen unter Verwendung von Werten in Registern), während Nichtspeicherzugriffsoperationen dies nicht tun (z. B. sind die Quelle und Ziele Register). Während dieser Bereich in einer Ausführungsform auch zwischen drei verschiedenen Weisen zum Durchführen von Speicheradressberechnungen auswählt, können alternative Ausführungsformen mehr, weniger oder verschiedene Weisen zum Durchführen von Speicheradressberechnungen unterstützen.
  • Erhöhungsoperationsbereich 150 - dessen Inhalt unterscheidet, welche von einer Vielfalt von verschiedenen Operationen zusätzlich zu der Basisoperation durchgeführt werden soll. Dieser Bereich ist kontextspezifisch. In einer Ausführungsform der Erfindung ist dieser Bereich in einen Klassenbereich 168, einen Alpha-Bereich 152 und einen Beta-Bereich 154 geteilt. Der Erhöhungsoperationsbereich 150 ermöglicht es, dass gemeinsame Gruppen von Operationen in einem einzelnen Befehl anstatt in 2, 3 oder 4 Befehlen durchgeführt werden.
  • Skalierungsbereich 160 - dessen Inhalt ermöglicht die Skalierung des Inhalts des Indexbereichs zur Speicheradressgenerierung (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis verwendet).
  • Verschiebungsbereich 162A - dessen Inhalt wird als Teil der Speicheradressgenerierung verwendet (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis + Verschiebung verwendet).
  • Verschiebungsfaktorbereich 162B (es sei darauf hingewiesen, dass die Anordnung des Verschiebungsbereichs 162A direkt über dem Verschiebungsfaktorbereich 162B anzeigt, dass der eine oder der andere verwendet wird) - dessen Inhalt wird als Teil der Adressgenerierung verwendet; er gibt einen Verschiebungsfaktor an, der durch die Größe eines Speicherzugriffs (N) skaliert werden soll - wobei N die Anzahl von Byte in dem Speicherzugriff ist (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis + skalierte Verschiebung verwendet). Redundante niederwertige Bits werden ignoriert, und somit wird der Inhalt des Verschiebungsfaktorbereichs mit der Gesamtgröße (N) des Speicheroperanden multipliziert, um die endgültige Verschiebung zu erzeugen, die beim Berechnen einer effektiven Adresse verwendet werden soll. Der Wert von N ist durch die Prozessorhardware zur Laufzeit basierend auf dem Bereich des vollständigen Opcodes 174 (hierin weiter unten beschrieben) und dem Datenbearbeitungsbereich 154C bestimmt. Der Verschiebungsbereich 162A und der Verschiebungsfaktorbereich 162B sind in dem Sinne optional, dass sie nicht für die Befehlsvorlagen ohne Speicherzugriff 105 verwendet werden und/oder verschiedene Ausführungsformen nur eine oder keine der beiden implementieren.
  • Datenelementbreitebereich 164 - dessen Inhalt unterscheidet, welche einer Anzahl von Datenelementbreiten verwendet werden soll (in einigen Ausführungsformen für alle Befehle; in anderen Ausführungsformen nur für einige der Befehle). Dieser Bereich ist in dem Sinne optional, dass er nicht erforderlich ist, wenn nur eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unter Verwendung einiger Aspekt der Opcodes unterstützt werden.
  • Schreibmaskenbereich 170 - dessen Inhalt steuert, für jede Datenelementposition einzeln, ob diese Datenelementposition in dem Zielvektoroperand das Ergebnis der Basisoperation und Erhöhungsoperation widerspiegelt. Klasse-A-Befehlsvorlagen unterstützen Zusammenführen-Schreibmaskieren, während Klasse-B-Befehlsvorlagen sowohl Zusammenführen- als auch Nullsetzen-Schreibmaskieren unterstützen. Beim Zusammenführen ermöglichen Vektormasken, dass ein beliebiger Satz von Elementen im Ziel vor Aktualisierungen während der Ausführung einer Operation (angegeben durch die Basisoperation und die Erhöhungsoperation) geschützt wird; in einer anderen Ausführungsform Beibehalten des alten Werts jedes Elements des Ziels, wobei das entsprechende Maskenbit eine 0 hat. Demgegenüber ermöglichen Vektormasken beim Nullsetzen, dass ein beliebiger Satz von Elementen im Ziel während der Ausführung einer Operation (angegeben durch die Basisoperation und die Erhöhungsoperation) auf null gesetzt wird; in einer Ausführungsform wird ein Element des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen Wert von 0 hat. Ein Teilsatz dieser Funktionalität ist die Fähigkeit, die Vektorlänge der durchgeführten Operation zu steuern (das heißt, die Spanne modifizierter Elemente, vom ersten zum letzten); es ist jedoch nicht erforderlich, dass die modifizierten Elemente aufeinanderfolgend sind. Somit ermöglicht der Schreibmaskenbereich 170 teilweise Vektoroperationen, einschließlich Laden, Speichern, arithmetisch, logisch usw. Während Ausführungsformen der Erfindung beschrieben sind, in denen der Inhalt des Schreibmaskenbereichs 170 einen von einer Anzahl von Schreibmaskenregistern auswählt, der die zu verwendende Schreibmaske enthält (und der Inhalt des Schreibmaskenbereichs 170 somit indirekt identifiziert, dass dieses Maskieren durchgeführt werden soll), ermöglichen alternative Ausführungsformen stattdessen oder zusätzlich dazu, dass der Inhalt des Maskenschreibbereichs 170 das durchzuführende Maskieren direkt angibt.
  • Bereich unmittelbarer Elemente 172 - dessen Inhalt ermöglicht die Angabe eines unmittelbaren Elements. Dieser Bereich ist in dem Sinne optional, dass er in einer Implementierung des generischen vektorfreundlichen Formats, das unmittelbare Elemente nicht unterstützt, nicht vorhanden ist und in Befehlen, die kein unmittelbares Element verwenden, nicht vorhanden ist.
  • Klassenbereich 168 - dessen Inhalt unterscheidet zwischen verschiedenen Klassen von Befehlen. Bezug nehmend auf 1A-B wählt der Inhalt dieses Bereichs zwischen Klasse-A- und Klasse-B-Befehlen aus. In 1A-B werden Quadrate mit abgerundeten Ecken verwendet, um einen spezifischen Wert anzuzeigen, der in einem Bereich vorhanden ist (z. B. Klasse A 168A bzw. Klasse B 168B für den Klassenbereich 168 in 1A-B).
  • Befehlsvorlagen der Klasse A
  • Im Fall der Befehlsvorlagen ohne Speicherzugriff 105 der Klasse A wird der Alpha-Bereich 152 als ein RS-Bereich 152A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Erhöhungsoperationstypen durchgeführt werden soll (z. B. Runden 152A.1 und Datentransformation 152A.2 sind für die Befehlsvorlagen ohne Speicherzugriff, mit Operation des Typs Runden 110 bzw. ohne Speicherzugriff, mit Operation des Typs Datentransformation 115 angegeben), während der Beta-Bereich 154 unterscheidet, welche der Operationen des angegebenen Typs durchgeführt werden soll. In den Befehlsvorlagen ohne Speicherzugriff 105 sind der Skalierungsbereich 160, der Verschiebungsbereich 162A und der Verschiebungsskalierungsbereich 162B nicht vorhanden.
  • Befehlsvorlagen ohne Speicherzugriff - Operation des Typs vollständige Rundensteuerung
  • In der Befehlsvorlage ohne Speicherzugriff, mit Operation des Typs vollständige Rundensteuerung 110 wird der Beta-Bereich 154 als ein Rundensteuerungsbereich 154A interpretiert, dessen Inhalt(e) eine statische Rundung bereitstellen. Während in den beschriebenen Ausführungsformen der Erfindung der Rundensteuerungsbereich 154A einen Bereich zum Unterdrücken aller Gleitkommaausnahmen (Suppress All Floating Point Exceptions, SAE) 156 und einen Rundenoperationssteuerbereich 158 einschließt, können alternative Ausführungsformen beide dieser Konzepte im gleichen Bereich unterstützen/codieren oder nur eines/einen oder das andere/den anderen dieser Konzepte/Bereiche aufweisen (z. B. können sie nur den Rundenoperationssteuerbereich 158 aufweisen).
  • SAE-Bereich 156 - dessen Inhalt unterscheidet, ob das Ausnahmeereignisberichten deaktiviert werden soll oder nicht; wenn der Inhalt des SAE-Bereichs 156 anzeigt, dass eine Unterdrückung aktiviert ist, berichtet ein gegebener Befehl keine Art von Gleitkommaausnahme-Flag und löst keinen Gleitkommaausnahme-Handler aus.
  • Rundenoperationssteuerungsbereich 158 - dessen Inhalt unterscheidet, welche einer Gruppe von Rundungsoperationen durchgeführt werden soll (z. B. Aufrunden, Abrunden, Auf-Null-Runden und Auf-Nächstes-Runden). Somit ermöglicht der Rundenoperationssteuerbereich 158 das Ändern des Rundungsmodus für jeden Befehl einzeln. In einer Ausführungsform der Erfindung, wobei ein Prozessor ein Steuerregister zum Angeben von Rundungsmodi einschließt, überschreibt der Inhalt des Rundenoperationssteuerbereichs 150 diesen Registerwert.
  • Befehlsvorlagen ohne Speicherzugriff - Operation des Typs Datentransformation
  • In der Befehlsvorlage ohne Speicherzugriff, mit Operation des Typs Datentransformation 115 wird der Beta-Bereich 154 als ein Datentransformationsbereich 154B interpretiert, dessen Inhalt unterscheidet, welche einer Anzahl von Datentransformationen durchgeführt werden soll (z. B. ohne Datentransformation, Swizzeln, Senden).
  • Im Fall einer Befehlsvorlage mit Speicherzugriff 120 der Klasse A wird der Alpha-Bereich 152 als ein Entfernungshinweisbereich 152B interpretiert, dessen Inhalt unterscheidet, welcher der Entfernungshinweise verwendet werden soll (in 1A sind zeitlich 152B.1 und nicht zeitlich 152B.2 für die Befehlsvorlage mit Speicherzugriff, zeitlich 125 bzw. die Befehlsvorlage mit Speicherzugriff, nicht zeitlich 130 angegeben), während der Beta-Bereich 154 als ein Datenbearbeitungsbereich 154C interpretiert wird, dessen Inhalt unterscheidet, welche einer Anzahl von Datenbearbeitungsoperationen (auch bekannt als Primitive) durchgeführt werden soll (z. B. ohne Bearbeitung; Senden; Aufwärtskonvertierung einer Quelle; und Abwärtskonvertierung eines Ziels). Die Befehlsvorlagen mit Speicherzugriff 120 schließen den Skalierungsbereich 160 und wahlweise den Verschiebungsbereich 162A oder den Verschiebungsskalierungsbereich 162B ein.
  • Vektorspeicherbefehle führen ein Laden von Vektoren aus dem und ein Speichern von Vektoren in den Speicher mit Konvertierungsunterstützung durch. Wie bei normalen Vektorbefehlen übertragen Vektorspeicherbefehle Daten in einer datenelementweisen Art aus dem/in den Speicher, wobei die Elemente, die tatsächlich übertragen werden, durch den Inhalt der Vektormaske, die als die Schreibmaske ausgewählt ist, vorgegeben werden.
  • Befehlsvorlagen mit Speicherzugriff - zeitlich
  • Zeitliche Daten sind Daten, die wahrscheinlich bald genug wiederverwendet werden, um von einem Zwischenspeichern zu profitieren. Dies ist jedoch ein Hinweis, und verschiedene Prozessoren können ihn auf verschiedene Weise implementieren, einschließlich des vollständigen Ignorierens des Hinweises.
  • Befehlsvorlagen mit Speicherzugriff - nicht zeitlich
  • Nicht zeitliche Daten sind Daten, bei denen es unwahrscheinlich ist, dass sie bald genug wiederverwendet werden, um von einem Zwischenspeichern im Level-1-Cache zu profitieren, und denen Priorität für eine Entfernung gegeben werden sollte. Dies ist jedoch ein Hinweis, und verschiedene Prozessoren können ihn auf verschiedene Weise implementieren, einschließlich des vollständigen Ignorierens des Hinweises.
  • Befehlsvorlagen der Klasse B
  • Im Fall der Befehlsvorlagen der Klasse B wird der Alpha-Bereich 152 als ein Bereich der Schreibmaskensteuerung (Z) 152C interpretiert, dessen Inhalt unterscheidet, ob das durch den Schreibmaskenbereich 170 gesteuerte Schreibmaskieren ein Zusammenführen oder ein Nullsetzen sein soll.
  • Im Fall der Befehlsvorlagen ohne Speicherzugriff 105 der Klasse B wird ein Teil des Beta-Bereichs 154 als ein RL-Bereich 157A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Erhöhungsoperationstypen durchgeführt werden soll (z. B. sind Runden 157A.1 und Vektorlänge (VSIZE) 157A.2 für die Befehlsvorlage ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs teilweise Rundensteuerung 112 bzw. die Befehlsvorlage ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs vsize 117 angegeben), während der Rest des Beta-Bereichs 154 unterscheidet, welche der Operationen des angegebenen Typs durchgeführt werden soll. In den Befehlsvorlagen ohne Speicherzugriff 105 sind der Skalierungsbereich 160, der Verschiebungsbereich 162A und der Verschiebungsskalierungsbereich 162B nicht vorhanden.
  • In der Befehlsvorlage ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs teilweise Rundensteuerung 110 wird der Rest des Beta-Bereichs 154 als ein Rundenoperationsbereich 159A interpretiert und das Ausnahmeereignisberichten ist deaktiviert (ein gegebener Befehl berichtet keine Art von Gleitkommaausnahme-Flag und löst keinen Gleitkommaausnahme-Handler aus).
  • Rundenoperationssteuerungsbereich 159A - genau wie beim Rundenoperationssteuerbereich 158 unterscheidet dessen Inhalt, welche einer Gruppe von Rundungsoperationen durchgeführt werden soll (z. B. Aufrunden, Abrunden, Auf-Null-Runden und Auf-Nächstes-Runden). Somit ermöglicht der Rundenoperationssteuerbereich 159A das Ändern des Rundungsmodus für jeden Befehl einzeln. In einer Ausführungsform der Erfindung, wobei ein Prozessor ein Steuerregister zum Angeben von Rundungsmodi einschließt, überschreibt der Inhalt des Rundenoperationssteuerbereichs 150 diesen Registerwert.
  • In der Befehlsvorlage ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs vsize 117 wird der Rest des Beta-Bereichs 154 als ein Vektorlängenbereich 159B interpretiert, dessen Inhalt unterscheidet, welche einer Anzahl von Datenvektorlängen durchgeführt werden soll (z. B. 128, 256 oder 512 Byte).
  • Im Fall einer Befehlsvorlage mit Speicherzugriff 120 der Klasse B wird ein Teil des Beta-Bereichs 154 als ein Sendebereich 157B interpretiert, dessen Inhalt unterscheidet, ob die Sendetypdatenbearbeitungsoperation durchgeführt werden soll oder nicht, während der Rest des Beta-Bereichs 154 als der Vektorlängenbereich 159B interpretiert wird. Die Befehlsvorlagen mit Speicherzugriff 120 schließen den Skalierungsbereich 160 und wahlweise den Verschiebungsbereich 162A oder den Verschiebungsskalierungsbereich 162B ein.
  • In Bezug auf das generische vektorfreundliche Befehlsformat 100 ist ein Bereich des vollständigen Opcodes 174 einschließlich des Formatbereichs 140, des Basisoperationsbereichs 142 und des Datenelementbreitebereichs 164 gezeigt. Während eine Ausführungsform gezeigt ist, in der der Bereich des vollständigen Opcodes 174 alle dieser Bereiche einschließt, schließt der Bereich des vollständigen Opcodes 174 in Ausführungsformen, die nicht alle von diesen unterstützen, weniger als alle dieser Bereiche ein. Der Bereich des vollständigen Opcodes 174 stellt den Operationscode (Opcode) bereit.
  • Der Erhöhungsoperationsbereich 150, der Datenelementbreitebereich 164 und der Schreibmaskenbereich 170 ermöglichen es, dass diese Merkmale für jeden Befehl einzeln in dem generischen vektorfreundlichen Befehlsformat angegeben werden.
  • Die Kombination von Schreibmaskenbereich und Datenelementbreitebereich schafft insofern typisierte Befehle, als diese es ermöglichen, dass die Maske basierend auf verschiedenen Datenelementbreiten angewendet wird.
  • Die verschiedenen Befehlsvorlagen, die in der Klasse A und in der Klasse B enthalten sind, sind in verschiedenen Situationen nützlich. In einigen Ausführungsformen der Erfindung können verschiedene Prozessoren oder verschiedene Kerne in einem Prozessor nur die Klasse A, nur die Klasse B oder beide Klassen unterstützen. Zum Beispiel kann ein Out-of-order-Hochleistungsuniversalkern, der für Universalrechnen vorgesehen ist, nur die Klasse B unterstützen, kann ein Kern, der hauptsächlich für Grafik- und/oder wissenschaftliches (Durchsatz-)Rechnen vorgesehen ist, nur die Klasse A unterstützen und kann ein Kern, der für beides vorgesehen ist, beide unterstützen (selbstverständlich ein Kern, der eine bestimmte Mischung aus Vorlagen und Befehlen aus beiden Klassen aufweist, aber nicht alle Vorlagen und Befehle aus beiden Klassen liegen im Bereich der Erfindung). Außerdem kann ein Einzelprozessor mehrere Kerne einschließen, die alle die gleiche Klasse einschließen oder in denen verschieden Kerne verschiedene Klassen unterstützen. Zum Beispiel kann in einem Prozessor mit separaten Grafik- und Universalkernen einer der Grafikkerne, der hauptsächlich für Grafik und/oder wissenschaftliches Rechnen vorgesehen ist, nur die Klasse A unterstützen, während einer oder mehrere der Universalkerne Hochleistungsuniversalkerne mit Out-of-order-Ausführung und Registerumbenennung, die für Universalrechnen vorgesehen sind, sein können, die nur die Klasse B unterstützen. Ein anderer Prozessor, der keinen separaten Grafikkern aufweist, kann einen oder mehrere In-order- oder Out-of-order-Universalkerne einschließen, die sowohl die Klasse A als auch die Klasse B einschließen. Selbstverständlich können in verschiedenen Ausführungsformen der Erfindung Merkmale von einer Klasse auch in der anderen Klasse implementiert werden. Programme, die in einer höheren Sprache geschrieben werden, würden in eine Vielfalt von verschiedenen ausführbaren Formen gebracht werden (z. B. bedarfsorientiert kompiliert oder statisch kompiliert), einschließlich: 1) einer Form, die nur Befehle der durch den Zielprozessor zur Ausführung unterstützten Klasse(n) aufweist; oder 2) einer Form, die alternative Routinen aufweist, die unter Verwendung verschiedener Kombinationen der Befehle aus allen Klassen geschrieben wurden, und die einen Steuerflusscode aufweist, der die auszuführenden Routinen basierend auf den Befehlen auswählt, die durch den Prozessor unterstützt werden, der den Code aktuell ausführt.
  • VEX-Befehlsformat
  • Eine VEX-Codierung ermöglicht es, dass Befehle mehr als zwei Operanden haben, und ermöglicht es, dass SIMD-Vektor-Register länger als 28 Bits sind. Die Verwendung eines VEX-Präfixes unterstützt eine Syntax mit drei (oder mehr) Operanden. Zum Beispiel haben frühere Zwei-Operanden-Befehle Operationen, wie A = A + B, durchgeführt, wodurch ein Quelloperand überschrieben wird. Die Verwendung eines VEX-Präfixes ermöglicht es, dass Operanden zerstörungsfreie Operationen, wie A = B + C, durchführen.
  • 2A veranschaulicht ein beispielhaftes AVX-Befehlsformat, einschließlich eines VEX-Präfixes 202, eines Bereichs des echten Opcodes 230, eines Mod-R/M-Bytes 240, eines SIB-Bytes 250, eines Verschiebungsbereichs 262 und IMM8 272. 2B veranschaulicht, welche Bereiche von 2A einen Bereich des vollständigen Opcodes 274 und einen Basisoperationsbereich 241 bilden. 2C veranschaulicht, welche Bereiche von 2A einen Registerindexbereich 244 bilden.
  • Das VEX-Präfix (Bytes 0-2) 202 ist in einer Drei-Byte-Form codiert. Das erste Byte ist der Formatbereich 290 (VEX-Byte 0, Bits [7:0]), der einen expliziten C4-Byte-Wert (der eindeutige Wert, der zum Unterscheiden des C4-Befehlsformats verwendet wird) enthält. Die zweiten-dritten Bytes (VEX-Bytes 1-2) schließen eine Anzahl von Bit-Bereichen ein, die eine spezifische Fähigkeit bereitstellen. Insbesondere besteht der REX-Bereich 205 (VEX-Byte 1, Bits [7-5]) aus einem VEX.R-Bit-Bereich (VEX-Byte 1, Bit [7] - R), VEX.X-Bit-Bereich (VEX-Byte 1, Bit [6] - X) und VEX.B-Bit-Bereich (VEX-Byte 1, Bit [5] - B). Andere Bereiche der Befehle codieren die unteren drei Bits der Registerindizes wie im Fach bekannt (rrr, xxx und bbb), sodass Rrrr, Xxxx und Bbbb durch Hinzufügen von VEX.R, VEX.X und VEX.B gebildet werden können. Der Opcode-Karten-Bereich 215 (VEX-Byte 1, Bits [4:0] - mmmmm) schließt Inhalt ein, um ein impliziertes führendes Opcode-Byte zu codieren. Der W-Bereich 264 (VEX-Byte 2, Bit [7] - W) - ist durch die Notation VEX.W dargestellt und stellt je nach Befehl verschiedene Funktionen bereit. Die Rolle von VEX.vvvv 220 (VEX-Byte 2, Bits [6:3]-vvvv) kann Folgendes einschließen: 1) VEX.vvvv codiert den ersten Quellregisteroperanden, angegeben in invertierter (1s-Komplement-) Form, und gilt für Befehle mit 2 oder mehr Quelloperanden; 2) VEX.vvvv codiert den Zielregisteroperanden, angegeben in 1s-Komplement-Form, für bestimmte Vektorverschiebungen; oder 3) VEX.vvvv codiert keinen Operanden, der Bereich ist reserviert und sollte 1111b enthalten. Wenn der VEX.L 268-Größen-Bereich (VEX-Byte 2, Bit [2]-L) = 0, wird ein 28-Bit-Vektor angezeigt; wenn VEX.L = 1, wird ein 256-Bit-Vektor angezeigt. Der Präfixcodierungsbereich 225 (VEX-Byte 2, Bits [1:0]-pp) stellt zusätzliche Bits für den Basisoperationsbereich 241 bereit.
  • Der Bereich des echten Opcodes 230 (Byte 3) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Bereich angegeben.
  • Der MOD-R/M-Bereich 240 (Byte 4) schließt den MOD-Bereich 242 (Bits [7-6]), den Reg.-Bereich 244 (Bits [5-3]) und den R/M-Bereich 246 (Bits [2-0]) ein. Die Rolle des Reg.-Bereichs 244 kann Folgendes einschließen: Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden (rrr von Rrrr) oder als eine Opcode-Erweiterung behandelt werden und nicht zum Codieren eines Befehlsoperanden verwendet werden. Die Rolle des R/M-Bereichs 246 kann Folgendes einschließen: Codieren des Befehlsoperanden, der eine Speicheradresse referenziert, oder Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Skalierung, Index, Basis (SIB) - der Inhalt des Skalierungsbereichs 250 (Byte 5) schließt SS252 (Bits [7-6]) ein, das zur Speicheradressgenerierung verwendet wird. Auf die Inhalte von SIB.xxx 254 (Bits [5-3]) und SIB.bbb 256 (Bits [2-0]) wurde zuvor bezogen auf die Registerindizes Xxxx und Bbbb Bezug genommen.
  • Der Verschiebungsbereich 262 und der Bereich des unmittelbaren Elements (IMM8) 272 enthalten Daten.
  • Beispielhafte Registerarchitektur
  • 3 ist ein Blockdiagramm einer Registerarchitektur 300 gemäß einer Ausführungsform der Erfindung. In der veranschaulichten Ausführungsform gibt es 32 Vektorregister 310, die 512 Bits breit sind; diese Register sind als zmm0 bis zmm31 referenziert. Die niederwertigen 256 Bits der unteren 6 zmm-Register sind auf den Registern ymm0-15 überlagert. Die niederwertigen 128 Bits auf den unteren 6 zmm-Registern (die niederwertigen 128 Bits des ymm-Registers) sind auf den Registern xmm0-15 überlagert.
  • Universalregister 325 - in der veranschaulichten Ausführungsform gibt es sechzehn 64-Bit-Universalregister, die zusammen mit den vorhandenen x86-Adressierungsmodi zum Adressieren von Speicheroperanden verwendet werden. Diese Register sind durch die Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 referenziert.
  • Skalare Gleitkomma-Stapel-Registerdatei (x87-Stapel) 345, auf der die gepackte flache MMX-Ganzzahl-Registerdatei 350 zugeordnet ist - in der veranschaulichten Ausführungsform ist der x87-Stapel ein Acht-Elemente-Stapel, der verwendet wird, um skalare Gleitkommaoperationen auf 32/64/80-Bit-Gleitkomma-Daten unter Verwendung der x87-Befehlssatz-Erweiterung durchzuführen; während die MMX-Register verwendet werden, um Operationen auf gepackten 64-Bit-Ganzzahl-Daten durchzuführen und Operanden für einige Operationen zu enthalten, die zwischen den MMX- und XMM-Registern durchgeführt werden.
  • Alternative Ausführungsformen der Erfindung können breitere oder engere Register verwenden. Außerdem können alternative Ausführungsformen der Erfindung mehr, weniger oder verschiedene Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf verschiedene Weise, zu verschiedenen Zwecken und in verschiedenen Prozessoren implementiert werden. Zum Beispiel können Implementierungen solcher Kerne Folgendes einschließen: 1) einen In-order-Universalkern, der für Universalrechnen vorgesehen ist; 2) einen Out-of-order-Hochleistungsuniversalkern, der für Universalrechnen vorgesehen ist; 3) einen Spezialkern, der hauptsächlich für Grafik- und/oder wissenschaftliches (Durchsatz-)Rechnen vorgesehen ist. Implementierungen von verschiedenen Prozessoren können Folgendes einschließen: 1) einen Hauptprozessor, einschließlich eines oder mehrerer In-order-Universalkerne, die für Universalrechnen vorgesehen sind, und/oder eines oder mehrerer Out-of-order-Universalkerne, die für Universalrechnen vorgesehen sind; und 2) einen Coprozessor, einschließlich eines oder mehrerer Spezialkerne, die hauptsächlich für Grafik und/oder wissenschaftlich (Durchsatz) vorgesehen sind. Diese verschiedenen Prozessoren führen zu verschiedenen Computersystemarchitekturen, die Folgendes einschließen können: 1) den Coprozessor auf einem von dem Hauptprozessor separaten Chip; 2) den Coprozessor auf einem separaten Die im gleichen Gehäuse wie ein Hauptprozessor; 3) den Coprozessor auf dem gleichen Die wie ein Hauptprozessor (wobei in diesem Fall ein solcher Coprozessor gelegentlich als Speziallogik, wie eine integrierte Grafik- und/oder wissenschaftliche (Durchsatz-)Logik, oder als Spezialkerne bezeichnet wird); und 4) ein System-on-a-Chip, das auf dem gleichen Die den beschriebenen Hauptprozessor (gelegentlich als der/die Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den vorstehend beschriebenen Coprozessor und zusätzliche Funktionalität einschließen kann. Beispielhafte Kernarchitekturen werden anschließend beschrieben, gefolgt von Beschreibungen von beispielhaften Prozessoren und Computerarchitekturen. Hierin ausführlich beschrieben sind Schaltungen (Einheiten), die beispielhafte Kerne, Prozessoren usw. umfassen.
  • Beispielhafte Kernarchitekturen
  • 4A ist ein Blockdiagramm, das sowohl eine beispielhafte In-order-Pipeline als auch eine beispielhafte Pipeline für Registerumbenennung, Out-of-order-Ausgabe/-Ausführung gemäß Ausführungsformen der Erfindung veranschaulicht. 4B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines In-order-Architekturkerns als auch eines beispielhaften Architekturkerns für Registerumbenennung, Out-of-order-Ausgabe/-Ausführung zur Aufnahme in einen Prozessor gemäß Ausführungsformen der Erfindung veranschaulicht. Die Kästchen mit durchgezogenen Linien in 4A-B veranschaulichen die In-order-Pipeline und den In-order-Kern, während die optionale Hinzufügung der Kästchen mit gestrichelten Linien die Pipeline und den Kern für Registerumbenennung, Out-of-order-Ausgabe/-Ausführung veranschaulicht. Dadurch, dass der In-order-Aspekt ein Teilsatz des Out-of-order-Aspekts ist, wird der Out-of-order-Aspekt beschrieben.
  • In 4A schließt eine Prozessor-Pipeline 400 eine Abrufen-Stufe 402, eine Längendecodieren-Stufe 404, eine Decodieren-Stufe 406, eine Zuordnungsstufe 408, eine Umbenennungsstufe 410, eine Planungs- (auch bekannt als eine Sende- oder Ausgabe-)Stufe 412, eine Registerlesen/Speicherlesen-Stufe 414, eine Ausführungsstufe 416, eine Zurückschreiben-/Speicherschreiben-Stufe 418, eine Ausnahmebehandlungsstufe 422 und eine Anwendungsstufe 424 ein.
  • 4B zeigt einen Prozessorkern 490, einschließlich einer Front-End-Einheit 430, die an eine Ausführungsmoduleinheit 450 gekoppelt ist, und beide sind an eine Speichereinheit 470 gekoppelt. Der Kern 490 kann ein Kern für Rechnen mit reduziertem Befehlssatz (Reduced Instruction Set Computing, RISC), ein Kern mit sehr langem Befehlswort (Very Long Instruction Word, VLIW) oder ein hybrider oder alternativer Kerntyp sein. Als noch eine weitere Option kann der Kern 490 ein Spezialkern, wie ein Netzwerk- oder Kommunikationskern, ein Komprimierungsmodul, ein Coprozessorkern, ein Kern für eine Grafikverarbeitungseinheit für Universalrechnen (General Purpose Computing Graphics Processing Unit, GPGPU), ein Grafikkern oder dergleichen sein.
  • Die Front-End-Einheit 430 schließt eine Sprungvorhersageeinheit 432 ein, die an eine Befehls-Cache-Einheit 434 gekoppelt ist, die an einen Befehls-Übersetzungspuffer (Translation Lookaside Buffer, TLB) 436 gekoppelt ist, der an eine Befehlsabrufeinheit 438 gekoppelt ist, der an eine Decodiereinheit 440 gekoppelt ist. Die Decodiereinheit 440 (oder der Decoder) kann Befehle decodieren und als eine Ausgabe eine oder mehrere Mikro-Operationen, Mikrocode-Eintrittspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale erzeugen, die von den ursprünglichen Befehlen decodiert oder abgeleitet werden oder die diese auf andere Weise widerspiegeln. Die Decodiereinheit 440 kann unter Verwendung mehrerer verschiedener Mechanismen implementiert werden. Beispiele für geeignete Mechanismen schließen unter anderem Umsetzungstabellen, Hardwareimplementierungen, programmierbare logische Anordnungen (Programmable Logic Arrays, PLAs), Mikrocode-Festwertspeicher (Read Only Memories, ROMs) usw. ein. In einer Ausführungsform schließt der Kern 490 einen Mikrocode-ROM oder ein anderes Medium ein, das Mikrocode für bestimmte Makrobefehle speichert (z. B. in der Decodiereinheit 440 oder auf andere Weise in der Front-End-Einheit 430). Die Decodiereinheit 440 ist an eine Umbenennungs-/Zuordnungseinheit 452 in der Ausführungsmoduleinheit 450 gekoppelt.
  • Die Ausführungsmoduleinheit 450 schließt die Umbenennungs-/Zuordnungseinheit 452 ein, die an eine Rückzugseinheit 454 und einen Satz von einer oder mehreren Planereinheit(en) 456 gekoppelt ist. Die Planereinheit(en) 456 stellen eine beliebige Anzahl von verschiedenen Planern dar, einschließlich Reservierungsstationen, zentrales Befehlsfenster usw. Die Planereinheit(en) 456 sind an die Einheit(en) der physikalischen Registerdatei(en) 458 gekoppelt. Alle Einheit(en) der physikalischen Registerdatei(en) 458 stellen eine oder mehrere physikalische Registerdateien dar, von denen verschiedene einen oder mehrere verschiedene Datentypen speichern, wie skalare Ganzzahl, skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma, Status (z. B. ein Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. In einer Ausführungsform umfasst die Einheit der physikalischen Registerdatei(en) 458 eine Vektorregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Universalregister bereitstellen. Die Einheit(en) der physikalischen Registerdatei(en) 458 sind durch die Rückzugseinheit 454 überlappt, um verschiedene Weisen zu veranschaulichen, in denen eine Registerumbenennung und Out-of-order-Ausführung implementiert werden kann (z. B. unter Verwendung von Neuordnungspuffer(n) und Rückzugsregisterdatei(en); unter Verwendung von künftigen Datei(en), Verlaufspuffer(n) und Rückzugsregisterdatei(en); unter Verwendung von Registerkarten und einem Pool von Registern; usw.). Die Rückzugseinheit 454 und die Einheit(en) der physikalischen Registerdatei(en) 458 sind an die Ausführungs-Cluster 460 gekoppelt. Die Ausführungs-Cluster 460 schließen einen Satz von einer oder mehreren Ausführungseinheiten 462 und einen Satz von einer oder mehreren Speicherzugriffseinheiten 464 ein. Die Ausführungseinheiten 462 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und auf verschiedenen Typen von Daten (z. B. skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma) durchführen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten einschließen können, die für spezifische Funktionen oder Funktionssätze vorgesehen sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten einschließen, die alle Funktionen durchführen. Die Planereinheit(en) 456, die Einheit(en) der physikalischen Registerdatei(en) 458 und die Ausführungs-Cluster 460 sind als möglicherweise eine Mehrzahl angezeigt, weil bestimmte Ausführungsformen separate Pipelines für bestimmte Typen von Daten/Operationen schaffen (z. B. eine Pipeline für skalare Ganzzahl, eine Pipeline für skalares Gleitkomma/gepackte Ganzzahl/gepacktes Gleitkomma/Vektorganzzahl/Vektorgleitkomma und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre/n eigene/n Planereinheit, Einheit der physikalischen Registerdatei(en) und/oder Ausführungs-Cluster aufweisen - und im Fall einer separaten Speicherzugriffs-Pipeline sind bestimmte Ausführungsformen implementiert, in denen nur das Ausführungs-Cluster dieser Pipeline die Speicherzugriffseinheit(en) 464 aufweist). Es sei weiterhin klargestellt, dass bei Verwendung von separaten Pipelines eine oder mehrere dieser Pipelines Out-of-order-Ausgabe/-Ausführung und der Rest In-order sein können.
  • Der Satz von Speicherzugriffseinheiten 464 ist an die Speichereinheit 470 gekoppelt, die eine Daten-TLB-Einheit 472 einschließt, die an eine Daten-Cache-Einheit 474 gekoppelt ist, die an eine Level 2 (L2)-Cache-Einheit 476 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 464 eine Ladeeinheit, eine Adressspeichereinheit und eine Datenspeichereinheit einschließen, die alle an die Daten-TLB-Einheit 472 in der Speichereinheit 470 gekoppelt sind. Die Befehls-Cache-Einheit 434 ist ferner an eine Level 2 (L2)-Cache-Einheit 476 in der Speichereinheit 470 gekoppelt. Die L2-Cache-Einheit 476 ist an ein oder mehrere andere Cache-Level und schließlich an einen Hauptspeicher gekoppelt.
  • Beispielsweise kann die beispielhafte Kernarchitektur für Registerumbenennung, Out-of-order-Ausgabe/-Ausführung die Pipeline 400 wie folgt implementieren: 1) das Befehlsabrufen 438 führt die Abrufen- und Längendecodieren-Stufen 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 Planereinheit(en) 456 führen die Planungsstufe 412 durch; 5) die Einheit(en) der physikalischen Registerdatei(en) 458 und die Speichereinheit 470 führen die Registerlesen/Speicherlesen-Stufe 414 durch; das Ausführungs-Cluster 460 führt die Ausführungsstufe 416 durch; 6) die Speichereinheit 470 und die Einheit(en) der physikalischen Registerdatei(en) 458 führen die Zurückschreiben-/Speicherschreiben-Stufe 418 durch; 7) verschiedene Einheiten können an der Ausnahmebehandlungsstufe 422 beteiligt sein; und 8) die Rückzugseinheit 454 und die Einheit(en) der physikalischen Registerdatei(en) 458 führen die Anwendungsstufe 424 durch.
  • Der Kern 490 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, CA, USA; den ARM-Befehlssatz (mit optional zusätzlichen Erweiterungen, wie NEON) von ARM Holdings in Sunnyvale, CA, USA), einschließlich der hierin beschriebenen Befehl(e). In einer Ausführungsform schließt der Kern 490 eine Logik zum Unterstützen einer Befehlssatzerweiterung für gepackte Daten (z. B. AVX1, AVX2) ein, wodurch es ermöglicht wird, dass die durch viele Multimedia-Anwendungen verwendeten Operationen unter Verwendung von gepackten Daten durchgeführt werden.
  • Es sei klargestellt, dass der Kern Multithreading (Ausführen von zwei oder mehreren parallelen Sätzen von Operationen oder Threads) unterstützt und dies in einer Vielfalt von Weisen tun kann, einschließlich Zeitscheiben-Multithreading, gleichzeitiges Multithreading (wobei ein einzelner physikalischer Kern einen logischen Kern für alle Threads bereitstellt, für die dieser physikalische Kern ein gleichzeitiges Multithreading durchführt) oder einer Kombination davon (z. B. Zeitscheiben-Abrufen und -Decodieren und gleichzeitiges Multithreading danach, wie bei der Intel® Hyperthreading-Technologie).
  • Während die Registerumbenennung im Kontext der Out-of-order-Ausführung beschrieben ist, sei klargestellt, dass die Registerumbenennung in einer In-order-Architektur verwendet werden kann. Während die veranschaulichte Ausführungsform des Prozessors auch separate Befehls- und Daten-Cache-Einheiten 434/474 und eine gemeinsame L2-Cache-Einheit 476 einschließt, können alternative Ausführungsformen einen einzelnen internen Cache sowohl für Befehle als auch für Daten aufweisen, wie einen internen Level 1 (L1)-Cache, oder mehrere interne Cache-Level. In einigen Ausführungsformen kann das System eine Kombination von einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, einschließen. Alternativ dazu kann sich der gesamte Cache außerhalb des Kerns und/oder des Prozessors befinden.
  • Spezifische beispielhafte In-order-Kernarchitektur
  • 5A-B veranschaulichen ein Blockdiagramm einer spezifischeren beispielhaften In-order-Kernarchitektur, deren Kern einer von verschiedenen logischen Blöcke (einschließlich anderer Kerne des gleichen Typs und/oder verschiedener Typen) in einem Chip wäre. Die logischen Blöcke kommunizieren durch ein Verbindungsnetzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit einiger fester Funktionslogik, Speicher-E/A-Schnittstellen und anderer erforderlicher E/A-Logik, je nach Anwendung.
  • 5A ist ein Blockdiagramm eines Einzelprozessorkerns zusammen mit dessen Verbindung zu einem On-Die Verbindungsnetzwerk 502 und mit dessen lokalem Teilsatz des Level 2 (L2)-Cache 504 gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdecoder 500 den x86-Befehlssatz mit einer Befehlssatzerweiterung für gepackte Daten. Ein L1-Cache 506 ermöglicht Zugriffe mit niedriger Latenz auf Cache-Speicher in die skalaren und Vektoreinheiten. Während in einer Ausführungsform (zur Vereinfachung des Designs) eine skalare Einheit 508 und eine Vektoreinheit 510 separate Registersätze (das skalare Register 512 bzw. das Vektorregister 514) verwenden und Daten, die zwischen diesen übertragen werden, in Speicher geschrieben und dann aus einem Level 1 (L1)-Cache 506 eingelesen werden, können alternative Ausführungsformen der Erfindung eine verschiedene Herangehensweise verwenden (z. B. einen einzelnen Registersatz verwenden oder einen Kommunikationspfad einschließen, die es ermöglichen, dass Daten zwischen den beiden Registerdateien übertragen werden, ohne gelesen und eingelesen zu werden).
  • Der lokale Teilsatz des L2-Cache 504 ist Teil eines globalen L2-Cache, der in separate lokale Teilsätze, einer je Prozessorkern, geteilt ist. Jeder Prozessorkern weist einen Direktzugriffspfad zu dessen eigenem lokalen Teilsatz des L2-Cache 504 auf. Durch einen Prozessorkern gelesene Daten werden in dessen L2-Cache-Teilsatz 504 gespeichert, und es kann schnell auf diese zugegriffen werden, parallel zu anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen. Durch einen Prozessorkern geschriebene Daten werden in dessen eigenem L2-Cache-Teilsatz 504 gespeichert und werden von anderen Teilsätzen geleert, wenn erforderlich. Das Ringnetzwerk stellt die Kohärenz für gemeinsame Daten sicher. Das Ringnetzwerk ist bidirektional, um es Agenten, wie Prozessorkernen, L2-Caches und anderen logischen Blöcken zu ermöglichen, in dem Chip 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 schließt einen Teil des L1-Daten-Cache 506A des L1-Cache 504 und mehr Details in Bezug auf die Vektoreinheit 510 und das Vektorregister 514 ein. Insbesondere ist die Vektoreinheit 510 eine 6-breite Vektorverarbeitungseinheit (Vector Processing Unit, VPU) (siehe die 16-breite ALU 528), die eines oder mehrere von Ganzzahlbefehlen, Float-Befehlen mit einfacher Genauigkeit und Float-Befehlen mit doppelter Genauigkeit ausführt. Die VPU unterstützt ein Swizzeln der Registereingaben mit einer Swizzel-Einheit 520, eine numerische Konvertierung mit den Einheiten zur numerischen Konvertierung 522A-B und eine Replikation mit einer Replikationseinheit 524 bei der Speichereingabe.
  • Prozessor mit integriertem Speicher-Controller und Grafik
  • 6 ist ein Blockdiagramm eines Prozessors 600 gemäß Ausführungsformen der Erfindung, der mehr als einen Kern aufweisen kann, einen integrierten Speicher-Controller aufweisen kann und eine integrierte Grafik aufweisen kann. Die Kästchen mit durchgezogenen Linien in 6 veranschaulichen einen Prozessor 600 mit einem Einzelkern 602A, einem Systemagenten 610, einem Satz von einer oder mehreren Bus-Controller-Einheiten 616, während die optionale Hinzufügung der Kästchen mit gestrichelten Linien einen alternativen Prozessor 600 mit mehreren Kernen 602A-N, einen Satz von einer oder mehreren integrierten Speicher-Controller-Einheit(en) 614 in der Systemagenteneinheit 610 und eine Speziallogik 608 veranschaulicht.
  • Somit können verschiedene Implementierungen des Prozessors 600 Folgendes einschließen: 1) einen Hauptprozessor mit der Speziallogik 608, die eine integrierte Grafik- und/oder wissenschaftliche (Durchsatz-)Logik ist (die einen oder mehrere Kerne einschließen kann), und die Kerne 602A-N, die ein oder mehrere Universalkerne sind (z. B. In-order-Universalkerne, Out-of-order-Universalkerne, eine Kombination der beiden); 2) einen Coprozessor, wobei die Kerne 602A-N eine große Anzahl von Spezialkernen sind, die hauptsächlich für Grafik- und/oder wissenschaftliches (Durchsatz-)Rechnen vorgesehen sind; und 3) einen Coprozessor, wobei die Kerne 602A-N eine große Anzahl von In-order-Universalkernen sind. Somit kann der Prozessor 600 ein Universalprozessor, ein Coprozessor oder Spezialprozessor, wie ein Netzwerk- oder Kommunikationsprozessor, ein Komprimierungsmodul, ein Grafikprozessor, eine GPGPU (General Purpose Graphics Processing Unit, Universalgrafikverarbeitungseinheit), ein Coprozessor mit hohem Durchsatz mit vielen integrierten Kernen (Many Integrated Core, MIC) (einschließlich 30 oder mehr Kerne), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 600 kann ein Teil von einem oder mehreren Substraten sein und/oder kann unter Verwendung einer beliebigen von einer Anzahl von Verfahrenstechnologien, wie BiCMOS, CMOS oder NMOS, implementiert sein.
  • Die Speicherhierarchie schließt ein oder mehrere Cache-Level in den Kernen 604A-N, einen Satz oder eine oder mehrere gemeinsame Cache-Einheiten 606 und externen Speicher (nicht gezeigt), der an den Satz von integrierten Speicher-Controller-Einheiten 614 gekoppelt ist, ein. Der Satz von gemeinsamen Cache-Einheiten 606 kann ein oder mehrere Mid-Level-Caches, wie Level 2 (L2)-, Level 3 (L3)-, Level 4 (L4)-Cache oder andere Cache-Level, einen Last-Level-Cache (LLC) und/oder Kombinationen davon einschließen. Während in einer Ausführungsform eine ringbasierte Verbindungseinheit 612 die integrierte Grafiklogik 608, den Satz von gemeinsamen Cache-Einheiten 606 und die Systemagenteneinheit 610/integrierten Speicher-Controller-Einheit(en) 614 miteinander verbindet, können alternative Ausführungsformen eine beliebige Anzahl von hinlänglich bekannten Techniken zum Verbinden dieser Einheiten verwenden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cache-Einheiten 606 und den Kernen 602-A-N beibehalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 602A-N zum Multithreading in der Lage. Der Systemagent 610 schließt die Komponenten ein, die die Kerne 602A-N koordinieren und betreiben. Die Systemagenteneinheit 610 kann zum Beispiel eine Energiesteuerungseinheit (Power Control Unit, PCU) und eine Anzeigeeinheit einschließen. Die PCU kann Logik und Komponenten sein oder einschließen, die zum Regeln des Energiezustands der Kerne 602A-N und der integrierten Grafiklogik 608 erforderlich sind. Die Anzeigeeinheit dient zum Ansteuern von einer oder mehreren extern verbundenen Anzeigen.
  • Die Kerne 602A-N können in Bezug auf den Architekturbefehlssatz homogen oder heterogen sein; das heißt, zwei oder mehrere der Kerne 602A-N können zur Ausführung des gleichen Befehlssatzes in der Lage sein, während andere dazu in der Lage sein können, nur einen Teilsatz von diesem Befehlssatz oder einem verschiedenen Befehlssatz auszuführen.
  • Beispielhafte Computerarchitekturen
  • 7-10 sind Blockdiagramme von beispielhaften Computerarchitekturen. Andere im Fachgebiet bekannte Systemauslegungen und Konfigurationen für Laptops, Desktops, handgehaltene PCs, Personal Digital Assistants, Engineering-Arbeitsstationen, Server, Netzwerkvorrichtungen, Netzwerk-Hubs, Schalter, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Medienwiedergabevorrichtungen, handgehaltene Vorrichtungen und verschiedene andere elektronische Vorrichtungen sind ebenfalls geeignet. Im Allgemeinen ist eine große Vielfalt von Systemen oder elektronischen Vorrichtungen, die zur Aufnahme eines Prozessors und/oder anderer Ausführungslogik, wie hierin offenbart, in der Lage sind, allgemein geeignet.
  • Nun Bezug nehmend auf 7 ist ein Blockdiagramm eines Systems 700 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 700 kann einen oder mehrere Prozessoren 710, 715 einschließen, die an einen Controller-Hub 720 gekoppelt sind. In einer Ausführungsform schließt der Controller-Hub 720 einen Grafikspeicher-Controller-Hub (Graphics Memory Controller Hub, GMCH) 790 und einen Eingabe/Ausgabe-Hub (Input/Output Hub, IOH) 750 ein (die sich auf separaten Chips befinden können); schließt das GMCH 790 Speicher- und Grafik-Controller ein, an die ein Speicher 740 und ein Coprozessor 745 gekoppelt sind; ist/koppelt das IOH 750 Ein-/Ausgabe-Vorrichtungen (E/A-Vorrichtungen) 760 an das GMCH 790. Alternativ dazu sind einer oder beide der Speicher- und Grafik-Controller in den Prozessor integriert (wie hierin beschrieben), sind der Speicher 740 und der Coprozessor 745 direkt an den Prozessor 710 gekoppelt und der Controller-Hub 720 in einem einzelnen Chip mit dem IOH 750.
  • Die optionale Art der zusätzlichen Prozessoren 715 ist in 7 mit gestrichelten Linien gekennzeichnet. Jeder Prozessor 710, 715 kann einen oder mehrere der hierin beschriebenen Prozessorkerne einschließen und kann eine Version des Prozessors 600 sein.
  • Der Speicher 740 kann zum Beispiel ein DRAM (Dynamic Random Access Memory, dynamischer Speicher mit wahlfreiem Zugriff), ein Phasenwechselspeicher (Phase Change Memory, PCM) oder eine Kombination der beiden sein. Für zumindest eine Ausführungsform kommuniziert der Controller-Hub 720 mit den Prozessor(en) 710, 715 über einen Multi-Drop-Bus, wie einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle oder eine ähnliche Verbindung 795.
  • In einer Ausführungsform ist der Coprozessor 745 ein Spezialprozessor, wie ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, ein Komprimierungsmodul, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Controller-Hub 720 einen integrierten Grafikbeschleuniger einschließen.
  • Es kann eine Vielfalt von Unterschieden zwischen den physikalischen Ressourcen 710, 7155 in Bezug auf ein Spektrum von Leistungsmetriken, einschließlich Architektur-, Mikroarchitektur-, Wärme-, Stromverbrauchseigenschaften und dergleichen, bestehen.
  • In einer Ausführungsform führt der Prozessor 710 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. In die Befehle können Coprozessor-Befehle eingebettet sein. Der Prozessor 710 erkennt diese Coprozessor-Befehle als einem Befehlstyp zugehörig, der durch den verbundenen Coprozessor 745 ausgeführt werden soll. Entsprechend gibt der Prozessor 710 diese Coprozessor-Befehle (oder Steuersignale, die Coprozessor-Befehle darstellen) auf einem Coprozessor-Bus oder einer anderen Verbindung zu dem Coprozessor 745 aus. Die Coprozessor(en) 745 nehmen die empfangenen Coprozessor-Befehle an und führen sie aus.
  • Nun Bezug nehmend auf 8 ist ein Blockdiagramm eines ersten spezifischeren Beispielsystems 800 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 8 gezeigt, ist das Multiprozessorsystem 800 ein Punkt-zu-Punkt-Verbindungssystem und schließt einen ersten Prozessor 870 und einen zweiten Prozessor 880 ein, die über eine Punkt-zu-Punkt-Verbindung 850 gekoppelt sind. Alle Prozessoren 870 und 880 können eine Version des Prozessors 600 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 870 und 880 die Prozessoren 710 bzw. 715, während der Coprozessor 838 der Coprozessor 745 ist. In einer anderen Ausführungsform sind die Prozessoren 870 und 880 der Prozessor 710 bzw. der Coprozessor 745.
  • Die Prozessoren 870 und 880 sind einschließlich integrierter Speicher-Controller(lntegrated Memory Controller, IMC)-Einheiten 872 bzw. 882 gezeigt. Der Prozessor 870 schließt als Teil seiner Bus-Controller-Einheiten auch Punkt-zu-Punkt(P-P)-Schnittstellen 876 und 878 ein; in ähnlicher Weise schließt der zweite Prozessor 880 P-P-Schnittstellen 886 und 888 ein. Die Prozessoren 870, 880 können Informationen über eine Punkt-zu-Punkt(P-P)-Schnittstelle 850 unter Verwendung von P-P-Schnittstellen-Schaltungen 878, 888 austauschen. Wie in 8 gezeigt, koppeln die IMCs 872 und 882 die Prozessoren an jeweilige Speicher, nämlich an Speicher 832 und einen Speicher 834, die Abschnitte eines Hauptspeichers sein können, der lokal an den jeweiligen Prozessoren befestigt ist.
  • Die Prozessoren 870, 880 können jeweils Informationen mit einem Chipsatz 890 über einzelne P-P-Schnittstellen 852, 854 unter Verwendung von Punkt-zu-Punkt-Schnittstellen-Schaltungen 876, 894, 886, 898 austauschen. Der Chipsatz 890 kann Informationen mit dem Coprozessor 838 wahlweise über eine Hochleistungsschnittstelle 892 austauschen. In einer Ausführungsform ist der Coprozessor 838 ein Spezialprozessor, wie ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, ein Komprimierungsmodul, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein gemeinsamer Cache (nicht gezeigt) kann in beiden Prozessoren oder außerhalb von beiden Prozessoren enthalten sein, aber mit den Prozessoren derart über eine P-P Verbindung verbunden sein, dass die lokalen Cache-Informationen von einem oder beiden Prozessoren in dem gemeinsamen Cache gespeichert sind, wenn ein Prozessor in einen Modus mit niedrigem Stromverbrauch gebracht wird.
  • Der Chipsatz 890 kann an einen ersten Bus 816 über eine Schnittstelle 896 gekoppelt sein. In einer Ausführungsform kann der erste Bus 816 ein Peripheral Component Interconnect(PCI)-Bus oder ein Bus, wie ein PCI Express-Bus oder ein anderer E/A-Verbindungs-Bus sein, wenngleich der Umfang der vorliegenden Erfindung nicht hierauf beschränkt ist.
  • Wie in 8 gezeigt, können verschiedene E/A-Vorrichtungen 814 an den ersten Bus 816 gekoppelt sein, zusammen mit einer Bus-Brücke 818, die den ersten Bus 816 an einen zweiten Bus 820 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessor(en) 815, wie Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie Grafikbeschleuniger oder Digitalsignalverarbeitungs(Digital Signal Processing, DSP)-Einheiten), anwenderprogrammierbare Gatteranordnungen oder ein beliebiger anderer Prozessor, an den ersten Bus 816 gekoppelt. In einer Ausführungsform kann der zweite Bus 820 ein Low Pin Count-Bus (LPC-Bus) sein. Verschiedene Vorrichtungen können in einer Ausführungsform an einen zweiten Bus 820 gekoppelt werden, einschließlich zum Beispiel eine Tastatur und/oder Maus 822, Kommunikationsvorrichtungen 827 und eine Speichereinheit 828, wie ein Festplattenlaufwerk oder eine andere Massenspeichervorrichtung, die Befehle/Code und Daten 830 einschließen kann. Ferner kann ein Audio-E/A 824 an den zweiten Bus 816 gekoppelt werden. Es sei darauf hingewiesen, dass andere Architekturen möglich sind. Anstelle der Punkt-zu-Punkt-Architektur von 8 kann ein System zum Beispiel eine Multi-Drop-Bus- oder eine andere solche Architektur implementieren.
  • Nun Bezug nehmend auf 9 ist ein Blockdiagramm eines zweiten spezifischeren Beispielsystems 900 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in 8 und 9 tragen gleiche Bezugszeichen, und bestimmte Aspekte von 8 wurden in 9 weggelassen, um eine Verunklarung anderer Aspekte von 9 zu vermeiden.
  • 9 veranschaulicht, dass die Prozessoren 870, 880 eine integrierte Speicher- und E/A-Steuerlogik (Control Logic, CL) 972 bzw. 982 einschließen können. Somit schließen die CL 972, 982 integrierte Speicher-Controller-Einheiten ein und schließen eine E/A-Steuerlogik ein. 9 veranschaulicht, dass nicht nur die Speicher 832, 834 an die CL 872, 882 gekoppelt sind, sondern auch, dass E/A-Vorrichtungen 914 auch an die Steuerlogik 872, 882 gekoppelt sind. Ältere E/A-Vorrichtungen 915 sind an den Chipsatz 890 gekoppelt.
  • Nun Bezug nehmend auf 10 ist ein Blockdiagramm eines SoC 1000 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in 6 tragen gleiche Bezugszeichen. Außerdem sind Kästchen mit gestrichelten Linien optionale Merkmale bei fortschrittlicheren SoCs. In 10 sind Verbindungseinheit(en) 1002 an Folgendes gekoppelt: einen Anwendungsprozessor 1010, der einen Satz von einem oder mehreren Kernen 102A-N, Cache-Einheiten 604A-N und gemeinsame Cache-Einheit(en) 606; eine Systemagenteneinheit 610; Bus-Controller-Einheit(en) 616; integrierte Speicher-Controller-Einheit(en) 614; einen Satz oder einen oder mehrere Coprozessoren 1020, die eine integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor einschließen können; eine Einheit eines statischen Speichers mit wahlfreiem Zugriff (Static Random Access Memory, SRAM)1030; eine Einheit mit direktem Speicherzugriff (Direct Memory Access, DMA) 1032; und eine Anzeigeeinheit 1040 zum Koppeln an eine oder mehrere externe Anzeigen einschließt. In einer Ausführungsform schließen die Coprozessor(en) 1020 einen Spezialprozessor, wie einen Netzwerk- oder Kommunikationsprozessor, ein Komprimierungsmodul, eine GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder dergleichen, ein.
  • Ausführungsformen der hierin offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination von diesen Implementierungsansätzen implementiert sein. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode mit Ausführung auf programmierbaren Systemen, umfassend zumindest einen Prozessor, ein Speichersystem (einschließlich flüchtigen und nicht-flüchtigen Speichers und/oder Speicherelementen), zumindest eine Eingabevorrichtung und zumindest eine Ausgabevorrichtung, implementiert sein.
  • Programmcode, wie der in 8 veranschaulichte Code 830, kann angewendet werden, um Befehle zum Durchführen der hierin beschriebenen Funktionen einzugeben und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können in bekannter Weise auf eine oder mehrere Ausgabevorrichtungen angewendet werden. Zu Zwecken dieser Anwendung schließt ein Verarbeitungssystem ein beliebiges System ein, das einen Prozessor aufweist, wie einen Digitalsignalprozessor (DSP), einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (Application-Specific Integrated Circuit, ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren prozeduralen oder objektorientierten Programmiersprache implementiert sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann auch in einer Assembler- oder Maschinensprache implementiert sein, wenn dies gewünscht ist. Dabei ist der Umfang der hierin beschriebenen Mechanismen 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 typische Befehle implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik in dem Prozessor darstellt, die, wenn sie durch eine Maschine gelesen wird, die Maschine dazu veranlasst, Logik zum Durchführen der hierin beschriebenen Techniken herzustellen. Diese Darstellungen, bekannt als „IP-Kerne“, können auf einem greifbaren, maschinenlesbaren Medium gespeichert und für verschiedene Kunden oder Herstellungseinrichtungen bereitgestellt werden, um in die Herstellungsmaschinen geladen zu werden, die die Logik oder den Prozessor tatsächlich herstellen.
  • Diese maschinenlesbaren Speichermedien können unter anderem nicht-flüchtige, greifbare Anordnungen von Artikeln einschließen, die durch eine Maschine oder Vorrichtung hergestellt oder gebildet werden, einschließlich Speichermedien, wie Festplatten, jeden anderen Typ von Platte, einschließlich Disketten, optischer Platten, Compact Disk-Festwertspeichern (Compact Disk Read-Only Memories, CD-ROMs), wiederbeschreibbarer Compact Disks (Compact Disk Rewritables, CD-RWs) und magnetooptischer Platten, Halbleitervorrichtungen, wie Festwertspeicher (Read-Only Memories, ROMs), Speicher mit wahlfreiem Zugriff (Random Access Memories, RAMs), wie dynamische Speicher mit wahlfreiem Zugriff (Dynamic Random Access Memories, DRAMs), statische Speicher mit wahlfreiem Zugriff (Static Random Access Memories, SRAMs), löschbare programmierbare Festwertspeicher (Erasable Programmable Read-Only Memories, EPROMs), Flash-Speicher, elektrisch löschbare programmierbare Festwertspeicher (Electrically Erasable Programmable Read-Only Memories, EEPROMs), Phasenwechselspeicher (Phase Change Memory, PCM), Magnetkarten oder optische Karten oder einen beliebigen Typ von Medien, die zum Speichern von elektronischen Befehlen geeignet sind.
  • Entsprechend schließen Ausführungsformen der Erfindung auch nicht-flüchtige, greifbare maschinenlesbare Medien ein, die Befehle enthalten oder Designdaten enthalten, wie eine Hardwarebeschreibungssprache (Hardware Description Language, HDL), die hierin beschriebene Strukturen, Schaltungen, Einrichtungen, Prozessoren und/oder Systemmerkmale definiert. Diese Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich binärer Übersetzung, Code-Morphing usw.)
  • In einigen Fällen kann ein Befehlskonverter verwendet werden, um einen Befehl von einem Quellbefehlssatz in einen Zielbefehlssatz zu konvertieren. Zum Beispiel kann der Befehlskonverter einen Befehl in einen oder mehrere andere durch den Kern zu verarbeitende Befehle übersetzen (z. B. unter Verwendung einer statischen binären Übersetzung, einer dynamischen binärer Übersetzung, einschließlich dynamischer Kompilierung), morphen, emulieren oder auf andere Weise konvertieren. Der Befehlskonverter kann in Software, Hardware, Firmware oder einer Kombination davon implementiert sein. Der Befehlskonverter kann prozessorintern, prozessorextern oder teilweise prozessorintern und teilweise prozessorextern sein.
  • 11 ist ein Blockdiagramm, das die Verwendung eines Softwarebefehlskonverters zum Konvertieren von binären Befehlen in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt. In der veranschaulichten Ausführungsform ist der Befehlskonverter ein Softwarebefehlskonverter, wenngleich der Befehlskonverter alternativ dazu in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert sein kann. 11 zeigt, dass ein Programm in einer höheren Sprache 1102 unter Verwendung eines ersten Compilers 1104 kompiliert werden kann, um einen ersten Binärcode (z. B. x86) 1106 zu erzeugen, der nativ 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 einen beliebigen Prozessor dar, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern durchführen kann, indem er (1) einen wesentlichen Abschnitt des Befehlssatzes des Intel x86-Befehlssatzkerns oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die auf einem Intel-Prozessor mit zumindest einem x86-Befehlssatzkern ausgeführt werden sollen, auf kompatible Weise ausführt oder auf andere Weise verarbeitet, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern zu erreichen. Der erste Compiler 1104 stellt einen Compiler dar, der betreibbar ist, um Binärcode des ersten Befehlssatzes 1106 (z. B. Objektcode) zu erzeugen, der, mit oder ohne zusätzliche Verknüpfungsverarbeitung, auf dem Prozessor mit zumindest einem ersten Befehlssatzkern 1116 ausgeführt werden kann. In ähnlicher Weise zeigt 11, dass das Programm in der höheren Sprache 1102 unter Verwendung eines alternativen Befehlssatz-Compilers 1108 kompiliert werden kann, um einen alternativen Befehlssatzbinärcode 1110 zu erzeugen, der nativ durch einen Prozessor ohne zumindest einen ersten Befehlssatzkern 1114 ausgeführt werden kann (z. B. einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, CA, USA, ausführen und/oder die den ARM-Befehlssatz von ARM Holdings in Sunnyvale, CA, USA, ausführen). Der Befehlskonverter 1112 wird verwendet, um den ersten Binärcode 1106 in Code zu konvertieren, der nativ durch den Prozessor ohne einen ersten Befehlssatzkern 1114 ausgeführt werden kann. Es ist nicht wahrscheinlich, dass dieser konvertierte Code dem alternativen Befehlssatzbinärcode 1110 entspricht, weil ein Befehlskonverter, der hierzu in der Lage ist, schwer herzustellen ist; der konvertierte Code führt jedoch den allgemeinen Betrieb aus und besteht aus Befehlen aus dem alternativen Befehlssatz. Somit stellt der Befehlskonverter 1112 Software, Firmware, Hardware oder eine Kombination davon dar, die es, durch Emulation, Simulation oder ein anderes Verfahren, einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen ersten Befehlssatzprozessor oder -kern aufweist, ermöglicht, den ersten Binärcode 1106 auszuführen.
  • EINRICHTUNG UND VERFAHREN FÜR BEFEHLE DER DIGITALSIGNALVERARBEITUNG
  • Digitalsignalverarbeitungs(Digital Signal Processing, DSP)-Befehle sind weiter unten beschrieben. In einer Ausführungsform sind die Schaltung und Logik zum Durchführen der DSP-Operationen in der in 4B gezeigten Ausführungsmoduleinheit 450, in den weiter oben beschriebenen verschiedenen Kernen (siehe z. B. die Kerne 602A-N in 6 und 10) und/oder in der in 5A gezeigten Vektoreinheit 510 integriert. Zum Beispiel können die verschiedenen Quell- und Zielregister SIMD-Register in den Einheit(en) der physikalischen Registerdatei 458 in 4B und/oder Vektorregister 310 in 3 sein. Die weiter unten beschriebenen Multiplikationsschaltungen, Addiererschaltungen, Akkumulationsschaltungen und anderen Schaltungen können in den Ausführungskomponenten der weiter oben beschriebenen Architekturen, einschließlich in beispielhafter und nicht einschränkender Weise der Ausführungseinheit(en) 462 in 4B, integriert werden. Es sei jedoch darauf hingewiesen, dass die zugrunde liegenden Prinzipien der Erfindung nicht auf diese spezifischen Architekturen beschränkt sind.
  • Eine Ausführungsform der Erfindung schließt eine Schaltung und/oder Logik zum Verarbeiten von Digitalsignalverarbeitungs(Digital Signal Processing, DSP)-Befehlen ein. Insbesondere umfasst eine Ausführungsform eine Multiply-Accumulate(MAC)-Architektur mit acht 16x16-Bit-Multiplizierern und zwei 64-Bit-Akkumulatoren. Die weiter unten beschriebene Befehlssatzarchitektur (Instruction Set Architecture, ISA) kann verschiedene Multiply- und MAC-Operationen bei gepackten Ganzzahl-, Festkomma- und komplexen Datentypen mit 128-Bit (8-Bit-, 16-Bit- oder 32-Bit-Datenelemente) verarbeiten. Außerdem weisen bestimmte Befehle eine direkte Unterstützung für eine hocheffiziente schnelle Fourier-Transformation (Fast Fourier Transform, FFT) und Filtern mit endlicher Impulsantwort (Finite Impulse Response, FIR) und eine Nachverarbeitung von akkumulierten Daten durch Verschiebungs-, Rundungs- und Sättigungsoperationen auf.
  • Eine Ausführungsform der neuen DSP-Befehle verwendet eine VEX.128-Präfix-basierte Opcode-Codierung, und verschiedene der 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 lockere Speicherausrichtungsanforderungen aufweisen.
  • In einer Ausführungsform unterstützen die Befehle auch eine Vielfalt von Ganzzahl- und Festkommadatentypen, einschließlich:
    1. 1) eines Q31-Datentyps für Signale, die eine Analog-Digital-Wandlung (ADC) und eine Digital-Analog-Wandlung (DAC) mit mehr als 16 Bits erfordern;
    2. 2) eines Q15-Datentyps, der in DSP-Algorithmen gebräuchlich ist;
    3. 3) eines komplexen 16-Bit-Datentyps; und
    4. 4) eines komplexen 32-Bit-Datentyps.
  • Die hierin beschriebene Befehlssatzarchitektur zielt auf ein breites Spektrum von Standard-DSP (z. B. FFT, Filtern, Musterabgleich, Korrelation, Polynomauswertung usw.) und statistischen Operationen (z. B., Mittel, gleitender Durchschnitt, Varianz usw.).
  • Zielanwendungen der Ausführungsformen der Erfindung schließen Sensor, Audio, Klassifizierungsaufgaben für Computer Vision und Spracherkennung ein. Die hierin beschriebene DSP-ISA schließt ein breites Spektrum von Befehlen ein, die auf tiefe neurale Netzwerke (Deep Neural Netzwerke, DNN), automatische Spracherkennung (Automatische Spracherkennung, ASR), Sensorfusion mit Kalman-Filtern, andere DSP-Hauptanwendungen usw. anwendbar sind. Aufgrund der Gewichtssequenz {w1 , w2 , ...wk } und der Eingabesequenz {x1 , x2 , x3 , ...xn } ist es bei vielen bildverarbeitenden Maschinenlernaufgaben erforderlich, die Ergebnissequenz { y1 , y2 , y3 , ...yn+1-k } definiert durch yi = w1xi+w2xi+1+ ................. + wk xi+k-1 zu berechnen.
  • 12 veranschaulicht einen beispielhaften Prozessor 1255, auf dem Ausführungsformen der Erfindung implementiert werden können, der eine Vielzahl von Kernen 0-N zum gleichzeitigen Ausführen einer Vielzahl von Befehls-Threads einschließt. Die veranschaulichte Ausführungsform schließt eine DSP-Befehl-Decodierschaltung/-logik 1231 in dem Decoder 1230 und eine DSP-Befehl-Ausführungsschaltung/-logik 1341 in der Ausführungseinheit 1240 ein. Diese Pipeline-Komponenten können die hierin beschriebenen Operationen in Reaktion auf das Decodieren und die Ausführung der DSP-Befehle durchführen. Während in 12 nur Details eines Einzelkerns (Kern 0) gezeigt sind, versteht es sich, dass alle der anderen Kerne von Prozessor 1255 ähnliche Komponenten einschließen können.
  • Vor der Beschreibung konkreter Details der Ausführungsformen der Erfindung wird direkt nachfolgend eine Beschreibung der verschiedenen Komponenten des beispielhaften Prozessors 1255 bereitgestellt. Die Vielzahl von Kernen 0-N können jeweils eine Speicherverwaltungseinheit 1290 zum Durchführen von Speicheroperationen (z. B. Lade-/Speicheroperationen), einen Satz von Universalregistern (General Purpose Registers, GPRs) 1205, einen Satz von Vektorregistern 1206 und einen Satz von Maskenregistern 1207 einschließen. In einer Ausführungsform werden 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 zugrunde liegenden Prinzipien der Erfindung sind jedoch nicht auf eine bestimmte Größe/einen bestimmten Typ von Vektordaten beschränkt. In einer Ausführungsform schließen die Maskenregister 1207 acht 64-Bit-Operanden-Maskenregister ein, die zum Durchführen von Bit-Maskieroperationen bei den in dem Vektorregister 1206 gespeicherten Werten verwendet werden (z. B. als hierin beschriebene Maskenregister k0-k7 implementiert). Die zugrunde liegenden Prinzipien der Erfindung sind jedoch nicht auf eine bestimmte Größe/einen bestimmten Typ von Maskenregister beschränkt.
  • Jeder Kern 0-N kann einen dedizierten Level 1 (L1)-Cache 1212 und Level 2 (L2)-Cache 1211 zum Zwischenspeichern von Befehlen und Daten gemäß einer angegebenen Cache-Verwaltungs-Richtlinie einschließen. Der L1-Cache 1212 schließt einen separaten Befehls-Cache 1220 zum Speichern von Befehlen und einen separaten Daten-Cache 1221 zum Speichern von Daten ein. Die in den verschiedenen Prozessor-Caches gespeicherten Befehle und Daten werden auf der Granularität von Cache-Leitungen verwaltet, die eine feste Größe (z. B. eine Länge von 64, 128, 512 Bytes) aufweisen können. Jeder Kern dieser beispielhaften Ausführungsform weist eine Befehlsabrufeinheit 1210 zum Abrufen von Befehlen aus dem Hauptspeicher 1200 und/oder einem gemeinsamen Level 3 (L3)-Cache 1216 auf. Die Befehlsabrufeinheit 1210 schließt verschiedene hinlänglich bekannte Komponenten ein, einschließlich eines nächsten Befehlszeigers 1203 zum Speichern der Adresse des nächsten Befehls, der aus dem Speicher 1200 (oder einem der Caches) abgerufen werden soll; eines Befehlsübersetzungspuffers (Instruction Translation Lookaside Buffer, ITLB) 1204 zum Speichern einer Karte von kürzlich verwendeten virtuell-zu-physikalisch-Befehlsadressen, um die Geschwindigkeit der Adressübersetzung zu verbessern; einer Sprungvorhersageeinheit 1202 zum spekulativen Vorhersagen von Befehlssprungadressen; und Sprungzielpuffern (Branch Target Buffers, BTBs) 1201 zum Speichern von Sprungadressen und Zieladressen.
  • Wie erwähnt, schließt eine Decodiereinheit 1230 eine DSP-Befehl-Decodierschaltung/-logik 1231 zum Decodieren der hierin beschriebenen DSP-Befehle in Mikro-Operationen oder „uops“ ein und schließt die Ausführungseinheit 1240 eine DSP-Befehl-Ausführungsschaltung/-logik 1241 zum Ausführen der DSP-Befehle ein. Eine Rückschreib-/Rückzugseinheit 1250 zieht die ausgeführten Befehle zurück und schreibt die Ergebnisse zurück.
  • Ausführungsformen zum Implementieren von Schmetterlingsoperationen für eine schnelle Fourier-Transformation (Fast Fourier Transform, FFT)
  • Eine Ausführungsform der Erfindung schließt einen Befehl ein, der eine 16 × 16 FFT-Schmetterlingsoperation unter Verwendung von komplexem Vektor/gepackten Daten durchführt. Eine komplexe Zahl wird mit einer echten Komponente und einer imaginären Komponente dargestellt. In einer Ausführungsform werden die echten und imaginären Komponenten für eine bestimmte komplexe Zahl als gepackte 16-Bit-Datenwerte in einem 128-Bit-Vektorregister (wie dem weiter unten beschriebenen xmm-Register) gespeichert. In einer bestimmten Implementierung wird der echte 16-Bit-Wert in einem benachbarten Datenelementort in einen entsprechenden imaginären 16-Bit-Wert gespeichert (d. h., wobei die echten und imaginären Komponenten eine vollständige komplexe Zahl angeben). Es sei jedoch darauf hingewiesen, dass die zugrunde liegenden Prinzipien der Erfindung nicht auf eine dieser bestimmten Datenelementgrößen oder -anordnungen beschränkt sind.
  • 13 veranschaulicht die Bit-Verteilung in einem beispielhaften Quellregister (SRCx). In einer Ausführungsform, bei der die echten und imaginären Komponenten von jeder komplexen Zahl in benachbarten Datenelementorten gespeichert werden, kann eine echte Komponente zum Beispiel als Datenelement A gespeichert werden und kann die entsprechende imaginäre Komponente als Datenelement B gespeichert werden. In dieser Anordnung speichern die Datenelemente C, E und G zusätzliche echte Komponenten bzw. speichern die Datenelemente D, F und H die zusätzlichen entsprechenden imaginären Komponenten. In anderen Ausführungsformen sind die echten und imaginären Komponenten in der vorstehenden Beschreibung umgekehrt (d. h., das Datenelement A umfasst eine imaginäre Komponente und das Datenelement B umfasst eine echte Komponente). Die folgende Beschreibung geht jedoch von einer Anordnung aus, bei der die Datenelemente A, C, E und G echt sind und die Datenelemente B, D, F und H imaginär sind.
  • 14 veranschaulicht eine beispielhafte Architektur zum Ausführen von mindestens einem Abschnitt einer FFT-Operation durch ein Durchführen eines Vector Packed Complex Multiply And Add, Scale Using An Immediate, Round And Saturate To Word-Befehls. In einer Implementierung werden diese Operationen als Reaktion auf die Ausführung eines einzelnen Befehls durchgeführt, auf den hierin durch die Mnemonik VPCR2BFRSW Bezug genommen wird. In einer Ausführungsform verwendet dieser Befehl drei Quelloperanden für gepackte Daten, die in den Registern SRC1/DEST 1460, SRC2 1401 und SRC3 1402 in 14 gespeichert sind. In der veranschaulichten Ausführungsform speichert SRC2 1401 die Datenelemente S2A-S2H, speichert das Quellregister SRC3 1402 die Datenelemente S3A-S3H und speichert SRC1/DEST 1460 die Datenelemente S1A-S1H (S2 wird als Kurzschreibweise für SRC2, S3 für SRC3 und S1 für SRC1/DEST verwendet).
  • In der veranschaulichten Ausführungsform multiplizieren acht Multiplizierer 1405 ein Datenelement in SRC2 mit einem Datenelement in SRC3 gemäß dem ausgeführten Befehl, um 8 Produkte (z. B. S3A*S2A, S3B*S2B usw.) zu erzeugen. Erste und zweite Sätze von Addierernetzwerken 1410-1411 addieren und subtrahieren die verschiedenen Produkte gemäß dem Befehl und, in den weiter unten beschriebenen Ausführungsformen, addieren/subtrahieren auch Werte von SRC1/DEST 1460.
  • Eine Akkumulationsschaltung, umfassend die Addierer 1420-1421, kann die vorstehenden Ergebnisse mit zuvor akkumulierten Ergebnissen (falls vorhanden), die in dem SRC1/DEST-Register 1460 gespeichert sind, verbinden, wenngleich bestimmte Ausführungsformen keine Akkumulationen durchführen (siehe z. B. 16 und den zugehörigen Text). Die Ergebnisse können dann durch eine Sättigungsschaltung 1440 gesättigt werden (d. h., wenn ein oder mehrere der Werte größer als der maximal unterstützte Wert sind, dann wird der maximale Wert ausgegeben) und über einen Ausgangsmultiplexer 1450 in das Zielregister (SRC1/DEST) 1460 zurückgespeichert werden.
  • Die veranschaulichte Datenverarbeitungsarchitektur kann verwendet werden, um verschiedene Befehle auszuführen, wobei die bestimmten durch die Datenverarbeitungsarchitektur durchgeführten Operationen auf dem bestimmten ausgeführten Befehl basieren. Der Rest dieser detaillierten Beschreibung konzentriert sich insbesondere auf die Ausführung eines Befehls zum Durchführen von Schmetterlingsoperationen für eine schnelle Fourier-Transformation (Fast Fourier Transform, FFT), auf die teilweise durch die Mnemonik VPCR2BFRSW Bezug genommen wird. In einer Ausführungsform umfasst die FFT-Schmetterlingsoperation eine FFT-Operation durch Dezimierung im Zeitbereich (Decimation In Time, DIT), die durch ein Ausführen von zwei 16-Bit-Radix-2-FFT-Schmetterlingsoperationen implementiert wird, wodurch komplexe 16-Bit-Ausgaben erzeugt werden.
  • Eine beispielhafte Schmetterlingsoperation ist in 15 unter Verwendung von zwei Eingabefunktionen F1[k] und F2[k] und einem „Twiddle-Faktor“ WN k veranschaulicht. Ein Twiddle-Faktor schließt, in der FFT-Terminologie, trigonometrische konstante Koeffizienten ein, die im Verlauf des Algorithmus (z. B. F2[k] in dem veranschaulichten Beispiel) mit den Daten multipliziert werden. Insbesondere multiplizieren ein oder mehrere Multiplizierer 1510 die Werte von WN k mit den Werten von F2[k] und addieren/subtrahieren Addierer 1520-1521 die Ergebnisse der Werte von F1[k], um die Ergebnisse X[k] und X[k + N/2] wie folgt zu erzeugen: X [ k ] = F 1 [ k ] + W N k × F 2 [ k ]
    Figure DE102018006736A1_0001
    X [ k + N 2 ] = F 1 [ k ] W N k × F 2 [ k ]
    Figure DE102018006736A1_0002
    wobei W N k n = e j 2 π k n N = cos ( 2 π k n N ) j  sin ( 2 π k n N ) , k = 0, , N 1
    Figure DE102018006736A1_0003
  • Wie weiter unten beschrieben, umfassen die Multiplizierer 1510 in einer Ausführungsform die Multiplizierer 1405 in 14 und umfassen die Addierer 1520-1521 die Addierernetzwerke 1410-1411. 16 stellt eine andere Ansicht der Architektur von 14 mit zusätzlichen Details bereit, die für eine Ausführung einer FFT-Operation durch Dezimierung im Zeitbereich (Decimation In Time, DIT) relevant sind (z. B. Datenleitungen 1601-1602, um Daten von dem SRC1/DEST-Register 1460 zu den Addierernetzwerken 1410 bzw. 1411 zu liefern).
  • In einer Ausführungsform führt die Ausführungsschaltung zunächst ein Vector Packed Complex Multiply von ausgewählten Komponenten von F2[k], {F2[k+3],F2[k+2], F2[k+1],F2[k]} mit ausgewählten Komponenten des Twiddle-Faktors {WN[k+3], WN[k+2], WN[k+1], WN[k]} durch. In der beschriebenen Implementierung werden die Komponenten {F2[k+3],F2[k+2], F2[k+1],F2[k]} in gepackten Datenelementorten des SRC2-Registers 1401 gespeichert (teilweise als xmm2 identifiziert) und werden die Twiddle-Faktor-Komponenten {WN[k+3], WN[k+2], WN[k+1], WN[k]} in gepackten Datenelementorten in dem SRC3-Register 1402 gespeichert (teilweise als xmm3 identifiziert). Jede dieser Komponenten kann ein komplexer Wert mit einer echten Komponente und einer imaginären Komponente sein, die in benachbarten Datenelementorten gespeichert sind. Zum Beispiel, wie weiter oben angegeben, können die Datenelemente A, C, E und G die echten Komponenten speichern bzw. können die Datenelemente B, D, F und H entsprechende imaginäre Komponenten von jeder komplexen Zahl speichern. Die echten und komplexen Datenelemente können jedoch auf mehrere verschiedene Arten gespeichert werden, während sie weiterhin die zugrunde liegenden Prinzipien der Erfindung erfüllen.
  • In einer Ausführungsform gibt ein unmittelbares Element des Befehls den bestimmten Satz von gepackten Datenelementen an, der für eine aktuelle Multiplikationsrunde verwendet werden soll. Zum Beispiel werden in einer Ausführungsform niedrige/hohe Doppelworte (Dwords) von jedem der zwei Quadwords (Qwords) in jedem Quellregister durch imm8[2] gemäß der nachfolgenden Tabelle A ausgewählt. TABELLE A
    Imm8[2] SRC2 SRC3
    0 [31:0]/[95:64] [31:0]/[95:64]
    1 [63:32]/[127:96] [63:32]/[127:96]
  • Wenn somit imm8[2] gleich 0 ist, werden die Datenelemente A-B und E-F von jedem Quellregister 1401-1402 in den Multiplikationsoperationen verwendet. Wenn imm8[2] gleich 1 ist, werden die Datenelemente C-D und G-H für die Multiplikation verwendet.
  • In einer Ausführungsform werden die von den vorstehenden Multiplikationen erzeugten komplexen Zahlen als eine Eingabe in die Addierernetzwerke 1410-1411 bereitgestellt, die sie von den gepackten komplexen Datenelementen {F1[k+3],F1[k+2], F1[k+1], F1[k]}, die in SRC1/DEST 1460 gespeichert sind, addieren/subtrahieren. In einer Ausführungsform steuert der Wert des unmittelbaren Elements imm8[2] auch die bestimmten gepackten Datenelemente, die von SRC1/DEST gemäß der Tabelle A ausgewählt werden. Folglich, wenn imm8[2] gleich 0 ist, werden die Datenelemente A-B und E-F ausgewählt (z. B. entsprechend F1[k] bzw. F1[k+2]), und wenn imm8[2] gleich 1 ist, werden die Datenelemente C-D und G-H ausgewählt (z. B. entsprechend F1[k+1] bzw. F1[k+3]).
  • In einer Ausführungsform werden die Ergebnisse der Additionen/Subtraktionen skaliert oder um den in imm8[1:0] angegebenen Wert arithmetisch nach rechts verschoben. Rundung und Sättigung können in einer Ausführungsform auch durchgeführt werden, um 16 Bits von den Zwischenergebnissen zu extrahieren, bevor die komplexen Ausgaben in 128 Bits von SRC1/DEST 1460 geschrieben werden. In einer Ausführungsform umfassen die Werte {X[k+2+N/2], X[k+2], X[k+N/2], X[k]} oder {X[k+3+N/2], X[k+3], X[k+1+N/2], X[k+1]}, je nach dem Wert von imm8[2].
  • Der folgende Satz von Operationen gibt die Bit-Breiten für die hierin beschriebenen Operationen an: ( 16 + 16 i ) + ( 16 + 16 i ) × ( 16 + 16 i ) = ( 16 + 16 i )
    Figure DE102018006736A1_0004
    ( 16 + 16 i ) ( 16 + 16 i ) × ( 16 + 16 i ) = ( 16 + 16 i )
    Figure DE102018006736A1_0005
    ( 16 + 16 i ) + ( 16 + 16 i ) × ( 16 + 16 i ) = ( 16 + 16 i )
    Figure DE102018006736A1_0006
    ( 16 + 16 i ) ( 16 + 16 i ) × ( 16 + 16 i ) = ( 16 + 16 i )
    Figure DE102018006736A1_0007
    Im obigen Beispiel umfasst (16+16i)x(16+16i) die Multiplikation der komplexen Zahlen des niedrigen/hohen Dword von allen Qwords von SRC2 (z. B. xmm2) in einer Ausführungsform und den in SRC3 gespeicherten Twiddle-Faktor (z. B. xmm3). Die resultierenden Produkte werden dann addiert oder von den niedrigen/hohen Dwords von jedem der Qwords von SRC1/DEST (z. B. xmm1) subtrahiert. In der vorstehenden Notation sind die Werte die Anzahl von Bits, die verwendet werden, um jede komplexe Zahl darzustellen (z. B. bedeutet 16+16i eine komplexe Zahl, die durch eine echte 16-Bit-Komponente und eine imaginäre 16-Bit-Komponente dargestellt wird). Es sei jedoch darauf hingewiesen, dass die zugrunde liegenden Prinzipien der Erfindung nicht auf die vorstehenden Bit-Breiten beschränkt sind.
  • Wie erwähnt, kann eine Skalierung gemäß imm8[1:0] wie in der nachfolgenden Tabelle B angegeben durchgeführt werden. TABELLE B
    Imm8[1] Imm8[0] Beschreibung
    0 0 Keine Verschiebung
    0 1 Verschiebung nach rechts um 1 Bit
    1 0 Verschiebung nach rechts um 2 Bits
    1 1 Reserviert (keine Verschiebung)
    Auf eine Skalierung können Rundungs- und Sättigungsoperationen folgen (wenn benötigt).
  • Der folgende Code gibt die einzelnen Operationen an, die in einer Ausführungsform durch die in 16 gezeigte Architektur durchgeführt werden. Eine detaillierte Beschreibung wird nach dem folgenden Code bereitgestellt: SOFFSET = imm8 [ 2 ] * 32 ;
    Figure DE102018006736A1_0008
    TEMP0 [ 31 : 0 ] ( SRC2 [ ( 15 + SOFFSET ) : SOFFSET ] * SRC3 [ ( 15 + SOFFSET ) : SOFFSET ] ) ; ( * Re* )
    Figure DE102018006736A1_0009
    TEMP1 [ 31 : 0 ] ( SRC2 [ ( 31 + SOFFSET ) : ( 16 + SOFFSET ) ] * SRC3 [ ( 31 + SOFFSET ) : ( 16 + SOFFSET ) ] ) ; ( * Re* )
    Figure DE102018006736A1_0010
    TEMP2 [ 31 : 0 ] ( SRC2 [ ( 15 + SOFFSET ) : SOFFSET ] * SRC3 [ ( 31 + SOFFSET ) : ( 16 + SOFFSET ) ] ) ; ( * Im* )
    Figure DE102018006736A1_0011
    TEMP3 [ 31 : 0 ] ( SRC2 [ ( 31 + SOFFSET ) : ( 16 + SOFFSET ) ] * SRC3 [ ( 15 + SOFFSET ) : SOFFSET ] ) ; ( * Im* )
    Figure DE102018006736A1_0012
    TEMP4 [ 31 : 0 ] ( SRC2 [ ( 79 + SOFFSET ) : ( 64 + SOFFSET ) ] * SRC3 [ ( 79 + SOFFSET ) : ( 64 + SOFFSET ) ] ) ; ( * Re* )
    Figure DE102018006736A1_0013
    TEMP5 [ 31 : 0 ] ( SRC2 [ ( 95 + SOFFSET ) : ( 80 + SOFFSET ) ] * SRC3 [ ( 95 + SOFFSET ) : ( 80 + SOFFSET ) ] ) ; ( * Re* )
    Figure DE102018006736A1_0014
    TEMP6 [ 31 : 0 ] ( SRC2 [ ( 79 + SOFFSET ) : ( 64 + SOFFSET ) ] * SRC3 [ ( 95 + SOFFSET ) : ( 80 + SOFFSET ) ] ; ( * Im* )
    Figure DE102018006736A1_0015
    TEMP7 [ 31 : 0 ] ( SRC2 [ ( 95 + SOFFSET ) : ( 80 + SOFFSET ) ] * SRC3 [ ( 79 + SOFFSET ) : ( 64 + SOFFSET ) ] ; ( * Im* )
    Figure DE102018006736A1_0016
    (* Vorzeichenerweitern und Subtrahieren der nachfolgenden TEMP-Werte in allen Gleichungen, um einen 33-Bit-Wert zu bilden. SRC2 ist vorzeichenerweitert, um 33 Bits zu sein. Addieren von 33-Bit-Werten ergibt einen 33-Bit-Wert und Ignorieren des Übertragsbits *) TEMP8 [ 32 : 0 ] ( { SRC1 [ ( 15 + SOFFSET ) : SOFFSET ] ,15 ' b0 } + ( TEMP0 TEMP1 ) ) ; ( * Re* )
    Figure DE102018006736A1_0017
    TEMP9 [ 32 : 0 ] ( { SRC1 [ ( 31 + SOFFSET ) : ( 16 + SOFFSET ) ] ,15 ' b0 } + ( TEMP2 TEMP3 ) ) ; ( * Im* )
    Figure DE102018006736A1_0018
    TEMP10 [ 32 : 0 ] ( { SRC1 [ ( 15 + SOFFSET ) : SOFFSET ] ,15 ' b0 } ( TEMP0 TEMP1 ) ) ; ( * Re* )
    Figure DE102018006736A1_0019
    TEMP11 [ 32 : 0 ] ( { SRC1 [ ( 31 + SOFFSET ) : ( 16 + SOFFSET ) ] ,15 ' b0 } ( TEMP2 TEMP3 ) ) ; ( * Im* )
    Figure DE102018006736A1_0020
    TEMP12 [ 32 : 0 ] ( { SRC1 [ ( 79 + SOFFSET ) : ( 64 + SOFFSET ) ] ,15 ' b0 } + ( TEMP4 TEMP5 ) ) ; ( * Re* )
    Figure DE102018006736A1_0021
    TEMP13 [ 32 : 0 ] ( { SRC1 [ ( 95 + SOFFSET ) : ( 80 + SOFFSET ) ] ,15 ' b0 } + ( TEMP6 TEMP7 ) ) ; ( * Im* )
    Figure DE102018006736A1_0022
    TEMP14 [ 32 : 0 ] ( { SRC1 [ ( 79 + SOFFSET ) : ( 64 + SOFFSET ) ] ,15 ' b0 } ( TEMP4 TEMP5 ) ) ; ( * Re* )
    Figure DE102018006736A1_0023
    TEMP15 [ 32 : 0 ] ( { SRC1 [ ( 95 + SOFFSET ) : ( 80 + SOFFSET ) ] ,15 ' b0 } ( TEMP6 TEMP7 ) ) ; ( * Im* )
    Figure DE102018006736A1_0024
    DEST [ 15 : 0 ] ScaleRoundAndSaturateToSignedWord ( TEMP8 [ 32 : 0 ] , MXCSR ,DEST [ 15 : 0 ] , imm8 ) ;
    Figure DE102018006736A1_0025
    DEST [ 31 : 16 ] ScaleRoundAndSaturateToSignedWord ( TEMP9 [ 32 : 0 ] , MXCSR ,DEST [ 31 : 16 ] , imm8 ) ;
    Figure DE102018006736A1_0026
    DEST [ 47 : 32 ] ScaleRoundAndSaturateToSignedWord ( TEMP10 [ 32 : 0 ] , MXCSR ,DEST [ 47 : 32 ] , imm8 ) ;
    Figure DE102018006736A1_0027
    DEST [ 63 : 48 ] ScaleRoundAndSaturateToSignedWord ( TEMP11 [ 32 : 0 ] , MXCSR ,DEST [ 63 : 48 ] , imm8 ) ;
    Figure DE102018006736A1_0028
    DEST [ 79 : 64 ] ScaleRoundAndSaturateToSignedWord ( TEMP12 [ 32 : 0 ] , MXCSR ,DEST [ 79 : 64 ] , imm8 ) ;
    Figure DE102018006736A1_0029
    DEST [ 95 : 80 ] ScaleRoundAndSaturateToSignedWord ( TEMP13 [ 32 : 0 ] , MXCSR ,DEST [ 95 : 80 ] , imm8 ) ;
    Figure DE102018006736A1_0030
    DEST [ 111 : 96 ] ScaleRoundAndSaturateToSignedWord ( TEMP14 [ 32 : 0 ] , MXCSR ,DEST [ 111 : 96 ] , imm8 ) ;
    Figure DE102018006736A1_0031
    DEST [ 127 : 112 ] ScaleRoundAndSaturateToSignedWord ( TEMP15 [ 32 : 0 ] , MXCSR ,DEST [ 127 : 112 ] , imm8 ) ;
    Figure DE102018006736A1_0032
  • In der ersten Zeile des vorstehenden Codes basiert der Versatzwert, SOFFSET, auf dem Wert von imm8[2]. Insbesondere ist SOFFSET entweder 0 (für imm8[2] = 0) oder 32 (für imm8[2] = 1). Somit gibt SOFFSET vor, ob die oberen oder unteren Dwords von jedem Qword von SRC2 und SRC3 ausgewählt werden sollen.
  • Der nächste Satz von Operationen aktualisiert temporäre Speicherorte TEMP0-3[31:0], die temporäre Register oder Speicherorte sein können. Entweder das niedrige oder das hohe Dword in dem niedrigen Quadword von SRC2 wird mit dem niedrigen oder hohen Dword des niedrigen Quadword von SRC3 multipliziert. Das niedrige Dword wird ausgewählt, wenn imm8[2] = 0, und das hohe Dword wird ausgewählt, wenn imm8[2] = 1. Beispielsweise, in 14, wenn imm8[2] = 0, dann wird die in den gepackten Datenelementen A und B gespeicherte komplexe Zahl aus SRC2 und SRC3 ausgewählt. In einer Ausführungsform ist A die echte Komponente und ist B die imaginäre Komponente. Die Multiplikationsoperationen sind dann S2A*S3A (in TEMP0 gespeicherter echter Wert), S2B*S3B (in TEMP1 gespeicherter echter Wert), S2A*S3B (in TEMP2 gespeicherter imaginärer Wert) und S2B*S3A (in TEMP3 gespeicherter imaginärer Wert).
  • Der nächste Satz von Operationen aktualisiert temporäre Speicherorte TEMP4-7[31:0], die entweder das niedrige oder das hohe Dword in dem oberen Quadword von SRC2 mit dem niedrigen oder dem hohen Dword des oberen Quadword von SRC3 multiplizieren. Auch hier wird das niedrige Dword ausgewählt, wenn imm8[2] = 0, und wird das hohe Dword ausgewählt, wenn imm8[2] = 1. Beispielsweise, in 14, wenn imm8[2] = 0, dann wird die in den gepackten Datenelementen E und F gespeicherte komplexe Zahl aus SRC2 und SRC3 ausgewählt, wobei E die echte Komponente ist und F die imaginäre Komponente ist. Die Multiplikationsoperationen sind dann S2E*S3E (in TEMP4 gespeicherter echter Wert), S2F*S3F (in TEMP5 gespeicherter echter Wert), S2E*S3F (in TEMP6 gespeicherter imaginärer Wert) und S2F*S3E (in TEMP7 gespeicherter imaginärer Wert).
  • Der nächste Satz von Operationen verwendet die Produkte in TEMP0-3 zum Aktualisieren der temporären Speicherorte TEMP8[32:0] - TEMP11 [32:0]. Insbesondere addiert und subtrahiert dieser Satz von Operationen verschiedene Sätze von Werten unter Verwendung der Produkte in TEMP0, TEMP1, TEMP2 und TEMP3 (z. B. TEMP0-TEMP1 und TEMP2+TEMP3). In einer Ausführungsform werden diese Werte auf 33 Bits vorzeichenerweitert und die Ergebnisse von den unteren oder oberen Dwords von dem unteren Quadword von SRC1 subtrahiert oder zu diesen addiert (siehe Code für konkrete Details). Wie angegeben, werden die SRC1-Werte in einer Ausführungsform zunächst vorzeichenerweitert und mit Nullen gepackt (wie durch 15'b0 angegeben), um 33-Bit-Werte zu erzeugen, bevor die Addition/Subtraktion mit den Ergebnissen der vorstehenden Operationen mit TEMP0-3-Werten erfolgt. Das Addieren/Subtrahieren von 33-Bit-Werten erzeugt einen 33-Bit-Wert, von denen einer in jedem von TEMP8, TEMP9, TEMP10 und TEMP11 gespeichert wird, wobei das Übertragsbit ignoriert wird.
  • Der nächste Satz von Operationen aktualisiert TEMP12[32:0] - TEMP15[32:0] im Wesentlichen in der gleichen Weise wie die vorstehenden Operationen mit TEMP8-TEMP11, jedoch unter Verwendung von verschiedenen Sätzen von Werten aus TEMP4, TEMP5, TEMP6 und TEMP7. In einer Ausführungsform werden diese Werte auf 33 Bits vorzeichenerweitert. Die Ergebnisse der TEMP4-TEMP5- und TEMP6+TEMP7-Operationen werden dann von den unteren oder oberen Dwords von dem oberen Quadword von SRC1 subtrahiert oder zu diesen addiert (siehe Code für konkrete Details). Wie angegeben, werden die SRC1-Werte in einer Ausführungsform zunächst vorzeichenerweitert und mit Nullen gepackt, um 33-Bit-Werte zu erzeugen, bevor die Addition/Subtraktion mit den Ergebnissen der vorstehenden Operationen mit TEMP4-7-Werten erfolgt. Das Addieren/Subtrahieren von 33-Bit-Werten erzeugt einen 33-Bit-Wert, von denen einer in jedem von TEMP12, TEMP13, TEMP14 und TEMP15 gespeichert wird, wobei das Übertragsbit ignoriert wird.
  • Zusätzliche Operationen können dann durchgeführt werden, um die in TEMP8-TEMP15 gespeicherten 8 temporären Ergebnisse auf vorzeichenbehaftete Wörter zu skalieren, zu runden und/oder zu sättigen. In einer Ausführungsform werden die Werte auf vorzeichenbehaftete Wörter gesättigt, die in vorgegebenen 16-Bit-Datenelementpositionen in dem Ziel (DEST/SRC1) gespeichert werden. Wie angegeben, können alle diese Operationen gemäß Steuerdaten, die in dem MXCSR-Steuer- und - Statusregister vorgegeben sind, und dem Wert des unmittelbaren Elements imm8 durchgeführt werden. Jedes Dword des Zielregisters (DEST) wird dann mit dem TEMP8-TEMP15 nach einer Skalierung, Rundung und/oder Sättigung aktualisiert. Zum Beispiel wird der Wert in TEMP8 nach einer Skalierung, Rundung und/oder Sättigung (wenn benötigt) in dem ersten Datenelementort in dem Zielregister DEST[15:0] gespeichert; wird TEMP9 in dem zweiten Datenelementort in dem Zielregister DEST[31:16] gespeichert; wird TEMP10 in dem dritten Datenelementort in dem Zielregister DEST[47:32] gespeichert und so weiter bis zu dem Wert in TEMP15, der in dem achten Datenelementort DEST[127:112] gespeichert wird.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 17 veranschaulicht. Das Verfahren kann im Kontext der weiter oben beschriebenen Systemarchitekturen implementiert werden, ist jedoch nicht auf eine bestimmte System- oder Prozessorarchitektur beschränkt.
  • Bei 1701 wird ein erster Befehl abgerufen, der Bereiche für einen Opcode und erste, zweite und dritte Quelloperanden für gepackte Daten, die komplexe Zahlen mit echten und imaginären Werten darstellen, und einen Zieloperanden für gepackte Daten aufweist. Bei 1702 wird der erste Befehl decodiert (z. B. in eine Vielzahl von Mikrooperationen). Bei 1703 werden die echten und imaginären Werte in Verbindung mit den ersten, zweiten und dritten Quelloperanden als gepackte Datenelemente in den ersten, zweiten und dritten Quellregistern (z. B. xmm1, xmm2 und xmm3) gespeichert und wird der erste Befehl zur Ausführung geplant. Wie erwähnt, werden die Quelloperanden in einer Ausführungsform in gepackten 128-Bit-Datenregistern gespeichert, die gepackte 16-Bit-Datenelemente speichern, wobei jedes gepackte Datenelement einen echten oder einen imaginären Wert umfasst.
  • Bei 1704 wird das unmittelbare Element des ersten Befehls ausgewertet, um Sätze von gepackten Datenelementen aus den ersten, zweiten und dritten Quellregistern zu bestimmen, die zur Befehlsausführung verwendet werden sollen. Wenn in den weiter oben beschriebenen Ausführungsformen zum Beispiel imm8[2] gleich 0 ist, dann wird ein erster Teilsatz von gepackten Datenelementen aus den drei Quellregistern ausgewählt, und wenn imm8[2] gleich 1 ist, dann wird ein zweiter Teilsatz der gepackten Datenelemente ausgewählt.
  • Bei 1705 wird der decodierte erste Befehl ausgeführt, um erste gepackte Datenelemente aus dem ersten Quellregister mit zweiten gepackten Datenelementen aus dem zweiten Quellregister gemäß dem unmittelbaren Element zu multiplizieren. Wie erwähnt, resultiert dies in einer Vielzahl von verschiedenen echten und imaginären Produkten, die bei 1706 in einem ersten Satz von temporären Speicherorten (z. B. temporären Registern oder Speicherorten) gespeichert werden.
  • Bei 1707 werden die dritten gepackten Datenelemente aus dem dritten Quellregister gemäß dem unmittelbaren Element (z. B. gemäß imm8[2] in den vorstehenden Ausführungsformen) gelesen. Bei 1708 werden alle dritten gepackten Datenelemente addiert oder von der Vielzahl von echten/imaginären Produkten subtrahiert, die bei der Operation 1705 erzeugt werden, um erste Ergebnisse zu erzeugen, die in einem zweiten Satz von temporären Speicherorten gespeichert werden.
  • Bei 1709 werden Skalierungs-, Rundungs- und/oder Sättigungsoperationen auf den ersten Ergebnissen von dem zweiten Satz von temporären Speicherorten durchgeführt, um gepackte Enddatenelemente zu erzeugen. Bei 1710 werden die gepackten Enddatenelemente in vorgegebene Datenelementpositionen im Zielregister geschrieben. In den weiter oben beschriebenen Ausführungsformen ist das Zielregister dasselbe Register wie das dritte Quellregister.
  • In einigen weiter oben beschriebenen Ausführungsformen ist der erste Befehl ein VPCR2BFRSW-Befehl, der ausgeführt wird, um eine 16×16 FFT-Schmetterlingsoperation durchzuführen. Die zugrunde liegenden Prinzipien der Erfindung sind jedoch nicht auf diese bestimmte Operation beschränkt. Während die weiter oben beschriebenen echten und imaginären Werte eine Länge von 16 Bits aufweisen, können die zugrunde liegenden Prinzipien der Erfindung darüber hinaus unter Verwendung von Datenelementen einer beliebigen Größe implementiert werden. Zum Beispiel können die echten und imaginären Komponenten 8 Bits, 32 Bits oder 64 Bits sein, während sie weiterhin den zugrunde liegenden Prinzipien der Erfindung entsprechen.
  • In der vorstehenden Beschreibung wurden die Ausführungsformen der Erfindung Bezug nehmend auf spezifische beispielhafte Ausführungsformen davon beschrieben. Es ist jedoch offensichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne vom umfassenderen Wesen und Umfang der Erfindung wie in den beigefügten Ansprüchen dargelegt abzuweichen. Die Beschreibung und die Zeichnungen sind entsprechend als veranschaulichend und nicht als einschränkend zu betrachten.
  • Ausführungsformen der Erfindung können verschieden Schritte einschließen, die weiter oben beschrieben wurden. Die Schritte können in maschinenausführbaren Befehlen ausgeführt sein, die verwendet werden können, um einen Universal- oder Spezialprozessor zum Durchführen der Schritte zu veranlassen. Alternativ dazu können diese Schritte durch spezifische Hardwarekomponenten, die festverdrahtete Logik zum Durchführen der Schritte enthalten, oder durch eine beliebige Kombination programmierter Computerkomponenten und angepasster Hardwarekomponenten durchgeführt werden.
  • Wie hierin beschrieben, können sich Befehle auf spezifische Konfigurationen von Hardware, wie anwendungsspezifische integrierte Schaltungen (Application Specific Integrated Circuits, ASICs), die dazu konfiguriert sind, bestimmte Operationen durchzuführen, oder 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 implementiert 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; Speicher mit wahlfreiem Zugriff; schreibgeschützter Speicher; Flash-Speicher-Vorrichtungen; Phasenwechselspeicher) und transitorische computermaschinenlesbare 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 Bus-Controller 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 implementiert 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, umfassend: einen Decoder zum Decodieren eines ersten Befehls zum Erzeugen eines decodierten Befehls; ein erstes Quellregister zum Speichern einer ersten Vielzahl von gepackten echten und imaginären Datenelementen; ein zweites Quellregister zum Speichern einer zweiten Vielzahl von gepackten echten und imaginären Datenelementen; ein drittes Quellregister zum Speichern einer dritten Vielzahl von gepackten echten und imaginären Datenelementen; eine Ausführungsschaltung zum Ausführen des decodierten Befehls, die Ausführungsschaltung umfassend: eine Multipliziererschaltung zum Auswählen von echten und imaginären Datenelementen in den ersten und zweiten Quellregistern, um basierend auf einem unmittelbaren Element des ersten Befehls zu multiplizieren, wobei die Multipliziererschaltung erste gepackte Datenelemente aus dem ersten Quellregister mit zweiten gepackten Datenelementen aus dem zweiten Quellregister gemäß dem unmittelbaren Element multipliziert, um eine Vielzahl von echten und imaginären Produkten zu erzeugen, eine Addiererschaltung zum Auswählen von echten und imaginären Datenelementen in dem dritten Quellregister basierend auf dem unmittelbaren Element, wobei die Addiererschaltung ausgewählte echte und imaginäre Werte von den echten und imaginären Produkten addiert und subtrahiert, um erste echte und imaginäre Ergebnisse zu erzeugen; eine Skalierungs-, Rundungs- und/oder Sättigungsschaltung zum Skalieren, Runden und/oder Sättigen der ersten echten und imaginären Ergebnisse, um echte und imaginäre Enddatenelemente zu erzeugen; und ein Zielregister zum Speichern der echten und imaginären Enddatenelemente in vorgegebenen Datenelementpositionen.
  2. Prozessor nach Anspruch 1, wobei die echten und imaginären Werte als 16-Bit-Datenelemente in den ersten, zweiten und dritten Quellregistern gespeichert werden, wobei jeder imaginäre Wert in einem Datenelementort gespeichert wird, der zu einem Datenelementort seines entsprechenden echten Werts benachbart ist, wobei jede Kombination eines echten und imaginären Werts eine komplexe Zahl darstellt.
  3. Prozessor nach Anspruch 1 oder 2, wobei die ersten, zweiten und dritten Quellregister gepackte 128-Bit-Datenregister umfassen, die mit den Datenelementpositionen A, B, C, D, E, F, G und H konfigurierbar sind, die die Datenelemente A, B, C, D, E, F, G bzw. H speichern, und wobei die Datenelemente A, C, E und G echte Datenelemente sind und die Datenelemente B, D, F und H entsprechende imaginäre Datenelemente sind.
  4. Prozessor nach Anspruch 3, wobei in Reaktion auf ein Erkennen, dass das unmittelbare Element einen ersten Wert aufweist, die Multipliziererschaltung die Multiplikationen S1A*S2A, S1B*S2B, S1A*S2B, S1B*S2A, S1E*S2E, S1F*S2F, S1E*S2F, S1F*S2E durchführen soll, um die Vielzahl von echten und imaginären Produkten zu erzeugen, wobei S1 das erste Quellregister identifiziert, S2 das zweite Quellregister identifiziert und A-H die gepackten Datenelemente in den Datenelementpositionen A-H in den ersten und zweiten Quellregistern identifizieren.
  5. Prozessor nach Anspruch 4, wobei die Addiererschaltung die folgenden Additions-/Subtraktionsoperationen durchführen soll: S3A + ( S1A*S2A + S1B*S2B ) ,
    Figure DE102018006736A1_0033
    S3B + ( S1A*S2B S1B*S2A ) ,
    Figure DE102018006736A1_0034
    S3A ( S1A*S2A S1B*S2B ) ,
    Figure DE102018006736A1_0035
    S3B ( S1A*S2B + S1B*S2A ) ,
    Figure DE102018006736A1_0036
    S3E + ( S1E*S2E S1F*S2F ) ,
    Figure DE102018006736A1_0037
    S3F + ( S1E*S2F + S1F*S2E ) ,
    Figure DE102018006736A1_0038
    S3E + ( S1E*S2E S1F*S2F ) ,
    Figure DE102018006736A1_0039
    S3F + ( S1E*S2F + S1F*S2E ) .
    Figure DE102018006736A1_0040
  6. Prozessor nach Anspruch 4, wobei in Reaktion auf ein Erkennen, dass das unmittelbare Element einen zweiten Wert aufweist, die Multipliziererschaltung die Multiplikationen S1C*S2C, S1D*S2D, S1C*S2D, S1D*S2C, S1G*S2G, S1H*S2H, S1G*S2H, S1H*S2G durchführen soll, um die Vielzahl von echten und imaginären Produkten zu erzeugen, wobei S1 das erste Quellregister identifiziert, S2 das zweite Quellregister identifiziert und A-H die gepackten Datenelemente in den Datenelementpositionen A-H in den ersten und zweiten Quellregistern identifizieren.
  7. Prozessor nach Anspruch 5, wobei die Werte S3A, S3B, S3E, und S3F auf 33 Bits vorzeichenerweitert werden, bevor die Additions- und Subtraktionsoperationen durchgeführt werden.
  8. Prozessor nach Anspruch 1 oder 7, wobei das Zielregister und das dritte Quellregister dasselbe physikalische Register sind.
  9. Prozessor nach Anspruch 1 oder 7, wobei die Operationen des Multiplizierens, Addierens/Subtrahierens und Skalierens, Rundens und/oder Sättigens unter Verwendung der echten und imaginären Datenelemente durchgeführt werden, um eine schnelle Fourier-Transformation zu implementieren.
  10. Prozessor nach Anspruch 1 oder 9, wobei die erste Vielzahl von gepackten echten und imaginären Datenelementen Daten von einer ersten Eingabefunktion umfasst, die zweite Vielzahl von gepackten echten und imaginären Datenelementen Daten von einem Twiddle-Faktor umfasst und die dritte Vielzahl von gepackten echten und imaginären Datenelementen Daten von einer zweiten Eingabefunktion umfasst.
  11. Verfahren, umfassend: Decodieren eines ersten Befehls zum Erzeugen eines decodierten Befehls; Speichern einer ersten Vielzahl von gepackten echten und imaginären Datenelementen in einem ersten Quellregister; Speichern einer zweiten Vielzahl von gepackten echten und imaginären Datenelementen in einem zweiten Quellregister; Speichern einer dritten Vielzahl von gepackten echten und imaginären Datenelementen in einem dritten Quellregister; Auswählen von echten und imaginären Datenelementen in dem ersten und zweiten Quellregister, um basierend auf einem unmittelbaren Element des ersten Befehls zu multiplizieren, Multiplizieren von ersten gepackten Datenelementen aus dem ersten Quellregister mit zweiten gepackten Datenelementen aus dem zweiten Quellregister gemäß dem unmittelbaren Element, um eine Vielzahl von echten und imaginären Produkten zu erzeugen, Auswählen von echten und imaginären Datenelementen in dem dritten Quellregister basierend auf dem unmittelbaren Element, Addieren und Subtrahieren von ausgewählten echten und imaginären Werten von den echten und imaginären Produkten, um erste echte und imaginäre Ergebnisse zu erzeugen; Skalieren, Runden und/oder Sättigen der ersten echten und imaginären Ergebnisse, um echte und imaginäre Enddatenelemente zu erzeugen; und Speichern der echten und imaginären Enddatenelemente in vorgegebenen Datenelementpositionen eines Zielregisters.
  12. Verfahren nach Anspruch 11, wobei die echten und imaginären Werte als 16-Bit-Datenelemente in den ersten, zweiten und dritten Quellregistern gespeichert werden, wobei jeder imaginäre Wert in einem Datenelementort gespeichert wird, der zu einem Datenelementort seines entsprechenden echten Werts benachbart ist, wobei jede Kombination eines echten und imaginären Werts eine komplexe Zahl darstellt.
  13. Verfahren nach Anspruch 11 oder 12, wobei die ersten, zweiten und dritten Quellregister gepackte 128-Bit-Datenregister umfassen, die mit den Datenelementpositionen A, B, C, D, E, F, G und H konfigurierbar sind, die die Datenelemente A, B, C, D, E, F, G bzw. H speichern, und wobei die Datenelemente A, C, E und G echte Datenelemente sind und die Datenelemente B, D, F und H entsprechende imaginäre Datenelemente sind.
  14. Verfahren nach Anspruch 13, wobei in Reaktion auf ein Erkennen, dass das unmittelbare Element einen ersten Wert aufweist, die Multiplikationen S1A*S2A, S1B*S2B, S1A*S2B, S1B*S2A, S1E*S2E, S1F*S2F, S1E*S2F, S1F*S2E durchgeführt werden, um die Vielzahl von echten und imaginären Produkten zu erzeugen, wobei S1 das erste Quellregister identifiziert, S2 das zweite Quellregister identifiziert und A-H die gepackten Datenelemente in den Datenelementpositionen A-H in den ersten und zweiten Quellregistern identifizieren.
  15. Verfahren nach Anspruch 14, wobei das Addieren und Subtrahieren die folgenden Operationen umfasst: S3A + ( S1A*S2A S1B*S2B ) ,
    Figure DE102018006736A1_0041
    S3B + ( S1A*S2B + S1B*S2A ) ,
    Figure DE102018006736A1_0042
    S3A ( S1A*S2A S1B*S2B ) ,
    Figure DE102018006736A1_0043
    S3B ( S1A*S2B + S1B*S2A ) ,
    Figure DE102018006736A1_0044
    S3E + ( S1E*S2E S1F*S2F ) ,
    Figure DE102018006736A1_0045
    S3F + ( S1E*S2F + S1F*S2E ) ,
    Figure DE102018006736A1_0046
    S3E + ( S1E*S2E S1F*S2F ) ,
    Figure DE102018006736A1_0047
    S3F + ( S1E*S2F + S1F*S2E ) .
    Figure DE102018006736A1_0048
  16. Verfahren nach Anspruch 14, wobei in Reaktion auf ein Erkennen, dass das unmittelbare Element einen zweiten Wert aufweist, die Multiplikationen S1C*S2C, S1D*S2D, S1C*S2D, S1D*S2C, S1G*S2G, S1H*S2H, S1G*S2H, S1H*S2G durchgeführt werden, um die Vielzahl von echten und imaginären Produkten zu erzeugen, wobei S1 das erste Quellregister identifiziert, S2 das zweite Quellregister identifiziert und A-H die gepackten Datenelemente in den Datenelementpositionen A-H in den ersten und zweiten Quellregistern identifizieren.
  17. Verfahren nach Anspruch 15, wobei die Werte S3A, S3B, S3E, und S3F auf 33 Bits vorzeichenerweitert werden, bevor die Additions- und Subtraktionsoperationen durchgeführt werden.
  18. Verfahren nach Anspruch 11 oder 17, wobei das Zielregister und das dritte Quellregister dasselbe physikalische Register sind.
  19. Verfahren nach Anspruch 11 oder 17, wobei die Operationen des Multiplizierens, Addierens/Subtrahierens und Skalierens, Rundens und/oder Sättigens unter Verwendung der echten und imaginären Datenelemente durchgeführt werden, um eine schnelle Fourier-Transformation zu implementieren.
  20. Verfahren nach Anspruch 19, wobei die erste Vielzahl von gepackten echten und imaginären Datenelementen Daten von einer ersten Eingabefunktion umfasst, die zweite Vielzahl von gepackten echten und imaginären Datenelementen Daten von einem Twiddle-Faktor umfasst und die dritte Vielzahl von gepackten echten und imaginären Datenelementen Daten von einer zweiten Eingabefunktion umfasst.
  21. Maschinenlesbares Medium mit darauf gespeichertem Programmcode, der bei Ausführung durch eine Maschine die Maschine dazu veranlasst, die folgenden Operationen durchzuführen: Decodieren eines ersten Befehls zum Erzeugen eines decodierten Befehls; Speichern einer ersten Vielzahl von gepackten echten und imaginären Datenelementen in einem ersten Quellregister; Speichern einer zweiten Vielzahl von gepackten echten und imaginären Datenelementen in einem zweiten Quellregister; Speichern einer dritten Vielzahl von gepackten echten und imaginären Datenelementen in einem dritten Quellregister; Auswählen von echten und imaginären Datenelementen in dem ersten und zweiten Quellregister, um basierend auf einem unmittelbaren Element des ersten Befehls zu multiplizieren, Multiplizieren von ersten gepackten Datenelementen aus dem ersten Quellregister mit zweiten gepackten Datenelementen aus dem zweiten Quellregister gemäß dem unmittelbaren Element, um eine Vielzahl von echten und imaginären Produkten zu erzeugen, Auswählen von echten und imaginären Datenelementen in dem dritten Quellregister basierend auf dem unmittelbaren Element, Addieren und Subtrahieren von ausgewählten echten und imaginären Werten von den echten und imaginären Produkten, um erste echte und imaginäre Ergebnisse zu erzeugen; Skalieren, Runden und/oder Sättigen der ersten echten und imaginären Ergebnisse, um echte und imaginäre Enddatenelemente zu erzeugen; und Speichern der echten und imaginären Enddatenelemente in vorgegebenen Datenelementpositionen eines Zielregisters.
  22. Maschinenlesbares Medium nach Anspruch 21, wobei die echten und imaginären Werte als 16-Bit-Datenelemente in den ersten, zweiten und dritten Quellregistern gespeichert werden, wobei jeder imaginäre Wert in einem Datenelementort gespeichert wird, der zu einem Datenelementort seines entsprechenden echten Werts benachbart ist, wobei jede Kombination eines echten und imaginären Werts eine komplexe Zahl darstellt.
  23. Maschinenlesbares Medium nach Anspruch 21 oder 22, wobei die ersten, zweiten und dritten Quellregister gepackte 128-Bit-Datenregister umfassen, die mit den Datenelementpositionen A, B, C, D, E, F, G und H konfigurierbar sind, die die Datenelemente A, B, C, D, E, F, G bzw. H speichern, und wobei die Datenelemente A, C, E und G echte Datenelemente sind und die Datenelemente B, D, F und H entsprechende imaginäre Datenelemente sind.
  24. Maschinenlesbares Medium nach Anspruch 23, wobei in Reaktion auf ein Erkennen, dass das unmittelbare Element einen ersten Wert aufweist, die Multiplikationen S1A*S2A, S1B*S2B, S1A*S2B, S1B*S2A, S1E*S2E, S1F*S2F, S1E*S2F, S1F*S2E durchgeführt werden, um die Vielzahl von echten und imaginären Produkten zu erzeugen, wobei S1 das erste Quellregister identifiziert, S2 das zweite Quellregister identifiziert und A-H die gepackten Datenelemente in den Datenelementpositionen A-H in den ersten und zweiten Quellregistern identifizieren.
  25. Maschinenlesbares Medium nach Anspruch 24, wobei das Addieren und Subtrahieren die folgenden Operationen umfasst: S3A + ( S1A*S2A S1B*S2B ) ,
    Figure DE102018006736A1_0049
    S3B + ( S1A*S2B + S1B*S2A ) ,
    Figure DE102018006736A1_0050
    S3A ( S1A*S2A S1B*S2B ) ,
    Figure DE102018006736A1_0051
    S3B ( S1A*S2B + S1B*S2A ) ,
    Figure DE102018006736A1_0052
    S3E + ( S1E*S2E S1F*S2F ) ,
    Figure DE102018006736A1_0053
    S3F + ( S1E*S2F + S1F*S2E ) ,
    Figure DE102018006736A1_0054
    S3E + ( S1E*S2E S1F*S2F ) ,
    Figure DE102018006736A1_0055
    S3F + ( S1E*S2F + S1F*S2E ) .
    Figure DE102018006736A1_0056
DE102018006736.0A 2017-09-29 2018-08-24 Einrichtung und Verfahren zum Durchführen von Transformationen von gepackten komplexen Daten mit echten und imaginären Komponenten Pending DE102018006736A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/721,471 US20190102195A1 (en) 2017-09-29 2017-09-29 Apparatus and method for performing transforms of packed complex data having real and imaginary components
US15/721,471 2017-09-29

Publications (1)

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

Family

ID=65727802

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018006736.0A Pending DE102018006736A1 (de) 2017-09-29 2018-08-24 Einrichtung und Verfahren zum Durchführen von Transformationen von gepackten komplexen Daten mit echten und imaginären Komponenten

Country Status (3)

Country Link
US (1) US20190102195A1 (de)
CN (1) CN109582362A (de)
DE (1) DE102018006736A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110134436B (zh) * 2019-05-05 2021-03-02 飞依诺科技(苏州)有限公司 超声数据打包处理方法及系统
US20230004390A1 (en) * 2021-06-26 2023-01-05 Intel Corporation Apparatus and method for vector packed dual complex-by-complex and dual complex-by-complex conjugate multiplication

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6839728B2 (en) * 1998-10-09 2005-01-04 Pts Corporation Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture
US6366937B1 (en) * 1999-03-11 2002-04-02 Hitachi America Ltd. System and method for performing a fast fourier transform using a matrix-vector multiply instruction
US7072929B2 (en) * 2000-11-01 2006-07-04 Pts Corporation Methods and apparatus for efficient complex long multiplication and covariance matrix implementation
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
US9465611B2 (en) * 2003-10-02 2016-10-11 Broadcom Corporation Processor execution unit with configurable SIMD functional blocks for complex number operations
US9104510B1 (en) * 2009-07-21 2015-08-11 Audience, Inc. Multi-function floating point unit

Also Published As

Publication number Publication date
US20190102195A1 (en) 2019-04-04
CN109582362A (zh) 2019-04-05

Similar Documents

Publication Publication Date Title
DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE102013021221A1 (de) Befehle und Logik zur Vektorisierung von bedingten Schleifen
DE112013005416T5 (de) Verfahren, Vorrichtungen, Befehle und Logik zum Bereitstellen von Vektoradressenkonflikt-Detektionsfunktionalität
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE102018005859A1 (de) Einrichtung und Verfahren zur Multiplikation und Akkumulation von komplexen und echten gepackten Datenelementen
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE112013003741T5 (de) Systeme, Vorrichtungen und Verfahren zum Durchführen einer Konfliktdetektion unf einer Übertragung von Inhalten eines Registers an Datenelementpositionen eines anderen Registers
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern
DE102018129273A1 (de) Einrichtung und verfahren zum vektor-multiplizieren; und -akkumulieren von unsignierten doppelwörtern
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
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
DE102014003659A1 (de) Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters
DE102018005976A1 (de) Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R083 Amendment of/additions to inventor(s)