DE102018005976A1 - Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten - Google Patents

Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten Download PDF

Info

Publication number
DE102018005976A1
DE102018005976A1 DE102018005976.7A DE102018005976A DE102018005976A1 DE 102018005976 A1 DE102018005976 A1 DE 102018005976A1 DE 102018005976 A DE102018005976 A DE 102018005976A DE 102018005976 A1 DE102018005976 A1 DE 102018005976A1
Authority
DE
Germany
Prior art keywords
packed data
values
signed
result values
signed result
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.)
Withdrawn
Application number
DE102018005976.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 DE102018005976A1 publication Critical patent/DE102018005976A1/de
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • 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/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion

Abstract

Ausführungsformen von Systemen, Vorrichtungen und Verfahren zur Multiplikation und Akkumulation von vorzeichenbehafteten Datenwerten in einem Prozessor sind beschrieben. Zum Beispiel führt die Ausführungsschaltung einen decodierten Befehl aus, um ausgewählte vorzeichenbehaftete Datenwerte aus einer Mehrzahl von Positionen von gepackten Datenelementen in einem ersten und einem zweiten Quelloperanden für gepackte Daten zu multiplizieren, um eine Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen, die Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu summieren, um einen oder mehrere zweite vorzeichenbehaftete Ergebniswerte erzeugen, den einen oder die mehreren vorzeichenbehafteten Ergebniswerte mit einem oder mehreren Datenwerten von einem Zieloperanden zu akkumulieren, um einen oder mehrere dritte vorzeichenbehafteter Ergebniswerte zu erzeugen, und den einen oder die mehreren vorzeichenbehafteten Ergebniswerte in einer oder mehreren Positionen für gepackte Datenelemente im Zieloperanden zu speichern.

