DE102018006013A1 - Systeme, vorrichtungen und verfahren für dualen komplex durch komplexe konjugationsmultiplikation von vorzeichenbehafteten wörtern - Google Patents

Systeme, vorrichtungen und verfahren für dualen komplex durch komplexe konjugationsmultiplikation von vorzeichenbehafteten wörtern Download PDF

Info

Publication number
DE102018006013A1
DE102018006013A1 DE102018006013.7A DE102018006013A DE102018006013A1 DE 102018006013 A1 DE102018006013 A1 DE 102018006013A1 DE 102018006013 A DE102018006013 A DE 102018006013A DE 102018006013 A1 DE102018006013 A1 DE 102018006013A1
Authority
DE
Germany
Prior art keywords
packed data
complex
complex number
register
real part
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
DE102018006013.7A
Other languages
English (en)
Inventor
Venkateswara Madduri
Elmoustapha Ould-Ahmed-Vall
Robert Valentine
Jesus Corbal
Mark J. Charney
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 DE102018006013A1 publication Critical patent/DE102018006013A1/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/40Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using contact-making devices, e.g. electromagnetic relay
    • G06F7/44Multiplying; Dividing
    • 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
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure

Landscapes

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

Abstract

Ausführungsformen von Systemen, Vorrichtungen und Verfahren für eine duale komplexe Zahl durch komplexe Konjugations-Multiplikation in einem Prozessor sind beschrieben. Zum Beispiel führt eine Ausführungsschaltung einen decodierten Befehl aus zum: Multiplexen von Datenwerten aus einer Mehrzahl von Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten zu mindestens einer Multiplikatorschaltung, wobei der erste und der zweite Quelloperand für gepackte Daten eine Mehrzahl von Paaren komplexer Zahlen aufweisen, wobei jedes Paar komplexer Zahlen Datenwerte an gemeinsamen Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten aufweist; Berechnen eines reellen Teils und eines imaginären Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl; und Speichern des reellen Teils in einer ersten Position von gepackten Datenelementen in dem Zieloperanden und Speichern des imaginären Teils in einer zweiten Position von gepackten Datenelementen in dem Zieloperanden.