Description

  • TECHNISCHES GEBIET
  • Ausführungsformen der Erfindung betreffen das Gebiet der Computerprozessorarchitektur. Genauer betreffen Ausführungsformen Befehle, die, wenn sie ausgeführt werden, eine Multiplikation und Akkumulation von vektorgepackten vorzeichenbehafteten Datenwerten bewirken.
  • HINTERGRUND
  • Ein Befehlssatz oder eine Befehlssatzarchitektur (Instruction Set Architecture, ISA) ist der Teil der Computerarchitektur im Zusammenhang mit dem Programmieren, einschließlich der nativen Datentypen, Befehlen, Registerarchitektur, Adressierungsmodi, Speicherarchitektur, Unterbrechungs- und Ausnahmebehandlung und externer Eingabe und Ausgabe (E/A). Hier bezieht sich der Begriff „Befehle“ allgemein auf Makrobefehle, d. h. Befehle, die einem Prozessor zur Ausführung bereitgestellt werden, im Gegensatz zu Mikrobefehlen oder Mikro-ops, d. h. dem Ergebnis des Decoders eines Prozessors, der einen Makrobefehl decodiert. Die Mikrobefehle oder Mikro-ops können konfiguriert sein, eine Ausführungseinheit auf dem Prozessor anzuweisen, Operationen durchzuführen, um die Logik in Verbindung mit dem Makrobefehl zu implementieren.
  • Die ISA unterscheidet sich von der Mikroarchitektur, die der Satz von Prozessordesigntechniken ist, der zum Implementieren eines Befehlssatzes verwendet wird. Prozessoren mit verschiedenen Mikroarchitekturen können einen gemeinsamen Befehlssatz nutzen. Zum Beispiel implementieren Intel® Pentium 4-Prozessoren, Intel® Core™-Prozessoren und Prozessoren von Advanced Micro Devices, Inc. in Sunnyvale, CA, USA, nahezu identische Versionen des ×86-Befehlssatzes (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden), weisen jedoch verschiedene interne Designs auf. Zum Beispiel kann die gleiche Registerarchitektur der ISA auf verschiedene Weise in verschiedenen Mikroarchitekturen unter Verwendung hinlänglich bekannter Techniken implementiert werden, einschließlich dedizierter physikalischer Register, wobei ein oder mehrere dynamisch zugeordnete physikalische Register einen Registerumbenennungsmechanismus verwenden (zum Beispiel die Verwendung einer Registeraliastabelle (Register Alias Table, RAT), eines Neuordnungspuffers (Reorder Buffer, ROB) und einer Zurückziehregisterdatei). Sofern nicht anderweitig angegeben, werden die Ausdrücke Registerarchitektur, Registerdatei und Register hierin verwendet, um darauf Bezug zu nehmen, was der Software/dem Programmierer sichtbar ist, und auf die Weise, in der Befehle Register angeben. Wo eine Unterscheidung erforderlich ist, wird der Begriff „logisch“, „Architektur-“ oder „für Software sichtbar“ verwendet, um Register/Dateien in der Registerarchitektur anzuzeigen, während verschiedene Adjektive verwendet werden, um Register in einer gegebenen Mikroarchitektur (zum Beispiel physikalische Register, Neuordnungspuffer, Zurückziehregister, Registerpool) zu bezeichnen.
  • Multiply-Accumulate ist eine gebräuchliche Digitalsignalverarbeitungsoperation, die das Produkt von zwei Zahlen berechnet und dieses Produkt zu einem akkumulierten Wert addiert. Vorhandene Mikroarchitekturen für einen Befehl, mehrere Daten (Single Instruction, Multiple Data, SIMD) implementieren Multiply-Accumulate-Operationen durch das Ausführen einer Folge von Befehlen. Zum Beispiel kann eine Multiply-Accumulate mit einem Multiply-Befehl, gefolgt von einer 4-Wege-Addition und dann einer Akkumulation mit den Ziel-Quadword-Daten zum Erzeugen von zwei gesättigten 64-Bit-Ergebnissen durchgeführt werden. Dies führt zu einer geringeren Leistung, da diese Befehlsfolgen für jede Operation ausgeführt werden.
  • Figurenliste
  • Die Erfindung versteht sich am besten unter Bezugnahme auf die folgende Beschreibung und die beigefügten Zeichnungen, die zum Veranschaulichen von Ausführungsformen der Erfindung verwendet werden. In den Zeichnungen:
    • 1 veranschaulicht eine beispielhafte Ausführung eines vektorgepackten vorzeichenbehafteten Multiplizier- und Akkumulierbefehls gemäß Ausführungsformen;
    • 2 veranschaulicht eine Ausführungsform, die von einem Prozessor ausgeführt wird, um einen Multiplizier- und Akkumulierbefehl zu verarbeiten, gemäß Ausführungsformen;
    • 3A-3C veranschaulichen ein beispielhaftes Befehlsformat;
    • 4 ist ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform der Erfindung;
    • 5A-5B veranschaulichen die In-order-Pipeline und den In-order-Kern;
    • 6A-7B veranschaulichen ein Blockdiagramm einer spezielleren beispielhaften In-order-Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken in einem Chip ist (einschließlich anderer Kerne des gleichen Typs und/oder unterschiedlicher Typen);
    • 7 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;
    • 8-11 sind Blockdiagramme beispielhafter Computerarchitekturen; und
    • 12 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.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Die folgende Beschreibung beschreibt Verfahren und Vorrichtungen für einen vektorgepackten Befehl, der eine vektorgepackte vorzeichenbehaftete Multiplikation und Akkumulation von vorzeichenbehafteten Wortwerten implementiert. In der folgenden Beschreibung werden zahlreiche spezifische Details wie Logikimplementierungen, Opcodes, Mittel zum Spezifizieren von Operanden, Implementierungen von Ressourcenpartitionierung/gemeinsamer Nutzung/Duplizierung, Typen und Wechselbeziehungen von Systemkomponenten und Logikpartitionierungs-/Integrationsmöglichkeiten dargelegt, um ein gründlicheres Verständnis der vorliegenden Erfindung bereitzustellen. Der Fachmann wird jedoch zu schätzen wissen, dass die Erfindung ohne solche spezifischen Details ausgeführt werden kann. In anderen Fällen wurden Kontrollstrukturen, Gate-Level-Schaltungen und vollständige Softwarebefehlssequenzen nicht im Detail dargestellt, um die Erfindung nicht zu verschleiern. Der Durchschnittsfachmann wird mit den darin enthaltenen Beschreibungen in der Lage sein, eine geeignete Funktionalität ohne übermäßiges Experimentieren zu implementieren.
  • Bezugnahmen in der Beschreibung auf eine Ausführungsform“, „Ausführungsform“, „ein Ausführungsbeispiel“ und so weiter geben an, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, eine bestimmte Struktur oder ein bestimmtes Charakteristikum aufweisen kann, wobei allerdings nicht jede Ausführungsform dieses bestimmte Merkmal, diese bestimmte Struktur oder dieses bestimmte Charakteristikum notwendigerweise aufweist. 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.
  • In Klammern gesetzter Text und Blöcke mit gestrichelten Rändern (zum Beispiel lange Striche, kurze Striche, strichpunktierte Linien und Punkte) können hierin verwendet werden, um optionale Operationen zu veranschaulichen, die den Ausführungsformen der Erfindung zusätzliche Merkmale verleihen. Eine solche Notation sollte jedoch nicht so verstanden werden, dass dies die einzigen Optionen oder optionalen Operationen sind, und/oder dass Blöcke mit festen Grenzen in bestimmten Ausführungsformen der Erfindung nicht optional sind.
  • In der folgenden Beschreibung und in den Ansprüchen können die Begriffe „gekoppelt“ und „verbunden“ zusammen mit ihren Ableitungen verwendet werden. Es versteht sich, dass diese Begriffe nicht als Synonyme füreinander beabsichtigt sind. „Gekoppelt“ wird verwendet, um anzuzeigen, dass zwei oder mehrere Elemente, die miteinander in direktem physischem oder elektrischem Kontakt stehen können oder nicht, miteinander zusammenwirken oder interagieren. „Verbunden“ wird verwendet, um die Herstellung einer Kommunikation zwischen zwei oder mehreren Elementen anzuzeigen, die miteinander gekoppelt sind.
  • Vektormultiplikation und -akkumulation von vorzeichenbehafteten Wörtern
  • In einer Ausführungsform wird ein neuer vektorgepackter Befehl offenbart, der eine Multiplikation und Akkumulation von vorzeichenbehafteten Wortwerten implementiert. Während frühere Implementierungen Sequenzen von Befehlen erforderten, die ausgeführt werden sollen, um eine Ausgabe entsprechend der Multiplikation und Akkumulation von vorzeichenbehafteten Wortwerten zu erzeugen, stellen hier offenbarte Ausführungsformen einen einzelnen Befehl und eine zugehörige Schaltung zum Ausführen dieser Operationen an Wortwerten von Vektorquellregistern bereit. Diese Ausführungsformen verbessern einen Computer selbst, indem die Leistung dieser Operationen relativ zur Ausführung einer Mehrzahl von separaten Befehlen beschleunigt wird (und daher typischerweise weniger Energie verwendet wird).
  • Wie oben angegeben, bewirkt die Ausführung des hierin offenbarten Befehls/der hierin offenbarten Befehle, dass eine Ausführungsschaltung (oder Ausführungseinheit) Multiplikations- und Akkumulationsoperationen an Quelldaten durchführt. In einigen Ausführungsformen bewirkt die Ausführung eines Multiplikations- und Akkumulationsbefehls, dass eine Ausführungsschaltung ausgewählte vorzeichenbehaftete Datenwerte aus einer Mehrzahl von Positionen von gepackten Datenelementen in einem ersten und einem zweiten Quelloperanden für gepackte Daten multipliziert, um eine Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen, die Mehrzahl erster vorzeichenbehafteter Ergebniswerte summiert, um einen oder mehrere zweite vorzeichenbehaftete Ergebniswerte erzeugen, den einen oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte mit einem oder mehreren Datenwerten von einem Zieloperanden akkumuliert, um einen oder mehrere dritte vorzeichenbehaftete Ergebniswerte zu erzeugen, und den einen oder die mehreren vorzeichenbehafteten Ergebniswerte in einer oder mehreren Positionen für gepackte Datenelemente im Zieloperanden speichert. In einigen Ausführungsformen beinhaltet das Ausführen des Befehls ferner das Sättigen des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte unter Verwendung einer Sättigungsschaltung und das Speichern der gesättigten Ergebnisse in der einen oder den mehreren Positionen von gepackten Datenelementen im Zieloperanden.
  • 1 zeigt eine Ausführungsform einer Schaltung, die zum Ausführen eines Befehls verwendet wird, der eine Multiplikation und Akkumulation von vektorgepackten vorzeichenbehafteten Werten bewirkt. Das Multiplikations- und Akkumulationsbefehlsformat weist Felder für ein Ziel (Ziel für gepackte Daten (SRC1/DEST) 120) und zwei Quellen (vektorgepackte Datenquelle 2 (SRC2) 102 und vektorgepackte Datenquelle 3 (SRC3) 104) auf. Zum Beispiel können SRC2 102 und SRC3 104 jeweils acht Wortwerte aufweisen. Während jede Quelle 128 Bits ist und jedes Datenelement in dem veranschaulichten Beispiel aus 1 16 Bits ist, sind die hierin beschriebenen zugrundeliegenden Prinzipien nicht auf eine bestimmte Quellen- oder Datenelementgröße beschränkt. Zum Beispiel können in anderen Ausführungsformen Datenquellgrößen von 128 Bits, 256 Bits, 512 Bits und so weiter verwendet werden. In ähnlicher Weise können Vektordatenelementgrößen von 32 Bits, 64 Bits, 128 Bits und so weiter verwendet werden. Wie oben angegeben, multipliziert und akkumuliert die Ausführung des Befehls die in den Quellen SRC2 102 und SRC3 104 gespeicherten Werte. In diesem Beispiel wird zuerst eine Multiplikation durchgeführt, gefolgt von einer Akkumulation und einer optionalen Sättigung der Eingabewerte.
  • Die vektorgepackte Datenquelle 2 102 weist acht gepackte Datenelemente (dargestellt als Positionen A-H von gepackten Datenelementen) auf. Abhängig von der Implementierung ist die vektorgepackte Datenquelle 2 102 ein Register für gepackte Daten (zum Beispiel ein XMM-, YMM-, ZMM-, Vektor-, SIMD-, D- oder S-Register) oder ein Speicherort. In ähnlicher Weise weist die vektorgepackte Datenquelle 3 104 acht gepackte Datenelemente (ebenfalls als Positionen A-H von gepackten Datenelementen dargestellt) auf. Abhängig von der Implementierung ist die vektorgepackte Datenquelle 3 104 ein Register für gepackte Daten (zum Beispiel ein XMM-, YMM-, ZMM-, Vektor-, SIMD-, D- oder S-Register) oder ein Speicherort.
  • Die zwei Quellen 102, 104 für gepackte Daten werden in eine Ausführungsschaltung gespeist, um bearbeitet zu werden. Wie dargestellt, kann die Ausführungsschaltung einen Eingangs-Mux 106 aufweisen, der die Werte aus den Quellen 102, 104 für gepackte Daten an eine Mehrzahl von Multiplikatoren 107 leitet. Wie erläutert, werden entsprechende Werte der Quellen 102, 104 für gepackte Daten multipliziert, und die Ergebnisse werden dann akkumuliert und optional gesättigt, wie nachstehend ausführlicher beschrieben wird.
  • Die Multiplikatoren 107 können eine Vektormultiplikation an den Datenquellen 102, 104 durchführen, wobei jeder Multiplikator ein ausgewähltes Vektordatenelement von SRC2 102 mit einem ausgewählten Vektordatenelement von SRC3 104 multipliziert. In einigen Ausführungsformen kann jeder Eingabewert ein vorzeichenbehafteter Wert sein. Wie in 1 dargestellt, erzeugen die Multiplikatoren 107 die folgenden Werte S2(H)*S3(H), S2(G)*S3(G), S2(F)*S3(F), S2(E)*S3(E), S2(D)*S3(D), S2(C)*S3(C), S2(B)*S3(B), S2(A)*S3(A), wobei S2 die erste Quelle 102 identifiziert und S3 die zweite Quelle 104 identifiziert und A, B, C, D, E, F, G und H die Positionen von gepackten Datenelementen in den Datenquellen 102, 104, geordnet von der niedrigsten zur höchsten Datenelementposition, identifizieren. Es ist zu beachten, dass, wenngleich eine Mehrzahl von Multiplikatoren dargestellt ist, in einigen Ausführungsformen derselbe Multiplikator verwendet wird, um jedes der Wertepaare zu multiplizieren.
  • In der in 1 dargestellten Ausführungsform können die Addierernetzwerke 108, 110 die Ausgaben von Multiplikatoren 107 kombinieren. Dementsprechend berechnet der Multiplikations- und Akkumulationsbefehl ein Produkt entsprechender Paare von Werten in den Quellen und summiert die jeweiligen Produktwerte. Eine Pseudocode-Darstellung davon ist nachstehend dargestellt:
    TEMP0[33:0] ← (SRC2[63:48]*SRC3[63:48]) + (SRC2[47:32]*SRC3[47:32]) + (SRC2[31:16]*SRC3[31:16]) + (SRC2[15:0]*SRC3[15:0]))
    TEMP1 [33:0] ← (SRC2[127: 112]*SRC3[127:112]) + (SRC2[111:96]*SRC3[111:96]) + (SRC2[95:80]*SRC3[95:80]) + (SRC2[79:64]*SRC3[79:64])
  • Wie dargestellt, können die Ergebnisse des Multiplizierens und Summierens der in den unteren 64 Bits von SRC2 und SRC3 enthaltenen Wortwerte in einem ersten temporären Register TEMPO gespeichert werden und die Ergebnisse des Multiplizierens und Summierens der in den oberen 64 Bits von SRC2 und SRC3 enthaltenen Wortwerte können in einem zweiten temporären Register TEMP1 gespeichert werden.
  • Das vektorgepackte Datenziel 120 speichert die Ergebnisse aus den Addierernetzwerken 108 und 110 über Akkumulatoren 112, 114. Abhängig von der Implementierung ist die Quelle 1/das Ziel 120 für gepackte Daten ein Register für gepackte Daten (zum Beispiel ein XMM-, YMM-, ZMM-, Vektor-, SIMD-, D-, S- oder anderes Register) oder ein Speicherort. In dieser Darstellung ist das Ziel 120 für gepackte Daten dasselbe wie die Quelle 1 für gepackte Daten, dies muss jedoch nicht der Fall sein. In einigen Ausführungsförmen kann vor dem Addieren zu dem geeigneten Akkumulator 112, 114 jedes der Ergebnisse vorzeichenerweitert und zu den entsprechenden 64 Bits von Werten in den Zielregistern akkumuliert werden. Zum Beispiel können, wie in der folgenden Pseudocodedarstellung dargestellt, die in dem ersten temporären Register TEMP0 gespeicherten Ergebnisse erweitert und dann in den unteren 64 Bits des Ziels 120 gespeichert werden, und die in dem zweiten Register TEMP1 gespeicherten Ergebnisse können vorzeichenerweitert und in den oberen 64 Bits des Ziels 120 gespeichert werden.
    DEST[63:0] ← AddToQuadWord({{30{TEMP0[33]}},TEMP0[33:0]}, DEST[63:0]);
    DEST[127:64] ← AddToQuadWord({{30{TEMP1[33]}},TEMP1[33:0]}, DEST[127:64]);
  • In einigen Ausführungsformen können die vorzeichenerweiterten Ergebnisse unter Verwendung der Sättigungsschaltungen 122, 124 gesättigt werden, bevor die Ergebnisse in dem vektorgepackten Datenziel gespeichert werden.
  • Eine Ausführungsform eines Formats für einen Multiplikations- und Akkumulierbefehl ist VPDPWSSQ DEST1, SRC2, SRC3, wobei DEST1 ein Feld für den Zielregisteroperanden für gepackte Daten ist, SRC2 und SRC3 Felder für die Quellen wie Register für gepackte Daten oder Speicher sind. In einigen Ausführungsformen kann der Befehl VEX-codiert sein.
  • In einigen Ausführungsformen schließen Codierungen des Multiplikations- und Akkumulationsbefehls 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 (zum Beispiel XMM) -Register (vm32x), ein 256-Bit (zum Beispiel YMM) -Register (vm32y) oder ein 512-Bit (zum Beispiel 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 (zum Beispiel XMM) -Register (vm64x), ein 256-Bit (zum Beispiel YMM) -Register (vm64y) oder ein 512-Bit (zum Beispiel ZMM) -Register (vm64z) sein.
  • Ein Verfahren gemäß einer Ausführungsform ist in 2 dargestellt. Die Operationen in den Flussdiagrammen werden unter Bezugnahme auf die beispielhaften Ausführungsformen der anderen Figuren beschrieben. Allerdings können die Operationen der Flussdiagramme durch andere Ausführungsformen der Erfindung als die mit Bezug auf die anderen Figuren erläuterten ausgeführt werden, und die Ausführungsformen der Erfindung, die mit Bezug auf diese anderen Figuren erläutert werden, können andere Operationen als jene ausführen, die mit Bezug auf die Flussdiagramme erläutert werden.
  • Bei Block 202 ruft der Prozess einen Befehl von einem Codespeicher durch eine Abrufschaltung ab, wobei der Befehl Felder für einen Opcode, erste und zweite Quelloperanden für gepackte Daten und einen Zieloperanden für gepackten Daten aufweist. In einer Ausführungsform sind der Zieloperand und der erste und der zweite Quelloperand vektorgepackte Daten.
  • Bei Block 204 decodiert eine Decodierschaltung den abgerufenen Befehl. Zum Beispiel wird der abgerufene Multiplikations- und Akkumulationsbefehl durch eine Decodierschaltung, wie hierin ausführlich beschrieben, decodiert.
  • Bei Block 206 wird die Ausführung des decodierten Befehls für Daten, die von den Quelloperanden durch eine Ausführungsschaltung identifiziert werden, geplant. In einer Ausführungsform identifiziert der erste Quelloperand ein erstes Quellregister, das eine erste Mehrzahl von vorzeichenbehafteten Eingabewerten speichert, und der zweite Quelloperand identifiziert ein zweites Quellregister, das eine zweite Mehrzahl von vorzeichenbehafteten Eingabewerten speichert. In einigen Ausführungsformen zeigt der decodierte Befehl ferner an, ob die vorzeichenbehafteten Ergebniswerte gesättigt werden sollen.
  • Bei Block 208 führt die Ausführungsschaltung den decodierten Befehl aus, um ausgewählte vorzeichenbehaftete Datenwerte aus einer Mehrzahl von Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten zu multiplizieren, um eine Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu summieren, die Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu summieren, um einen oder mehrere zweite vorzeichenbehaftete Ergebniswerte zu erzeugen, den einen oder die mehreren zweiten Ergebnisse mit einem oder mehreren Datenwerten von dem Zieloperanden zu akkumulieren, um einen oder mehrere dritte vorzeichenbehaftete Ergebniswerte zu erzeugen, wahlweise, den einen oder die mehreren dritten Ergebniswerte zu sättigen, und den einen oder die mehreren dritten vorzeichenbehafteten Ergebniswerte in einer oder mehreren Positionen für gepackte Datenelemente im Zieloperanden zu speichern.
  • Zum Beispiel kann erneut unter Bezugnahme auf 1 eine Mehrzahl von Multiplikatoren 107 ausgewählte vorzeichenbehaftete Datenwerte aus einer Mehrzahl von Positionen von gepackten Datenelementen in einem ersten und einem zweiten Quelloperanden für gepackte Daten (zum Beispiel Datenquellen 102, 104) multiplizieren, um eine Mehrzahl von ersten vorzeichenbehafteten Ergebniswerten zu erzeugen. Die Mehrzahl erster vorzeichenbehafteter Ergebniswerte kann von dem einen oder den mehreren Addierernetzwerken (zum Beispiel die Addierernetzwerke 108, 110) summiert werden, um den einen oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte und die Addierernetzwerke (oder eine andere Schaltung) zu erzeugen. Der eine oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte können von dem einen oder den mehreren Akkumulatoren 112, 114 mit einem oder mehreren Datenwerten von dem Zieloperanden (zum Beispiel dem vektorgepackten Datenziel 120) akkumuliert werden. In einigen Ausführungsformen können das eine oder die mehreren zweiten Ergebnisse wahlweise von der Sättigungsschaltung 122, 124 gesättigt werden. Der eine oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte können in einer oder mehreren Positionen für gepackte Datenelemente in einem Zieloperanden gespeichert werden, beispielsweise in Datenelementpositionen des vektorgepackten Datenziels 120.
  • In einer Ausführungsform beinhaltet das Ausführen des decodierten Befehls ferner das Multiplexen von Datenwerten aus der Mehrzahl von Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperand für gepackte Daten zu mindestens einer Multiplikatorschaltung. Zum Beispiel können Datenwerte der ersten und der zweiten Quelle 102, 104 für gepackte Daten von einem Eingangs-Mux 106 zu den Multiplikatoren 107 gemultiplext werden. Wie in 1 dargestellt, werden die Datenwerte der ersten und der zweiten Quelle 102, 104 für gepackte Daten basierend auf Datenwerten gemultiplext, die eine gleiche Position von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten nutzen (zum Beispiel wird der Datenwert bei Position H der Quelle 1 104 für gepackte Daten zur Multiplikation mit dem entsprechenden Datenwert an Position H der Quelle 2 102 für gepackte Daten gesendet).
  • In einer Ausführungsform beinhaltet das Speichern des einen oder der mehreren vorzeichenbehafteten Ergebniswerte das Speichern eines Ergebnisses in einer oberen Hälfte des Zieloperanden für gepackte Daten (beispielsweise wird das Ergebnis von dem Addierernetzwerk 108 und dem Akkumulator 112 in einer oberen Hälfte des Ziels 120 für gepackte Daten gespeichert) und das Speichern eines anderen Ergebnisses in einer unteren Hälfte des Zieloperanden für gepackte Daten (beispielsweise wird das Ergebnis von dem Addierernetzwerk 110 und dem Akkumulator 114 in einer unteren Hälfte des Ziels 120 für gepackte Daten gespeichert).
  • Ausführungsbeispiele sind nachstehend ausführlich beschrieben.
    1. 1. Verfahren zum Ausführen eines Befehls, wobei das Verfahren Folgendes umfasst: Decodieren eines Befehls von einer Decodierschaltung, wobei der Befehl Felder für einen ersten und einen zweiten Quelloperanden für gepackte Daten und einen Zieloperanden für gepackte Daten aufweist; Ausführen des decodierten Befehls von einer Ausführungsschaltung durch: Multiplizieren ausgewählter vorzeichenbehafteter Datenwerte aus einer Mehrzahl von Positionen von gepackten Datenelementen in dem ersten und dem zweiten Quelloperanden für gepackte Daten, um eine Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen, Summieren der Mehrzahl erster vorzeichenbehafteter Ergebniswerte, um einen oder mehrere zweite vorzeichenbehaftete Ergebniswerte erzeugen, Akkumulieren des einen oder der mehreren vorzeichenbehafteten Ergebniswerte mit einem oder mehreren Datenwerten von einem Zieloperanden, um einen oder mehrere dritte vorzeichenbehaftete Ergebniswerte zu erzeugen, und Speichern des einen oder der mehreren vorzeichenbehafteten Ergebniswerte in einer oder mehreren Positionen für gepackte Datenelemente im Zieloperanden.
    2. 2. Verfahren aus Beispiel 1, wobei: das Ausführen des decodierten Befehls von der Ausführungsschaltung ferner das Multiplexen von Datenwerten aus der Mehrzahl von Elementpositionen für gepackte Daten in dem ersten und dem zweiten Quelloperanden für gepackte Daten mit mindestens einer Multiplikatorschaltung einschließt.
    3. 3. Verfahren aus Beispiel 2, wobei die Datenwerte aus der Mehrzahl von Elementpositionen für gepackte Daten in dem ersten und dem zweiten Quelloperanden für gepackte Daten basierend auf Datenwerten, die eine gleiche Elementposition für gepackte Daten in dem ersten und dem zweiten Quelloperanden für gepackte Daten gemeinsam nutzen, mit der mindestens einen Multiplikatorschaltung gemultiplext werden.
    4. 4. Verfahren aus Beispiel 1, wobei der eine oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte von einem oder mehreren Addierernetzwerken erzeugt werden.
    5. 5. Verfahren aus Beispiel 1, wobei das Speichern des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte das Speichern eines Ergebniswertes in einer oberen Hälfte des Zieloperanden für gepackte Daten und das Speichern eines Ergebniswertes in einer unteren Hälfte des Zieloperanden für gepackte Daten einschließt.
    6. 6. Verfahren aus Beispiel 1, wobei das Multiplizieren der ausgewählten Datenwerte Folgendes einschließt: Ausführen der Operationen S1H*S2H, S1G*S2G, S1F*S2F und S1E*S2E und der Operationen S1D*S2D, S1C*S2C, S1B*S2B und S1A*S2A, um die Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen, wobei S1 den ersten Quelloperanden für gepackte Daten identifiziert, S2 den zweiten Quelloperanden für gepackte Daten identifiziert und A, B, C, D, E, F, G und H die Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten identifizieren, die von niedrigsten zu höchsten Datenelementpositionen geordnet sind.
    7. 7. Verfahren aus Beispiel 6, wobei das Summieren der Mehrzahl erster vorzeichenbehafteter Ergebniswerte das Ausführen der Operationen (S1H*S2H) + (S1G*S2G) + (S1F*S2F) + (S1E*S2E) und das Ausführen der Operationen (S1H*S2H) + (S1G*S2G) + (S1B*S2B) + (S1A*S2A) einschließt, um den einen oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte zu erzeugen.
    8. 8. Verfahren aus Beispiel 1, ferner umfassend, als Reaktion auf das Erkennen, dass ein Wert des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte über einem Schwellenwert liegt, das Speichern eines Maximalwerts in der entsprechenden Position des Zieloperanden.
    9. 9. 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ührungsschaltungsanordnung zum Ausführen des decodierten Befehls, um: ausgewählte vorzeichenbehaftete Datenwerte aus einer Mehrzahl von Positionen von gepackten Datenelementen in einem ersten und einem zweiten Quelloperanden für gepackte Daten zu multiplizieren, um eine Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen; die Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu summieren, um einen oder mehrere zweite vorzeichenbehaftete Ergebniswerte erzeugen; den einen oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte mit einem oder mehreren Datenwerten von dem Zieloperanden zu akkumulieren, um einen oder mehrere dritte vorzeichenbehaftete Ergebniswerte zu erzeugen; und den einen oder die mehreren vorzeichenbehafteten Ergebniswerte in einer oder mehreren Positionen für gepackte Datenelemente im Zieloperanden zu speichern.
    10. 10. Vorrichtung aus Beispiel 9, wobei das Ausführen des decodierten Befehls von der Ausführungsschaltung ferner das Multiplexen von Datenwerten aus der Mehrzahl von Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten mit mindestens einer Multiplikatorschaltung einschließt.
    11. 11. Vorrichtung aus Beispiel 9, wobei die Datenwerte aus der Mehrzahl von Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten basierend auf Datenwerten, die eine gleiche Position für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten gemeinsam nutzen, mit der mindestens einen Multiplikatorschaltung gemultiplext werden.
    12. 12. Vorrichtung aus Beispiel 9, wobei der eine oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte von einem oder mehreren Addierernetzwerken erzeugt werden.
    13. 13. Vorrichtung aus Beispiel 9, wobei das Speichern des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte das Speichern eines Ergebniswertes in einer oberen Hälfte des Zieloperanden für gepackte Daten und das Speichern eines Ergebniswertes in einer unteren Hälfte des Zieloperanden für gepackte Daten einschließt.
    14. 14. Vorrichtung aus Beispiel 9, wobei das Multiplizieren der ausgewählten Datenwerte Folgendes einschließt: Ausführen der Operationen S1H*S2H, S1G*S2G, S1F*S2F und S1E*S2E und der Operationen S1D*S2D, S1C*S2C, S1B*S2B und S1A*S2A, um die Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen, wobei S1 den ersten Quelloperanden für gepackte Daten identifiziert, S2 den zweiten Quelloperanden für gepackte Daten identifiziert und A, B, C, D, E, F, G und H die Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten identifizieren, die von niedrigsten zu höchsten Datenelementpositionen geordnet sind.
    15. 15. Vorrichtung aus Beispiel 9, wobei das Summieren der Mehrzahl erster vorzeichenbehafteter Ergebniswerte das Ausführen der Operationen (S1H*S2H) + (S1G*S2G) + (S1F*S2F) + (S1E*S2E) und das Ausführen der Operationen (S1H*S2H) + (S1G*S2G) + (S1B*S2B) + (S1A*S2A) einschließt, um den einen oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte zu erzeugen.
    16. 16. Vorrichtung aus Beispiel 9, ferner umfassend, als Reaktion auf das Erkennen, dass ein Wert des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte über einem Schwellenwert liegt, das Speichern eines Maximalwerts in der entsprechenden Position des Zieloperanden.
    17. 17. Nichtflüchtiges maschinenlesbares Medium, das einen Befehl speichert, der bei Ausführung 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ührungsschaltungsanordnung, um: ausgewählte vorzeichenbehaftete Datenwerte aus einer Mehrzahl von Positionen von gepackten Datenelementen in einem ersten und einem zweiten Quelloperanden für gepackte Daten zu multiplizieren, um eine Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen; die Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu summieren, um einen oder mehrere zweite vorzeichenbehaftete Ergebniswerte erzeugen; den einen oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte mit einem oder mehreren Datenwerten von dem Zieloperanden zu akkumulieren, um einen oder mehrere dritte vorzeichenbehaftete Ergebniswerte zu erzeugen; und den einen oder die mehreren vorzeichenbehafteten Ergebniswerte in einer oder mehreren Positionen für gepackte Datenelemente im Zieloperanden zu speichern.
    18. 18. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 17, wobei das Ausführen des decodierten Befehls von der Ausführungsschaltung ferner das Multiplexen von Datenwerten aus der Mehrzahl von Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten mit mindestens einer Multiplikatorschaltung einschließt.
    19. 19. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 18, wobei die Datenwerte aus der Mehrzahl von Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten basierend auf Datenwerten, die eine gleiche Position für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten gemeinsam nutzen, mit der mindestens Multiplikatorschaltung gemultiplext werden.
    20. 20. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 17, wobei der eine oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte von einem oder mehreren Addierernetzwerken erzeugt werden.
    21. 21. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 17, wobei das Speichern des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte das Speichern eines Ergebniswertes in einer oberen Hälfte des Zieloperanden für gepackte Daten und das Speichern eines Ergebniswertes in einer unteren Hälfte des Zieloperanden für gepackte Daten einschließt.
    22. 22. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 17, wobei das Multiplizieren der ausgewählten Datenwerte Folgendes einschließt: Ausführen der Operationen S1H*S2H, S1G*S2G, S1F*S2F und S1E*S2E und der Operationen S1D*S2D, S1C*S2C, S1B*S2B und S1A*S2A, um die Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen, wobei S1 den ersten Quelloperanden für gepackte Daten identifiziert, S2 den zweiten Quelloperanden für gepackte Daten identifiziert und A, B, C, D, E, F, G und H die Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten identifizieren, die von niedrigsten zu höchsten Datenelementpositionen geordnet sind.
    23. 23. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 17, wobei das Summieren der Mehrzahl erster vorzeichenbehafteter Ergebniswerte das Ausführen der Operationen (S1H*S2H) + (S1G*S2G) + (S1F*S2F) + (S1E*S2E) und das Ausführen der Operationen (S1H*S2H) + (S1G*S2G) + (S1B*S2B) + (S1A*S2A) einschließt, um den einen oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte zu erzeugen.
    24. 24. Nichtflüchtiges maschinenlesbares Medium aus Beispiel 17, ferner umfassend, als Reaktion auf das Erkennen, dass ein Wert des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte über einem Schwellenwert liegt, das Speichern eines Maximalwerts in der entsprechenden Position des Zieloperanden.
  • Detaillierte beispielhafte Systeme, Prozessoren und Emulation
  • Hierin sind Beispiele von Hardware, Software usw. zur Ausführung der oben beschriebenen Befehle detailliert dargestellt. Zum Beispiel gibt die folgende Beschreibung detaillierte Aspekte der Befehlsausführung, einschließlich verschiedener Pipeline-Stufen, wie Abrufen, Decodieren, Planen, Ausführen, Zurückziehen usw. an.
  • 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 der/die Operand(en), auf denen die Operation durchgeführt werden soll, anzugeben. Einige Befehlsformate sind durch die Definition von Befehlsvorlagen (oder Subformaten) weiter aufgeteilt. Zum Beispiel können die Befehlsvorlagen eines gegebenen Befehlsformats so definiert werden, dass sie verschiedene Teilsätze der Felder des Befehlsformats aufweisen (die enthaltenen Felder sind üblicherweise in der gleichen Reihenfolge, aber zumindest einige weisen verschiedene Bit-Positionen auf, weil weniger Felder enthalten sind), und/oder so definiert werden, dass ein gegebenes Feld verschieden 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 spezifischen Opcode und ein Befehlsformat auf, das ein Opcode-Feld aufweist, um diese Opcode- und Operandenfelder zum Auswählen von Operanden (source1/destination und source2) zu spezifizieren. Ein Auftreten dieses ADD-Befehls in einem Befehlsstrom hat spezifische Inhalte in den Operandenfeldern, die bestimmte 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 unterstützt eine Syntax mit drei (oder mehr) Operanden. Zum Beispiel haben frühere Zwei-Operanden-Befehle Operationen, wie A = A + B, durchgeführt, wodurch ein Quelloperand überschrieben wird. Die Verwendung eines VEX-Präfixes ermöglicht es, dass Operanden zerstörungsfreie Operationen, wie A = B + C, durchführen.
  • 3A veranschaulicht ein beispielhaftes AVX-Befehlsformat, einschließlich eines VEX-Präfixes 302, eines Feldes des echten Opcodes 330, eines Mod-R/M-Bytes 340, eines SIB-Bytes 350, eines Verschiebungsfeldes 362 und IMM8 372. 3B veranschaulicht, welche Felder von 3A ein Feld des vollständigen Opcodes 374 und ein Basisoperationsfeld 341 bilden. 3C veranschaulicht, welche Felder von 3A ein Registerindexfeld 344 bilden.
  • Das VEX-Präfix (Bytes 0-2) 302 ist in einer Drei-Byte-Form codiert. Das erste Byte ist das Formatfeld 390 (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. Das zweite und das dritte Byte (VEX-Bytes 1 und 2) schließen mehrere Bit-Felder ein, die eine spezifische Fähigkeit bereitstellen. Insbesondere besteht das REX-Feld 305 (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 315 (VEX-Byte 1, Bits [4:0] -mmmmm) schließt Inhalt ein, um ein impliziertes führendes Opcode-Byte zu codieren. Das W-Feld 364 (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 320 (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 368-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 325 (VEX-Byte 2, Bits [1:0]-pp) stellt zusätzliche Bits für das Basisoperationsfeld 341 bereit.
  • Das Real-Opcode-Feld 330 (Byte 3) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • Das MOD-R/M-Feld 340 (Byte 4) schließt das MOD-Feld 342 (Bits [7:6]), das Reg.-Feld 344 (Bits [5:3]) und das R/M-Feld 346 (Bits [2:0]) ein. Die Rolle des Reg.-Feldes 344 kann Folgendes einschließen: Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden (rrr von Rrrr) oder als eine Opcode-Erweiterung behandelt werden und nicht zum Codieren eines Befehlsoperanden verwendet werden. Die Rolle des R/M-Feldes 346 kann Folgendes einschließen: Codieren des Befehlsoperanden, der eine Speicheradresse referenziert, oder Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Skalierung, Index, Basis (SIB) - der Inhalt des Skalierungsfeldes 350 (Byte 5) schließt SS 352 (Bits [7:6]) ein, das zur Speicheradressgenerierung verwendet wird. Auf die Inhalte von SIB.xxx 354 (Bits [5:3]) und SIB.bbb 356 (Bits [2:0]) wurde zuvor bezogen auf die Registerindizes Xxxx und Bbbb Bezug genommen.
  • Das Verschiebungsfeld 362 und das Feld des unmittelbaren Elements (IMM8) 372 enthalten Daten.
  • Beispielhafte Registerarchitektur
  • 4 ist ein Blockdiagramm einer Registerarchitektur 400 gemäß einer Ausführungsform der Erfindung. In der veranschaulichten Ausführungsform gibt es 32 Vektorregister 410, die jeweils 512 Bits breit sind; diese Register sind als zmm0 bis zmm31 referenziert. Die 256 Bit niedriger Ordnung der unteren 410 zmm-Register werden auf Register ymm0-15 überlagert. Die 128 Bit niedriger Ordnung der unteren 410 zmm-Register (die 128 Bit niedriger Ordnung der ymm-Register) werden auf Register xmm0-15 überlagert.
  • Mehrzweckregister 425 - 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 werden durch die Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Skalar-Gleitkomma-Stapel-Registerbank (x87-Stapel) 445, auf der die MMX-gepackte-Integer-Flat-Registerbank 450 zugewiesen wird - bei der veranschaulichten Ausführungsform ist der x87-Stapel ein Acht-Element-Stapel, der verwendet wird, um skalare Gleitkommaoperationen an 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung auszuführen. Die MMX-Register werden verwendet, um Operationen an 64-Bit-gepackten-Integerdaten durchzuführen und auch um Operanden für manche Operationen zu halten, die zwischen 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 Weise, zu verschiedenen Zwecken und in verschiedenen Prozessoren implementiert werden. Beispielsweise können Umsetzungen solcher Kerne Folgendes beinhalten: 1) einen universellen In-order-Kern, gedacht für universelles Rechnen; 2) einen universellen 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 In-order-Kerne, gedacht für universelles Rechnen, umfassend, und/oder einen oder mehrere universelle 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 Anwendungskern(e) oder Anwendungsprozessor(en) 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
  • 5A 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. 5B 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 5A-B veranschaulichen die In-order-Pipeline und den In-order-Kern, während die optionale Hinzufügung der Kästchen mit gestrichelten Linien die Pipeline und den Kern für Registerumbenennung, Out-of-order-Ausgabe/-Ausführung veranschaulicht. Dadurch, dass der In-order-Aspekt ein Teilsatz des Out-of-order-Aspekts ist, wird der Out-of-order-Aspekt beschrieben.
  • In 5A schließt eine Prozessor-Pipeline 500 eine Abrufen-Stufe 502, eine Längendecodieren-Stufe 504, eine Decodieren-Stufe 506, eine Zuordnungsstufe 508, eine Umbenennungsstufe 510, eine Planungs- (auch bekannt als eine Sende- oder Ausgabe-)Stufe 512, eine Registerlesen/Speicherlesen-Stufe 514, eine Ausführungsstufe 516, eine Zurückschreiben-/Speicherschreiben-Stufe 518, eine Ausnahmebehandlungsstufe 522 und eine Anwendungsstufe 524 ein.
  • 5B zeigt einen Prozessorkern 590, einschließlich einer Front-End-Einheit 530, die an eine Ausführungsmoduleinheit 550 gekoppelt ist, und beide sind an eine Speichereinheit 570 gekoppelt. Der Kern 590 kann ein Kern für Rechnen mit reduziertem Befehlssatz (Reduced Instruction Set Computing, RISC), ein Kern 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 590 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 Front-End-Einheit 530 schließt eine Sprungvorhersageeinheit 532 ein, die an eine Befehls-Cache-Einheit 534 gekoppelt ist, die an einen Befehls-Übersetzungspuffer (Translation Lookaside Buffer, TLB) 536 gekoppelt ist, der an eine Befehlsabrufeinheit 538 gekoppelt ist, der an eine Decodiereinheit 540 gekoppelt ist. Die Decodiereinheit 540 (oder der Decoder) kann Befehle decodieren und als eine Ausgabe eine oder mehrere Mikro-Operationen, Mikrocode-Eintrittspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale erzeugen, die von den ursprünglichen Befehlen decodiert oder abgeleitet werden oder die diese auf andere Weise widerspiegeln. Die Decodiereinheit 540 kann unter Verwendung mehrerer verschiedener Mechanismen implementiert werden. Beispiele für geeignete Mechanismen schließen unter anderem Umsetzungstabellen, Hardwareimplementierungen, programmierbare logische Anordnungen (Programmable Logic Arrays, PLAs), Mikrocode-Festwertspeicher (Read Only Memories, ROMs) usw. ein. In einer Ausführungsform schließt der Kern 590 einen Mikrocode-ROM oder ein anderes Medium ein, das Mikrocode für bestimmte Makrobefehle speichert (z. B. in der Decodiereinheit 540 oder auf andere Weise in der Front-End-Einheit 530). Die Decodiereinheit 540 ist an eine Umbenennungs-/Zuordnungseinheit 552 in der Ausführungsmoduleinheit 550 gekoppelt.
  • Die Ausführungs-Engine-Einheit 550 beinhaltet die Umbenennungs-/Zuordnungseinheit 552, die mit einer Zurückzieheinheit 554 und einem Satz von einer oder mehreren Planereinheit(en) 556 gekoppelt ist. Die Planereinheit(en) 556 repräsentiert/en eine beliebige Anzahl unterschiedlicher Planer, einschließlich Reservierungsstationen, zentralen Befehlsfensters usw. Die Planereinheit(en) 556 ist (sind) mit der/den physischen Registerdatei(en) -Einheit(en) 558 gekoppelt. Alle Einheit(en) der physikalischen Registerdatei(en) 558 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) 558 eine Vektorregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Universalregister bereitstellen. Die Einheit(en) der physikalischen Registerdatei(en) 558 sind durch die Zurückzieheinheit 554 überlappt, um verschiedene Weisen zu veranschaulichen, in denen eine Registerumbenennung und Out-of-order-Ausführung implementiert werden kann (z. B. unter Verwendung von Neuordnungspuffer(n) und Zurückziehregisterdatei(en); unter Verwendung von künftigen Datei(en), Verlaufspuffer(n) und Zurückziehregisterdatei(en); unter Verwendung von Registerkarten und einem Pool von Registern; usw.). Die Zurückzieheinheit 554 und die physische(n) Registerdatei(en)einheit(en) 558 sind mit dem (den) Ausführungscluster(n) 560 gekoppelt. Das/die Ausführungscluster 560 beinhaltet/beinhalten einen Satz einer oder mehrerer Ausführungseinheiten 562 und einen Satz einer oder mehrerer Speicherzugriffseinheiten 564. Die Ausführungseinheiten 562 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) 556, die physische(n) Registerdatei(en)einheit(en) 558 und Ausführungscluster 560 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) 564 aufweist). Es versteht sich auch, dass, wenn getrennte Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-order-Ausgabe-/Ausführung und der Rest In-order sein können.
  • Der Satz von Speicherzugriffseinheiten 564 ist mit der Speichereinheit 570 gekoppelt, die eine Daten-TLB-Einheit 572 beinhaltet, die mit einer Datencacheeinheit 574 gekoppelt ist, die mit einer Level-2-(L2)-Cacheeinheit 576 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 564 eine Ladeeinheit, eine Adressenspeichereinheit und eine Datenspeichereinheit beinhalten, wovon jede mit der Daten-TLB-Einheit 572 in der Speichereinheit 570 gekoppelt ist. Die Befehlscacheeinheit 534 ist ferner mit einer Level-2-(L2)-Cacheeinheit 576 in der Speichereinheit 570 gekoppelt. Die L2-Cacheeinheit 576 ist mit einem oder mehreren anderen Leveln eines Caches und schlussendlich mit einem Hauptspeicher verbunden.
  • Beispielsweise kann die beispielhafte Out-of-order-Ausgabe-/Ausführungs-Kernarchitektur für Registerumbenennung die Pipeline 500 wie folgt implementieren: 1) der Befehlsabruf 538 führt die Abruf- und Längendecodierstufen 502 und 504 durch; 2) die Decodiereinheit 540 führt die Decodierstufe 506 durch; 3) die Umbenennungs-/Zuordnungseinheit 552 führt die Zuordnungsstufe 508 und die Umbenennungsstufe 510 durch; 4) die Ablaufsteuereinheit(en) 556 führt bzw. führen die Ablaufsteuerungsstufe 512 durch; 5) die physische(n) Registerdatei(en)einheit(en) 558 und die Speichereinheit 570 führen die Registerlese-/Speicherlesestufe 514 durch; das Ausführungscluster 560 führt die Ausführungsstufe 516 durch; 6) die Speichereinheit 570 und die physische(n) Registerdatei(en)einheit(en) 558 führen die Zurückschreibe-/Speicherschreibestufe 518 durch; 7) verschiedene Einheiten können in der Ausnahmenbehandlungsstufe 522 beteiligt sein und 8) die Zurückzieheinheit 554 und die physische(n) Registerdatei(en)einheit(en) 558 führen die Commit-Stufe 524 durch.
  • Der Kern 590 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 590 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®).
  • Wenngleich eine Registerumbenennung im Zusammenhang mit einer Out-of-order-Ausführung beschrieben ist, versteht es sich, dass eine Registerumbenennung in einer In-order-Architektur verwendet werden kann. Wenngleich die veranschaulichte Ausführungsform des Prozessors auch getrennte Befehls- und Datencacheeinheiten 534/574 und eine geteilte L2-Cacheeinheit 576 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.
  • Spezifische beispielhafte In-Order-Kernarchitektur
  • 6A-B veranschaulichen ein Blockdiagramm einer spezifischeren beispielhaften In-order-Kernarchitektur, deren Kern einer von verschiedenen logischen Blöcke (einschließlich anderer Kerne des gleichen Typs und/oder verschiedener Typen) in einem Chip wäre. Die logischen Blöcke kommunizieren durch ein Verbindungsnetzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit einiger fester Funktionslogik, Speicher-E/A-Schnittstellen und anderer erforderlicher E/A-Logik, je nach Anwendung.
  • 6A ist ein Blockdiagramm eines Einzelprozessorkerns zusammen mit dessen Verbindung zu einem On-Die Verbindungsnetzwerk 602 und mit dessen lokalem Teilsatz des Level 2 (L2)-Cache 604 gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdecoder 600 den x86-Befehlssatz mit einer Befehlssatzerweiterung für gepackte Daten. Ein L1-Cache 606 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 608 und eine Vektoreinheit 610 getrennte Registersätze verwenden (Skalarregister 612 bzw. Vektorregister 614) und zwischen ihnen übertragene Daten in einen Speicher geschrieben und dann aus einem Level-1-(L1)-Cache 606 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 604 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 604 auf. Daten, die von einem Prozessorkern gelesen werden, werden in seinem L2-Cache-Teilsatz 604 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 604 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 1024 Bits breit.
  • 6B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 6A gemäß Ausführungsformen der Erfindung. 6B schließt einen Teil des L1-Daten-Cache 606A des L1-Cache 604 und mehr Details in Bezug auf die Vektoreinheit 610 und das Vektorregister 614 ein. Insbesondere ist die Vektoreinheit 610 eine 10-breite Vektorverarbeitungseinheit (Vector Processing Unit, VPU) (siehe die 16-breite ALU 628), 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 620, eine numerische Konvertierung mit den Einheiten zur numerischen Konvertierung 622A-B und eine Replikation mit einer Replikationseinheit 624 bei der Speichereingabe.
  • Prozessor mit integrierter Speichersteuerung und Grafik
  • 7 ist ein Blockdiagramm eines Prozessors 700 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 7 veranschaulichen einen Prozessor 700 mit einem Einzelkern 702A, einem Systemagenten 710, einem Satz von einer oder mehreren Bus-Controller-Einheiten 716, während die optionale Hinzufügung der Kästchen mit gestrichelten Linien einen alternativen Prozessor 700 mit mehreren Kernen 702A-N, einen Satz von einer oder mehreren integrierten Speicher-Controller-Einheit(en) 714 in der Systemagenteneinheit 710 und eine Speziallogik 708 veranschaulicht.
  • Somit können verschiedene Implementierungen des Prozessors 700 Folgendes einschließen: 1) eine CPU mit der Speziallogik 708, die eine integrierte Grafik- und/oder wissenschaftliche (Durchsatz-)Logik ist (die einen oder mehrere Kerne einschließen kann), und die Kerne 702A-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 702A-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 702A-N eine große Anzahl von In-order-Universalkernen sind. Somit kann der Prozessor 700 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 700 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 704A-N, einen Satz oder eine oder mehrere gemeinsame Cache-Einheiten 706 und externen Speicher (nicht gezeigt), der an den Satz von integrierten Speichersteuereinheiten 714 gekoppelt ist, ein. Der Satz von gemeinsamen Cache-Einheiten 706 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 712 die integrierte Grafiklogik 708, den Satz geteilter Cacheeinheiten 706 und die Systemagentenheinheit 710/integrierte Speichersteuereinheit(en) 714 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 706 und Kernen 702-A-N beibehalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 602A-N zum Multithreading in der Lage. Der Systemagent 710 schließt die Komponenten ein, die die Kerne 702A-N koordinieren und betreiben. Die Systemagenteneinheit 710 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 702A-N und der integrierten Grafiklogik 708 erforderlich sind. Die Anzeigeeinheit dient zum Ansteuern von einer oder mehreren extern verbundenen Anzeigen.
  • Die Kerne 702A-N können in Bezug auf den Architekturbefehlssatz homogen oder heterogen sein; das heißt, zwei oder mehrere der Kerne 702A-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
  • 8-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 Bezug nehmend auf 8 ist ein Blockdiagramm eines Systems 800 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 800 kann einen oder mehrere Prozessoren 810, 815 beinhalten, die mit einem Steuer-Hub 820 gekoppelt sind. In einer Ausführungsform weist der Steuerungs-Hub 820 einen Grafikspeicher-Steuerungs-Hub (GMCH) 890 und einen Eingabe/Ausgabe-Hub (IOH) 850 auf (die sich auf separaten Chips befinden können); der GMCH 890 weist Speicher- und Grafiksteuerungen auf, mit denen ein Speicher 840 und ein Coprozessor 845 verbunden sind; der IOH 850 koppelt Eingabe/Ausgabe (I/O) -Geräte 860 mit dem GMCH 890. Alternativ dazu sind einer oder beide der Speicher- und Grafik-Controller in den Prozessor integriert (wie hierin beschrieben), sind der Speicher 840 und der Coprozessor 845 direkt an den Prozessor 810 gekoppelt und der Controller-Hub 820 in einem einzelnen Chip mit dem IOH 850.
  • Die optionale Art der zusätzlichen Prozessoren 815 ist in 8 mit gestrichelten Linien gekennzeichnet. Jeder Prozessor 810, 815 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne beinhalten und kann irgendeine Version des Prozessors 700 sein.
  • Der Speicher 840 kann zum Beispiel dynamischer Direktzugriffsspeicher (DRAM, Direct Random Access Memory), Phasenwechselspeicher (PCM, Phase Change Memory) oder eine Kombination der beiden sein. Für zumindest eine Ausführungsform kommuniziert der Controller-Hub 820 mit dem/den Prozessor(en) 810, 815 über einen Multi-Drop-Bus, wie einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle oder eine ähnliche Verbindung 895.
  • In einer Ausführungsform ist der Coprozessor 845 ein Spezialprozessor, wie ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, ein Komprimierungsmodul, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Steuer-Hub 820 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 810, 815 geben.
  • In einer Ausführungsform führt der Prozessor 810 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. Eingebettet in die Befehle können Coprozessorbefehle sein. Der Prozessor 810 erkennt diese Coprozessorbefehle als von einem Typ, der durch den angehängten Coprozessor 845 ausgeführt werden sollte. Entsprechend gibt der Prozessor 810 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle repräsentieren) auf einem Coprozessorbus oder einer anderen Zwischenverbindung an den Coprozessor 845 aus. Ein oder mehrere Coprozessoren 845 akzeptieren die empfangenen Coprozessorbefehle und führen sie aus.
  • Nun Bezug nehmend auf 9 ist ein Blockdiagramm eines ersten spezifischeren Beispielsystems 900 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 9 gezeigt, ist das Multiprozessorsystem 900 ein Punkt-zu-Punkt-Verbindungssystem und schließt einen ersten Prozessor 970 und einen zweiten Prozessor 980 ein, die über eine Punkt-zu-Punkt-Verbindung 950 gekoppelt sind. Jeder von Prozessoren 970 und 980 kann irgendeine Version des Prozessors 700 sein. In einer Ausführungsform der Erfindung sind Prozessoren 970 und 980 die Prozessoren 810 bzw. 815, während Coprozessor 938 der Coprozessor 845 ist. In einer anderen Ausführungsform sind Prozessoren 970 und 980 der Prozessor 810 bzw. der Coprozessor 845.
  • Die Prozessoren 970 und 980 sind einschließlich IMC-Einheiten (IMC: Integrated Memory Controller - Integrierter-Speicher-Steuerung) 972 bzw. 982 gezeigt. Auch beinhaltet der Prozessor 970 als Teil seiner Bussteuereinheiten Punkt-zu-Punkt-(P-P)-Schnittstellen 976 und 978; gleichermaßen beinhaltet der zweite Prozessor 980 P-P-Schnittstellen 986 und 988. Die Prozessoren 970 und 980 können Informationen über eine Punkt-zu-Punkt-(P-P)-Schnittstelle 950 unter Verwendung von P-P-Schnittstellenschaltungen 978, 988 austauschen. Wie in 9 gezeigt, koppeln die IMCs 972 und 982 die Prozessoren an jeweilige Speicher, nämlich an Speicher 932 und einen Speicher 934, die Abschnitte eines Hauptspeichers sein können, der lokal an den jeweiligen Prozessoren befestigt ist.
  • Die Prozessoren 970, 980 können jeweils Informationen mit einem Chipsatz 990 über einzelne P-P-Schnittstellen 952, 954 unter Verwendung von Punkt-zu-Punkt-SchnittstellenSchaltungen 976, 994, 986, 998 austauschen. Der Chipsatz 990 kann optional Informationen mit dem Coprozessor 938 über eine Hochleistungsschnittstelle 992 austauschen. In einer Ausführungsform ist der Coprozessor 938 ein Spezialprozessor, wie ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, ein Komprimierungsmodul, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein 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 990 kann über eine Schnittstelle 996 mit einem ersten Bus 916 gekoppelt werden. In einer Ausführungsform kann der erste Bus 916 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 9 gezeigt, können verschiedene E/A-Vorrichtungen 914 an den ersten Bus 916 gekoppelt sein, zusammen mit einer Bus-Brücke 918, die den ersten Bus 916 an einen zweiten Bus 920 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 915, 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 916 gekoppelt. In einer Ausführungsform kann der zweite Bus 920 ein LPC-(Low Pin Count)-Bus sein. Verschiedene Vorrichtungen können mit einem zweiten Bus 920 gekoppelt sein, der zum Beispiel eine Tastatur und/oder Maus 922, Kommunikationsvorrichtungen 927 und eine Speichereinheit 928 wie ein Plattenlaufwerk oder eine andere Massenspeichervorrichtung, die Befehle/Code und Daten 930 aufweisen können, in einer Ausführungsform umfasst. Ferner kann eine Audio-E/A 924 mit dem zweiten Bus 920 gekoppelt sein. Es sei angemerkt, dass andere Architekturen möglich sind. Zum Beispiel kann anstelle der Punkt-zu-Punkt-Architektur aus 9 ein System einen Multi-Drop-Bus oder eine andere solche Architektur implementieren.
  • Nun Bezug nehmend auf 10 ist ein Blockdiagramm eines zweiten spezifischeren Beispielsystems 1000 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in 9 und 10 tragen gleiche Bezugszeichen, und bestimmte Aspekte von 9 wurden in 10 weggelassen, um eine Verunklarung anderer Aspekte von 10 zu vermeiden.
  • 10 veranschaulicht, dass die Prozessoren 970, 980 eine integrierte Speicher- und E/A-Steuerlogik (Control Logic, CL) 1072 bzw. 1082 einschließen können. Dementsprechend beinhaltet die CL 1072, 1082 integrierte Speichersteuereinheiten und beinhaltet E/A-Steuerlogik. 10 veranschaulicht, dass nicht nur die Speicher 932, 934 an die CL 972, 982 gekoppelt sind, sondern auch, dass E/A-Vorrichtungen 1014 auch an die Steuerlogik 972, 982 gekoppelt sind. Veraltete E/A-Vorrichtungen 1015 sind mit dem Chipsatz 990 gekoppelt.
  • Nun Bezug nehmend auf 11 ist ein Blockdiagramm eines SoC 1100 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in 7 tragen gleiche Bezugszeichen. Außerdem sind Kästchen mit gestrichelten Linien optionale Merkmale auf fortschrittlicheren SoC. In 11 ist eine bzw. sind Verbindungseinheit(en) 1102 an Folgendes gekoppelt: einen Anwendungsprozessor 910, der einen Satz von einem oder mehreren Kernen 702AN, Cache-Einheiten 704A-N und gemeinsame Cache-Einheit(en) 706; eine Systemagenteneinheit 710; Bus-Controller-Einheit(en) 716; integrierte Speicher-Controller-Einheit(en) 714; einen Satz oder einen oder mehrere Coprozessoren 1120, 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)1130; eine Einheit mit direktem Speicherzugriff (Direct Memory Access, DMA) 1132; und eine Anzeigeeinheit 1140 zum Koppeln an eine oder mehrere externe Anzeigen einschließt. In einer Ausführungsform schließen die Coprozessor(en) 1120 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 9 veranschaulichte Code 930, 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 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 beinhalten unter anderem nichtflüchtige greifbare Anordnungen von Artikeln, die durch eine Maschine oder eine Vorrichtung hergestellt oder gebildet werden, einschließlich Speichermedien, wie etwa Festplatten, oder einer beliebigen anderen Art von Disk, einschließlich Disketten, optischer Disks, CD-ROMs (Compact Disc Read-Only Memories), CD-RWs (Compat Disk Rewritables) und magneto-optischer Disks, Halbleitervorrichtungen, wie etwa ROMs (Read-Only Memories), RAMs (Random Access Memories), wie etwa DRAMs (Dynamic Random Access Memories), SRAMs (Static Random Access Memories), EPROMs (Erasable Programmable Read-Only Memories), Flash-Speichern, EEPROMs (Electrically Erasable Programmable Read-Only Memories), PCM (Phase Change Memory), magnetischer oder optischer Karten oder irgendeines anderen Typs von Medien, die zum Speichern elektronischer Befehle geeignet sind.
  • Entsprechend schließen Ausführungsformen der Erfindung auch nicht-flüchtige, greifbare maschinenlesbare Medien ein, die Befehle enthalten oder Designdaten enthalten, wie eine Hardwarebeschreibungssprache (Hardware Description Language, HDL), die hierin beschriebene Strukturen, Schaltungen, Einrichtungen, Prozessoren und/oder Systemmerkmale definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich Binärübersetzung, Codeumformung usw.)
  • In manchen Fällen kann ein Befehlsumwandler verwendet werden, um einen Befehl von einem Quellbefehlssatz in einen Zielbefehlssatz umzuwandeln. Beispielsweise kann der Befehlsumwandler einen Befehl in einen oder mehrere andere durch den Kern zu verarbeitende Befehle übersetzen (z. B. unter Verwendung statischer Binärübersetzung, dynamischer Binärübersetzung einschließlich dynamischer Kompilation), umformen, emulieren oder anderweitig umwandeln. Der Befehlsumwandler kann in Software, Hardware, Firmware oder einer Kombination davon implementiert sein. Der Befehlsumwandler kann auf dem Prozessor, außerhalb des Prozessors oder teilweise auf und teilweise außerhalb des Prozessors sein.
  • 12 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. 12 zeigt, dass ein Programm in einer höheren Sprache 1202 unter Verwendung eines ersten Compilers 1204 kompiliert werden kann, um einen ersten Binärcode (z. B. x86) 1206 zu erzeugen, der nativ durch einen Prozessor mit zumindest einem ersten Befehlssatzkern 1216 ausgeführt werden kann. In einigen Ausführungsformen stellt der Prozessor mit zumindest einem ersten Befehlssatzkern 1216 einen beliebigen Prozessor dar, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern durchführen kann, indem er (1) einen wesentlichen Abschnitt des Befehlssatzes des Intel x86-Befehlssatzkerns oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die auf einem Intel-Prozessor mit zumindest einem x86-Befehlssatzkern ausgeführt werden sollen, auf kompatible Weise ausführt oder auf andere Weise verarbeitet, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern zu erreichen. Der erste Compiler 1204 stellt einen Compiler dar, der betreibbar ist, um Binärcode des ersten Befehlssatzes 1206 (z. B. Objektcode) zu erzeugen, der, mit oder ohne zusätzliche Verknüpfungsverarbeitung, auf dem Prozessor mit zumindest einem ersten Befehlssatzkern 1216 ausgeführt werden kann. In ähnlicher Weise zeigt 12, dass das Programm in der höheren Sprache 1202 unter Verwendung eines alternativen Befehlssatz-Compilers 1208 kompiliert werden kann, um einen alternativen Befehlssatzbinärcode 1210 zu erzeugen, der nativ durch einen Prozessor ohne zumindest einen ersten Befehlssatzkern 1214 ausgeführt werden kann (z. B. einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, CA, USA, ausführen und/oder die den ARM-Befehlssatz von ARM Holdings in Sunnyvale, CA, USA, ausführen). Der Befehlskonverter 1212 wird verwendet, um den ersten Binärcode 1206 in Code zu konvertieren, der nativ durch den Prozessor ohne einen ersten Befehlssatzkern 1214 ausgeführt werden kann. Es ist nicht wahrscheinlich, dass dieser konvertierte Code dem alternativen Befehlssatzbinärcode 1210 entspricht, weil ein Befehlskonverter, der hierzu in der Lage ist, schwer herzustellen ist; der konvertierte Code führt jedoch den allgemeinen Betrieb aus und besteht aus Befehlen aus dem alternativen Befehlssatz. Somit stellt der Befehlskonverter 1212 Software, Firmware, Hardware oder eine Kombination davon dar, die es, durch Emulation, Simulation oder ein anderes Verfahren, einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen ersten Befehlssatzprozessor oder -kern aufweist, ermöglicht, den ersten Binärcode 1206 auszuführen.

Claims (24)

  1. Verfahren zum Ausführen eines Befehls, wobei das Verfahren Folgendes umfasst: Decodieren eines Befehls von einer Decodierschaltung, wobei der Befehl Felder für einen ersten und einen zweiten Quelloperanden für gepackte Daten und einen Zieloperanden für gepackte Daten aufweist; Ausführen des decodierten Befehls von einer Ausführungsschaltung durch: Multiplizieren ausgewählter vorzeichenbehafteter Datenwerte aus einer Mehrzahl von Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten, um eine Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen; Summieren der Mehrzahl erster vorzeichenbehafteter Ergebniswerte, um einen oder mehrere zweite vorzeichenbehaftete Ergebniswerte zu erzeugen; Akkumulieren des einen oder der mehreren zweiten vorzeichenbehafteten Ergebniswerte, um einen oder mehrere dritte vorzeichenbehaftete Ergebniswerte zu erzeugen; und Speichern des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte in einer oder mehreren Positionen für gepackte Datenelemente im Zieloperanden.
  2. Verfahren nach Anspruch 1, wobei das Ausführen des decodierten Befehls von der Ausführungsschaltung ferner das Multiplexen von Datenwerten aus der Mehrzahl von Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten mit mindestens einer Multiplikatorschaltung einschließt.
  3. Verfahren nach Anspruch 2, wobei die Datenwerte aus der Mehrzahl von Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten basierend auf Datenwerten, die eine gleiche Position für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten gemeinsam nutzen, mit der mindestens einen Multiplikatorschaltung gemultiplext werden.
  4. Verfahren nach Anspruch 1, wobei der eine oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte von einem oder mehreren Addierernetzwerken erzeugt werden.
  5. Verfahren nach Anspruch 1, wobei das Speichern des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte das Speichern eines Ergebniswertes in einer oberen Hälfte des Zieloperanden für gepackte Daten und das Speichern eines Ergebniswertes in einer unteren Hälfte des Zieloperanden für gepackte Daten einschließt.
  6. Verfahren nach Anspruch 1, wobei das Multiplizieren der ausgewählten vorzeichenbehafteten Datenwerte Folgendes einschließt: Ausführen der Operationen S1H*S2H, S1G*S2G, S1F*S2F und S1E*S2E und der Operationen S1D*S2D, S1C*S2C, S1B*S2B und S1A*S2A, um die Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen, wobei S1 den ersten Quelloperanden für gepackte Daten identifiziert, S2 den zweiten Quelloperanden für gepackte Daten identifiziert und A, B, C, D, E, F, G und H die Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten identifizieren, die von niedrigsten zu höchsten Datenelementpositionen geordnet sind.
  7. Verfahren nach Anspruch 6, wobei das Summieren der Mehrzahl erster vorzeichenbehafteter Ergebniswerte das Ausführen der Operationen (S1H*S2H) + (S1G*S2G) + (S1F*S2F) + (S1E*S2E) und das Ausführen der Operationen (S1H*S2H) + (S1G*S2G) + (S1B*S2B) + (S1A*S2A) einschließt, um den einen oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte zu erzeugen.
  8. Verfahren nach Anspruch 1, ferner umfassend, als Reaktion auf das Erkennen, dass ein Wert des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte über einem Schwellenwert liegt, das Speichern eines Maximalwerts in der entsprechenden Position des Zieloperanden.
  9. 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ührungsschaltungsanordnung zum Ausführen des decodierten Befehls zu Folgendem: Multiplizieren ausgewählter vorzeichenbehafteter Datenwerte aus einer Mehrzahl von Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten, um eine Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen; Summieren der Mehrzahl erster vorzeichenbehafteter Ergebniswerte, um einen oder mehrere zweite vorzeichenbehaftete Ergebniswerte zu erzeugen; Akkumulieren des einen oder der mehreren zweiten vorzeichenbehafteten Ergebniswerte, um einen oder mehrere dritte vorzeichenbehaftete Ergebniswerte zu erzeugen; und Speichern des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte in einer oder mehreren Positionen für gepackte Datenelemente im Zieloperanden.
  10. Vorrichtung nach Anspruch 9, wobei das Ausführen des decodierten Befehls von der Ausführungsschaltung ferner das Multiplexen von Datenwerten aus der Mehrzahl von Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten mit mindestens einer Multiplikatorschaltung einschließt.
  11. Vorrichtung nach Anspruch 9, wobei die Datenwerte aus der Mehrzahl von Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten basierend auf Datenwerten, die eine gleiche Position für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten gemeinsam nutzen, mit der mindestens einen Multiplikatorschaltung gemultiplext werden.
  12. Vorrichtung nach Anspruch 9, wobei der eine oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte von einem oder mehreren Addierernetzwerken erzeugt werden.
  13. Vorrichtung nach Anspruch 9, wobei das Speichern des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte das Speichern eines Ergebniswertes in einer oberen Hälfte des Zieloperanden für gepackte Daten und das Speichern eines Ergebniswertes in einer unteren Hälfte des Zieloperanden für gepackte Daten einschließt.
  14. Vorrichtung nach Anspruch 9, wobei das Multiplizieren der ausgewählten vorzeichenbehafteten Datenwerte Folgendes einschließt: Ausführen der Operationen S1H*S2H, S1G*S2G, S1F*S2F und S1E*S2E und der Operationen S1D*S2D, S1C*S2C, S1B*S2B und S1A*S2A, um die Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen, wobei S1 den ersten Quelloperanden für gepackte Daten identifiziert, S2 den zweiten Quelloperanden für gepackte Daten identifiziert und A, B, C, D, E, F, G und H die Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten identifizieren, die von niedrigsten zu höchsten Datenelementpositionen geordnet sind.
  15. Vorrichtung nach Anspruch 9, wobei das Summieren der Mehrzahl erster vorzeichenbehafteter Ergebniswerte das Ausführen der Operationen (S1H*S2H) + (S1G*S2G) + (S1F*S2F) + (S1E*S2E) und das Ausführen der Operationen (S1H*S2H) + (S1G*S2G) + (S1B*S2B) + (S1A*S2A) einschließt, um den einen oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte zu erzeugen.
  16. Vorrichtung nach Anspruch 9, ferner umfassend, als Reaktion auf das Erkennen, dass ein Wert des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte über einem Schwellenwert liegt, das Speichern eines Maximalwerts in der entsprechenden Position des Zieloperanden.
  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ührungsschaltungsanordnung zum: Multiplizieren ausgewählter vorzeichenbehafteter Datenwerte aus einer Mehrzahl von Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten, um eine Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen; Summieren der Mehrzahl erster vorzeichenbehafteter Ergebniswerte, um einen oder mehrere zweite vorzeichenbehaftete Ergebniswerte zu erzeugen; Akkumulieren des einen oder der mehreren zweiten vorzeichenbehafteten Ergebniswerte, um einen oder mehrere dritte vorzeichenbehaftete Ergebniswerte zu erzeugen; und Speichern des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte in einer oder mehreren Positionen für gepackte Datenelemente im Zieloperanden.
  18. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei das Ausführen des decodierten Befehls von der Ausführungsschaltung ferner das Multiplexen von Datenwerten aus der Mehrzahl von Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten mit mindestens einer Multiplikatorschaltung einschließt.
  19. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 18, wobei die Datenwerte aus der Mehrzahl von Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten basierend auf Datenwerten, die eine gleiche Position für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten gemeinsam nutzen, mit der mindestens einen Multiplikatorschaltung gemultiplext werden.
  20. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei der eine oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte von einem oder mehreren Addierernetzwerken erzeugt werden.
  21. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei das Speichern des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte das Speichern eines Ergebniswertes in einer oberen Hälfte des Zieloperanden für gepackte Daten und das Speichern eines Ergebniswertes in einer unteren Hälfte des Zieloperanden für gepackte Daten einschließt.
  22. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei das Multiplizieren der ausgewählten vorzeichenbehafteten Datenwerte Folgendes einschließt: Ausführen der Operationen S1H*S2H, S1G*S2G, S1F*S2F und S1E*S2E und der Operationen S1D*S2D, S1C*S2C, S1B*S2B und S1A*S2A, um die Mehrzahl erster vorzeichenbehafteter Ergebniswerte zu erzeugen, wobei S1 den ersten Quelloperanden für gepackte Daten identifiziert, S2 den zweiten Quelloperanden für gepackte Daten identifiziert und A, B, C, D, E, F, G und H die Positionen für gepackte Datenelemente in dem ersten und dem zweiten Quelloperanden für gepackte Daten identifizieren, die von niedrigsten zu höchsten Datenelementpositionen geordnet sind.
  23. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, wobei das Summieren der Mehrzahl erster vorzeichenbehafteter Ergebniswerte das Ausführen der Operationen (S1H*S2H) + (S1G*S2G) + (S1F*S2F) + (S1E*S2E) und das Ausführen der Operationen (S1H*S2H) + (S1G*S2G) + (S1B*S2B) + (S1A*S2A) einschließt, um den einen oder die mehreren zweiten vorzeichenbehafteten Ergebniswerte zu erzeugen.
  24. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 17, ferner umfassend, als Reaktion auf das Erkennen, dass ein Wert des einen oder der mehreren dritten vorzeichenbehafteten Ergebniswerte über einem Schwellenwert liegt, das Speichern eines Maximalwerts in der entsprechenden Position des Zieloperanden.