Description

  • GEBIET DER ERFINDUNG
  • Das Gebiet der Erfindung betrifft im Allgemeinen eine Computerprozessorarchitektur und genauer Befehle, die bei Ausführung ein bestimmtes Ergebnis hervorrufen.
  • HINTERGRUND
  • Anwendungen, wie zum Beispiel digitale Signalverarbeitungsanwendungen, führen verschiedene Operationen an komplexen Vektoren aus, die Filterung, Nachbearbeitung und andere Funktionen ausführen. Diese Operationen, wie arithmetische Berechnungen, Sättigung usw., sowohl auf dem reellen als auch auf dem imaginären Teil der komplexen Vektoren erfordern typischerweise Folgen von auszuführenden Befehlen. Dies führt zu einer geringeren Leistung, da diese Befehlsfolgen für jede Operation ausgeführt werden.
  • Figurenliste
  • Die vorliegende Erfindung ist in den Figuren der begleitenden Zeichnungen beispielhaft und nicht beschränkend veranschaulicht, in welchen gleiche Bezüge gleiche Elemente angeben und in denen gilt:
    • 1 veranschaulicht eine beispielhafte Ausführung eines dualen Komplexes durch einen komplexen Konjugations-Multiplikationsbefehl;
    • 2 veranschaulicht eine Ausführungsform einer Hardware zum Verarbeiten eines Befehls wie eines dualen Komplexes durch einen komplexen Konjugations-Multiplikationsbefehl;
    • 3 veranschaulicht eine Ausführungsform eines Verfahrens, das von einem Prozessor ausgeführt wird, um einen dualen Komplex durch einen komplexen Konjugations-Multiplikationsbefehl zu verarbeiten;
    • 4A ist ein Blockdiagramm, das ein beispielhaftes spezielles vektorfreundliches Befehlsformat gemäß Ausführungsformen der Erfindung veranschaulicht;
    • 4B ist ein Blockdiagramm, das die Felder des speziellen vektorfreundlichen Befehlsformats, die das Voll-Opcode-Feld darstellen, gemäß einer Ausführungsform der Erfindung veranschaulicht;
    • 4C ist ein Blockdiagramm, das die Felder des speziellen vektorfreundlichen Befehlsformats, die das Registerindexfeld darstellen, gemäß einer Ausführungsform der Erfindung veranschaulicht;
    • 5 ist ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform der Erfindung;
    • 6A 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;
    • 6B ist ein Blockdiagramm, das sowohl ein Ausführungsbeispiel für einen In-order-Architektur-Kern als auch einen beispielhaften Registerumbenennung-Out-of-Order-Ausgabe/Ausführung-Architektur-Kern, der in einem Prozessor aufgenommen werden soll, gemäß Ausführungsformen der Erfindung veranschaulicht;
    • 7A-B stellen ein Blockdiagramm einer spezifischeren beispielhaften In-order-Kernarchitektur dar, deren Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne vom gleichen Typ und/oder anderen Typen) in einem Chip wäre.
    • 8 ist ein Blockdiagramm eines Prozessors, welcher mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und integrierte Grafik aufweisen kann, gemäß Ausführungsformen der Erfindung;
    • 9 zeigt ein Blockdiagramm eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 10 ist ein Blockdiagramm eines ersten spezielleren beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 11 ist ein Blockdiagramm eines zweiten spezielleren beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 12 ist ein Blockdiagramm eines SoC (System-on-a-Chip - Ein-Chip-System) gemäß einer Ausführungsform der vorliegenden Erfindung; und
    • 13 ist ein Blockdiagramm, die Verwendung eines Softwarebefehlsumwandlers zum Umwandeln binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz abgesetzt darstellend, gemäß Ausführungsformen der Erfindung.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der folgenden Beschreibung sind zahlreiche spezifische Details dargelegt. Jedoch versteht es sich, dass Ausführungsformen der Erfindung ohne diese speziellen Einzelheiten umgesetzt werden können. In anderen Fällen wurden wohl bekannte Schaltunge, Strukturen und Techniken nicht im Detail gezeigt, um das Verständnis für diese Beschreibung nicht zu verschleiern.
  • Bezugnahmen in der Beschreibung auf „eine Ausführungsform“, „Ausführungsform“, „ein Ausführungsbeispiel“ usw. geben an, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, eine bestimmte Struktur oder ein bestimmtes Charakteristikum beinhalten kann, wobei allerdings nicht jede Ausführungsform dieses bestimmte Merkmal, diese bestimmte Struktur oder dieses bestimmte Charakteristikum notwendigerweise enthält. Darüber hinaus beziehen sich derartige Formulierungen nicht unbedingt auf dieselbe Ausführungsform. Wenn ein bestimmtes Merkmal, eine bestimmte Struktur oder ein bestimmtes Charakteristikum in Verbindung mit einer Ausführungsform beschrieben wird, wird außerdem angenommen, dass es im Kenntnisbereich eines Fachmannes liegt, auf ein derartiges Merkmal, eine derartige Struktur oder ein derartiges Charakteristikum in Verbindung mit anderen Ausführungsformen einzuwirken, ob es nun explizit beschrieben wurde oder nicht.
  • Die oben erläuterten komplexen Vektoroperationen haben früher Folgen von Befehlen erforderlich gemacht, die ausgeführt werden sollen, um die gewünschte Ausgabe zu erzeugen. Dies beinhaltete z. B. Operationen, um einen Komplex durch komplexe Konjugations-Multiplikation getrennt auszuführen. Ausführungsformen offenbaren einen Befehl zum Ausführen einer dualen komplexen Zahl durch komplexe Konjugations-Multiplikation mit komplexen Daten in Quadwords von Vektorquellregistern.
  • Hierin sind Ausführungsformen eines dualen Komplexes durch einen komplexen Konjugations-Multiplikationsbefehl zum Verbessern eines Computers selbst durch Beschleunigen (und daher typischerweise unter Verwendung von weniger Energie) und nicht durch Durchführen einer Mehrzahl von Operationen zum Ausführen eines dualen Komplexes durch komplexe Multiplikation ausführlich dargestellt. Die Ausführung des Befehls bewirkt, dass eine Ausführungsschaltung (Ausführungseinheit) eine komplexe Multiplikation an Quelldaten ausführt. Zum Beispiel veranlasst die Ausführung eines dualen Komplexes durch einen komplexen Konjugations-Multiplikationsbefehl in einigen Ausführungsformen eine Ausführungsschaltung zum: Multiplexen von Datenwerten aus einer Mehrzahl von Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten zu mindestens einer Multiplikatorschaltung, wobei der erste und der zweite Quelloperand für gepackte Daten eine Mehrzahl von Paaren komplexer Zahlen aufweisen, wobei jedes Paar komplexer Zahlen Datenwerte an gemeinsamen Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten aufweist; Berechnen eines reellen Teils und eines imaginären Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl; und Ausgeben des reellen Teils und des imaginären Teils des Produkts jedes Paars komplexer Zahlen an ein Addierernetzwerk, um das reelle Ergebnis und das imaginäre Ergebnis zu berechnen; und Speichern des reellen Teils in einer ersten Position von gepackten Datenelementen in dem Zieloperanden und Speichern des imaginären Teils in einer zweiten Position von gepackten Datenelementen in dem Zieloperanden.
  • 1 veranschaulicht eine beispielhafte Ausführung eines dualen Komplexes durch einen komplexen Konjugations-Multiplikationsbefehl. Das duale komplexe Multiplikationsadditions-Befehlsformat weist Felder für ein Ziel (Ziel für gepackte Daten (DST) 120) und zwei Quellen (vektorgepackte Datenquelle 1 (SRC2) 102 und vektorgepackte Datenquelle 2 (SRC2) 104) auf. Zum Beispiel können SRC1 102 und SRC2 104 jeweils Werte für zwei komplexe Zahlen aufweisen, wobei jede komplexe Zahl ein Doppelwort ist (z. B. A+Bi, E+Fi usw.). Der Befehl dient zum Multiplizieren komplexer Zahlen, die in SRC1 102 und SRC2 104 gespeichert sind, durch die komplexen Konjugations komplexer Zahlen, die in SRC1 102 und SRC2 104 gespeichert sind. In einigen Ausführungsformen können die resultierenden Werte gerundet sein, wie durch Abschneid-, Konvergenz- oder Aufrundungsoperationen.
  • Die Quelle 1 102 für gepackte Daten weist acht gepackte Datenelemente (dargestellt an Positionen A-H von gepackten Datenelementen) auf. Abhängig von der Implementierung ist die vektorgepackte Datenquelle 2/1 102 ein Register für gepackte Daten (z. B. ein XMM-, YMM-, ZMM-, Vektor-, SIMD-, D-, S-Register usw.) oder ein Speicherort.
  • Die Quelle 2 104 für gepackte Daten weist acht gepackte Datenelemente (dargestellt an Positionen A-H von gepackten Datenelementen) auf. Abhängig von der Implementierung ist die Quelle 2 104 für gepackte Daten ein Register für gepackte Daten (z. B. ein XMM-, YMM-, ZMM-, Vektor-, SIMD-, D-, S-Register usw.) oder ein Speicherort.
  • Die zwei Quellen 102, 104 für gepackte Daten werden in eine Ausführungsschaltung eingespeist, um bearbeitet zu werden. Wie dargestellt, kann die Ausführungsschaltung einen Eingangs-Mux 106 aufweisen, der die Werte von den Quellen 102, 104 für gepackte Daten zu einer Mehrzahl von Multiplikatoren 107 weiterleitet. Wie erläutert, werden die Werte von entsprechenden komplexen Zahlen (z. B. S1(A) und S1(B) usw.) multipliziert. Das Folgende ist ein Beispiel einer komplexen Zahl durch komplexe Konjugations-Multiplikation: ( x + y i ) ( u v i ) = ( x u + y v ) + ( x v + y u ) i
    Figure DE102018006013A1_0001
  • In Bezug auf die komplexen Zahlen, die in den vektorgepackten Datenquellen SRC2 102 und SRC3 104 gespeichert sind, kann eine solche komplexe Multiplikation wie folgt dargestellt werden: ( S 1 A + S 1 Bi ) ( S 2 A S 2 Bi ) = ( S 2 A S 1 A + S2B S1B ) + ( S 2 B S 1 A + S2A S1B ) i
    Figure DE102018006013A1_0002
  • Die Multiplikatoren 107 können eine Vektormultiplikation der Datenquellen 102, 104 durchführen. In einigen Ausführungsformen kann jeder Eingabewert ein vorzeichenbehafteter Wert sein. Wie in 1 dargestellt, können die Multiplikatoren 107 die folgenden Werte erzeugen: S2A*S1A; S2B*S1B; S2B*S1A; S2A*S1B; S2E*S1E; S2F*S1F; S2F*S1E und S2E*S1F. Es ist zu beachten, dass, wenngleich eine Mehrzahl von Multiplikatoren dargestellt ist, in einigen Ausführungsformen derselbe Multiplikator wiederverwendet wird. In einigen Ausführungsformen kann die Reihenfolge der Operanden SRC2[] x SRC1 [] sein, wobei SRC2[] die komplexe Zahl aus SRC2 104 ist und SRC1[] die komplexe Zahl aus SRC1 102 ist. In verschiedenen Ausführungsformen können Subtraktion und vorzeichenbehaftete Addition an den 32-Bit-Multiplikatorausgaben vorgenommen werden.
  • In der in 1 dargestellten Ausführungsform können die Addierernetzwerke 108, 110 die Ausgänge der Multiplikatoren 107 kombinieren, um den reellen und den imaginären Teil der dualen komplexen Zahl durch Multiplikation komplexer konjugierter Zahlen zu berechnen. Somit berechnet der duale komplexe Multiplikationsaddierbefehl ein erstes Produkt einer ersten komplexen Zahl und ein komplexes Konjugat einer zweiten komplexen Zahl. Jede komplexe Zahl weist einen reellen Teil und einen imaginären Teil auf. In einigen Ausführungsformen kann jeder reelle Teil und imaginäre Teil ein 16-Bit-Wort sein, das in aufeinanderfolgenden Datenelementpositionen in den Quelloperanden gespeichert ist. Jedes Paar komplexer Zahlen kann eine komplexe Zahl von denselben Datenelementpositionen in jedem Quelloperanden aufweisen. Zum Beispiel kann in der Ausführungsform aus 1 ein erstes Paar komplexe Zahlen eine erste komplexe Zahl, die in S1A (reeller Teil) und S1B (imaginärer Teil) gespeichert ist, und eine zweite komplexe Zahl in S2A (reeller Teil) und S2B (imaginärer Teil) enthalten sein. In ähnlicher Weise kann ein zweites Paar komplexer Zahlen in S1E/S1F und S2E/S2F sein. In einigen Ausführungsformen kann ein drittes Paar komplexer Zahlen in S1C/S1D und S2C/S2D und ein viertes Paar komplexer Zahlen in S1G/S1H und S2G/S2H liegen. Wenn der duale Komplex durch einen komplexen Konjugations-Multiplikationsbefehl ausgeführt wird, kann die Summe der Produkte des ersten und des zweiten Paars komplexer Zahlen zum Beispiel wie folgt berechnet werden: ( S 1 A + S 1 Bi ) ( S 2 A S 2 Bi ) = ( S 2 A S 1 A + S2B S1B ) + ( S 2 B S 1 A + S2A S1B ) i
    Figure DE102018006013A1_0003
    ( S 1 E + S 1 Fi ) ( S 2 E S 2 Fi ) = ( S 2 E S 1 E + S2F S1F ) + ( S 2 F S 1 E + S2E S1F ) i
    Figure DE102018006013A1_0004
  • Eine Pseudocode-Darstellung davon ist nachstehend dargestellt:
    TEMP0[32:0] ← ((SRC1[15:0] * SRC2[15:0]) + (SRC1[31:16] * SRC2[31:16])); (*Real Number *)
    TEMP1 [32:0] ← ((SRC1[15:0] * SRC2[31:16]) - (SRC1[31:16] * SRC2[15:0])); (*Imaginary Number *)
    TEMP2[32:0] ← ((SRC1[79:64] * SRC2[79:64]) + (SRC1[95:80] * SRC2[95:80])); (*Real Number *)
    TEMP3[32:0] ← ((SRC1[79:64] * SRC2[95:80]) - (SRC1[95:80] * SRC2[79:64])); (* Imaginary Number*)
    DEST[15:0] ← RoundSaturatePosToSignedWord (TEMP0[32:0], MXCSR.IRM[1:0],
    DEST[15:0]);
    DEST[31:16] ← RoundSaturatePosToSignedWord (TEMP1[32:0], MXCSR.IRM[1:0],
    DEST[31:16]);
    DEST[79:64] ← RoundSaturatePosToSignedWord (TEMP2[32:0], MXCSR.IRM[1:0],
    DEST[79:64]);
    DEST[95:80] ← RoundSaturatePosToSignedWord (TEMP3[32:0], MXCSR.IRM[1:0],
    DEST[95:80]).
  • Wie oben dargestellt, kann ein erstes temporäres Register (TEMP0) den reellen Teil des Komplexes durch komplexe Konjugations-Multiplikation speichern und ein zweites temporäres Register (TEMP1) kann den imaginären Teil (z. B. wenn SRC1 [15:0] Element A entspricht, SRC1 [31:16] Element B von SRC1 102 entspricht, und ähnlich für SRC2) speichern. Ähnlich kann ein drittes temporäres Register (TEMP2) den reellen Teil und ein viertes temporäres Register (TEMP3) des Komplexes durch komplexe Konjugations-Multiplikation für ein zweites Komplexpaar (z. B. wenn SRC 1 [79:64] Element E entspricht und SRC 1 [95:80] Element F von SRC 1 102 entspricht und ähnlich für SRC2) speichern.
  • In einigen Ausführungsformen kann jeder resultierende Wert, der in einem der temporären Register gespeichert ist, vor dem Speichern des Wertes in dem Ziel gerundet und gesättigt werden. Wie in der obigen Pseudocode-Darstellung gezeigt, kann eine Rundungsoperation an dem in einem temporären Register gespeicherten Wert durchgeführt werden, bevor der Wert in dem Ziel gespeichert wird. Die Rundungsoperation kann eine oder mehrere Steuerbiteingaben empfangen, die verwendet werden können, um zu bestimmen, welche Rundungsoperation ausgeführt werden soll. Zum Beispiel kann, wie in der folgenden Pseudocodedarstellung gezeigt, eine Abschneide-, Aufrundungs- oder Konvergenzrundungsoperation basierend auf dem einen oder den mehreren Steuerbits (z. B. MXCSR.IRM[1:0]) durchgeführt werden. Abhängig von dem Wert des gerundeten Ergebnisses kann das Ziel auf den maximalen positiven Wert gesättigt werden, oder der Wert des gerundeten Ergebnisses kann in dem Ziel gespeichert werden. Wie in FIG. In 1 dargestellt, kann das Runden wie oben beschrieben durch Rundungsschaltungen 112, 114 durchgeführt werden. In einigen Ausführungsformen können die Sättigungsschaltungen 122, 124 die oben beschriebene Sättigung durchführen, bevor die Ergebnisse in dem vektorgepackten Datenziel gespeichert werden, beispielsweise wie in der folgenden Pseudocodedarstellung gezeigt:
    Figure DE102018006013A1_0005
  • In einigen Ausführungsformen kann der Befehl als zwei Mikrooperationen implementiert sein (z. B. eine für untere Quadwords und eine für obere Quadwords. Die oben beschriebenen Operationen können eine erste Mikrooperation darstellen, um einen Komplex durch komplex Konjugations-Multiplikation für zwei Paare komplexer Zahlen (A+Bi und E+Fi, aus jedem Quellregister) durchzuführen. In einigen Ausführungsformen kann eine zweite Mikrooperation eine komplexe Konjugations-Multiplikation für zwei zusätzliche Paare komplexer Zahlen (C+Di und G+Hi, aus jedem Quellregister) durchführen. Eine Pseudocode-Darstellung dieser zweiten Mikrooperation ist nachstehend dargestellt:
    TEMP4[32:0] ­← ((SRC1[47:32] * SRC2[47:32]) + (SRC1[63:48] * SRC2[63:48])); (* Real Number *)
    TEMP5[32:0] ← ((SRC1[47:32] * SRC2[63:48]) - (SRC1[63:48] * SRC2[47:32])); (* Imaginary Number *)
    TEMP6[32:0] ← ((SRC1[111:96] * SRC2[111:96]) + (SRC1[127:112] * SRC2[127:112])); (* Real Number *)
    TEMP7[32:0] ← ((SRC1[111:96] * SRC2[127:112]) - (SRC1[127:112] * SRC2[111:96])); (* Imaginary Number*)
    DEST[47:32] ← RoundSaturatePosToSignedWord(TEMP4[32:0], MXCSR.IRM[1:0],
    DEST[47:32]);
    DEST[63:48] ← RoundSaturatePosToSignedWord(TEMP5[32:0], MXCSR.IRM[1:0],
    DEST[63:48]);
    DEST[111:96] ← RoundSaturatePosToSignedWord (TEMP6[32:0], MXCSR.IRM[1:0],
    DEST[111:96]);
    DEST[127:112] ← RoundSaturatePosToSignedWord (TEMP7[32:0],
    MXCSR.IRM[1 :0],DEST[127:112]).
  • Wie oben dargestellt, kann ein fünftes temporäres Register (TEMP4) den reellen Teil des Komplexes durch komplexe Konjugations-Multiplikation speichern und ein sechstes temporäres Register (TEMP5) kann den imaginären Teil (z. B. wenn SRC1 [47:32] Element C entspricht, SRC1 [63:48] Element D von SRC1 102 entspricht, und ähnlich für SRC2) speichern. Ähnlich kann ein siebtes temporäres Register (TEMP6) den reellen Teil und ein achtes temporäres Register (TEMP7) des Komplexes durch komplexe Konjugations-Multiplikation für ein zweites Komplexpaar (z. B. wenn SRC 1 [111:96] Element G entspricht und SRC1 [127:112] Element H von SRC1 102 entspricht und ähnlich für SRC2) speichern. In einigen Ausführungsformen kann eine Rundung an den resultierenden Werten durchgeführt werden, wie oben erläutert, bevor die Ergebnisse in dem das Ziel 120 gespeichert werden.
  • Jede der reellen und imaginären 16-Bit-Ausgaben von den Sättigungseinheiten 122, 124 wird in dem Zielregister gespeichert. Abhängig von der Implementierung ist die Quelle 1/das Ziel 120 für gepackte Daten ein Register für gepackte Daten (z. B. ein XMM-, YMM-, ZMM-, Vektor-, SIMD-, D-, S-Register usw.) oder ein Speicherort.
  • In einigen Ausführungsformen können die Addierernetzwerke 108 und 110 eine Subtraktion und vorzeichenbehaftete Addition an den Ausgaben der Multiplikatoren 107 durchführen, um die reellen und imaginären Ergebnisse zu berechnen, wie oben dargestellt. Zum Beispiel kann der Wert von S2A * S1A in einem ersten temporären Register gespeichert werden und der Wert von S2B * S1B kann in einem zweiten temporären Register gespeichert werden. Eine vorzeichenbehaftete Additionsfunktion kann verwendet werden, um diese Werte zu addieren und den resultierenden Wert, der den reellen Teil des Komplexes darstellt, durch ein komplexes konjugiertes Produkt in einem dritten temporären Register zu speichern. In einigen Ausführungsformen kann die vorzeichenbehaftete Addition durch Vorzeichenerweiterung des Wertes in dem ersten und dem zweiten temporären Register und dann Addieren der vorzeichenerweiterten Werte und Speichern der Ergebnisse in dem dritten temporären Register durchgeführt werden. In ähnlicher Weise kann eine Subtraktion durchgeführt werden, um den imaginären Teil des Komplexes durch ein komplexes Konjugationsprodukt zu berechnen. Zum Beispiel können der Wert von -S2B * S1A und der Wert von S2A * S1B in einem ersten bzw. zweiten temporären Register gespeichert werden. Das Zweierkomplement des Werts des zweiten temporären Registers kann bestimmt und in einem dritten temporären Register gespeichert werden. Die Werte des ersten temporären Registers und des dritten temporären Registers können dann addiert werden (z. B. unter Verwendung einer vorzeichenlosen Addition) und das Ergebnis wird in einem Ziel gespeichert.
  • 2 veranschaulicht eine Ausführungsform einer Hardware zum Verarbeiten von Befehlen wie eines dualen Komplexes durch komplexe Konjugations-Multiplikationsbefehle. Wie dargestellt, speichert der Speicher 201 zwei komplexe Multiplikations-Additionsbefehle 201, die ausgeführt werden sollen.
  • Jeder Befehl wird von der Decodierschaltung 205 empfangen. Zum Beispiel empfängt die Decodierschaltung 205 diesen Befehl von der Abruflogik/-Schaltung. Der Befehl 201 weist Felder für einen Opcode, eine erste und eine zweite Quelle und ein Ziel auf. In einigen Ausführungsformen sind die Quellen und das Ziel Register, und in anderen Ausführungsformen sind sie ein oder mehrere Speicherorte. Detailliertere Ausführungsformen von mindestens einem Befehlsformat werden später detailliert beschrieben. Die Decodierschaltung 205 decodiert den Befehl in eine oder mehrere Operationen. In einigen Ausführungsformen beinhaltet dieses Decodieren das Generieren einer Mehrzahl von Mikrooperationen, die von Ausführungsschaltungen (wie der Ausführungsschaltung 209) ausgeführt werden sollen. Die Decodierschaltung 205 decodiert auch Befehlspräfixe.
  • In einigen Ausführungsformen stellt die Registerumbenennungs-, Registerzuweisungs- und/oder Planungsschaltung 207 eine Funktionalität für eines oder mehrere von Folgendem bereit: 1) Umbenennen von logischen Operandenwerten in physikalische Operandenwerte (z. B. eine Registeraliastabelle in einigen Ausführungsformen), 2) Zuweisen von Statusbits und Flags zu dem decodierten Befehl und 2) Planen des decodierten Befehls zur Ausführung an der Ausführungsschaltung aus einem Befehlspool (z. B. unter Verwendung einer Reservierungsstation in einigen Ausführungsformen).
  • Register (Registerdatei) und/oder Speicher 208 speichern Daten als Operanden des Befehls, der von der Ausführungsschaltung bearbeitet werden soll. Beispielhafte Registertypen schließen gepackte Datenregister, Allzweckregister und Gleitkommaregister ein.
  • Die Ausführungsschaltung führt den decodierten Befehl 209 aus. Beispielhafte detaillierte Ausführungsschaltungen wurden in 1 und 2 dargestellt. Die Ausführung des decodierten Befehls bewirkt, dass die Ausführungsschaltung eine doppelte komplexe Multiplikation und Addition des reellen oder des imaginären Teils von komplexen Quellzahlen durchführt. In einigen Ausführungsformen veranlasst die Ausführung eines decodierten dualen Komplex-Multiplikations-Additionsbefehls eine Ausführungsschaltung zum: Multiplexen von Datenwerten aus einer Mehrzahl von Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten zu mindestens einer Multiplikatorschaltung, wobei der erste und der zweite Quelloperand für gepackte Daten eine Mehrzahl von Paaren komplexer Zahlen aufweisen, wobei jedes Paar komplexer Zahlen Datenwerte an gemeinsamen Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten aufweist; Berechnen eines reellen Teils eines Produkts jedes Paars komplexer Zahlen und Ausgeben des reellen Teils des Produkts eines ersten Paars komplexer Zahlen an ein Addierernetzwerk, Addieren des reellen Teils des Produktes eines ersten Paars komplexer Zahlen zu dem reellen Teil des Produkts eines zweiten Paar komplexer Zahlen, um ein erstes reelles Ergebnis zu berechnen, und Addieren des reellen Teils des Produkts eines dritten Paars komplexer Zahlen zu dem reellen Teil des Produkts eines vierten Paars komplexer Zahlen, um ein zweites reelles Ergebnis zu berechnen, und Speichern des ersten reellen Ergebnisses an einer ersten Position von gepackten Datenelementen in dem Zieloperanden und Speichern des zweiten reellen Ergebnisses an einer zweiten Position von gepackten Datenelementen in dem Zieloperanden.
  • Die Zurückschreib (Zurückzieh) -Schaltung 211 schreibt das Ergebnis der Ausführung des decodierten Befehls fest.
  • In einigen Ausführungsformen schreibt die Zurückzieh-/Zurückschreibschaltung das Zielregister architektonisch in die Register oder den Speicher fest und zieht den Befehl zurück.
  • Eine Ausführungsform eines Formats für einen dualen Komplex durch einen komplexen Konjugations-Multiplikationsbefehl ist VPCCMULWRS DSTREG, SRC1, SRC2. In einigen Ausführungsformen ist VPCCMULWRS {B/W/D/Q} die Opcode-Mnemonik des Befehls. DSTREG ist ein Feld für den Operanden des Zielregisters für gepackte Daten. SRC1 und SRC2 sind Felder für die Quellen wie Register für gepackte Daten und/oder Speicher. In einigen Ausführungsformen können die Befehle VEX-codiert sein. In einigen Ausführungsformen kann SRC1 ein „vvvv“-Wert (wie 420) sein, und in einigen Ausführungsformen kann SRC2 ein R/M-Wert sein (wie 446) sein, wie weiter in Bezug auf 4 erläutert.
  • In einigen Ausführungsformen weist der duale Komplex durch komplexe Konjugations-Multiplikationsbefehle VPCCMULWRS DESTR, SRC1, SRC2 (die einen dualen Komplex durch komplexe Konjugations-Multiplikation mit komplexen Zahlen an eingegebenen komplexen Zahlen durchführen). Eine Schreibmaske wird verwendet, um Operationen pro Element und das Aktualisieren von Ergebnissen bedingt zu steuern. Abhängig von der Implementierung verwendet die Schreibmaske eine Zusammenführungs- oder Nullstellungsmaskierung. Befehle, die mit einem Prädikaten (Writemask, Schreibmaske oder k-Register) -Operand codiert sind, verwenden diesen Operanden, um die Rechenoperation pro Element und die Aktualisierung des Ergebnisses an den Zieloperanden bedingt zu steuern. Der Prädikatenoperand ist als das Opmask (Schreibmasken) -Register bekannt. In einigen Ausführungsformen ist die Opmask eine Gruppe von Architekturregistern mit einer Größe von 64-Bit. Es sei darauf hingewiesen, dass von diesem Satz von Architekturregistern nur k1 bis k7 als Prädikatenoperand adressiert werden können. k0 kann als reguläre Quelle oder als Ziel verwendet werden, kann jedoch nicht als Prädikatenoperand codiert werden. Es sei auch darauf hingewiesen, dass ein Prädikatenoperand verwendet werden kann, um eine Speicherfehlerunterdrückung für einige Befehle mit einem Speicheroperanden (Quelle oder Ziel) zu ermöglichen. Als Prädikatenoperand enthalten die Opmask-Register ein Bit, um die Operation/Aktualisierung für jedes Datenelement eines Vektorregisters zu steuern. Im Allgemeinen können Opmask-Register Befehle mit den folgenden Elementgrößen unterstützen: Gleitkommazahl mit einfacher Genauigkeit (float32), Ganzzahl-Doppelwort (int32), Gleitkommazahl mit doppelter Genauigkeit (float64), Ganzzahl-Quadword (int64). Die Länge eines Opmask-Registers, MAX_KL, reicht aus, um bis zu 64 Elemente mit einem Bit pro Element, d. h. 64 Bits, zu handhaben. Bei einer gegebenen Vektorlänge greift jeder Befehl nur auf die Anzahl der niedrigstwertigen Maskenbits zu, die aufgrund seines Datentyps benötigt werden. Ein Opmask-Register beeinflusst einen Befehl bei einer Granularität pro Element. Jede numerische oder nicht-numerische Operation jedes Datenelements und von Aktualisierung pro Element von Zwischenergebnissen zu dem Zieloperanden werden auf dem entsprechenden Bit des Opmask-Registers vorausgesagt. In den meisten Ausführungsformen folgt eine Opmask, die als Prädikatenoperand dient, den folgenden Eigenschaften: 1) Die Operation des Befehls wird für ein Element nicht ausgeführt, wenn das entsprechende Opmask-Bit nicht gesetzt ist (dies bedeutet, dass keine Ausnahme oder Verletzung durch eine Operation an einem ausmaskierten Element verursacht werden kann und folglich infolge einer ausmaskierten Operation kein Ausnahme-Flag aktualisiert wird); 2). Ein Zielelement wird nicht mit dem Ergebnis der Operation aktualisiert, wenn das entsprechende Schreibmasken-Bit nicht gesetzt ist. Stattdessen muss der Zielelementwert erhalten bleiben (Zusammenführung-Maskierung) oder er muss auf Null gesetzt werden (Nullstellung-Maskierung); 3) Bei einigen Befehlen mit einem Speicheroperanden werden Speicherfehler für Elemente mit einem Maskenbit von 0 unterdrückt. Es sei darauf hingewiesen, dass dieses Merkmal ein vielseitiges Konstrukt für die Implementierung von Kontrollflussvorhersagen bietet, da die Maske ein Zusammenfuhrungsverhalten für Vektorregisterziele bereitstellt. Als Alternative kann die Maskierung zum Nullstellen anstatt zum Zusammenführen verwendet werden, sodass die ausmaskierten Elemente mit 0 aktualisiert werden, anstatt den alten Wert beizubehalten. Das Nullstellungsverhalten wird bereitgestellt, um die implizite Abhängigkeit von dem alten Wert zu entfernen, wenn dieser nicht benötigt wird.
  • In Ausführungsformen schließen Codierungen des Befehls einen Speicheradressierungsoperanden vom Skalenindexbasis (SIB) -Typ ein, der indirekt mehrere indizierte Zielorte im Speicher identifiziert. In einer Ausführungsform kann ein Speicheroperand vom SIB-Typ eine Codierung aufweisen, die ein Basisadressregister identifiziert. Der Inhalt des Basisadressregisters kann eine Basisadresse im Speicher darstellen, aus der die Adressen der bestimmten Zielorte im Speicher berechnet werden. Zum Beispiel kann die Basisadresse die Adresse des ersten Ortes in einem Block möglicher Zielorte für einen erweiterten Vektorbefehl sein. In einer Ausführungsform kann ein Speicheroperand vom SIB-Typ eine Codierung aufweisen, die ein Indexregister identifiziert. Jedes Element des Indexregisters kann einen Index oder Offsetwert spezifizieren, der verwendbar ist, um aus der Basisadresse eine Adresse eines jeweiligen Zielortes innerhalb eines Blocks potentieller Zielorte zu berechnen. In einer Ausführungsform kann ein Speicheroperand vom SIB-Typ eine Codierung aufweisen, die einen Skalierungsfaktor spezifiziert, der bei der Berechnung einer jeweiligen Zieladresse auf jeden Indexwert anzuwenden ist. Wenn beispielsweise ein Skalierungsfaktorwert von vier in dem Speicheroperanden vom SIB-Typ codiert ist, kann jeder von einem Element des Indexregisters erhaltene Indexwert mit vier multipliziert werden und dann zu der Basisadresse addiert werden, um eine Zieladresse zu berechnen.
  • In einer Ausführungsform kann ein Speicheroperand vom SIB-Typ der Form vm32{x,y,z} ein Vektor-Array von Speicheroperanden identifizieren, das unter Verwendung der SIB-Speicheradressierung spezifiziert ist. In diesem Beispiel wird das Array von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters spezifiziert, das einzelne Elemente enthält, von denen jedes ein 32-Bit-Indexwert ist. Das Vektorindexregister kann ein 128-Bit (z. B. XMM) -Register (vm32x), ein 256-Bit (z. B. YMM) -Register (vm32y) oder ein 512-Bit (z. B. ZMM) - Register (vm32z) sein. In einer anderen Ausführungsform kann ein Speicheroperand vom SIB-Typ der Form vm64{x,y,z} ein Vektor-Array von Speicheroperanden identifizieren, das unter Verwendung der SIB-Speicheradressierung spezifiziert ist. In diesem Beispiel wird das Array von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters spezifiziert, das einzelne Elemente enthält, von denen jedes ein 64-Bit-Indexwert ist. Das Vektorindexregister kann ein 128-Bit (z. B. XMM) -Register (vm64x), ein 256-Bit (z. B. YMM) -Register (vm64y) oder ein 512-Bit (z. B. ZMM) - Register (vm64z) sein.
  • 3 veranschaulicht eine Ausführungsform eines Verfahrens, das von einem Prozessor ausgeführt wird, um einen dualen Komplex-Multiplikations-Additionsbefehl zu verarbeiten. Zum Beispiel führen die Prozessorkomponenten aus 3, eine Pipeline wie nachstehend im Detail beschrieben, usw., dieses Verfahren aus.
  • Bei 301 wird ein Befehl abgerufen. Zum Beispiel wird eine duale Komplex-Multiplikation-Addition von reellen Teilen abgerufen. Der Befehl zur dualen Komplex-Multiplikation-Addition von reellen Teilen weist Felder für einen Opcode, einen ersten und einen zweiten Quelloperanden und einen Zieloperanden auf. In einigen Ausführungsformen weist der Befehl ferner ein Feld für eine Schreibmaske auf. In einigen Ausführungsformen wird der Befehl aus einem Befehls-Cache abgerufen. Die Quelloperanden und der Zieloperand können vektorgepackte Daten sein.
  • Der abgerufene Befehl wird bei 303 decodiert. Zum Beispiel wird der Befehl zur dualen Komplex-Multiplikation-Addition von reellen Teilen von einer Decodierschaltung, wie hierin detailliert beschrieben ist, decodiert.
  • Datenwerte, die den Quelloperanden des decodierten Befehls zugeordnet sind, werden bei 305 abgerufen und der decodierte Befehl wird (je nach Bedarf) geplant. Wenn beispielsweise einer oder mehrere der Quelloperanden Speicheroperanden sind, werden die Daten von dem angegebenen Speicherort abgerufen.
  • Bei 307 wird der decodierte Befehl von einer Ausführungsschaltung (Hardware) ausgeführt, wie hierin detailliert beschrieben. Für den dualen Komplex durch den komplexen Konjugations-Multiplikationsbefehl wird die Ausführung bewirken, dass die Ausführungsschaltung eine komplexe Zahl in einem ersten Quelldatenelement mit der komplexen Konjugierten einer komplexen Zahl in einem zweiten Quellendatenelement multipliziert. Zum Beispiel veranlasst die Ausführung eines decodierten dualen Komplexes durch einen komplexen Konjugations-Multiplikationsbefehl eine Ausführungsschaltung zum: Multiplexen von Datenwerten aus einer Mehrzahl von Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten zu mindestens einer Multiplikatorschaltung, wobei der erste und der zweite Quelloperand für gepackte Daten eine Mehrzahl von Paaren komplexer Zahlen aufweisen, wobei jedes Paar komplexer Zahlen Datenwerte an gemeinsamen Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten aufweist; Berechnen eines reellen Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl; und Ausgeben des reellen Teils und des imaginären Teils des Produkts jedes Paars komplexer Zahlen an ein Addierernetzwerk, um das reelle Ergebnis und das imaginäre Ergebnis zu berechnen; und Speichern des reellen Teils in einer ersten Position von gepackten Datenelementen in dem Zieloperanden und Speichern des imaginären Teils in einer zweiten Position von gepackten Datenelementen in dem Zieloperanden.
  • In einigen Ausführungsformen wird der Befehl bei 309 festgeschrieben oder zurückgezogen.
  • Ausführungsbeispiele sind nachstehend ausführlich beschrieben.
  • 1. Vorrichtung umfassend: einen Decoder zum Decodieren eines Befehls mit Feldern für einen ersten und einen zweiten Quelloperanden für gepackte Daten und einen Zieloperanden für gepackte Daten, und eine Ausführungsschaltung zum Ausführen des decodierten Befehls zum: Multiplexen von Datenwerten aus einer Mehrzahl von Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten zu mindestens einer Multiplikatorschaltung, wobei der erste und der zweite Quelloperand für gepackte Daten eine Mehrzahl von Paaren komplexer Zahlen aufweisen, wobei jedes Paar komplexer Zahlen Datenwerte an gemeinsamen Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten aufweist; Berechnen eines reellen Teils und eines imaginären Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl; und Speichern des reellen Teils in einer ersten Position von gepackten Datenelementen in dem Zieloperanden und Speichern des imaginären Teils in einer zweiten Position von gepackten Datenelementen in dem Zieloperanden.
  • 2. Vorrichtung aus Beispiel 1, wobei der erste Quelloperand für gepackte Daten ein Register für gepackte Daten ist und der zweite Quelloperand für gepackte Daten ein Speicherort ist.
  • 3. Vorrichtung aus Beispiel 1, wobei der erste Quelloperand für gepackte Daten ein Register für gepackte Daten ist und der zweite Quelloperand für gepackte Daten ein Register für gepackte Daten ist.
  • 4. Vorrichtung aus Beispiel 1, wobei zum Berechnen eines reellen Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl die Ausführungsschaltung ferner dient zum: Ausgeben des reellen Teils und des imaginären Teils des Produkts jedes Paars komplexer Zahlen an ein Addierernetzwerk, um ein reelles Ergebnis und ein imaginäres Ergebnis zu berechnen.
  • 5. Vorrichtung aus Beispiel 1, wobei der Zieloperand für gepackte Daten ein Register für gepackte Daten ist und die erste Position von gepackten Datenelementen eine untere 16-Bit des Registers für gepackte Daten ist und die zweite Position von gepackten Datenelementen eine nächste 16 Bit des Registers für gepackte Daten ist.
  • 6. Vorrichtung aus Beispiel 1, wobei die Ausführungsschaltung zum Ausführen des decodierten Befehls ferner dient zum: Runden des reellen Teils des Produkts der ersten komplexen Zahl und der komplexen Konjugation der zweiten komplexen Zahl; und Runden des reellen Teils des Produkts der ersten komplexen Zahl und der komplexen Konjugation der zweiten komplexen Zahl.
  • 7. Vorrichtung aus Beispiel 6, wobei ein Rundungstyp für den reellen Teil und den imaginären Teil des Produkts unter Verwendung eines oder mehrerer Steuerbits ausgewählt wird.
  • 8. Vorrichtung aus Beispiel 7, wobei der Rundungstyp mindestens eines von Abschneiden, Konvergenzrunden oder Aufrunden einschließt.
  • 9. Verfahren umfassend: Decodieren eines Befehls mit Feldern für einen ersten und einen zweiten Quelloperanden für gepackte Daten und einen Zieloperanden für gepackte Daten, und Ausführen des decodierten Befehls von einer Ausführungsschaltung zum: Multiplexen von Datenwerten aus einer Mehrzahl von Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten zu mindestens einer Multiplikatorschaltung, wobei der erste und der zweite Quelloperand für gepackte Daten eine Mehrzahl von Paaren komplexer Zahlen aufweisen, wobei jedes Paar komplexer Zahlen Datenwerte an gemeinsamen Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten aufweist; Berechnen eines reellen Teils und eines imaginären Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl; und Speichern des reellen Teils in einer ersten Position von gepackten Datenelementen in dem Zieloperanden und Speichern des imaginären Teils in einer zweiten Position von gepackten Datenelementen in dem Zieloperanden.
  • 10. Verfahren aus Beispiel 9, wobei der erste Quelloperand für gepackte Daten ein Register für gepackte Daten ist und der zweite Quelloperand für gepackte Daten ein Speicherort ist.
  • 11. Verfahren aus Beispiel 9, wobei der erste Quelloperand für gepackte Daten ein Register für gepackte Daten ist und der zweite Quelloperand für gepackte Daten ein Register für gepackte Daten ist.
  • 12. Verfahren aus Beispiel 9, wobei zum Berechnen eines reellen Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl die Ausführungsschaltung ferner dient zum: Ausgeben des reellen Teils und des imaginären Teils des Produkts jedes Paars komplexer Zahlen an ein Addierernetzwerk, um ein reelles Ergebnis und ein imaginäres Ergebnis zu berechnen.
  • 13. Verfahren aus Beispiel 9, wobei der Zieloperand für gepackte Daten ein Register für gepackte Daten ist und die erste Position von gepackten Datenelementen eine untere 16-Bit des Registers für gepackte Daten ist und die zweite Position von gepackten Datenelementen eine nächste 16 Bit des Registers für gepackte Daten ist.
  • 14. Verfahren aus Beispiel 9, wobei das Ausführen des decodierten Befehls von der Ausführungsschaltung ferner dient zum: Runden des reellen Teils des Produkts der ersten komplexen Zahl und der komplexen Konjugation der zweiten komplexen Zahl; und Runden des reellen Teils des Produkts der ersten komplexen Zahl und der komplexen Konjugation der zweiten komplexen Zahl.
  • 15. Verfahren aus Beispiel 14, wobei ein Rundungstyp für den reellen Teil und den imaginären Teil des Produkts unter Verwendung eines oder mehrerer Steuerbits ausgewählt wird.
  • 16. Verfahren aus Beispiel 15, wobei der Rundungstyp mindestens eines von Abschneiden, Konvergenzrunden oder Aufrunden einschließt.
  • 17. Nichtflüchtiges maschinenlesbares Medium, das einen Befehl speichert, der bei Ausführen von einem Prozessor bewirkt, dass der Prozessor ein Verfahren ausführt, wobei das Verfahren Folgendes umfasst: Decodieren eines Befehls mit Feldern für einen ersten und einen zweiten Quelloperanden für gepackte Daten und einen Zieloperanden für gepackte Daten, und Ausführen des decodierten Befehls von einer Ausführungsschaltung zum: Multiplexen von Datenwerten aus einer Mehrzahl von Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten zu mindestens einer Multiplikatorschaltung, wobei der erste und der zweite Quelloperand für gepackte Daten eine Mehrzahl von Paaren komplexer Zahlen aufweisen, wobei jedes Paar komplexer Zahlen Datenwerte an gemeinsamen Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten aufweist; Berechnen eines reellen Teils und eines imaginären Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl; und Speichern des reellen Teils in einer ersten Position von gepackten Datenelementen in dem Zieloperanden und Speichern des imaginären Teils in einer zweiten Position von gepackten Datenelementen in dem Zieloperanden.
  • 18. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 17, wobei der erste Quelloperand für gepackte Daten ein Register für gepackte Daten ist und der zweite Quelloperand für gepackte Daten ein Speicherort ist.
  • 19. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 17, wobei der erste Quelloperand für gepackte Daten ein Register für gepackte Daten ist und der zweite Quelloperand für gepackte Daten ein Register für gepackte Daten ist.
  • 20. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 17, wobei zum Berechnen eines reellen Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl die Ausführungsschaltung ferner dient zum: Ausgeben des reellen Teils und des imaginären Teils des Produkts jedes Paars komplexer Zahlen an ein Addierernetzwerk, um ein reelles Ergebnis und ein imaginäres Ergebnis zu berechnen.
  • 21. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 17, wobei der Zieloperand für gepackte Daten ein Register für gepackte Daten ist und die erste Position von gepackten Datenelementen eine untere 16-Bit des Registers für gepackte Daten ist und die zweite Position von gepackten Datenelementen eine nächste 16 Bit des Registers für gepackte Daten ist.
  • 22. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 17, wobei das Ausführen des decodierten Befehls von der Ausführungsschaltung ferner dient zum: Runden des reellen Teils des Produkts der ersten komplexen Zahl und der komplexen Konjugation der zweiten komplexen Zahl; und Runden des reellen Teils des Produkts der ersten komplexen Zahl und der komplexen Konjugation der zweiten komplexen Zahl.
  • 23. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 22, wobei ein Rundungstyp für den reellen Teil und den imaginären Teil des Produkts unter Verwendung eines oder mehrerer Steuerbits ausgewählt wird.
  • 24. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 23, wobei der Rundungstyp mindestens eines von Abschneiden, Konvergenzrunden oder Aufrunden einschließt.
  • Im Folgenden sind beispielhafte Befehlsformate, Architekturen und Systeme im Detail aufgeführt, die für die obigen detaillierten Befehle verwendet werden können. Zum Beispiel ist eine beispielhafte Pipeline detailliert, die die Befehle unterstützt, die eine Schaltung aufweist, um die hierin ausführlich beschriebenen Verfahren auszuführen.
  • Befehlssätze
  • Ein Befehlssatz schließt ein oder mehrere Befehlsformate ein. Ein gegebenes Befehlsformat definiert verschiedene Felder (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. Manche Befehlsformate sind durch die Definition von Befehlstemplates (oder Teilformaten) weiter aufgeschlüsselt. Zum Beispiel können die Befehlstemplates eines gegebenen Befehlsformats so definiert sein, dass sie unterschiedliche Teilsätze der Felder des Befehlsformats aufweisen (die enthaltenen Felder sind typischerweise in der gleichen Reihenfolge, aber wenigstens manche weisen unterschiedliche Bitpositionen auf, weil dort weniger Felder enthalten sind), und/oder so definiert sein, dass sie ein gegebenes Feld aufweisen, das unterschiedlich interpretiert wird. Dementsprechend wird jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats (und, falls definiert, in einem gegebenen der Befehlstemplates jenes Befehlsformats) ausgedrückt und beinhaltet Felder zum Spezifizieren der Operation und der Operanden. Zum Beispiel weist ein beispielhafter ADD-Befehl einen speziellen Opcode und ein Befehlsformat auf, das ein Opcode-Feld zum Spezifizieren dieses Opcodes und Operandenfelder zum Auswählen von Operanden (Quelle1/Ziel und Quelle 2) beinhaltet; und ein Auftreten dieses ADD-Befehls in einem Befehlsstrom wird spezielle Inhalte in den Operandenfeldern aufweisen, die spezielle Operanden auswählen.
  • Beispielhafte Befehlsformate
  • Ausführungsformen des/der hier beschrieben Befehls/Befehle können in verschiedenen Formaten umgesetzt werden. Außerdem sind beispielhafte Systeme, Architekturen und Pipelines nachstehend ausführlich beschrieben. Ausführungsformen des/der Befehls/Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf jene ausführlich beschriebenen beschränkt.
  • 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 128 Bits sind. Die Verwendung eines VEX-Präfixes stellt eine Syntax mit drei Operanden (oder mehr) bereit. Zum Beispiel führten frühere Zwei-Operanden-Befehle Operationen wie A = A + B durch, die einen Quelloperanden überschreiben. Die Verwendung eines VEX-Präfix ermöglicht Operanden, zerstörungsfreie Operationen wie A = B + C durchzuführen.
  • 4A veranschaulicht ein beispielhaftes AVX-Befehlsformat, einschließlich eines VEX-Präfixes 402, eines Feldes des reellen Opcodes 430, eines Mod-R/M-Bytes 440, eines SIB-Bytes 450, eines Verschiebungsfeldes 462 und IMM8 472. 4B veranschaulicht, welche Felder von 4 ein Feld des vollständigen Opcodes 474 und einen Basisoperationsfeld 441 bilden. 4C veranschaulicht, welche Felder von 4A ein Registerindexfeld 444 bilden.
  • Das VEX-Präfix (Bytes 0-2) 402 ist in einer Drei-Byte-Form codiert. Das erste Byte ist das Formatfeld 490 (VEX-Byte 0, Bits [7:0]), das einen expliziten C4-Byte-Wert (der eindeutige Wert, der zum Unterscheiden des C4-Befehlsformats verwendet wird) enthält. Die zweiten bis dritten Bytes (EVEX-Bytes 1-2) beinhalten eine Anzahl an Bitfeldern, die eine spezielle Fähigkeit bereitstellen. Insbesondere besteht das REX-Feld 405 (VEX-Byte 1, Bits [7-5]) aus einem VEX.R-Bit-Feld (VEX-Byte 1, Bit [7] -R), VEX.X-Bit-Feld (VEX-Byte 1, Bit [6] -X) und VEX.B-Bit-Feld (VEX-Byte 1, Bit [5] - B). Andere Felder der Befehle codieren die unteren drei Bits der Registerindizes wie im Stand der Technik 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. Das Opcode-Karten-Feld 415 (VEX-Byte 1, Bits [4:0] - mmmmm) schließt Inhalt ein, um ein impliziertes führendes Opcode-Byte zu codieren. Das W-Feld 464 (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 420 (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, das Feld ist reserviert und sollte 1111b enthalten. Wenn das VEX.L 468-Größen-Feld (VEX-Byte 2, Bit [2]-L) = 0, wird ein 128-Bit-Vektor angezeigt; wenn VEX.L = 1, wird ein 256-Bit-Vektor angezeigt. Das Präfixcodierungsfeld 425 (VEX-Byte 2, Bits [1:0]-pp) stellt zusätzliche Bits für das Basisoperationsfeld 441 bereit.
  • Real-Opcode-Feld 430 (Byte 3) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • Das MOD-R/M-Feld 440 (Byte 4) schließt das MOD-Feld 442 (Bits [7-6]), das Reg.-Feld 444 (Bits [5-3]) und das R/M-Feld 446 (Bits [2-0]) ein. Die Rolle von Reg-Feld 444 kann das Folgende beinhalten: Codieren von entweder dem Zielregisteroperanden oder einem Quellenregisteroperanden (dem rrr von Rrrr) oder als eine Opcode-Erweiterung behandelt werden und nicht zum Codieren irgendeines Befehlsoperanden verwendet werden. Die Rolle von R/M-Feld 446 kann das Folgende beinhalten: Codieren des Befehlsoperanden, der eine Speicheradresse referenziert, oder Codieren von entweder dem Zielregisteroperanden oder einem Quellenregisteroperanden.
  • Skalierung, Index, Basis (SIB) - der Inhalt des Skalierungsfeldes 450 (Byte 5) schließt SS 452 (Bits [7-6]) ein, das zur Speicheradressgenerierung verwendet wird. Auf die Inhalte von SIB.xxx 454 (Bits [5-3]) und SIB.bbb 456 (Bits [2-0]) wurde zuvor bezogen auf die Registerindizes Xxxx und Bbbb Bezug genommen.
  • Das Verschiebungsfeld 462 und das Feld des unmittelbaren Elements (IMM8) 472 enthalten Daten.
  • Beispielhafte Registerarchitektur
  • 5 ist ein Blockdiagramm einer Registerarchitektur 500 gemäß einer Ausführungsform der Erfindung. In der veranschaulichten Ausführungsform gibt es 32 Vektorregister 510, die 512 Bit breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die 256 Bit niedriger Ordnung der unteren 11 zmm-Register werden auf Register ymm0-15 überlagert. Die 128 Bit niedriger Ordnung der unteren 11 zmm-Register (die 128 Bit niedriger Ordnung der ymm-Register) werden auf Register xmm0-15 überlagert.
  • Mehrzweckregister 525 - bei der veranschaulichten Ausführungsform gibt es sechzehn 64-Bit-Mehrzweckregister, die zusammen mit den existierenden 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 bezeichnet.
  • Die Skalare Gleitkommastapel-Registerdatei (x87-Stapel) 545, auf der die MMXgepackte Integer-Flat-Registerdatei 550 aliasiert ist - in der dargestellten Ausführungsform ist der x87-Stapel ein Stapel mit acht Elementen, der zur Durchführung von skalaren Gleitkomma-Operationen auf 32-/64-/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung genutzt wird; während die MMX-Register dafür verwendet werden, Operationen an gepackten 64-Bit-Ganzzahldaten durchzuführen sowie Operanden für manche Operationen zu halten, die zwischen den MMX- und XMM-Registern durchgeführt werden.
  • Alternative Ausführungsformen der Erfindung können breitere oder schmalere 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 Arten, für verschiedene Zwecke und in unterschiedlichen Prozessoren umgesetzt sein. Beispielsweise können Umsetzungen solcher Kerne Folgendes beinhalten: 1) einen universellen reihenfolgetreuen (In-order) Kern, gedacht für universelles Rechnen; 2) einen universellen reihenfolgeveränderten (Out-of-order) Hochleistungskern, gedacht für universelles Rechnen; 3) einen speziellen Kern, primär gedacht für Grafik und/oder wissenschaftliche (Durchsatz) Berechnung. Umsetzungen von unterschiedlichen Prozessoren können umfassen: 1) eine CPU, einen oder mehrere universelle reihenfolgetreue (In-order) Kerne, gedacht für universelles Rechnen, umfassend, und/oder einen oder mehrere universelle reihenfolgeveränderte (Out-of-order) Kerne, gedacht für universelles Rechnen; und 2) einen Coprozessor, einen oder mehrere spezielle Kerne, primär gedacht für Grafik und/oder Wissenschaft (Durchsatz), umfassend. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die Folgendes umfassen können: 1) den Coprozessor auf einem von der CPU separaten Chip; 2) den Coprozessor auf einem separaten Die im gleichen Chipgehäuse wie eine CPU; 3) den Coprozessor auf dem gleichen Die wie eine CPU (in diesem Fall wird ein solcher Coprozessor manchmal als spezielle Logik, wie etwa als integrierte Grafik und/oder wissenschaftliche (Durchsatz) Logik, oder als spezielle Kerne bezeichnet); und 4) ein System auf einem Chip, das auf demselben Die die beschriebene CPU (manchmal als der bzw. die Anwendungskerne oder Anwendungsprozessoren bezeichnet), den oben beschriebenen Coprozessor und zusätzliche Funktionalität umfassen kann. Beispielhafte Kernarchitekturen sind als Nächstes beschrieben, gefolgt von Beschreibungen beispielhafter Prozessoren und Computerarchitekturen. Hierin ausführlich beschrieben sind Schaltungen (Einheiten), die beispielhafte Kerne, Prozessoren usw. umfassen.
  • Beispielhafte Kernarchitekturen
  • In-Order- und Out-of-order-Kern-Blockdiagramm
  • 6A 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. 6B 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 6A-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/-Ausfuhrung veranschaulicht. Dadurch, dass der In-order-Aspekt ein Teilsatz des Out-of-order-Aspekts ist, wird der Out-of-order-Aspekt beschrieben.
  • In 6A schließt eine Prozessor-Pipeline 600 eine Abrufen-Stufe 602, eine Längendecodieren-Stufe 604, eine Decodieren-Stufe 606, eine Zuordnungsstufe 608, eine Umbenennungsstufe 610, eine Planungs- (auch bekannt als eine Sende- oder Ausgabe-)Stufe 612, eine Registerlesen/Speicherlesen-Stufe 614, eine Ausführungsstufe 616, eine Zurückschreiben-/Speicherschreiben-Stufe 618, eine Ausnahmebehandlungsstufe 622 und eine Anwendungsstufe 624 ein.
  • 6B zeigt einen Prozessorkern 690, einschließlich einer Front-End-Einheit 630, die an eine Ausführungsmoduleinheit 650 gekoppelt ist, und beide sind an eine Speichereinheit 670 gekoppelt. Der Kern 690 kann ein Kern für Rechnen mit reduziertem Befehlssatz (Reduced Instruction Set Computing, RISC), ein Kern für Rechnen mit komplexem Befehlssatz (Complex Instruction Set Computing, CISC), 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 690 ein spezieller Kern sein, wie etwa, beispielsweise, ein Netzwerk- oder Kommunikationskern, eine Komprimierungsengine, ein Coprozessorkern, ein universeller Berechnungskern für Grafikprozessoreinheiten (GPGPU, General Purpose Computing Graphics Processing Unit), ein Grafikkern oder ähnliches.
  • Die Frontendeinheit 630 umfasst eine Verzweigungsvorhersageeinheit 632, gekoppelt mit einer Befehlscacheeinheit 634, die mit einem Befehlsübersetzungspuffer (TLB, Instruction Translation Lookaside Buffer) 636 gekoppelt ist, der mit einer Befehlsabrufeinheit 638 gekoppelt ist, die mit einer Decodiereinheit 640 gekoppelt ist. Die Decodiereinheit 640 (oder der Decoder) kann Befehle decodieren und eine(n) oder mehrere Mikrooperationen, Mikrocodeeintragspunkte, Mikrobefehle oder andere Befehle oder andere Steuersignale, die aus den ursprünglichen Befehlen decodiert wurden oder diese anderweitig reflektieren oder anderweitig von diesen abgeleitet sind, als eine Ausgabe erzeugen. Die Decodiereinheit 640 kann unter Verwendung verschiedener unterschiedlicher Mechanismen umgesetzt sein. Beispiele von geeigneten Mechanismen umfassen, unter anderem, Nachschlagetabellen, Hardwareumsetzungen, programmierbare Logikarrays (PLAs), Mikrocode-Nur-Lese-Speicher (ROMs, Read Only Memories) usw. In einer Ausführungsform umfasst der Kern 690 einen Mikrocode-ROM oder ein anderes Medium, das Mikrocode für gewisse Makrobefehle speichert (z. B. in Decodiereinheit 640 oder anderweitig innerhalb der Frontendeinheit 630). Die Decodiereinheit 640 ist mit einer Umbenennungs-/Zuordnungseinheit 652 in der Ausführungsengineeinheit 650 gekoppelt.
  • Die Ausführungs-Engine-Einheit 650 umfasst die Umbenennungs-/Zuordnungseinheit 652, gekoppelt mit einer Zurückzieheinheit 654 und einer Menge von einer oder mehreren Ablaufsteuerungseinheiten 656. Die Ablaufsteuerungseinheit(en) 656 stellt bzw. stellen eine beliebige Anzahl von unterschiedlichen Ablaufsteuerungseinheiten dar, einschließlich Reservierungsstationen, zentralem Befehlsfenster usw. Ablaufsteuerungseinheit(en) 656 ist bzw. sind mit der bzw. den physischen Registerdateieinheiten 658 gekoppelt. Alle Einheit(en) der physikalischen Registerdatei(en) 658 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) 658 eine Vektorregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Mehrzweckregister bereitstellen. Die physische(n) Registerdatei(en)-Einheit(en) 658 wird/werden von der Zurückzieheinheit 654 überlappt, um verschiedene Wege zu veranschaulichen, wie Registerumbenennung und Außer-Reihenfolge-Ausführung implementiert werden können (z. B. unter Verwendung eines oder mehrerer Neuordnungspuffer und Rückzugregisterdatei(en); Verwendung einer zukünftigen Datei/zukünftiger Dateien, eines Verlaufspuffers/ mehrerer Verlaufspuffer und einer Rückzugregisterdatei/ mehrerer Rückzugregisterdateien; Verwendung einer Registerzuordnungen und eines Registerpools usw.). Die Zurückzieheinheit 654 und die physische(n) Registerdatei(en)einheit(en) 658 sind mit dem (den) Ausführungscluster(n) 660 gekoppelt. Das/die Ausführungscluster 660 beinhaltet/beinhalten einen Satz einer oder mehrerer Ausführungseinheiten 662 und einen Satz einer oder mehrerer Speicherzugriffseinheiten 664. Die Ausführungseinheiten 662 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und an verschiedenen Typen von Daten (z. B. Skalargleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzahl, Vektorgleitkomma) durchführen. Während manche Ausführungsformen eine Anzahl von Ausführungseinheiten beinhalten können, die für spezielle Funktionen oder Sätze von Funktionen dediziert sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten, die allesamt alle Funktionen durchführen, beinhalten. Die Planereinheit(en) 656, die physische(n) Registerdatei(en)einheit(en) 658 und Ausführungscluster 660 sind als möglicherweise mehrere gezeigt, weil gewisse Ausführungsformen getrennte Pipelines für gewisse Typen von Daten/Operationen erschaffen (z. B. eine Skalarganzzahl-Pipeline, eine Skalargleitkomma-/gepackte Ganzzahl-/ gepackte Gleitkomma-/Vektorganzzahl-/Vektorgleitkomma-Pipeline und/oder eine Speicherzugriff-Pipeline, die jeweils ihre eigene/n Planereinheit, physische Registerdatei(en)einheit und/oder Ausführungscluster aufweisen - und im Fall einer getrennten Speicherzugriff-Pipeline sind gewisse Ausführungsformen implementiert, bei denen nur das Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 664 aufweist). Es versteht sich auch, dass, wenn getrennte Pipelines verwendet werden, eine oder mehrere dieser Pipelines Außer-Reihenfolge-Ausgabe-/Ausführung und der Rest In-Reihenfolge sein können.
  • Der Satz von Speicherzugriffseinheiten 664 ist mit der Speichereinheit 670 gekoppelt, die eine Daten-TLB-Einheit 672 beinhaltet, die mit einer Datencacheeinheit 674 gekoppelt ist, die mit einer Level-2-(L2)-Cacheeinheit 676 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 664 eine Ladeeinheit, eine Adressenspeichereinheit und eine Datenspeichereinheit beinhalten, wovon jede mit der Daten-TLB-Einheit 672 in der Speichereinheit 670 gekoppelt ist. Die Befehlscacheeinheit 634 ist ferner mit einer Level-2-(L2)-Cacheeinheit 676 in der Speichereinheit 670 gekoppelt. Die L2-Cacheeinheit 676 ist mit einem oder mehreren anderen Leveln eines Caches und schlussendlich mit einem Hauptspeicher verbunden.
  • Beispielsweise kann die beispielhafte Registerumbenennung-Außer-Reihenfolge-Ausgabe-/Ausführung-Kern-Architektur die Pipeline 600 wie folgt implementieren: 1) der Befehlsabruf 638 führt die Abruf- und Längendecodierstufen 602 und 604 durch; 2) die Decodiereinheit 640 führt die Decodierstufe 606 durch; 3) die Umbenennungs-/Zuordnungseinheit 652 führt die Zuordnungsstufe 608 und die Umbenennungsstufe 610 durch; 4) die Ablaufsteuereinheit(en) 656 führt bzw. führen die Ablaufsteuerungsstufe 612 durch; 5) die physische(n) Registerdatei(en)einheit(en) 658 und die Speichereinheit 670 führen die Registerlese-/Speicherlesestufe 614 durch; das Ausführungscluster 660 führt die Ausführungsstufe 616 durch; 6) die Speichereinheit 670 und die physische(n) Registerdatei(en)einheit(en) 658 führen die Zurückschreibe-/Speicherschreibestufe 618 durch; 7) verschiedene Einheiten können in der Ausnahmenbehandlungsstufe 622 beteiligt sein und 8) die Zurückzieheinheit 654 und die physische(n) Registerdatei(en)einheit(en) 658 führen die Commit-Stufe 624 durch.
  • Der Kern 690 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, Sunnyvale, CA; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) von ARM Holdings, Sunnyvale, CA), einschließlich der hierin beschriebenen Befehle. In einer Ausführungsform beinhaltet der Kern 690 Logik zum Unterstützen einer Gepackte-Daten-Befehlssatzerweiterung (z. B. AVX1, AVX2), wodurch ermöglicht wird, dass die durch viele Multimediaanwendungen verwendeten Operationen unter Verwendung gepackter Daten durchgeführt werden.
  • Es versteht sich, dass der Kern Multithreading (Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies auf vielfältige Weisen vornehmen kann, einschließlich Zeitscheiben-Multithreading, Simultan-Multithreading (wobei ein einzelner physischer Kern einen logischen Kern für jeden der Threads bereitstellt, die der physische Kern simultan im Multithreading behandelt), oder eine Kombination davon (z. B. Zeitscheiben-Abruf und -Decodierung und simultanes Multithreading danach, wie etwa bei der Hyperthreading-Technologie von Intel®).
  • Während Registerumbenennung in dem Zusammenhang einer Außer-Reihenfolge-Ausführung beschrieben ist, versteht es sich, dass Registerumbenennung in einer In-Reihenfolge-Architektur verwendet werden kann. Während die veranschaulichte Ausführungsform des Prozessors auch getrennte Befehls- und Datencacheeinheiten 634/674 und eine geteilte L2-Cacheeinheit 676 beinhaltet, können alternative Ausführungsformen einen einzelnen internen Cache für sowohl Befehle als auch Daten aufweisen, wie etwa beispielsweise einen internen Level-1-(L1)-Cache oder mehrere Level eines internen Cache. In manchen Ausführungsformen kann das System eine Kombination eines internen Cache und eines externen Cache, der extern bezüglich des Kerns und/oder des Prozessors ist, beinhalten. Alternativ kann der gesamte Cache extern bezüglich des Kerns und/oder des Prozessors sein.
  • Spezielle beispielhafte In-Reihenfolge-Kernarchitektur
  • 10A-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 Logikblöcke kommunizieren über ein Verbindungsnetzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit einigen festen Funktionslogiken, Speicher-E/A-Schnittstellen und anderen notwendigen E/A-Logiken, in Abhängigkeit von der Anwendung.
  • 7A ist ein Blockdiagramm eines Einzelprozessorkerns zusammen mit dessen Verbindung zu einem On-Die Verbindungsnetzwerk 702 und mit dessen lokalem Teilsatz des Level 2 (L2)-Cache 704 gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdecoder 700 den x86-Befehlssatz mit einer Befehlssatzerweiterung für gepackte Daten. Ein L1-Cache 706 ermöglicht Zugriffe mit geringer Latenz auf Cachespeicher in die Skalar- und Vektoreinheiten. Während in einer Ausführungsform (um die Gestaltung zu vereinfachen) eine Skalareinheit 708 und eine Vektoreinheit 710 getrennte Registersätze verwenden (Skalarregister 712 bzw. Vektorregister 714) und zwischen ihnen übertragene Daten in einen Speicher geschrieben und dann aus einem Level-1-(L1)-Cache 706 zurück eingelesen werden, können alternative Ausführungsformen der Erfindung einen anderen Ansatz verwenden (z. B. einen einzelnen Registersatz verwenden oder einen Kommunikationspfad umfassen, der ermöglicht, dass Daten zwischen den zwei Registerdateien übertragen werden, ohne geschrieben und zurückgelesen zu werden).
  • Der lokale Teilsatz des L2-Cache 704 ist Teil eines globalen L2-Cache, der in getrennte lokale Teilsätze, einer pro Prozessorkern, unterteilt ist. Jeder Prozessorkern weist einen direkten Zugriffspfad auf seinen eigenen lokalen Teilsatz des L2-Cache 704 auf. Daten, die von einem Prozessorkern gelesen werden, werden in seinem L2-Cache-Teilsatz 704 gespeichert und auf sie kann schnell parallel zu anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen, zugegriffen werden. Von einem Prozessorkern geschriebene Daten werden in dessen eigenem L2-Cacheteilsatz 704 gespeichert und werden, wenn nötig, aus anderen Teilsätzen ausgeräumt. Das Ringnetz stellt eine Kohärenz für geteilte Daten sicher. Das Ringnetz ist bidirektional, um zu ermöglichen, dass Agenten wie etwa Prozessorkerne L2-Caches und andere Logikblöcke miteinander innerhalb des Chips kommunizieren. Jeder Ringdatenpfad ist in einigen Ausführungsformen je Richtung 724 Bits breit.
  • 7B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 7A gemäß Ausführungsformen der Erfindung. 7B schließt einen Teil des LI-Daten-Cache 706A des L1-Cache 704 und mehr Details in Bezug auf die Vektoreinheit 710 und das Vektorregister 714 ein. Insbesondere ist die Vektoreinheit 710 eine 11-breite Vektorverarbeitungseinheit (Vector Processing Unit, VPU) (siehe die 16-breite ALU 728), 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 720, eine numerische Konvertierung mit den Einheiten zur numerischen Konvertierung 722A-B und eine Replikation mit einer Replikationseinheit 724 bei der Speichereingabe.
  • Prozessor mit integrierter Speichersteuerung und Grafik
  • 8 ist ein Blockdiagramm eines Prozessors 800 gemäß Ausführungsformen der Erfindung, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und eine integrierte Grafik aufweisen kann. Die Kästchen mit durchgezogenen Linien in 8 veranschaulichen einen Prozessor 800 mit einem Einzelkern 802A, einem Systemagenten 810, einem Satz von einer oder mehreren Bus-Controller-Einheiten 816, während die optionale Hinzufügung der Kästchen mit gestrichelten Linien einen alternativen Prozessor 800 mit mehreren Kernen 802A-N, einen Satz von einer oder mehreren integrierten Speicher-Controller-Einheit(en) 814 in der Systemagenteneinheit 810 und eine Speziallogik 808 veranschaulicht.
  • Somit können verschiedene Implementierungen des Prozessors 800 Folgendes einschließen: 1) eine CPU mit der Speziallogik 808, die eine integrierte Grafik- und/oder wissenschaftliche (Durchsatz-)Logik ist (die einen oder mehrere Kerne einschließen kann), und die Kerne 802A-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 802A-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 802A-N eine große Anzahl von In-order-Universalkernen sind. Somit kann der Prozessor 800 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 800 kann ein Teil eines oder mehrerer Substrate, die eine beliebige einer Anzahl von Prozesstechnologien nutzen wie etwa beispielsweise BiCMOS, CMOS oder NMOS, sein und/oder auf solchen implementiert sein.
  • Die Speicherhierarchie schließt ein oder mehrere Cache-Level in den Kernen 804A-N, einen Satz oder eine oder mehrere gemeinsame Cache-Einheiten 806 und externen Speicher (nicht gezeigt), der an den Satz von integrierten Speichersteuereinheiten 814 gekoppelt ist, ein. Der Satz von gemeinsamen Cache-Einheiten 806 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 Zwischenverbindungseinheit 812 die integrierte Grafiklogik 808, den Satz geteilter Cacheeinheiten 806 und die Systemagentenheinheit 810/integrierte Speichersteuereinheit(en) 814 miteinander verbindet, können alternative Ausführungsformen eine beliebige Anzahl wohlbekannter Techniken zum Zwischenverbinden solcher Einheiten verwenden. In einer Ausführungsform wird Kohärenz zwischen einer oder mehreren Cacheeinheiten 806 und Kernen 802-A-N beibehalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 802A-N zum Multithreading in der Lage. Der Systemagent 810 schließt die Komponenten ein, die die Kerne 802A-N koordinieren und betreiben. Die Systemagenteneinheit 810 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 802A-N und der integrierten Grafiklogik 808 erforderlich sind. Die Anzeigeeinheit dient zum Ansteuern von einer oder mehreren extern verbundenen Anzeigen.
  • Die Kerne 802A-N können in Bezug auf den Architekturbefehlssatz homogen oder heterogen sein; das heißt, zwei oder mehrere der Kerne 802A-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
  • 9-12 sind Blockdiagramme von beispielhaften Computerarchitekturen. Andere Systemgestaltungen und Konfigurationen, die in der Technik für Laptops, Desktops, Handheld-PC, persönliche digitale Assistenten, technische Workstations, Server, Netzwerkvorrichtungen, Netzwerk-Hubs, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSP), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, portable Medienabspieler, tragbare Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind ebenfalls geeignet. Allgemein ist eine große Vielzahl an Systemen oder elektronischen Vorrichtungen, die zum Einbinden eines Prozessors und/oder anderer Ausführungslogik, wie hier offenbart, fähig sind, allgemein geeignet.
  • Nun, bezugnehmend auf 9, ist ein Blockdiagramm eines Systems 900 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 900 kann einen oder mehrere Prozessoren 910, 915 beinhalten, die mit einem Steuer-Hub 920 gekoppelt sind. In einer Ausführungsform weist der Steuerungs-Hub 920 einen Grafikspeicher-Steuerungs-Hub (GMCH) 990 und einen Eingabe/Ausgabe-Hub (IOH) 950 auf (die sich auf separaten Chips befinden können); der GMCH 990 weist Speicher- und Grafiksteuerungen auf, mit denen ein Speicher 940 und ein Coprozessor 945 verbunden sind; der IOH 950 koppelt Eingabe/Ausgabe (I/O) -Geräte 960 mit dem GMCH 990. Alternativ dazu sind einer oder beide der Speicher- und Grafik-Controller in den Prozessor integriert (wie hierin beschrieben), sind der Speicher 940 und der Coprozessor 945 direkt an den Prozessor 910 gekoppelt und der Controller-Hub 920 in einem einzelnen Chip mit dem IOH 950.
  • Die optionale Art der zusätzlichen Prozessoren 915 ist in 9 mit gestrichelten Linien gekennzeichnet. Jeder Prozessor 910, 915 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne beinhalten und kann irgendeine Version des Prozessors 900 sein.
  • Der Speicher 940 kann zum Beispiel dynamischer Direktzugriffsspeicher (DRAM, Direct Random Access Memory), Phasenwechselspeicher (PCM, Phase Change Memory) oder eine Kombination der beiden sein. In zumindest einer Ausführungsform kommuniziert der Steuerungsknoten 920 mit dem bzw. den Prozessoren 910, 915 über einen Multi-Drop-Bus, wie etwa einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle oder eine ähnliche Verbindung 995.
  • In einer Ausführungsform ist der Coprozessor 945 ein Spezialprozessor wie etwa beispielsweise ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Steuer-Hub 920 einen integrierten Grafikbeschleuniger beinhalten.
  • Es kann eine Vielzahl an Unterschieden hinsichtlich eines Spektrums an Leistungsmetriken, einschließlich Architektur-, Mikroarchitektur-, thermischen, Leistungsverbraucheigenschaften und dergleichen, zwischen den physischen Ressourcen 910, 915 geben.
  • In einer Ausführungsform führt der Prozessor 910 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. Eingebettet in die Befehle können Coprozessorbefehle sein. Der Prozessor 910 erkennt diese Coprozessorbefehle als von einem Typ, der durch den angehängten Coprozessor 945 ausgeführt werden sollte. Entsprechend gibt der Prozessor 910 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle repräsentieren) auf einem Coprozessorbus oder einer anderen Zwischenverbindung an den Coprozessor 945 aus. Coprozessor(en) 945 nimmt/nehmen die empfangenen Coprozessorbefehle an und führt/führen diese aus.
  • Nun, bezugnehmend auf 10, ist ein Blockdiagramm eines ersten spezielleren beispielhaften Systems 1000 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 10 dargestellt, ist das Multiprozessorsystem 1000 ein Punkt-zu-Punkt-Verbindungssystem und weist einen ersten Prozessor 1070 und einen zweiten Prozessor 1080 auf, die über eine Punkt-zu-Punkt-Verbindung 1050 gekoppelt sind. Jeder von Prozessoren 1070 und 1080 kann irgendeine Version des Prozessors 800 sein. In einer Ausführungsform der Erfindung sind Prozessoren 1070 und 1080 die Prozessoren 910 bzw. 915, während Coprozessor 1038 der Coprozessor 945 ist. In einer anderen Ausführungsform sind Prozessoren 1070 und 1080 der Prozessor 910 bzw. der Coprozessor 945.
  • Die Prozessoren 1070 und 1080 sind einschließlich IMC-Einheiten (IMC: Integrated Memory Controller - Integrierter-Speicher-Steuerung) 1072 bzw. 1082 gezeigt. Auch beinhaltet der Prozessor 1070 als Teil seiner Bussteuereinheiten Punkt-zu-Punkt-(P-P)-Schnittstellen 1076 und 1078; gleichermaßen beinhaltet der zweite Prozessor 1080 P-P-Schnittstellen 1086 und 1088. Die Prozessoren 1070 und 1080 können Informationen über eine Punkt-zu-Punkt-(P-P)-Schnittstelle 1050 unter Verwendung von P-P-Schnittstellenschaltungen 1078, 1088 austauschen. Wie in 10 gezeigt, koppeln IMC 1072 und 1082 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 1032 und einem Speicher 1034, die Teile eines Hauptspeichers sein können, die lokal an die jeweiligen Prozessoren angehängt sind.
  • Die Prozessoren 1070, 1080 können jeweils Informationen über individuelle P-P-Schnittstellen 1052, 1054 mit einem Chipsatz 1090 unter Verwendung von Punkt-zu-Punkt-Schnittstelle-Schaltungen 1076, 1094, 1086, 1098 austauschen. Der Chipsatz 1090 kann optional Informationen mit dem Coprozessor 1038 über eine Hochleistungsschnittstelle 1092 austauschen. In einer Ausführungsform ist der Coprozessor 1038 ein Spezialprozessor wie etwa beispielsweise ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein geteilter Cache (nicht dargestellt) kann in beiden Prozessoren oder außerhalb beider Prozessoren enthalten sein, jedoch über eine P-P-Zwischenverbindung mit den Prozessoren verbunden sein, sodass lokale Cacheinformationen eines oder beider Prozessoren in dem geteilten Cache gespeichert werden können, falls ein Prozessor in einen Niederleistungsmodus gesetzt wird.
  • Der Chipsatz 1090 kann über eine Schnittstelle 1096 mit einem ersten Bus 1016 gekoppelt werden. In einer Ausführungsform kann der erste Bus 1016 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 10 dargestellt, können verschiedene I/O-Vorrichtungen 1014 mit dem ersten Bus 1016 gekoppelt sein, zusammen mit einer Busbrücke 1018, die den ersten Bus 1016 mit einem zweiten Bus 1020 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 1015, wie etwa Coprozessoren, Hochdurchsatz-MIC-Prozessoren, GPGPU, Beschleuniger (wie etwa z. B. Grafikbeschleuniger oder DSP-Einheiten (DSP: Digital Signal Processing - digitale Signalverarbeitung)), vor Ort programmierbare Gate-Arrays oder ein beliebiger anderer Prozessor, mit dem ersten Bus 1016 gekoppelt. In einer Ausführungsform kann der zweite Bus 1020 ein LPC-(Low Pin Count)-Bus sein. Verschiedene Vorrichtungen können mit einem zweiten Bus 1020 gekoppelt sein, der zum Beispiel eine Tastatur und/oder Maus 1022, Kommunikationsvorrichtungen 1027 und eine Speichereinheit 1028 wie ein Plattenlaufwerk oder eine andere Massenspeichervorrichtung, die Befehle/Code und Daten 1030 aufweisen können, in einer Ausführungsform umfasst. Ferner kann eine Audio-E/A 1024 mit dem zweiten Bus 1016 gekoppelt sein. Es sei angemerkt, dass andere Architekturen möglich sind. Zum Beispiel kann anstelle der Punkt-zu-Punkt-Architektur aus 10 ein System einen Multi-Drop-Bus oder eine andere solche Architektur implementieren.
  • Nun Bezug nehmend auf 11 ist ein Blockdiagramm eines zweiten spezifischeren Beispielsystems 1100 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in 10 und 11 tragen gleiche Bezugszeichen, und bestimmte Aspekte von 10 wurden in 11 weggelassen, um eine Verunklarung anderer Aspekte von 11 zu vermeiden.
  • 11 veranschaulicht, dass die Prozessoren 1070, 1080 eine integrierte Speicher- und E/A-Steuerlogik (Control Logic, CL) 1172 bzw. 1182 einschließen können. Dementsprechend beinhaltet die CL 1172, 1182 integrierte Speichersteuereinheiten und beinhaltet E/A-Steuerlogik. 11 veranschaulicht ferner, dass nicht nur Speicher 1032, 1034 mit der CL 1072, 1082 gekoppelt sind, sondern auch, dass E/A-Vorrichtungen 1114 ebenfalls mit der Steuerlogik 1072, 1082 gekoppelt sind. Veraltete E/A-Vorrichtungen 1115 sind mit dem Chipsatz 1090 gekoppelt.
  • Nun, bezugnehmend auf 12, ist ein Blockdiagramm eines SoC 1200 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in 8 tragen gleiche Bezugsziffern. Außerdem sind Kästchen mit gestrichelten Linien optionale Merkmale auf fortschrittlicheren SoC. In 12 sind Verbindungseinheit(en) 1202 an Folgendes gekoppelt: einen Anwendungsprozessor 1210, der einen Satz von einem oder mehreren Kernen 1220A-N, Cache-Einheiten 804A-N und gemeinsame Cache-Einheit(en) 806; eine Systemagenteneinheit 810; Bus-Controller-Einheit(en) 816; integrierte Speicher-Controller-Einheit(en) 814; einen Satz oder einen oder mehrere Coprozessoren 1220, 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)1230; eine Einheit mit direktem Speicherzugriff (Direct Memory Access, DMA) 1232; und eine Anzeigeeinheit 1240 zum Koppeln an eine oder mehrere externe Anzeigen einschließt. In einer Ausführungsform schließen die Coprozessor(en) 1220 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 hier offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsansätze implementiert werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert werden, die auf programmierbaren Systemen ausgeführt werden, die wenigstens einen Prozessor, ein Speichersystem (einschließlich flüchtigen und nichtflüchtigen Speichers und/oder Speicherelementen), wenigstens eine Eingabevorrichtung und wenigstens eine Ausgabevorrichtung umfassen.
  • Programmcode, wie der in 10 veranschaulichte Code 1030, kann angewendet werden, um Befehle zum Durchführen der hierin beschriebenen Funktionen einzugeben und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können auf eine oder mehrere Ausgabevorrichtungen auf bekannte Weise angewandt werden. Zum Zweck dieser Anmeldung beinhaltet ein Verarbeitungssystem ein beliebiges System, das einen Prozessor aufweist, wie etwa zum Beispiel einen digitalen Signalprozessor (DSP), einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (ASIC: Application Specific Integrated Circuit) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren prozeduralen oder objektorientierten Programmiersprache implementiert werden, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann, falls gewünscht, auch in einer Assembler- oder Maschinensprache implementiert werden. Tatsächlich sind die hier beschriebenen Mechanismen in dem Schutzumfang nicht auf irgendeine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte von zumindest einer Ausführungsform können durch repräsentative Befehle, gespeichert auf einem maschinenlesbaren Medium, das unterschiedliche Logik innerhalb des Prozessors repräsentiert, umgesetzt sein, die, wenn von einer Maschine gelesen, die Maschine veranlassen, Logik zu erzeugen, um die hier beschriebenen Techniken durchzuführen. Solche Repräsentationen, auch als „IP-Kerne“ bekannt, können auf einem greifbaren, maschinenlesbaren Medium gespeichert und verschiedenen Kunden oder Fertigungseinrichtungen bereitgestellt werden, um in die Fertigungsmaschinen geladen zu werden, die die Logik oder den Prozessor tatsächlich fertigen.
  • Solche maschinenlesbaren Speichermedien können ohne Einschränkung nicht-flüchtige, greifbare Anordnungen von Artikeln einschließen, die durch eine Maschine oder ein Gerät hergestellt oder gebildet werden, einschließlich Speichermedien wie Festplatten, jede andere Art von Laufwerken, einschließlich Disketten, optische Disketten, CD-ROMs, CD-RWs und magneto-optische Platten, Halbleitervorrichtungen wie Nur-Lese-Speicher (ROMs), Direktzugriffsspeicher (RAMs) wie dynamische Direktzugriffsspeicher (DRAMs), statische Direktzugriffsspeicher (SRAMs), löschbare programmierbare Nur-Lese-Speicher (EPROMs), Flash-Speicher, elektrisch löschbare programmierbare Nur-Lese-Speicher (EEPROMs), Phasenwechselspeicher (PCM), magnetische oder optische Karten oder dergleichen oder jede andere Art von Medien, die zum Speichern elektronischer Befehle geeignet sind.
  • Entsprechend umfassen Ausführungsformen der Erfindung auch nicht-flüchtige, greifbare, maschinenlesbare Medien, Befehle enthaltend oder Konzeptionsdaten enthaltend, wie etwa Hardwarebeschreibungssprache (HDL, Hardware Description Language), die Strukturen, Schaltungen, Einrichtungen, Prozessoren und/oder Systemmerkmale, wie hier beschrieben, definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich Binärübersetzung, Code-Morphing sw.)
  • In einigen Fällen kann ein Befehlsumwandler verwendet werden, um einen Befehl aus einem Quellbefehlssatz in einen Zielbefehlssatz umzuwandeln. Beispielsweise kann der Befehlsumwandler einen Befehl in einen oder mehrere andere Befehle, die durch den Kern zu verarbeiten sind, übersetzen (z. B. unter Verwendung von statischer binärer Übersetzung, dynamischer binärer Übersetzung, einschließlich dynamischer Kompilierung), morphen, emulieren oder anderweitig umwandeln. Der Befehlsumwandler kann in Software, Hardware, Firmware oder einer Kombination daraus umgesetzt sein. Der Befehlsumwandler kann auf dem Prozessor, außerhalb des Prozessors oder teilweise auf und teilweise außerhalb des Prozessors sein.
  • 13 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 dargestellten Ausführungsform ist der Befehlsumwandler ein Softwarebefehlsumwandler, obwohl der Befehlsumwandler alternativ in Software, Firmware, Hardware oder verschiedenen Kombinationen daraus umgesetzt sein kann. 13 zeigt ein Programm in einer höheren Sprache 1302, das unter Verwendung eines ersten Compilers 1304 kompiliert werden kann, um einen ersten Binärcode (z. B. x86) 1306 zu erzeugen, der von einem Prozessor mit mindestens einem ersten Befehlsatz-Kern 1316 nativ ausgeführt werden kann. In einigen Ausführungsformen repräsentiert der Prozessor mit zumindest einem Befehlssatzkern 1316 jeden Prozessor, der im Wesentlichen die gleichen Funktionen durchführen kann wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern durch kompatibles Ausführen oder anderweitiges Verarbeiten (1) eines wesentlichen Teils des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) von Objektcodeversionen von Anwendungen oder anderer Software, dazu bestimmt, auf einem Intel-Prozessor mit zumindest einem x86-Befehlssatzkern ausgeführt zu werden, um im Wesentlichen das gleiche Ergebnis zu erreichen wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern. Der erste Compiler 1304 repräsentiert einen Compiler, der betreibbar ist, um Binärcode des ersten Befehlsatzes 1306 (z. B. Objektcode) zu erzeugen, der mit oder ohne zusätzliche Verknüpfungsverarbeitung, auf dem Prozessor mit zumindest einem Befehlssatzkern 1316 ausgeführt werden kann. Gleichermaßen zeigt 13, dass das Programm in der höheren Sprache 1302 unter Verwendung eines Alternativer-Befehlssatz-Compilers 1308 kompiliert werden kann, um einen Alternativer-Befehlssatz-Binärcode 1310 zu erzeugen, der durch einen Prozessor ohne wenigstens einen ersten Befehlssatz-Kern 1314 (z. B. einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, CA, USA ausführen und/oder den ARM-Befehlssatz von ARM Holdings in Sunnyvale, CA, USA ausführen) nativ ausgeführt werden kann. Der Befehlsumwandler 1312 wird verwendet, um den ersten Binärcode 1306 in Code umzuwandeln, der systemintern durch den Prozessor ohne einen ersten Befehlssatzkern 1314 ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht der gleiche wie der Alternativ-Befehlssatz-Binärcode 1310, da ein Befehlsumwandler, der dies kann, schwierig herzustellen ist; der umgewandelte Code wird jedoch die allgemeine Operation ausführen und aus Befehlen aus dem alternativen Befehlssatz bestehen. Daher repräsentiert der Befehlsumwandler 1312 Software, Firmware, Hardware oder eine Kombination daraus, die, durch Emulierung, Simulation oder jeden anderen Prozess, einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen ersten Befehlssatzprozessor oder -kern hat, ermöglicht, den ersten Binärcode 1306 auszuführen.