DE102018005976.7A 2017-09-29 2018-07-27 Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten Withdrawn DE102018005976A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/721,616 2017-09-29
US15/721,616 US20190102198A1 (en) 2017-09-29 2017-09-29 Systems, apparatuses, and methods for multiplication and accumulation of vector packed signed values

Publications (1)

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

Family

ID=65727912

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018005976.7A Withdrawn DE102018005976A1 (de) 2017-09-29 2018-07-27 Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten

Country Status (3)

Country Link
US (1) US20190102198A1 (de)
CN (1) CN109582282A (de)
DE (1) DE102018005976A1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019005115A1 (en) 2017-06-30 2019-01-03 Intel Corporation APPARATUS AND METHOD FOR MULTIPLICATION AND CUMULATION OF COMPLEX VALUES
US11294679B2 (en) * 2017-06-30 2022-04-05 Intel Corporation Apparatus and method for multiplication and accumulation of complex values
CN115237374A (zh) * 2021-04-22 2022-10-25 华为技术有限公司 芯片、处理数据的方法和计算机设备

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US7072929B2 (en) * 2000-11-01 2006-07-04 Pts Corporation Methods and apparatus for efficient complex long multiplication and covariance matrix implementation
US7624138B2 (en) * 2001-10-29 2009-11-24 Intel Corporation Method and apparatus for efficient integer transform
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
US9465611B2 (en) * 2003-10-02 2016-10-11 Broadcom Corporation Processor execution unit with configurable SIMD functional blocks for complex number operations
US7873812B1 (en) * 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US8307196B2 (en) * 2006-04-05 2012-11-06 Freescale Semiconductor, Inc. Data processing system having bit exact instructions and methods therefor
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
US9092227B2 (en) * 2011-05-02 2015-07-28 Anindya SAHA Vector slot processor execution unit for high speed streaming inputs
WO2014105154A1 (en) * 2012-12-24 2014-07-03 Intel Corporation Systems, methods, and computer program products for performing mathematical operations
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