Claims (24)

  1. Vorrichtung, die Folgendes umfasst: einen Decoder zum Decodieren eines Befehls mit Feldern für einen ersten und einen zweiten Quelloperanden für gepackte Daten und einen Zieloperanden für gepackte Daten; und eine Ausführungsschaltung zum Ausführen des decodierten Befehls zum: Multiplexen von Datenwerten aus einer Mehrzahl von Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten zu mindestens einer Multiplikatorschaltung, wobei der erste und der zweite Quelloperand für gepackte Daten eine Mehrzahl von Paaren komplexer Zahlen aufweisen, wobei jedes Paar komplexer Zahlen Datenwerte an gemeinsamen Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten aufweist; Berechnen eines reellen Teils und eines imaginären Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl; und Speichern des reellen Teils in einer ersten Position von gepackten Datenelementen in dem Zieloperanden und Speichern des imaginären Teils in einer zweiten Position von gepackten Datenelementen in dem Zieloperanden.
  2. Vorrichtung nach Anspruch 1, wobei der erste Quelloperand für gepackte Daten ein Register für gepackte Daten ist und der zweite Quelloperand für gepackte Daten ein Speicherort ist.
  3. Vorrichtung nach Anspruch 1, wobei der erste Quelloperand für gepackte Daten ein Register für gepackte Daten ist und der zweite Quelloperand für gepackte Daten ein Register für gepackte Daten ist.
  4. Vorrichtung nach Anspruch 1, wobei zum Berechnen eines reellen Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl die Ausführungsschaltung ferner dient zum: Ausgeben des reellen Teils und des imaginären Teils des Produkts jedes Paars komplexer Zahlen an ein Addierernetzwerk, um ein reelles Ergebnis und ein imaginäres Ergebnis zu berechnen.
  5. Vorrichtung nach Anspruch 1, wobei der Zieloperand für gepackte Daten ein Register für gepackte Daten ist und die erste Position von gepackten Datenelementen eine untere 16-Bit des Registers für gepackte Daten ist und die zweite Position von gepackten Datenelementen eine nächste 16 Bit des Registers für gepackte Daten ist.
  6. Vorrichtung nach Anspruch 1, wobei eine Ausführungsschaltung zum Ausführen des decodierten Befehls ferner dient zum: Runden des reellen Teils des Produkts der ersten komplexen Zahl und der komplexen Konjugation der zweiten komplexen Zahl; und Runden des reellen Teils des Produkts der ersten komplexen Zahl und der Konjugation der zweiten komplexen Zahl.
  7. Vorrichtung nach Anspruch 6, wobei ein Rundungstyp für den reellen Teil und den imaginären Teil des Produkts unter Verwendung eines oder mehrerer Steuerbits ausgewählt wird.
  8. Vorrichtung nach Anspruch 7, wobei der Rundungstyp mindestens eines von Abschneiden, Konvergenzrunden oder Aufrunden einschließt.
  9. Verfahren, das Folgendes umfasst: Decodieren eines Befehls mit Feldern für einen ersten und einen zweiten Quelloperanden für gepackte Daten und einen Zieloperanden für gepackte Daten; und Ausführen des decodierten Befehls von einer Ausführungsschaltung zum: Multiplexen von Datenwerten aus einer Mehrzahl von Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten zu mindestens einer Multiplikatorschaltung, wobei der erste und der zweite Quelloperand für gepackte Daten eine Mehrzahl von Paaren komplexer Zahlen aufweisen, wobei jedes Paar komplexer Zahlen Datenwerte an gemeinsamen Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten aufweist; Berechnen eines reellen Teils und eines imaginären Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl; und Speichern des reellen Teils in einer ersten Position von gepackten Datenelementen in dem Zieloperanden und Speichern des imaginären Teils in einer zweiten Position von gepackten Datenelementen in dem Zieloperanden.
  10. Verfahren nach Anspruch 9, wobei der erste Quelloperand für gepackte Daten ein Register für gepackte Daten ist und der zweite Quelloperand für gepackte Daten ein Speicherort ist.
  11. Verfahren nach Anspruch 9, wobei der erste Quelloperand für gepackte Daten ein Register für gepackte Daten ist und der zweite Quelloperand für gepackte Daten ein Register für gepackte Daten ist.
  12. Verfahren nach Anspruch 9, wobei zum Berechnen eines reellen Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl die Ausführungsschaltung ferner dient zum: Ausgeben des reellen Teils und des imaginären Teils des Produkts jedes Paars komplexer Zahlen an ein Addierernetzwerk, um ein reelles Ergebnis und ein imaginäres Ergebnis zu berechnen.
  13. Verfahren nach Anspruch 9, wobei der Zieloperand für gepackte Daten ein Register für gepackte Daten ist und die erste Position von gepackten Datenelementen eine untere 16-Bit des Registers für gepackte Daten ist und die zweite Position von gepackten Datenelementen eine nächste 16 Bit des Registers für gepackte Daten ist.
  14. Verfahren nach Anspruch 9, wobei das Ausführen des decodierten Befehls von der Ausführungsschaltung ferner dient zum: Runden des reellen Teils des Produkts der ersten komplexen Zahl und der komplexen Konjugation der zweiten komplexen Zahl; und Runden des reellen Teils des Produkts der ersten komplexen Zahl und der Konjugation der zweiten komplexen Zahl.
  15. Verfahren nach Anspruch 14, wobei ein Rundungstyp für den reellen Teil und den imaginären Teil des Produkts unter Verwendung eines oder mehrerer Steuerbits ausgewählt wird.
  16. Verfahren nach Anspruch 15, wobei der Rundungstyp mindestens eines von Abschneiden, Konvergenzrunden oder Aufrunden einschließt.
  17. Nichtflüchtiges maschinenlesbares Medium, das einen Befehl speichert, der beim Ausführen durch einen Prozessor bewirkt, dass der Prozessor ein Verfahren ausführt, wobei das Verfahren Folgendes umfasst: Decodieren eines Befehls mit Feldern für einen ersten und einen zweiten Quelloperanden für gepackte Daten und einen Zieloperanden für gepackte Daten; und Ausführen des decodierten Befehls von einer Ausführungsschaltung zum: Multiplexen von Datenwerten aus einer Mehrzahl von Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten zu mindestens einer Multiplikatorschaltung, wobei der erste und der zweite Quelloperand für gepackte Daten eine Mehrzahl von Paaren komplexer Zahlen aufweisen, wobei jedes Paar komplexer Zahlen Datenwerte an gemeinsamen Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten aufweist; Berechnen eines reellen Teils und eines imaginären Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl; und Speichern des reellen Teils in einer ersten Position von gepackten Datenelementen in dem Zieloperanden und Speichern des imaginären Teils in einer zweiten Position von gepackten Datenelementen in dem Zieloperanden.
  18. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei der erste Quelloperand für gepackte Daten ein Register für gepackte Daten ist und der zweite Quelloperand für gepackte Daten ein Speicherort ist.
  19. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei der erste Quelloperand für gepackte Daten ein Register für gepackte Daten ist und der zweite Quelloperand für gepackte Daten ein Register für gepackte Daten ist.
  20. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei zum Berechnen eines reellen Teils eines Produkts einer ersten komplexen Zahl und einer komplexen Konjugation einer zweiten komplexen Zahl die Ausführungsschaltung ferner dient zum: Ausgeben des reellen Teils und des imaginären Teils des Produkts jedes Paars komplexer Zahlen an ein Addierernetzwerk, um ein reelles Ergebnis und ein imaginäres Ergebnis zu berechnen.
  21. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei der Zieloperand für gepackte Daten ein Register für gepackte Daten ist und die erste Position von gepackten Datenelementen eine untere 16-Bit des Registers für gepackte Daten ist und die zweite Position von gepackten Datenelementen eine nächste 16 Bit des Registers für gepackte Daten ist.
  22. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei das Ausführen des decodierten Befehls von der Ausführungsschaltung ferner dient zum: Runden des reellen Teils des Produkts der ersten komplexen Zahl und der komplexen Konjugation der zweiten komplexen Zahl; und Runden des reellen Teils des Produkts der ersten komplexen Zahl und der komplexen Konjugation der zweiten komplexen Zahl.
  23. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 22, wobei ein Rundungstyp für den reellen Teil und den imaginären Teil des Produkts unter Verwendung eines oder mehrerer Steuerbits ausgewählt wird.
  24. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 23, wobei der Rundungstyp mindestens eines von Abschneiden, Konvergenzrunden oder Aufrunden einschließt.
DE102018006013.7A 2017-09-29 2018-07-30 Systeme, vorrichtungen und verfahren für dualen komplex durch komplexe konjugationsmultiplikation von vorzeichenbehafteten wörtern Pending DE102018006013A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/721,313 2017-09-29
US15/721,313 US10664277B2 (en) 2017-09-29 2017-09-29 Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words

Publications (1)

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

Family

ID=65727796

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018006013.7A Pending DE102018006013A1 (de) 2017-09-29 2018-07-30 Systeme, vorrichtungen und verfahren für dualen komplex durch komplexe konjugationsmultiplikation von vorzeichenbehafteten wörtern

Country Status (3)

Country Link
US (1) US10664277B2 (de)
CN (1) CN109582278A (de)
DE (1) DE102018006013A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220197975A1 (en) * 2020-12-23 2022-06-23 Intel Corporation Apparatus and method for conjugate transpose and multiply
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 (72)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2413712A1 (fr) 1977-12-30 1979-07-27 Ibm France Microprocesseur specialise pour le calcul de la somme de produits de deux operandes complexes
US4937775A (en) 1988-11-21 1990-06-26 General Electric Company Apparatus for the cross-correlation of a pair of complex sampled signals
US5170370A (en) 1989-11-17 1992-12-08 Cray Research, Inc. Vector bit-matrix multiply functional unit
US5442577A (en) 1994-03-08 1995-08-15 Exponential Technology, Inc. Sign-extension of immediate constants in an alu
US5953241A (en) 1995-08-16 1999-09-14 Microunity Engeering Systems, Inc. Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction
US5721892A (en) 1995-08-31 1998-02-24 Intel Corporation Method and apparatus for performing multiply-subtract operations on packed data
US6385634B1 (en) * 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US7395298B2 (en) * 1995-08-31 2008-07-01 Intel Corporation Method and apparatus for performing multiply-add operations on packed data
US6470370B2 (en) * 1995-09-05 2002-10-22 Intel Corporation Method and apparatus for multiplying and accumulating complex numbers in a digital filter
US5983253A (en) * 1995-09-05 1999-11-09 Intel Corporation Computer system for performing complex digital filters
US6058408A (en) * 1995-09-05 2000-05-02 Intel Corporation Method and apparatus for multiplying and accumulating complex numbers in a digital filter
US6237016B1 (en) * 1995-09-05 2001-05-22 Intel Corporation Method and apparatus for multiplying and accumulating data samples and complex coefficients
US5936872A (en) * 1995-09-05 1999-08-10 Intel Corporation Method and apparatus for storing complex numbers to allow for efficient complex multiplication operations and performing such complex multiplication operations
US5880985A (en) 1996-10-18 1999-03-09 Intel Corporation Efficient combined array for 2n bit n bit multiplications
US7395302B2 (en) 1998-03-31 2008-07-01 Intel Corporation Method and apparatus for performing horizontal addition and subtraction
US6839728B2 (en) * 1998-10-09 2005-01-04 Pts Corporation Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture
US6272512B1 (en) 1998-10-12 2001-08-07 Intel Corporation Data manipulation instruction for enhancing value and efficiency of complex arithmetic
US6366937B1 (en) 1999-03-11 2002-04-02 Hitachi America Ltd. System and method for performing a fast fourier transform using a matrix-vector multiply instruction
FR2793971B1 (fr) 1999-05-20 2001-08-31 France Telecom Multiplieur de nombres complexes
US6675187B1 (en) 1999-06-10 2004-01-06 Agere Systems Inc. Pipelined linear array of processor elements for performing matrix computations
US6542916B1 (en) 1999-07-28 2003-04-01 Arm Limited Data processing apparatus and method for applying floating-point operations to first, second and third operands
US6609140B1 (en) 1999-11-30 2003-08-19 Mercury Computer Systems, Inc. Methods and apparatus for fast fourier transforms
US7072929B2 (en) * 2000-11-01 2006-07-04 Pts Corporation Methods and apparatus for efficient complex long multiplication and covariance matrix implementation
JP2003016051A (ja) * 2001-06-29 2003-01-17 Nec Corp 複素ベクトル演算プロセッサ
US6922716B2 (en) 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
US7624138B2 (en) 2001-10-29 2009-11-24 Intel Corporation Method and apparatus for efficient integer transform
US7376812B1 (en) 2002-05-13 2008-05-20 Tensilica, Inc. Vector co-processor for configurable and extensible processor architecture
US7392368B2 (en) 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
JP3958662B2 (ja) 2002-09-25 2007-08-15 松下電器産業株式会社 プロセッサ
CN1820246A (zh) 2003-05-09 2006-08-16 杉桥技术公司 执行饱和或不执行饱和地累加多操作数的处理器还原单元
US7546329B2 (en) 2003-09-29 2009-06-09 Broadcom Corporation Systems for performing multiplication operations on operands representing complex numbers
US7546330B2 (en) 2003-09-30 2009-06-09 Broadcom Corporation Systems for performing multiply-accumulate operations on operands representing complex numbers
US9465611B2 (en) 2003-10-02 2016-10-11 Broadcom Corporation Processor execution unit with configurable SIMD functional blocks for complex number operations
GB2409062C (en) 2003-12-09 2007-12-11 Advanced Risc Mach Ltd Aliasing data processing registers
US7769797B2 (en) 2004-01-20 2010-08-03 Samsung Electronics Co., Ltd. Apparatus and method of multiplication using a plurality of identical partial multiplication modules
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US8229991B2 (en) 2005-05-05 2012-07-24 Mips Technologies, Inc. Processor core and multiplier that support a multiply and difference operation by inverting sign bits in booth recoding
US7555514B2 (en) 2006-02-13 2009-06-30 Atmel Corportation Packed add-subtract operation in a microprocessor
US7797366B2 (en) 2006-02-15 2010-09-14 Qualcomm Incorporated Power-efficient sign extension for booth multiplication methods and systems
US8307196B2 (en) 2006-04-05 2012-11-06 Freescale Semiconductor, Inc. Data processing system having bit exact instructions and methods therefor
US20120072704A1 (en) 2007-05-18 2012-03-22 Cray Inc. "or" bit matrix multiply vector instruction
JP2009048532A (ja) 2007-08-22 2009-03-05 Nec Electronics Corp マイクロプロセッサ
JP2009075676A (ja) * 2007-09-18 2009-04-09 Nec Electronics Corp マイクロプロセッサ
GB2464292A (en) 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US9104510B1 (en) 2009-07-21 2015-08-11 Audience, Inc. Multi-function floating point unit
US8650240B2 (en) 2009-08-17 2014-02-11 International Business Machines Corporation Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US8458442B2 (en) 2009-08-26 2013-06-04 International Business Machines Corporation Method and structure of using SIMD vector architectures to implement matrix multiplication
GB2474901B (en) 2009-10-30 2015-01-07 Advanced Risc Mach Ltd Apparatus and method for performing multiply-accumulate operations
US20120166511A1 (en) * 2010-12-22 2012-06-28 Hiremath Chetan D System, apparatus, and method for improved efficiency of execution in signal processing algorithms
US8788549B2 (en) 2011-05-02 2014-07-22 Saankhya Labs Private Limited Zero overhead block floating point implementation in CPU's
US9092227B2 (en) 2011-05-02 2015-07-28 Anindya SAHA Vector slot processor execution unit for high speed streaming inputs
CN107153524B (zh) * 2011-12-22 2020-12-22 英特尔公司 用于给出相应复数的复共轭的计算设备和计算机可读介质
US20140164733A1 (en) 2011-12-30 2014-06-12 Ashish Jha Transpose instruction
US9928067B2 (en) 2012-09-21 2018-03-27 Intel Corporation Methods and systems for performing a binary translation
US9489342B2 (en) 2012-12-24 2016-11-08 Intel Corporation Systems, methods, and computer program products for performing mathematical operations
US8935468B2 (en) 2012-12-31 2015-01-13 Cadence Design Systems, Inc. Audio digital signal processor
US9489197B2 (en) * 2013-07-09 2016-11-08 Texas Instruments Incorporated Highly efficient different precision complex multiply accumulate to enhance chip rate functionality in DSSS cellular systems
US9118631B1 (en) 2013-08-16 2015-08-25 Google Inc. Mixing secure and insecure data and operations at server database
CN104462016B (zh) 2013-09-22 2018-06-05 南京中兴软件有限责任公司 一种矢量运算核以及矢量处理器
US9792118B2 (en) 2013-11-15 2017-10-17 Qualcomm Incorporated Vector processing engines (VPEs) employing a tapped-delay line(s) for providing precision filter vector processing operations with reduced sample re-fetching and power consumption, and related vector processor systems and methods
GB2520571B (en) 2013-11-26 2020-12-16 Advanced Risc Mach Ltd A data processing apparatus and method for performing vector processing
FR3021428B1 (fr) 2014-05-23 2017-10-13 Kalray Multiplication de matrices de bits utilisant des registres explicites
US9519460B1 (en) 2014-09-25 2016-12-13 Cadence Design Systems, Inc. Universal single instruction multiple data multiplier and wide accumulator unit
US20160179523A1 (en) 2014-12-23 2016-06-23 Intel Corporation Apparatus and method for vector broadcast and xorand logical instruction
US11544214B2 (en) 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
US9778905B1 (en) 2016-01-13 2017-10-03 Xilinx, Inc. Multiplier circuits configurable for real or complex operation
US10180820B2 (en) 2016-09-30 2019-01-15 HEWLETT PACKARD ENTERPRlSE DEVELOPMENT LP Multiply-accumulate circuits
US11023231B2 (en) 2016-10-01 2021-06-01 Intel Corporation Systems and methods for executing a fused multiply-add instruction for complex numbers
US10146535B2 (en) 2016-10-20 2018-12-04 Intel Corporatoin Systems, apparatuses, and methods for chained fused multiply add
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US10489154B2 (en) 2017-11-28 2019-11-26 Intel Corporation Apparatus and method for complex multiply and accumulate
US10452394B2 (en) 2017-11-28 2019-10-22 Intel Corporation Apparatus and method for complex multiplication

Also Published As

Publication number Publication date
US10664277B2 (en) 2020-05-26
CN109582278A (zh) 2019-04-05
US20190102191A1 (en) 2019-04-04

Similar Documents

Publication Publication Date Title
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE112013004783T5 (de) Durch Lese- und Schreibmasken gesteuerter Vektor-Verschiebebefehl
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102018003612A1 (de) Befehle für Dualzieltyp-Umwandlung-, Akkumulation- mit gemischter Präzision und atomare Speicheroperationen mit gemischter Präzision
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102018005859A1 (de) Einrichtung und Verfahren zur Multiplikation und Akkumulation von komplexen und echten gepackten Datenelementen
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018005976A1 (de) Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten
DE102018128626A1 (de) Systeme, Verfahren und Vorrichtungen für Matrixoperationen
DE102018125971A1 (de) Systeme und verfahren zum berechnen von skalaprodukten von halbbytes in operanden aus zwei kacheln
DE102018131484A1 (de) Einrichtung und verfahren zum vektormultiplizieren und zur subtraktion von vorzeichenbehafteten doppelwörtern

Legal Events

Date Code Title Description
R012 Request for examination validly filed