Also Published As

Publication number Publication date
US20190102198A1 (en) 2019-04-04
CN109582282A (zh) 2019-04-05

Similar Documents

Publication Publication Date Title
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102014003795A1 (de) Verfahren und Vorrichtungen für Fusionsbefehle zur Bereitstellung der OR-Test- und AND-Test-Funktionalität auf mehreren Testquellen
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
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE112013004783T5 (de) Durch Lese- und Schreibmasken gesteuerter Vektor-Verschiebebefehl
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102018126036A1 (de) Systeme und verfahren zum setzen eines kachelregisterpaars auf null
DE102018005859A1 (de) Einrichtung und Verfahren zur Multiplikation und Akkumulation von komplexen und echten gepackten Datenelementen
DE102018128626A1 (de) Systeme, Verfahren und Vorrichtungen für Matrixoperationen
DE112013003735T5 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE102018125971A1 (de) Systeme und verfahren zum berechnen von skalaprodukten von halbbytes in operanden aus zwei kacheln
DE102018005976A1 (de) Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten
DE112013007736T5 (de) RSA-Algorithmusbeschleunigungsprozessoren, -Verfahren, -Systeme und Befehle
DE102018129273A1 (de) Einrichtung und verfahren zum vektor-multiplizieren; und -akkumulieren von unsignierten doppelwörtern
DE102018131484A1 (de) Einrichtung und verfahren zum vektormultiplizieren und zur subtraktion von vorzeichenbehafteten doppelwörtern
DE102018006013A1 (de) Systeme, vorrichtungen und verfahren für dualen komplex durch komplexe konjugationsmultiplikation von vorzeichenbehafteten wörtern
DE102018128949A1 (de) Einrichtung und verfahren zum nach-rechts-verschieben von gepackten quadrupelwörtern und extrahieren von gepackten doppelwörtern

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee