DE102018131842A1 - Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern - Google Patents

Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern Download PDF

Info

Publication number
DE102018131842A1
DE102018131842A1 DE102018131842.1A DE102018131842A DE102018131842A1 DE 102018131842 A1 DE102018131842 A1 DE 102018131842A1 DE 102018131842 A DE102018131842 A DE 102018131842A DE 102018131842 A1 DE102018131842 A1 DE 102018131842A1
Authority
DE
Germany
Prior art keywords
quadword
words
packed
register
bit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102018131842.1A
Other languages
English (en)
Inventor
Alexander Heinecke
Dipankar Das
Robert Valentine
Mark 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 DE102018131842A1 publication Critical patent/DE102018131842A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator

Landscapes

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

Abstract

Eine Einrichtung und ein Verfahren zum Durchführen von Multiply-Accumulate-Operationen. Zum Beispiel umfasst eine Ausführungsform eines Prozessors: einen Decoder zum Decodieren von Befehlen; ein erstes Quellregister zum Speichern einer ersten Vielzahl von gepackten Wörtern; ein zweites Quellregister zum Speichern einer zweiten Vielzahl von gepackten Wörtern; ein drittes Quellregister zum Speichern einer Vielzahl von gepackten Quadwörtern; eine Ausführungsschaltung zum Ausführen eines ersten Befehls, die Ausführungsschaltung umfassend: eine Erweiterungsschaltung zum Vorzeichenerweitern oder Nullerweitern der ersten und zweiten Vielzahl von gepackten Wörtern, um eine erste und zweite Vielzahl von Doppelwörtern entsprechend der ersten und zweiten Vielzahl von gepackten Wörtern zu erzeugen; eine Multipliziererschaltung zum Multiplizieren von jedem der ersten Vielzahl von Doppelwörtern mit einem entsprechenden der zweiten Vielzahl von Doppelwörtern, um eine Vielzahl von temporären Produkten zu erzeugen; eine Addiererschaltung zum Addieren von zumindest einem ersten Satz der temporären Produkte, um eine erste temporäre Summe zu erzeugen; eine Akkumulationsschaltung zum Kombinieren der ersten temporären Summe mit einem ersten gepackten Quadwort-Wert von einem ersten Quadwort-Ort in dem dritten Quellregister, um ein erstes akkumuliertes Quadwort-Ergebnis zu erzeugen; ein Zielregister zum Speichern des ersten akkumulierten Quadwort-Ergebnisses in dem ersten Quadwort-Ort.

Description

  • HINTERGRUND
  • Gebiet der Erfindung
  • Die Ausführungsformen der Erfindung betreffen im Allgemeinen das Gebiet der Computerprozessoren. Genauer betreffen die Ausführungsformen eine Einrichtung und ein Verfahren zum Durchführen von Vektormultiplizieren und Akkumulieren von gepackten Wörtern.
  • Beschreibung der verwandten Technik
  • Ein Befehlssatz oder eine Befehlssatzarchitektur (Instruction Set Architecture, ISA) ist der Teil der Computerarchitektur, der das Programmieren betrifft, einschließlich der nativen Datentypen, Befehle, Registerarchitektur, Adressierungsmodi, Speicherarchitektur, Unterbrechungs- und Ausnahmebehandlung und externen Eingabe und Ausgabe (E/A). Es sei angemerkt, dass sich der Begriff „Befehl“ hierin im Allgemeinen auf Makrobefehle bezieht - d. h. auf Befehle, die dem Prozessor zur Ausführung bereitgestellt werden - im Gegensatz zu Mikrobefehlen oder Mikrooperationen (Mikro-Ops) - d. h. auf das Ergebnis des Decodierers eines Prozessors, der Makrobefehle decodiert. Die Mikrobefehle oder Mikro-Ops können dazu ausgelegt sein, eine Ausführungseinheit auf dem Prozessor anzuweisen, Operationen zum Implementieren der mit dem Makrobefehl verknüpften Logik durchzuführen.
  • Die ISA unterscheidet sich von der Mikroarchitektur, die der Satz von Prozessordesigntechniken ist, der zum Implementieren des Befehlssatzes verwendet wird. Prozessoren mit verschiedenen Mikroarchitekturen können einen gemeinsamen Befehlssatz teilen. Zum Beispiel implementieren Intel® Pentium 4-Prozessoren, Intel® Core™-Prozessoren und Prozessoren von Advanced Micro Devices, Inc. in Sunnyvale, CA, USA, nahezu identische Versionen des x86-Befehlssatzes (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden), weisen jedoch verschiedene interne Designs auf. Zum Beispiel kann die gleiche Registerarchitektur der ISA auf unterschiedliche Weise in unterschiedlichen Mikroarchitekturen unter Verwendung hinlänglich bekannter Techniken implementiert werden, einschließlich dedizierter physikalischer Register, wobei ein oder mehrere dynamisch zugeordnete physikalische Register einen Registerumbenennungsmechanismus verwenden (z. B. die Verwendung einer Registeraliastabelle (Register Alias Table, RAT), eines Neuordnungspuffers (Reorder Buffer, ROB) und einer Rückzugsregisterdatei). Sofern nicht anders angegeben, werden die Ausdrücke Registerarchitektur, Registerdatei und Register hierin verwendet, um auf das Bezug zu nehmen, was für die Software bzw. den Programmierer sichtbar ist, und auf die Weise, in der Befehle Register spezifizieren. Wenn eine Unterscheidung erforderlich ist, werden die Adjektive „logisch“, „architektonisch“ oder „für Software sichtbar“ verwendet, um Register/Dateien in der Registerarchitektur anzugeben, während andere Adjektive zur Bezeichnung von Registern in einer gegebenen Mikroarchitektur verwendet werden (z. B. physikalisches Register, Neuordnungspuffer, Rückzugsregister, Register-Pool).
  • 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 ein Multiply-Accumulate mit einem Multiplizierbefehl, gefolgt von einer 4-Wege-Addition und dann einer Akkumulation mit den Ziel-Quadwort-Daten zum Erzeugen von zwei gesättigten 64-Bit-Ergebnissen durchgeführt werden.
  • Figurenliste
  • Ein besseres Verständnis der vorliegenden Erfindung kann aus der folgenden detaillierten Beschreibung in Verbindung mit den folgenden Zeichnungen erhalten werden, wobei Folgendes gilt:
    • 1A und 1B sind Blockdiagramme, die ein generisches vektorgerechtes Befehlsformat und Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulichen;
    • 2A-C sind Blockdiagramme, die ein beispielhaftes VEX-Befehlsformat gemäß Ausführungsformen der Erfindung veranschaulichen;
    • 3 ist ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform der Erfindung; und
    • 4A ist ein Blockdiagramm, das sowohl eine beispielhafte In-Order-Pipeline für Abrufen, Decodieren, Rückzug als auch eine beispielhafte Pipeline für Registerumbenennung, Out-Of-Order-Ausgabe/-Ausführung gemäß Ausführungsformen der Erfindung veranschaulicht;
    • 4B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines In-Order-Kerns für Abrufen, Decodieren, Rückzug als auch eines beispielhaften Architekturkerns für Registerumbenennung, Out-Of-Order-Ausgabe/-Ausführung zur Aufnahme in einen Prozessor gemäß Ausführungsformen der Erfindung veranschaulicht;
    • 5A ist ein Blockdiagramm eines Einzelprozessorkerns zusammen mit dessen Verbindung zu einem On-Die-Verbindungsnetzwerk;
    • 5B veranschaulicht eine erweiterte Ansicht eines Teils des Prozessorkerns in 5A gemäß Ausführungsformen der Erfindung;
    • 6 ist ein Blockdiagramm eines Einzelkernprozessors und eines Mehrkernprozessors mit integriertem Speicher-Controller und integrierter Grafik gemäß Ausführungsformen der Erfindung;
    • 7 veranschaulicht ein Blockdiagramm eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 8 veranschaulicht ein Blockdiagramm eines zweiten Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 9 veranschaulicht ein Blockdiagramm eines dritten Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 10 veranschaulicht ein Blockdiagramm eines System-on-a-Chip (SOC) gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 11 veranschaulicht ein Blockdiagramm, das die Verwendung eines Softwarebefehlskonverters zum Konvertieren von binären Befehlen in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt;
    • 12 veranschaulicht eine Prozessorarchitektur, auf der Ausführungsformen der Erfindung implementiert werden können;
    • 13 veranschaulicht eine Vielzahl von beispielhaften Elementtypen für gepackte Daten;
    • 14 veranschaulicht einen Befehlssatz zum Durchführen von Multiply-Accumulate-Operationen;
    • 15 veranschaulicht eine beispielhafte Architektur zum Ausführen von Multiply-Accumulate-Befehlen und
    • 16 veranschaulicht ein Verfahren gemäß einer Ausführungsform der Erfindung.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung werden zum Zwecke der Erläuterung zahlreiche spezifische Details dargelegt, um ein gründliches Verständnis der nachstehend beschriebenen Ausführungsformen der Erfindung bereitzustellen. Es ist jedoch für den Fachmann ersichtlich, dass die Ausführungsformen der Erfindung ohne einige dieser spezifischen Details ausgeführt werden können. In anderen Fällen werden allgemein bekannte Strukturen und Einrichtungen in Blockdiagrammform dargestellt, um zu vermeiden, dass die zugrunde liegenden Prinzipien der Ausführungsformen der Erfindung unverständlich werden.
  • BEISPIELHAFTE PROZESSORARCHITEKTUREN, BEFEHLSFORMATE UND DATENTYPEN
  • 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 den/die Operand(en), an dem/denen diese Operation durchgeführt werden soll, zu spezifizieren. 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. Somit wird jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats (und, wenn definiert, in einer gegebenen der Befehlsvorlagen dieses Befehlsformats) ausgedrückt und schließt Felder zum Angeben der Operation und der Operanden ein. Zum Beispiel weist ein beispielhafter ADD-Befehl einen spezifischen Opcode und ein Befehlsformat auf, das ein Opcode-Feld zum Angeben dieses Opcodes und Operand-Felder zum Auswählen von Operanden (Quelle1/Ziel und Quelle2) einschließt; und ein Vorhandensein dieses ADD-Befehls in einem Befehlsdatenstrom weist spezifische Inhalte in den Operand-Feldern auf, die spezifische Operanden auswählen.
  • Ausführungsformen der hierin beschriebenen Befehl(e) können in unterschiedlichen Formaten ausgeführt werden. Außerdem sind Beispielsysteme, Architekturen und Pipelines weiter unten detailliert beschrieben. Ausführungsformen der Befehl(e) können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf die detailliert beschriebenen beschränkt.
  • Generisches vektorgerechtes Befehlsformat
  • Ein vektorgerechtes Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (z. B. gibt es bestimmte Felder, die für Vektoroperationen spezifisch sind). Während Ausführungsformen beschrieben sind, in denen sowohl Vektor- als auch skalare Operationen durch das vektorgerechte Befehlsformat unterstützt werden, verwenden alternative Ausführungsformen nur Vektoroperationen das vektorgerechte Befehlsformat.
  • 1A-1B sind Blockdiagramme, die ein generisches vektorgerechtes Befehlsformat und Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulichen. 1A ist ein Blockdiagramm, das ein generisches vektorgerechtes Befehlsformat und Klasse-A-Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulicht; und 1B ist ein Blockdiagramm, das das generische vektorgerechte Befehlsformat und Klasse-B-Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulicht. Insbesondere ein generisches vektorgerechtes Befehlsformat 100, für das Klasse-A- und Klasse-B-Befehlsvorlagen definiert sind, die beide Befehlsvorlagen ohne Speicherzugriff 105 und Befehlsvorlagen mit Speicherzugriff 120 umfassen. Der Begriff „generisch“ im Kontext des vektorgerechten Befehlsformats bezieht sich darauf, dass das Befehlsformat nicht an irgendeinen spezifischen Befehlssatz gebunden ist.
  • Während Ausführungsformen der Erfindung beschrieben werden, in denen das vektorgerechte Befehlsformat Folgendes unterstützt: eine 64-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte) oder 64 Bit (8 Byte) (und somit besteht ein 64-Byte-Vektor entweder aus 16 Doppelwort-Größe-Elementen oder alternativ dazu aus 8 Quadwort-Größe-Elementen); eine 64-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder -größen) von 16 Bit (2 Byte) oder 8 Bit (1 Byte); eine 32-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte) und eine 16-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); können alternative Ausführungsformen mehr, weniger und/oder andere Vektoroperandengrößen (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder anderen Datenelementbreiten (z. B. Datenelementbreiten von 128 Bit (16 Byte)) unterstützen.
  • Die Klasse-A-Befehlsvorlagen in 1A schließen Folgendes ein: 1) in den Befehlsvorlagen ohne Speicherzugriff 105 ist eine Befehlsvorlage ohne Speicherzugriff, mit Operation des Typs vollständige Rundungssteuerung 110 und eine Befehlsvorlage ohne Speicherzugriff, mit Operation des Typs Datentransformation 115 gezeigt; und 2) in den Befehlsvorlagen mit Speicherzugriff 120 ist eine Befehlsvorlage mit Speicherzugriff, zeitlich 125 und eine Befehlsvorlage mit Speicherzugriff, nicht zeitlich 130 gezeigt. Die Klasse-B-Befehlsvorlagen in 1B schließen Folgendes ein: 1) in den Befehlsvorlagen ohne Speicherzugriff 105 ist eine Befehlsvorlage ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs teilweise Rundungssteuerung 112 und eine Befehlsvorlage ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs vsize 117 gezeigt; und 2) in den Befehlsvorlagen mit Speicherzugriff 120 ist eine Befehlsvorlage mit Speicherzugriff, mit Schreibmaskensteuerung 127 gezeigt.
  • Das generische vektorgerechte Befehlsformat 100 schließt die weiter unten aufgeführten folgenden Felder in der in 1A-1B veranschaulichten Reihenfolge ein.
  • Formatfeld 140 - ein spezifischer Wert (ein Befehlsformatidentifikatorwert) in diesem Feld identifiziert eindeutig das vektorgerechte Befehlsformat und somit Fälle des Auftretens von Befehlen im vektorgerechten Befehlsformat in Befehlsströmen. Deshalb ist dieses Feld in dem Sinne optional, dass es für einen Befehlssatz, der nur das generische vektorgerechte Befehlsformat aufweist, nicht erforderlich ist.
  • Basisoperationsfeld 142 - sein Inhalt unterscheidet verschiedene Basisoperationen.
  • Registerindexfeld 144 - sein Inhalt gibt, direkt oder durch Adressgenerierung, die Orte der Quell- und Zieloperanden an, egal ob in Registern oder in Speicher. Diese enthalten eine ausreichende Anzahl von Bits, um N Register aus einer PxQ-Registerdatei (z. B. 32x512, 16x128, 32x1024, 64x1024) auszuwählen. Während in einer Ausführungsform N bis zu drei Quellen und ein Zielregister sein kann, können alternative Ausführungsformen mehr oder weniger Quellen und Zielregister unterstützen (z. B. können sie bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel dient, können sie bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel dient, können sie bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifikatorfeld 146 - sein Inhalt unterscheidet Fälle des Auftretens von Befehlen in dem generischen Vektorbefehlsformat, die einen Speicherzugriff angeben, von denen, die dies nicht tun; das heißt, er unterscheidet zwischen Befehlsvorlagen ohne Speicherzugriff 105 und Befehlsvorlagen mit Speicherzugriff 120. Speicherzugriffsoperationen lesen aus der Speicherhierarchie und/oder schreiben in diese (in einigen Fällen unter Angabe der Quell- und/oder Zieladressen unter Verwendung von Werten in Registern), während Operationen ohne Speicherzugriff dies nicht tun (z. B. sind die Quelle und die Ziele Register). Während in einer Ausführungsform dieses Feld auch zwischen drei unterschiedlichen Wegen zum Durchführen von Speicheradressberechnungen auswählt, können alternative Ausführungsformen mehr, weniger oder andere Wege zum Durchführen von Speicheradressberechnungen unterstützen.
  • Erhöhungsoperationsfeld 150 - sein Inhalt unterscheidet, welche von einer Vielfalt von verschiedenen Operationen zusätzlich zu der Basisoperation durchgeführt werden soll. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Erfindung ist dieses Feld in ein Klassenfeld 168, ein Alpha-Feld 152 und ein Beta-Feld 154 geteilt. Das Erhöhungsoperationsfeld 150 ermöglicht, dass gemeinsame Gruppen von Operationen in einem einzelnen Befehl statt in 2, 3 oder 4 Befehlen durchgeführt werden.
  • Skalierungsfeld 160 - sein Inhalt ermöglicht die Skalierung des Inhalts des Indexfelds zur Speicheradressgenerierung (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis verwendet).
  • Verschiebungsfeld 162A - sein Inhalt wird als Teil der Speicheradressgenerierung verwendet (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis + Verschiebung verwendet).
  • Verschiebungsfaktorfeld 162B (es sei darauf hingewiesen, dass die Anordnung des Verschiebungsfelds 162A direkt über dem Verschiebungsfaktorfeld 162B anzeigt, dass das eine oder das andere verwendet wird) - sein Inhalt wird als Teil der Adressgenerierung verwendet; er gibt einen Verschiebungsfaktor an, der durch die Größe eines Speicherzugriffs (N) skaliert werden soll - wobei N die Anzahl von Byte in dem Speicherzugriff ist (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis + skalierte Verschiebung verwendet). Redundante Bits niedriger Ordnung werden ignoriert, und somit wird der Inhalt des Verschiebungsfaktorfelds mit der Gesamtgröße (N) des Speicheroperanden multipliziert, um die endgültige Verschiebung zu generieren, die beim Berechnen einer effektiven Adresse verwendet werden soll. Der Wert von N ist durch die Prozessorhardware zur Laufzeit auf Basis des Felds des vollständigen Opcodes 174 (hierin weiter unten beschrieben) und dem Datenmanipulationsfeld 154C bestimmt. Das Verschiebungsfeld 162A und das Verschiebungsfaktorfeld 162B sind in dem Sinne optional, dass sie nicht für die Befehlsvorlagen ohne Speicherzugriff 105 verwendet werden und/oder verschiedene Ausführungsformen nur eine oder keine der beiden implementieren.
  • Datenelementbreitenfeld 164 - sein Inhalt unterscheidet, welche einer Reihe von Datenelementbreiten verwendet werden soll (in einigen Ausführungsformen für alle Befehle; in anderen Ausführungsformen nur für einige der Befehle). Dieses Feld ist in dem Sinne optional, dass es nicht erforderlich ist, wenn nur eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unter Verwendung einiger Aspekt der Opcodes unterstützt werden.
  • Schreibmaskenfeld 170 - sein Inhalt steuert für jede Datenelementposition einzeln, ob diese Datenelementposition in dem Zielvektoroperanden das Ergebnis der Basisoperation und der Erhöhungsoperation widerspiegelt. Klasse-A-Befehlsvorlagen unterstützen Zusammenführen-Schreibmaskieren, während Klasse-B-Befehlsvorlagen sowohl Zusammenführen- als auch Nullsetzen-Schreibmaskieren unterstützen. Beim Zusammenführen ermöglichen Vektormasken, dass ein beliebiger Satz von Elementen im Ziel vor Aktualisierungen während der Ausführung einer Operation (angegeben durch die Basisoperation und die Erhöhungsoperation) geschützt wird; in einer anderen Ausführungsform Beibehalten des alten Werts jedes Elements des Ziels, wobei das entsprechende Maskenbit eine 0 hat. Demgegenüber ermöglichen Vektormasken beim Nullsetzen, dass ein beliebiger Satz von Elementen im Ziel während der Ausführung einer Operation (angegeben durch die Basisoperation und die Erhöhungsoperation) auf null gesetzt wird; in einer Ausführungsform wird ein Element des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen Wert von 0 hat. Ein Teilsatz dieser Funktionalität ist die Fähigkeit, die Vektorlänge der Operation, die durchgeführt wird, zu steuern (das heißt, die Spanne von Elementen, die modifiziert werden, vom ersten bis zum letzten); allerdings ist es nicht notwendig, dass die Elemente, die modifiziert werden, aufeinanderfolgend sind. Somit ermöglicht das Schreibmaskenfeld 170 teilweise Vektoroperationen, einschließlich Laden, Speichern, arithmetisch, logisch usw. Während Ausführungsformen der Erfindung beschrieben sind, in denen der Inhalt des Schreibmaskenfelds 170 eines von einer Anzahl von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält (und der Inhalt des Schreibmaskenfelds 170 somit indirekt identifiziert, dass dieses Maskieren durchgeführt werden soll), ermöglichen alternative Ausführungsformen stattdessen oder zusätzlich dazu, dass der Inhalt des Maskenschreibfelds 170 das durchzuführende Maskieren direkt angibt.
  • Feld unmittelbarer Elemente 172 - sein Inhalt ermöglicht die Angabe eines unmittelbaren Elements. Dieses Feld ist in dem Sinne optional, dass es in einer Implementierung des generischen vektorgerechten Formats, das unmittelbare Elemente nicht unterstützt, nicht vorhanden ist und in Befehlen, die kein unmittelbares Element verwenden, nicht vorhanden ist.
  • Klassenfeld 168 - sein Inhalt unterscheidet zwischen unterschiedlichen Klassen von Befehlen. Bezug nehmend auf 1A-B wählt der Inhalt dieses Felds zwischen Klasse-A- und Klasse-B-Befehlen aus. In 1A-B werden Quadrate mit abgerundeten Ecken verwendet, um einen spezifischen Wert anzuzeigen, der in einem Feld vorhanden ist (z. B. Klasse A 168A bzw. Klasse B 168B für das Klassenfeld 168 in 1A-B).
  • Befehlsvorlagen der Klasse A
  • Im Fall der Befehlsvorlagen ohne Speicherzugriff 105 der Klasse A wird das Alpha-Feld 152 als ein RS-Feld 152A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Erhöhungsoperationstypen durchgeführt werden soll (z. B. Runden 152A.1 und Datentransformation 152A.2 sind für die Befehlsvorlagen ohne Speicherzugriff, mit Operation des Typs Runden 110 bzw. ohne Speicherzugriff, mit Operation des Typs Datentransformation 115 angegeben), während das Beta-Feld 154 unterscheidet, welche der Operationen des angegebenen Typs durchgeführt werden soll. In den Befehlsvorlagen ohne Speicherzugriff 105 sind das Skalierungsfeld 160, das Verschiebungsfeld 162A und das Verschiebungsskalierungsfeld 162B nicht vorhanden.
  • Befehlsvorlagen ohne Speicherzugriff - Operation des Typs vollständige Rundungssteuerung
  • In der Befehlsvorlage ohne Speicherzugriff, mit Operation des Typs vollständige Rundungssteuerung 110 wird das Beta-Feld 154 als ein Rundungssteuerfeld 154A interpretiert, dessen Inhalt(e) eine statische Rundung bereitstellen. Während in den beschriebenen Ausführungsformen der Erfindung das Rundungssteuerfeld 154A ein Feld zum Unterdrücken aller Gleitkommaausnahmen (SAE) 156 und ein Rundungsoperationssteuerfeld 158 enthält, können alternative Ausführungsformen diese beiden Konzepte unterstützen und in das gleiche Feld codieren oder nur das eine oder das andere dieser Konzepte/Felder aufweisen (können z. B. nur das Rundungsoperationssteuerfeld 158 aufweisen).
  • SAE-Feld 156 - sein Inhalt unterscheidet, ob das Ausnahmeereignisberichten deaktiviert werden soll oder nicht; wenn der Inhalt des SAE-Felds 156 anzeigt, dass eine Unterdrückung aktiviert ist, berichtet ein gegebener Befehl keine Art von Gleitkommaausnahme-Flag und löst keinen Gleitkommaausnahme-Handler aus.
  • Rundungsoperationssteuerfeld 158 - sein Inhalt unterscheidet, welche einer Gruppe von Rundungsoperationen durchgeführt werden soll (z. B. Aufrunden, Abrunden, Runden Richtung null und Runden zur nächstgelegenen Rundungszahl). Somit ermöglicht das Rundungsoperationssteuerfeld 158 das Ändern des Rundungsmodus für jeden Befehl einzeln. In einer Ausführungsform der Erfindung, bei der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi enthält, überschreibt der Inhalt des Rundungsoperationssteuerfelds 150 diesen Registerwert.
  • Befehlsvorlagen ohne Speicherzugriff - Operation des Typs Datentransformation
  • In der Befehlsvorlage ohne Speicherzugriff, mit Operation des Typs Datentransformation 115 wird das Beta-Feld 154 als ein Datentransformationsfeld 154B interpretiert, dessen Inhalt unterscheidet, welche einer Anzahl von Datentransformationen durchgeführt werden soll (z. B. ohne Datentransformation, Swizzeln, Senden).
  • Im Fall einer Befehlsvorlage mit Speicherzugriff 120 der Klasse A wird das Alpha-Feld 152 als ein Entfernungshinweisfeld 152B interpretiert, dessen Inhalt unterscheidet, welcher der Entfernungshinweise verwendet werden soll (in 1A sind zeitlich 152B.1 und nicht zeitlich 152B.2 für die Befehlsvorlage mit Speicherzugriff, zeitlich 125 bzw. die Befehlsvorlage mit Speicherzugriff, nicht zeitlich 130 angegeben), während das Beta-Feld 154 als ein Datenmanipulationsfeld 154C interpretiert wird, dessen Inhalt unterscheidet, welche einer Anzahl von Datenmanipulationsoperationen (auch bekannt als Primitive) durchgeführt werden soll (z. B. ohne Manipulation; Senden; Aufwärtskonvertierung einer Quelle und Abwärtskonvertierung eines Ziels). Die Befehlsvorlagen mit Speicherzugriff 120 schließen das Skalierungsfeld 160 und wahlweise das Verschiebungsfeld 162A oder das Verschiebungsskalierungsfeld 162B ein.
  • Vektorspeicherbefehle führen ein Laden von Vektoren aus dem und ein Speichern von Vektoren in den Speicher mit Konvertierungsunterstützung durch. Wie bei normalen Vektorbefehlen übertragen Vektorspeicherbefehle Daten in einer datenelementweisen Art aus /in Speicher, wobei die Elemente, die tatsächlich übertragen werden, durch den Inhalt der Vektormaske, die als die Schreibmaske ausgewählt ist, vorgegeben werden.
  • Befehlsvorlagen mit Speicherzugriff - zeitlich
  • Zeitliche Daten sind Daten, die wahrscheinlich bald genug wiederverwendet werden, um von einem Zwischenspeichern zu profitieren. Dies ist jedoch ein Hinweis, und unterschiedliche Prozessoren können ihn auf unterschiedliche Weise implementieren, einschließlich des vollständigen Ignorierens des Hinweises.
  • Befehlsvorlagen mit Speicherzugriff - nicht zeitlich
  • Nicht zeitliche Daten sind Daten, bei denen es unwahrscheinlich ist, dass sie bald genug wiederverwendet werden, um von einem Zwischenspeichern im Level-1-Cache zu profitieren, und denen Priorität für eine Entfernung gegeben werden sollte. Dies ist jedoch ein Hinweis, und unterschiedliche Prozessoren können ihn auf unterschiedliche Weise implementieren, einschließlich des vollständigen Ignorierens des Hinweises.
  • Befehlsvorlagen der Klasse B
  • Im Fall der Befehlsvorlagen der Klasse B wird das Alpha-Feld 152 als ein Feld der Schreibmaskensteuerung (Z) 152C interpretiert, dessen Inhalt unterscheidet, ob das durch das Schreibmaskenfeld 170 gesteuerte Schreibmaskieren ein Zusammenführen oder ein Nullsetzen sein soll.
  • Im Fall der Befehlsvorlagen ohne Speicherzugriff 105 der Klasse B wird ein Teil des Beta-Felds 154 als ein RL-Feld 157A interpretiert, dessen Inhalt unterscheidet, welcher der verschiedenen Erhöhungsoperationstypen durchgeführt werden soll (z. B. sind Runden 157A.1 und Vektorlänge (VSIZE) 157A.2 für die Befehlsvorlage ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs teilweise Rundungssteuerung 112 bzw. die Befehlsvorlage ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs VSIZE 117 angegeben), während der Rest des Beta-Felds 154 unterscheidet, welche der Operationen des angegebenen Typs durchgeführt werden soll. In den Befehlsvorlagen ohne Speicherzugriff 105 sind das Skalierungsfeld 160, das Verschiebungsfeld 162A und das Verschiebungsskalierungsfeld 162B nicht vorhanden.
  • In der Befehlsvorlage ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs teilweise Rundungssteuerung 110 wird der Rest des Beta-Bereichs 154 als ein Rundungsoperationsfeld 159A interpretiert und das Ausnahmeereignisberichten ist deaktiviert (ein gegebener Befehl berichtet keine Art von Gleitkommaausnahme-Flag und löst keinen Gleitkommaausnahme-Handler aus).
  • Rundungsoperationssteuerfeld 159A - genau wie beim Rundungsoperationssteuerfeld 158 unterscheidet sein Inhalt, welche einer Gruppe von Rundungsoperationen durchgeführt werden soll (z. B. Aufrunden, Abrunden, Runden Richtung null und Runden zur nächstgelegenen Rundungszahl)). Somit ermöglicht das Rundungsoperationssteuerfeld 159A das Ändern des Rundungsmodus für jeden Befehl einzeln. In einer Ausführungsform der Erfindung, bei der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi enthält, überschreibt der Inhalt des Rundungsoperationssteuerfelds 150 diesen Registerwert.
  • In der Befehlsvorlage ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Vorgang des Typs VSIZE 117 wird der Rest des Beta-Felds 154 als ein Vektorlängenfeld 159B interpretiert, dessen Inhalt unterscheidet, welche einer Anzahl von Datenvektorlängen durchgeführt werden soll (z. B. 128, 256 oder 512 Byte).
  • Im Fall einer Befehlsvorlage mit Speicherzugriff 120 der Klasse B wird ein Teil des Beta-Felds 154 als ein Sendefeld 157B interpretiert, dessen Inhalt unterscheidet, ob die Sendetypdatenmanipulationsoperation durchgeführt werden soll oder nicht, während der Rest des Beta-Felds 154 als das Vektorlängenfeld 159B interpretiert wird. Die Befehlsvorlagen mit Speicherzugriff 120 schließen das Skalierungsfeld 160 und wahlweise das Verschiebungsfeld 162A oder das Verschiebungsskalierungsfeld 162B ein.
  • In Bezug auf das generische vektorgerechte Befehlsformat 100 ist ein Feld des vollständigen Opcodes 174 einschließlich des Formatfelds 140, des Basisoperationsfelds 142 und des Datenelementbreitenfelds 164 gezeigt. Während eine Ausführungsform gezeigt ist, in der das Feld des vollständigen Opcodes 174 alle dieser Felder einschließt, schließt das Feld des vollständigen Opcodes 174 in Ausführungsformen, die nicht alle von diesen unterstützen, weniger als alle dieser Felder ein. Das Feld des vollständigen Opcodes 174 stellt den Operationscode (Opcode) bereit.
  • Das Erhöhungsoperationsfeld 150, das Datenelementbreitenfeld 164 und das Schreibmaskenfeld 170 ermöglichen es, dass diese Merkmale für jeden Befehl einzeln in dem generischen vektorgerechten Befehlsformat spezifiziert werden.
  • Die Kombination von Schreibmaskenfeld und Datenelementbreitenfeld schafft insofern typisierte Befehle, als diese es ermöglichen, dass die Maske basierend auf verschiedenen Datenelementbreiten angewendet wird.
  • Die verschiedenen Befehlsvorlagen, die in der Klasse A und in der Klasse B enthalten sind, sind in verschiedenen Situationen nützlich. In einigen Ausführungsformen der Erfindung können unterschiedliche Prozessoren oder unterschiedliche Kerne in einem Prozessor nur die Klasse A, nur die Klasse B oder beide Klassen unterstützen. Zum Beispiel kann ein Out-Of-Order-Hochleistungsuniversalkern, der für Universalrechnen vorgesehen ist, nur die Klasse B unterstützen, kann ein Kern, der hauptsächlich für Grafik- und/oder wissenschaftliches (Durchsatz-)Rechnen vorgesehen ist, nur die Klasse A unterstützen und kann ein Kern, der für beides vorgesehen ist, beide unterstützen (selbstverständlich ein Kern, der eine bestimmte Mischung aus Vorlagen und Befehlen aus beiden Klassen aufweist, aber nicht alle Vorlagen und Befehle aus beiden Klassen liegen im Bereich der Erfindung). Außerdem kann ein Einzelprozessor mehrere Kerne enthalten, die alle die gleiche Klasse enthalten oder in denen unterschiedliche Kerne unterschiedliche Klassen unterstützen. Zum Beispiel kann in einem Prozessor mit separaten Grafik- und Universalkernen einer der Grafikkerne, der hauptsächlich für Grafik und/oder wissenschaftliches Rechnen vorgesehen ist, nur die Klasse A unterstützen, während einer oder mehrere der Universalkerne Hochleistungsuniversalkerne mit Out-Of-Order-Ausführung und Registerumbenennung, die für Universalrechnen vorgesehen sind, sein können, die nur die Klasse B unterstützen. Ein anderer Prozessor, der keinen separaten Grafikkern aufweist, kann einen oder mehrere In-Order- oder Out-Of-Order-Universalkerne einschließen, die sowohl die Klasse A als auch die Klasse B einschließen. Selbstverständlich können in verschiedenen Ausführungsformen der Erfindung Merkmale von einer Klasse auch in der anderen Klasse implementiert werden. In einer Hochsprache geschriebene Programme würden in eine Vielzahl unterschiedlicher ausführbarer Formen gebracht werden (z. B. Just-in-Time-kompiliert oder statisch kompiliert), einschließlich: 1) einer Form, die nur Befehle der durch den Zielprozessor zur Ausführung unterstützten Klasse(n) aufweist; oder 2) einer Form, die alternative Routinen aufweist, die unter Verwendung verschiedener Kombinationen der Befehle aus allen Klassen geschrieben wurden, und die einen Steuerflusscode aufweist, der die auszuführenden Routinen basierend auf den Befehlen auswählt, die durch den Prozessor unterstützt werden, der den Code aktuell ausführt.
  • VEX-Befehlsformat
  • Eine VEX-Codierung ermöglicht es, dass Befehle mehr als zwei Operanden haben, und ermöglicht es, dass SIMD-Vektor-Register länger als 28 Bits sind. Die Verwendung eines VEX-Präfixes stellt eine Syntax mit drei Operanden (oder mehr) bereit. Zum Beispiel haben frühere Zwei-Operanden-Befehle Operationen, wie A = A + B, durchgeführt, wodurch ein Quelloperand überschrieben wird. Die Verwendung eines VEX-Präfixes ermöglicht es, dass Operanden zerstörungsfreie Operationen, wie A = B + C, durchführen.
  • 2A veranschaulicht ein beispielhaftes AVX-Befehlsformat, einschließlich eines VEX-Präfixes 202, eines Felds des echten Opcodes 230, eines Mod-R/M-Bytes 240, eines SIB-Bytes 250, eines Verschiebungsfelds 262 und IMM8 272. 2B veranschaulicht, welche Felder von 2A ein Feld des vollständigen Opcodes 274 und ein Basisoperationsfeld 241 bilden. 2C veranschaulicht, welche Felder von 2A ein Registerindexfeld 244 bilden.
  • Das VEX-Präfix (Bytes 0-2) 202 ist in einer Drei-Byte-Form codiert. Das erste Byte ist das Formatfeld 290 (VEX-Byte 0, Bits [7:0]), das einen expliziten C4-Byte-Wert (der eindeutige Wert, der zum Unterscheiden des C4-Befehlsformats verwendet wird) enthält. Das zweite bis dritte Byte (VEX-Bytes 1-2) enthält eine Reihe von Bitfeldern, die eine spezifische Fähigkeit bereitstellen. Insbesondere besteht REX-Feld 205 (VEX-Byte 1, Bits [7-5]) aus einem VEX.R-Bitfeld (VEX-Byte 1, Bit [7] - R), einem VEX.X-Bitfeld (VEX-Byte 1, Bit [6] - X) und einem VEX.B-Bitfeld (VEX-Byte 1, Bit[5] - B). Andere Felder der Befehle codieren die niedrigeren drei Bits der Registerindizes, wie im Fachgebiet bekannt ist (rrr, xxx und bbb), sodass Rrrr, Xxxx und Bbbb durch Addieren von VEX.R, VEX.X und VEX.B gebildet werden können. Opcode-Abbildungsfeld 215 (VEX-Byte 1, Bits [4:0] - mmmmm) enthält Inhalt zum Codieren eines implizierten führenden Opcode-Bytes. W-Feld 264 (VEX-Byte 2, Bit [7] - W) - ist durch die Notation VEX.W dargestellt und stellt unterschiedliche Funktionen in Abhängigkeit vom Befehl bereit. Die Rolle von VEX.vvvv 220 (VEX-Byte 2, Bits [6:3]-ww) kann das Folgende beinhalten: 1) VEX.vwv codiert den ersten Quellregisteroperanden, spezifiziert in invertierter Form (Einerkomplement), und ist gültig für Befehle mit 2 oder mehr Quelloperanden; 2) VEX.vwv codiert den Zielregisteroperanden, spezifiziert in Einerkomplementform für gewisse Vektorverschiebungen; oder 3) VEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Wenn das Größenfeld VEX.L 268 (VEX-Byte 2, Bit [2]-L) = 0, gibt es einen 28-Bit-Vektor an; wenn VEX.L = 1, gibt es einen 256-Bit-Vektor an. Das Präfixcodierungsfeld 225 (VEX-Byte 2, Bits [1:0]-pp) stellt zusätzliche Bits für das Basisoperationsfeld 241 bereit.
  • Das Feld des echten Opcodes 230 (Byte 3) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • Das MOD-R/M-Feld 240 (Byte 4) enthält das MOD-Feld 242 (Bits [7-6]), das Reg.-Feld 244 (Bits [5-3]) und das R/M-Feld 246 (Bits [2-0]). Die Rolle des Reg.-Felds 244 kann Folgendes einschließen: Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden (das rrr aus Rrrr), oder als eine Opcode-Erweiterung behandelt zu werden und nicht zum Codieren irgendeines Befehlsoperanden verwendet zu werden. Die Rolle des R/M-Felds 246 kann Folgendes einschließen: Codieren des Befehlsoperanden, welcher eine Speicheradresse referenziert, oder Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Skalierung, Index, Basis (SIB) - der Inhalt des Skalierungsfelds 250 (Byte 5) enthält SS252 (Bits [7-6]), was zur Speicheradressgenerierung verwendet wird. Auf den Inhalt von SIB.xxx 254 (Bits [5-3]) und SIB.bbb 256 (Bits [2-0]) wurde bereits hinsichtlich der Registerindizes Xxxx und Bbbb Bezug genommen.
  • Das Verschiebungsfeld 262 und das Feld des unmittelbaren Elements (IMM8) 272 enthalten Daten.
  • Beispielhafte Registerarchitektur
  • 3 ist ein Blockdiagramm einer Registerarchitektur 300 gemäß einer Ausführungsform der Erfindung. In der veranschaulichten Ausführungsform gibt es 32 Vektorregister 310, die 512 Bits breit sind; diese Register sind als zmm0 bis zmm31 referenziert. Die 256 Bits niedrigerer Ordnung der unteren zmm-Register 6 sind auf Registern ymm0-15 überlagert. Die 128 Bits niedrigerer Ordnung auf den unteren zmm-Registern 6 (die 128 Bits niedrigerer Ordnung des ymm-Registers) sind auf Registern xmm0-15 überlagert.
  • Das Universalregister 325 - in der veranschaulichten Ausführungsform gibt es sechzehn 64-Bit-Universalregister, die zusammen mit den vorhandenen x86-Adressierungsmodi zum Adressieren von Speicheroperanden verwendet werden. Diese Register werden durch die Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Skalare Gleitkomma-Stack-Registerdatei (x87-Stack) 345, auf die Aliasing der gepackten MMX Integer Flat-Register-Datei 350 erfolgt - in der veranschaulichten Ausführungsform ist der x87-Stack ein Acht-Elemente-Stack, der verwendet wird, um skalare Gleitkommaoperationen an 32-/64-/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung auszuführen, während die MMX-Register verwendet werden, um Operationen an gepackten 64-Bit-Ganzzahldaten durchzuführen sowie Operanden für einige Operationen zu halten, die zwischen dem MMX- und dem XMM-Register durchgeführt werden.
  • Alternative Ausführungsformen der Erfindung können breitere oder engere Register verwenden. Zusätzlich können alternative Ausführungsformen der Erfindung mehr, weniger oder unterschiedliche Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf unterschiedliche Arten, für unterschiedliche Zwecke und in unterschiedlichen Prozessoren umgesetzt werden. Zum Beispiel können Implementierungen solcher Kerne Folgendes beinhalten: 1) einen In-Order-Universalkern, der für Universalrechnen vorgesehen ist; 2) einen Out-Of-Order-Hochleistungsuniversalkern, der für Universalrechnen vorgesehen ist; 3) einen Spezialkern, der hauptsächlich für Grafik- und/oder wissenschaftliches (Durchsatz-) Rechnen vorgesehen ist. Implementierungen von unterschiedlichen Prozessoren können Folgendes beinhalten: 1) eine CPU, die einen oder mehrere In-Order-Universalkerne, die für Universalrechnen vorgesehen sind, und/oder einen oder mehrere Out-Of-Order-Universalkerne, die für Universalrechnen vorgesehen sind, enthält; und 2) einen Coprozessor, der einen oder mehrere Spezialkerne, die hauptsächlich für Grafik- und/oder wissenschaftliches (Durchsatz-) Rechnen vorgesehen sind, enthält. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die Folgendes enthalten können: 1) den Coprozessor auf einem von dem Hauptprozessor separaten Chip; 2) den Coprozessor auf einem separaten Die im gleichen Gehäuse wie ein Hauptprozessor; 3) den Coprozessor auf dem gleichen Die wie ein Hauptprozessor (wobei in diesem Fall ein solcher Coprozessor gelegentlich als Speziallogik, wie eine integrierte Grafik- und/oder wissenschaftliche (Durchsatz-)Logik, oder als Spezialkerne bezeichnet wird); und 4) ein System-on-a-Chip, das auf dem gleichen Die den beschriebenen Hauptprozessor (gelegentlich als der/die Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den vorstehend beschriebenen Coprozessor und zusätzliche Funktionalität einschließen kann. Beispielhafte Kernarchitekturen werden als nächstes beschrieben, gefolgt von Beschreibungen von beispielhaften Prozessoren und Computerarchitekturen. Hierin sind Schaltungen (Einheiten) detailliert beschrieben, die beispielhafte Kerne, Prozessoren usw. umfassen.
  • Beispielhafte Kernarchitekturen
  • 4A ist ein Blockdiagramm, das sowohl eine beispielhafte reihenfolgetreue (In-Order-) Pipeline als auch eine beispielhafte reihenfolgeveränderte (Out-Of-Order-) Ausgabe-/Ausführungspipeline mit Registerumbenennung gemäß Ausführungsformen der Erfindung veranschaulicht. 4B ist ein Blockdiagramm, das sowohl ein Ausführungsbeispiel für einen In-Order-Architekturkern als auch einen beispielhaften Out-Of-Order-Registerumbenennungs-Ausgabe/Ausführungs-Architekturkern, der in einem Prozessor enthalten sein soll, gemäß Ausführungsformen der Erfindung veranschaulicht. Die Kästchen mit durchgezogenen Linien in 4A-B stellen die In-Order-Pipeline und den In-Order-Kern dar, während die optionale Hinzufügung von Kästchen mit gestrichelten Linien die/den Out-Of-Order-Ausgabe-/Ausführungspipeline bzw. - kern mit Registerumbenennung darstellt. Unter der Voraussetzung, dass der In-Order-Aspekt ein Teilsatz des Out-Of-Order-Aspekts ist, wird der Out-Of-Order-Aspekt beschrieben.
  • In 4A enthält eine Prozessor-Pipeline 400 eine Abrufstufe 402, eine Längendecodierstufe 404, eine Decodierstufe 406, eine Zuordnungsstufe 408, eine Umbenennungsstufe 410, eine Scheduling-Stufe (auch bekannt als eine Dispatch- oder Issue-Stufe) 412, eine Registerlese-/Speicherlese-Stufe 414, eine Ausführungsstufe 416, eine Zurückschreib-/Speicherschreib-Stufe 418, eine Ausnahmebehandlungsstufe 422 und eine Commit-Stufe 424.
  • 4B zeigt einen Prozessorkern 490, einschließlich einer Front-End-Einheit 430, die an eine Ausführungs-Engine-Einheit 450 gekoppelt ist, und beide sind an eine Speichereinheit 470 gekoppelt. Der Kern 490 kann ein Kern für Rechnen mit reduziertem Befehlssatz (Reduced Instruction Set Computing, RISC), ein Kern für Rechnen mit komplexem Befehlswort (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 490 ein Spezialkern, wie ein Netzwerk- oder Kommunikationskern, eine Komprimierungs-Engine, ein Coprozessorkern, ein Kern für eine Grafikverarbeitungseinheit für Universalrechnen (General Purpose Computing Graphics Processing Unit, GPGPU), ein Grafikkern oder dergleichen sein.
  • Die Front-End-Einheit 430 enthält eine Verzweigungsvorhersageeinheit 432, die an eine Befehls-Cache-Einheit 434 gekoppelt ist, die an einen Befehls-Übersetzungspuffer (Translation Lookaside Buffer, TLB) 436 gekoppelt ist, der an eine Befehlsabrufeinheit 438 gekoppelt ist, der an eine Decodiereinheit 440 gekoppelt ist. Die Decodiereinheit 440 (oder der Decoder) kann Befehle decodieren und als eine Ausgabe eine oder mehrere Mikro-Operationen, Mikrocode-Eintrittspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale generieren, die von den ursprünglichen Befehlen decodiert oder abgeleitet werden oder die diese auf andere Weise widerspiegeln. Die Decodiereinheit 440 kann unter Verwendung mehrerer verschiedener Mechanismen implementiert werden. Zu Beispielen für geeignete Mechanismen zählen unter anderem Umsetzungstabellen, Hardware-Implementierungen, programmierbare logische Anordnungen (Programmable Logic Arrays, PLAs), Mikrocode-Festwertspeicher (Read Only Memories, ROMs) usw. In einer Ausführungsform schließt der Kern 490 einen Mikrocode-ROM oder ein anderes Medium ein, das Mikrocode für bestimmte Makrobefehle speichert (z. B. in der Decodiereinheit 440 oder auf andere Weise in der Front-End-Einheit 430). Die Decodiereinheit 440 ist an eine Umbenennungs-/Zuordnungseinheit 452 in der Ausführungs-Engine-Einheit 450 gekoppelt.
  • Die Ausführungs-Engine-Einheit 450 schließt die Umbenennungs-/Zuordnungseinheit 452 ein, die an eine Rückzugseinheit 454 und einen Satz von einer oder mehreren Planereinheit(en) 456 gekoppelt ist. Die Planereinheit(en) 456 stellen irgendeine Anzahl von unterschiedlichen Planern dar, einschließlich Reservierungsstationen, zentrales Befehlsfenster usw. Die Planereinheit(en) 456 sind an die Einheit(en) der physikalischen Registerdatei(en) 458 gekoppelt. Alle Einheiten der physikalischen Registerdatei(en) 458 stellen eine oder mehrere physikalische Registerdateien dar, von denen unterschiedliche einen oder mehrere unterschiedliche Datentypen speichern, wie zum Beispiel skalare Ganzzahl, skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma, Status (z. B. ein Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. In einer Ausführungsform umfasst die Einheit der physikalischen Registerdatei(en) 458 eine Vektorregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Universalregister bereitstellen. Die physikalische(n) Registerdatei(en)-Einheit(en) 458 wird bzw. werden von der Rückzugseinheit 454 überlappt, um verschiedene Weisen zu veranschaulichen, in denen Registerumbenennung und Out-Of-Order-Ausführung implementiert werden können (z. B. unter Verwendung von Neuordnungspuffer(n) und von Rückzugsregisterdatei(en), unter Verwendung von Zukunftsdatei(en), von Verlaufspuffer(n) und von Rückzugsregisterdatei(en), unter Verwendung von Registerabbildungen und eines Pools von Registern usw.). Die Rückzugseinheit 454 und die physikalischen Registerdatei(en)-Einheit(en) 458 sind an die Ausführungs-Cluster 460 gekoppelt. Das/die Ausführungs-Cluster 460 enthalten einen Satz von einer oder mehreren Ausführungseinheiten 462 und einen Satz von einer oder mehreren Speicherzugriffseinheiten 464. Die Ausführungseinheiten 462 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und auf verschiedenen Typen von Daten (z. B. skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzzahl, Vektorgleitkomma) durchführen. Während einige Ausführungsformen eine Reihe von Ausführungseinheiten enthalten können, die für spezifische Funktionen oder Funktionssätze vorgesehen sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten enthalten, die alle alle Funktionen durchführen. Die Planereinheit(en) 456, die physikalischen Registerdatei(en)-Einheit(en) 458 und die Ausführungs-Cluster 460 werden als möglicherweise eine Mehrzahl gezeigt, weil bestimmte Ausführungsformen separate Pipelines für bestimmte Typen von Daten/Operationen generieren (z. B. eine Pipeline für skalare Ganzzahl, eine Pipeline für skalares Gleitkomma/gepackte Ganzzahl/gepacktes Gleitkomma/Vektor-Ganzzahl/VektorGleitkomma und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre eigene Planereinheit, physikalische Registerdatei(en)-Einheit und/oder Ausführungs-Cluster aufweist - und im Fall einer separaten Speicherzugriffs-Pipeline sind bestimmte Ausführungsformen implementiert, bei denen nur der Ausführungs-Cluster dieser Pipeline die Speicherzugriffseinheit(en) 464 aufweist). Es versteht sich auch, dass bei Verwendung separater Pipelines eine oder mehrere dieser Pipelines Out-Of-Order-Ausgabe/-Ausführungs-Pipelines und der Rest In-Order-Pipelines sein können.
  • Der Satz von Speicherzugriffseinheiten 464 ist an die Speichereinheit 470 gekoppelt, die eine Daten-TLB-Einheit 472 enthält, die an eine Daten-Cache-Einheit 474 gekoppelt ist, die an eine Level 2 (L2)-Cache-Einheit 476 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 464 eine Ladeeinheit, eine Adressspeichereinheit und eine Datenspeichereinheit enthalten, die alle an die Daten-TLB-Einheit 472 in der Speichereinheit 470 gekoppelt sind. Die Befehls-Cache-Einheit 434 ist des Weiteren an eine Level 2 (L2)-Cache-Einheit 476 in der Speichereinheit 470 gekoppelt. Die L2-Cache-Einheit 476 ist an ein oder mehrere andere Cache-Level und schließlich an einen Hauptspeicher gekoppelt.
  • Beispielsweise kann die beispielhafte Kernarchitektur für Registerumbenennung, Out-Of-Order-Ausgabe/-Ausführung die Pipeline 400 wie folgt implementieren: 1) das Befehlsabrufen 438 führt die Abrufen- und Längendecodieren-Stufen 402 und 404 durch; 2) die Decodiereinheit 440 führt die Decodierstufe 406 durch; 3) die Umbenennungs-/Zuordnungseinheit 452 führt die Zuordnungsstufe 408 und die Umbenennungsstufe 410 durch; 4) die Planereinheit(en) 456 führen die Planungsstufe 412 durch; 5) die physikalischen Registerdatei(en)-Einheit(en) 458 und die Speichereinheit 470 führen die Registerlesen/Speicherlesen-Stufe 414 durch; das Ausführungs-Cluster 460 führt die Ausführungsstufe 416 durch; 6) die Speichereinheit 470 und die physikalischen Registerdatei(en)-Einheit(en) 458 führen die Zurückschreiben-/Speicherschreiben-Stufe 418 durch; 7) verschiedene Einheiten können an der Ausnahmebehandlungsstufe 422 beteiligt sein; und 8) die Rückzugseinheit 454 und die Einheit(en) der physikalischen Registerdatei(en) 458 führen die Commit-Stufe 424 durch.
  • Der Kern 490 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, CA, USA; den ARM-Befehlssatz (mit optional zusätzlichen Erweiterungen, wie NEON) von ARM Holdings in Sunnyvale, CA, USA), einschließlich der hierin beschriebenen Befehl(e). In einer Ausführungsform schließt der Kern 490 eine Logik zum Unterstützen einer Befehlssatzerweiterung für gepackte Daten (z. B. AVX1, AVX2) ein, wodurch es ermöglicht wird, dass die durch viele Multimedia-Anwendungen verwendeten Operationen unter Verwendung von gepackten Daten durchgeführt werden.
  • Es versteht sich, dass der Kern Multithreading (Ausführen von zwei oder mehreren parallelen Sätzen von Operationen oder Threads) unterstützt und dies auf vielerlei Arten tun kann, einschließlich Zeitscheiben-Multithreading, simultanes Multithreading (wobei ein einzelner physikalischer Kern einen logischen Kern für jeden der Threads bereitstellt, für die dieser physikalische Kern ein simultanes Multithreading durchführt) oder einer Kombination davon (zum Beispiel Zeitscheiben-Abrufen und -Decodieren und simultanes Multithreading danach, wie zum Beispiel bei der Intel® Hyperthreading-Technologie).
  • Während die Registerumbenennung im Kontext der Out-Of-Order-Ausführung beschrieben ist, versteht es sich, dass die Registerumbenennung in einer In-Order-Architektur verwendet werden kann. Obwohl die veranschaulichte Ausführungsform des Prozessors auch separate Befehls- und Daten-Cache-Einheiten 434/474 und eine gemeinsam genutzte L2-Cache-Einheit 476 enthält, können alternative Ausführungsformen einen einzigen internen Cache sowohl für Befehle als auch für Daten aufweisen, wie zum Beispiel einen internen Level-1-(L1-) Cache oder mehrere interne Cache-Level. In einigen Ausführungsformen kann das System eine Kombination von einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, enthalten. Alternativ dazu kann sich der gesamte Cache außerhalb des Kerns und/oder des Prozessors befinden.
  • Spezifische beispielhafte In-Order-Kernarchitektur
  • 5A-B veranschaulichen ein Blockdiagramm einer spezifischeren beispielhaften In-Order-Kernarchitektur, deren Kern einer von mehreren logischen Blöcken (einschließlich anderer Kerne des gleichen Typs und/oder anderer Typen) in einem Chip ist. Die logischen Blöcke kommunizieren über ein Verbindungsnetzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit einiger fester Funktionslogik, Speicher-E/A-Schnittstellen und anderer erforderlicher E/A-Logik, je nach Anwendung.
  • 5A ist ein Blockdiagramm eines Einzelprozessorkerns zusammen mit dessen Verbindung zu einem On-Die-Verbindungsnetzwerk 502 und mit dessen lokalem Teilsatz des Level 2 (L2)-Cache 504 gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdecoder 500 den x86-Befehlssatz mit einer Befehlssatzerweiterung für gepackte Daten. Ein L1-Cache 506 gestattet Zugriffe mit geringer Latenzzeit auf Cache-Speicher in die skalaren und Vektoreinheiten. Obwohl in einer Ausführungsform (um das Design zu vereinfachen) eine skalare Einheit 508 und eine Vektoreinheit 510 separate Registersätze verwenden (skalares Register 512 bzw. Vektorregister 514) und zwischen ihnen übertragene Daten in Speicher geschrieben und dann von einem Level-1- (L1-) Cache 506 wieder eingelesen werden, können alternative Ausführungsformen der Erfindung einen anderen Ansatz verwenden (z. B. einen einzelnen Registersatz verwenden oder einen Kommunikationspfad enthalten, der gestattet, dass Daten zwischen den beiden Registerdateien übertragen werden, ohne dass sie geschrieben und zurückgelesen werden).
  • Der lokale Teilsatz des L2-Caches 504 ist Teil eines globalen L2-Caches, der in separate lokale Teilsätze aufgeteilt ist, einer je Prozessorkern. Jeder Prozessorkern hat einen Direktzugriffspfad zu seinem eigenen lokalen Teilsatz des L2-Caches 504. Durch einen Prozessorkern gelesene Daten werden in dessen Teilsatz des L2-Caches 504 gespeichert, und es kann schnell auf diese zugegriffen werden, parallel zu anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen. Von einem Prozessorkern geschriebene Daten werden in seinem eigenen L2-Cache-Teilsatz 504 gespeichert und, falls nötig, aus anderen Teilsätzen geleert. Das Ringnetzwerk stellt die Kohärenz für gemeinsame Daten sicher. Das Ringnetzwerk ist bidirektional, um es Agenten, wie etwa Prozessorkernen, L2-Caches und anderen logischen Blöcken, zu ermöglichen, innerhalb des Chips miteinander zu kommunizieren. Jeder Ringdatenpfad ist bei manchen Ausführungsformen je Richtung 1024 Bit breit.
  • 5B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 5A gemäß Ausführungsformen der Erfindung. 5B enthält einen L1-Daten-Cache 506A als Teil des L1-Caches 504 sowie weitere Details hinsichtlich der Vektoreinheit 510 und der Vektorregister 514. Insbesondere ist die Vektoreinheit 510 eine 6-breite Vektorverarbeitungseinheit (Vector Processing Unit, VPU) (siehe die 16-breite ALU 528), die eines oder mehrere von Ganzzahlbefehlen, Float-Befehlen mit einfacher Genauigkeit und Float-Befehlen mit doppelter Genauigkeit ausführt. Die VPU unterstützt ein Swizzeln der Registereingaben mit einer Swizzel-Einheit 520, eine numerische Konvertierung mit den Einheiten zur numerischen Konvertierung 522A-B und eine Replikation mit einer Replikationseinheit 524 bei der Speichereingabe.
  • Prozessor mit integriertem Speicher-Controller und Grafik
  • 6 ist ein Blockdiagramm eines Prozessors 600 gemäß Ausführungsformen der Erfindung, der mehr als einen Kern aufweisen kann, einen integrierten Speicher-Controller aufweisen kann und eine integrierte Grafik aufweisen kann. Die Kästchen mit durchgezogenen Linien in der 6 veranschaulichen einen Prozessor 600 mit einem Einzelkern 602A, einem Systemagenten 610, einem Satz von einer oder mehreren Bus-Controller-Einheiten 616, während die optionale Hinzufügung der Kästchen mit gestrichelten Linien einen alternativen Prozessor 600 mit mehreren Kernen 602A-N, einen Satz von einer oder mehreren integrierten Speicher-Controller-Einheit(en) 614 in der Systemagenteneinheit 610 und eine Speziallogik 608 veranschaulicht.
  • Somit können verschiedene Implementierungen des Prozessors 600 Folgendes einschließen: 1) eine CPU, wobei die Speziallogik 608 integrierte Grafik- und/oder wissenschaftliche (Durchsatz-) Logik ist (die einen oder mehrere Kerne enthalten kann) und die Kerne 602A-N einer oder mehrere Universalkerne sind (z. B. Universal-In-Order-Kerne, Universal-Out-Of-Order-Kerne, eine Kombination aus den beiden); 2) einen Coprozessor, wobei die Kerne 602A-N eine große Anzahl von Spezialkernen sind, die vor allem für Grafiken und/oder Wissenschaft (Durchsatz) vorgesehen sind; und 3) einen Coprozessor, wobei die Kerne 602A-N eine große Anzahl von Universal-In-Order-Kernen sind. Somit kann der Prozessor 600 ein Universalprozessor, ein Coprozessor oder Spezialprozessor, wie ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, 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 umgesetzt sein. Der Prozessor 600 kann ein Teil von einem oder mehreren Substraten sein und/oder kann unter Verwendung einer beliebigen von einer Anzahl von Verfahrenstechnologien, wie BiCMOS, CMOS oder NMOS, darauf implementiert sein.
  • Die Speicherhierarchie schließt ein oder mehrere Cache-Level in den Kernen 604A-N, einen Satz oder eine oder mehrere gemeinsame Cache-Einheiten 606 und externen Speicher (nicht gezeigt), der an den Satz von integrierten Speicher-Controller-Einheiten 614 gekoppelt ist, ein. Der Satz von gemeinsam genutzten Cache-Einheiten 606 kann einen oder mehrere Mid-Level-Caches, wie zum Beispiel Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Ebenen, einen Cache auf der untersten Ebene (LLC, Last Level Cache) und/oder Kombinationen davon enthalten. Während in einer Ausführungsform eine ringbasierte Verbindungseinheit 612 die integrierte Grafiklogik 608, den Satz gemeinsam genutzter Cache-Einheiten 606 und die Systemagenteneinheit 610/die integrierte(n) Speichersteuerungseinheit(en) 614 verbindet, können alternative Ausführungsformen irgendeine Anzahl an allgemein bekannten Techniken zum Verbinden solcher Einheiten verwenden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cache-Einheiten 606 und den Kernen 602-A-N beibehalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 602A-N zum Multithreading in der Lage. Der Systemagent 610 umfasst diejenigen Komponenten, die Kerne 602A-N koordinieren und betreiben. Die Systemagenteneinheit 610 kann, beispielsweise, eine Leistungssteuerungseinheit (PCU, Power Control Unit) und eine Anzeigeeinheit umfassen. Die PCU kann Logik und Komponenten, die zum Regeln des Leistungszustands der Kerne 602A-N und der integrierten Grafiklogik 608 benötigt werden, sein oder umfassen. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 602A-N können in Bezug auf den Architekturbefehlssatz homogen oder heterogen sein; das heißt, zwei oder mehrere der Kerne 602A-N können zur Ausführung des gleichen Befehlssatzes in der Lage sein, während andere dazu in der Lage sein können, nur einen Teilsatz von diesem Befehlssatz oder einem anderen Befehlssatz auszuführen.
  • Beispielhafte Computerarchitekturen
  • 7-10 sind Blockdiagramme von beispielhaften Computerarchitekturen. Andere im Fachgebiet bekannte Systemdesigns und Konfigurationen für Laptops, Desktops, Handheld-PCs, Personal Digital Assistants, Engineering-Workstations, Server, Netzwerkvorrichtungen, Netzwerk-Hubs, Switche, eingebettete Prozessoren, Digitalsignalprozessoren (DSP), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Medienwiedergabevorrichtungen, handgehaltene Vorrichtungen und verschiedene andere elektronische Vorrichtungen sind ebenfalls geeignet. Im Allgemeinen ist eine große Vielfalt von Systemen oder elektronischen Vorrichtungen, die zur Aufnahme eines Prozessors und/oder anderer Ausführungslogik, wie hierin offenbart, in der Lage sind, allgemein geeignet.
  • Nun Bezug nehmend auf 7 ist ein Blockdiagramm eines Systems 700 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 700 kann einen oder mehrere Prozessoren 710, 715 enthalten, die mit einem Controller-Hub 720 gekoppelt sind. In einer Ausführungsform enthält der Controller-Hub 720 einen Grafikspeicher-Controller-Hub (GMCH, Graphics Memory Controller Hub) 790 und einen Eingabe-/Ausgabe-Hub (IOH, Input/Output Hub) 750 (die sich auf separaten Chips befinden können); der GMCH 790 enthält Speicher- und Grafiksteuerungen, mit denen Speicher 740 und ein Coprozessor 745 gekoppelt sind; der IOH 750 koppelt die Eingabe-/Ausgabe- (E/A-) Vorrichtungen 760 mit dem GMCH 790. Alternativ sind einer oder beide, die Speicher- und/oder die Grafiksteuerung, in den Prozessor integriert (wie hier beschrieben), der Speicher 740 und der Coprozessor 745 sind direkt mit dem Prozessor 710 gekoppelt, und der Controller-Hub 720 befindet sich in einem einzelnen Chip mit dem IOH 750.
  • Die optionale Art der zusätzlichen Prozessoren 715 ist in 7 mit gestrichelten Linien gekennzeichnet. Jeder Prozessor 710, 715 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne enthalten und kann irgendeine Version des Prozessors 600 sein.
  • Der Speicher 740 kann zum Beispiel ein dynamischer Direktzugriffsspeicher (DRAM, Dynamic Random Access Memory), ein Phasenwechselspeicher (PCM, Phase Change Memory) oder eine Kombination der beiden sein. Für zumindest eine Ausführungsform kommuniziert der Controller-Hub 720 mit dem/den Prozessor(en) 710, 715 über einen Multi-Drop-Bus, wie zum Beispiel einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle oder eine ähnliche Verbindung 795.
  • Bei einer Ausführungsform ist der Coprozessor 745 ein Spezialprozessor, wie etwa zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. Bei einer Ausführungsform kann der Controller-Hub 720 einen integrierten Grafikbeschleuniger enthalten.
  • Es kann eine Vielfalt von Unterschieden zwischen den physikalischen Ressourcen 710, 7155 in Bezug auf ein Spektrum von Leistungsmetriken, einschließlich Architektur-, Mikroarchitektur-, Wärme-, Stromverbrauchseigenschaften und dergleichen, bestehen.
  • In einer Ausführungsform führt der Prozessor 710 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. Coprozessorbefehle können in die Befehle eingebettet sein. Der Prozessor 710 erkennt diese Coprozessorbefehle als von einem Typ, der durch den verbundenen Coprozessor 745 ausgeführt werden soll. Entsprechend gibt der Prozessor 710 diese Coprozessorbefehle (oder Steuersignale, welche Coprozessorbefehle repräsentieren) auf einem Coprozessorbus oder einer anderen Zwischenverbindung an den Coprozessor 745 aus. Der (die) Coprozessor(en) 745 nehmen die erhaltenen Coprozessorbefehle an und führen sie aus.
  • Jetzt wird mit Bezug auf die 8 ein Blockdiagramm eines ersten spezifischeren Systems 800 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 8 gezeigt, ist das Multiprozessorsystem 800 ein Punkt-zu-Punkt-Verbindungssystem und schließt einen ersten Prozessor 870 und einen zweiten Prozessor 880 ein, die über eine Punkt-zu-Punkt-Verbindung 850 gekoppelt sind. Jeder der Prozessoren 870 und 880 kann eine Version des Prozessors 600 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 870 und 880 die Prozessoren 710 bzw. 715, während der Coprozessor 838 der Coprozessor 745 ist. In einer anderen Ausführungsform sind die Prozessoren 870 und 880 der Prozessor 710 bzw. der Coprozessor 745.
  • Die Prozessoren 870 und 880 sind einschließlich integrierter Speicher-Controller(Integrated Memory Controller, IMC)-Einheiten 872 bzw. 882 gezeigt. Der Prozessor 870 schließt als Teil seiner Bus-Controller-Einheiten die Punkt-zu-Punkt(P-P)-Schnittstellen 876 und 878 ein; der zweite Prozessor 880 schließt in ähnlicher Weise die P-P-Schnittstellen 886 und 888 ein. Die Prozessoren 870, 880 können Informationen über eine Punkt-zu-Punkt(P-P)-Schnittstelle 850 unter Verwendung von P-P-Schnittstellen-Schaltungen 878, 888 austauschen. Wie in 8 gezeigt, koppeln die IMCs 872 und 882 die Prozessoren an jeweilige Speicher, nämlich an Speicher 832 und einen Speicher 834, die Abschnitte eines Hauptspeichers sein können, der lokal an den jeweiligen Prozessoren befestigt ist.
  • Die Prozessoren 870, 880 können jeweils Informationen mit einem Chipsatz 890 über einzelne P-P-Schnittstellen 852, 854 unter Verwendung von Punkt-zu-Punkt-Schnittstellen-Schaltungen 876, 894, 886, 898 austauschen. Der Chipsatz 890 kann Informationen mit dem Coprozessor 838 optional über eine Hochleistungsschnittstelle 892 austauschen. Bei einer Ausführungsform ist der Coprozessor 838 ein Spezialprozessor, wie etwa zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein gemeinsam genutzter Cache (nicht gezeigt) kann in beiden Prozessoren oder außerhalb der beiden Prozessoren enthalten sein, jedoch über eine P-P-Verbindung mit den Prozessoren verbunden sein, so dass die lokalen Cache-Informationen eines oder beider Prozessoren in dem gemeinsam genutzten Cache gespeichert werden können, falls ein Prozessor in einen Niederleistungsmodus gesetzt wird.
  • Der Chipsatz 890 kann über eine Schnittstelle 896 mit einem ersten Bus 816 gekoppelt sein. In einer Ausführungsform kann der erste Bus 816 ein Peripheral Component Interconnect(PCI)-Bus oder ein Bus, wie ein PCI Express-Bus oder ein anderer E/A-Verbindungs-Bus sein, wenngleich der Umfang der vorliegenden Erfindung nicht hierauf beschränkt ist.
  • Wie in 8 gezeigt, können verschiedene E/A-Vorrichtungen 814 an den ersten Bus 816 gekoppelt sein, zusammen mit einer Bus-Brücke 818, die den ersten Bus 816 an einen zweiten Bus 820 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessor(en) 815, wie Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie Grafikbeschleuniger oder Digitalsignalverarbeitungs(Digital Signal Processing, DSP)-Einheiten), anwenderprogrammierbare Gatteranordnungen oder ein beliebiger anderer Prozessor, an den ersten Bus 816 gekoppelt. In einer Ausführungsform kann der zweite Bus 820 ein Low Pin Count-Bus (LPC-Bus) sein. Verschiedene Vorrichtungen können in einer Ausführungsform an einen zweiten Bus 820 gekoppelt werden, einschließlich zum Beispiel einer Tastatur und/oder Maus 822, Kommunikationsvorrichtungen 827 und einer Speichereinheit 828, wie ein Festplattenlaufwerk oder eine andere Massenspeichervorrichtung, die Befehle/Code und Daten 830 einschließen kann. Ferner kann ein Audio-E/A 824 an den zweiten Bus 816 gekoppelt werden. Es sei darauf hingewiesen, dass andere Architekturen möglich sind. Anstelle der Punkt-zu-Punkt-Architektur der 8 kann ein System zum Beispiel eine Multi-Drop-Bus- oder eine andere solche Architektur implementieren.
  • Jetzt wird mit Bezug auf 9 ein Blockdiagramm eines zweiten spezifischeren beispielhaften Systems 900 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in 8 und 9 tragen gleiche Bezugszeichen, und bestimmte Aspekte von 8 wurden in 9 weggelassen, um eine Verunklarung anderer Aspekte von 9 zu vermeiden.
  • 9 veranschaulicht, dass die Prozessoren 870, 880 eine integrierte Speicher- und E/A-Steuerlogik (Control Logic, CL) 972 bzw. 982 einschließen können. Daher enthält die CL 972, 982 integrierte Speicher-Controller-Einheiten und E/A-Steuerlogik. 9 veranschaulicht, dass nicht nur die Speicher 832, 834 an die CL 872, 882 gekoppelt sind, sondern auch, dass E/A-Vorrichtungen 914 auch an die Steuerlogik 872, 882 gekoppelt sind. Ältere E/A-Vorrichtungen 915 sind an den Chipsatz 890 gekoppelt.
  • Jetzt wird mit Bezug auf die 10 ein Blockdiagramm eines SoC 1000 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in 6 tragen gleiche Bezugszeichen. Außerdem sind Kästchen mit unterbrochenen Linien optionale Merkmale auf fortschrittlicheren SoCs. In 10 sind Verbindungseinheit(en) 1002 an Folgendes gekoppelt: einen Anwendungsprozessor 1010, der einen Satz von einem oder mehreren Kernen 102A-N, Cache-Einheiten 604A-N und gemeinsame Cache-Einheit(en) 606; eine Systemagenteneinheit 610; Bus-Controller-Einheit(en) 616; integrierte Speicher-Controller-Einheit(en) 614; einen Satz oder einen oder mehrere Coprozessoren 1020, die eine integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor einschließen können; eine Einheit eines statischen Speichers mit wahlfreiem Zugriff (Static Random Access Memory, SRAM) 1030; eine Einheit mit direktem Speicherzugriff (Direct Memory Access, DMA) 1032 und eine Anzeigeeinheit 1040 zum Koppeln an eine oder mehrere externe Anzeigen einschließt. In einer Ausführungsform enthalten der/die Coprozessor(en) 1020 einen Spezialprozessor, wie zum Beispiel einen Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, eine GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder dergleichen.
  • Ausführungsformen der hierin offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsansätze implementiert sein. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert werden, die auf programmierbaren Systemen ausgeführt werden, die zumindest einen Prozessor, ein Speichersystem (das flüchtigen und nichtflüchtigen Speicher und/oder Speicherelemente enthält), zumindest eine Eingabeeinrichtung und zumindest eine Ausgabeeinrichtung umfassen.
  • Programmcode, wie zum Beispiel der in der 8 veranschaulichte Code 830, kann auf Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen durchzuführen und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können in bekannter Weise auf eine oder mehrere Ausgabevorrichtungen angewendet werden. Zum Zweck dieser Anwendung enthält ein Verarbeitungssystem irgendein System, das einen Prozessor aufweist, wie zum Beispiel einen Digitalsignalprozessor (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 im Schutzumfang nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte zumindest einer Ausführungsform können durch repräsentative Befehle implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik im Prozessor darstellt, die, wenn sie von einer Maschine gelesen wird, bewirkt, dass die Maschine Logik zum Durchführen der hier beschriebenen Techniken herstellt. Diese Repräsentationen, bekannt als „IP-Kerne“, können auf einem dinghaften maschinenlesbaren Medium gespeichert und für verschiedene Kunden oder Herstellungseinrichtungen bereitgestellt werden, um sie in die Herstellungsmaschinen zu laden, die die Logik oder den Prozessor tatsächlich herstellen.
  • Solche maschinenlesbaren Speichermedien können unter anderem Folgendes enthalten: nichtflüchtige dinghafte Anordnungen von Artikeln, die durch eine Maschine oder Einrichtung gefertigt oder gebildet werden, einschließlich Speichermedien, wie zum Beispiel Festplatten, irgendein anderer Typ von Platte, einschließlich Floppy Disks, optische Platten, CD-Nur-Lese-Speicher (CD-ROMs, Compact Disk Read-Only Memories), wiederbeschreibbare Compact Disks (CD-RWs) und magnetooptische Platten, Halbleitereinrichtungen, wie zum Beispiel Nur-Lese-Speicher (ROMs, Read-Only Memories), Direktzugriffsspeicher (RAMs, Random Access Memories), wie zum Beispiel dynamische Direktzugriffsspeicher (DRAMs, Dynamic Random Access Memories), statische Direktzugriffsspeicher (SRAMs, Static Random Access Memories), löschbare programmierbare Nur-Lese-Speicher (EPROMs, Erasable Programmable Read-Only Memories), Flash-Speicher, elektrisch löschbare programmierbare Nur-Lese-Speicher (EEPROMs, Electrically Erasable Programmable Read-Only Memories), Phasenwechselspeicher (PCM, Phase Change Memory), magnetische oder optische Karten oder jeden anderen Typ von zum Speichern von elektronischen Befehlen geeigneten Medien.
  • Dementsprechend zählen zu Ausführungsformen der Erfindung auch nichtflüchtige dinghafte maschinenlesbare Medien, die Befehle enthalten oder Designdaten enthalten, wie zum Beispiel eine Hardware-Beschreibungssprache (Hardware Description Language, HDL), die die hier beschriebenen Strukturen, Schaltungen, Einrichtungen, Prozessoren und/oder Systemmerkmale definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich binärer Übersetzung, Code-Morphing usw.)
  • In einigen Fällen kann ein Befehlskonverter verwendet werden, um einen Befehl von einem Quellenbefehlssatz in einen Zielbefehlssatz zu konvertieren. Zum Beispiel kann der Befehlskonverter einen Befehl in einen oder mehrere andere Befehle, die vom Kern verarbeitet werden sollen, übersetzen (z. B. unter Verwendung statischer binärer Übersetzung, dynamischer binärer Übersetzung, einschließlich dynamischer Kompilierung), morphen, emulieren oder auf andere Weise konvertieren. Der Befehlskonverter kann in Software, Hardware, Firmware oder einer Kombination davon implementiert sein. Der Befehlskonverter kann sich auf dem Prozessor, außerhalb des Prozessors oder teilweise auf dem Prozessor und teilweise außerhalb von diesem befinden.
  • 11 ist ein Blockdiagramm, das die Verwendung eines SoftwareBefehlskonverters zum Konvertieren binärer Befehle in einem Quellenbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt. In der dargestellten Ausführungsform ist der Befehlskonverter ein Software-Befehlskonverter, obwohl der Befehlskonverter alternativ in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert sein kann. 11 zeigt, wie ein Programm in einer höheren Sprache 1102 mit einem ersten Compiler 1104 kompiliert werden kann, um einen ersten Binärcode (z. B. x86) 1106 zu erzeugen, der nativ durch einen Prozessor mit zumindest einem ersten Befehlssatzkern 1116 ausgeführt werden kann. In einigen Ausführungsformen stellt der Prozessor mit zumindest einem ersten Befehlssatzkern 1116 jeden Prozessor dar, der im Wesentlichen die gleichen Funktionen durchführen kann wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern durch kompatibles Ausführen oder anderweitiges Verarbeiten (1) eines wesentlichen Teils des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) von Objektcodeversionen von Anwendungen oder anderer Software, dazu bestimmt, auf einem Intel-Prozessor mit zumindest einem x86-Befehlssatzkern ausgeführt zu werden, um im Wesentlichen das gleiche Ergebnis zu erreichen wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern. Der erste Compiler 1104 stellt einen Compiler dar, der betreibbar ist, um Binärcode des ersten Befehlssatzes 1106 (z. B. Objektcode) zu erzeugen, der, mit oder ohne zusätzliche Verknüpfungsverarbeitung, auf dem Prozessor mit zumindest einem ersten Befehlssatzkern 1116 ausgeführt werden kann. In ähnlicher Weise zeigt 11, wie das Programm in der höheren Sprache 1102 unter Verwendung eines alternativen Befehlssatz-Compilers 1108 kompiliert werden kann, um alternativen Befehlssatz-Binärcode 1110 zu erzeugen, der nativ durch einen Prozessor ohne zumindest einen ersten Befehlssatzkern 1114 (z. B. einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, CA, ausführen und/oder den ARM-Befehlssatz von ARM Holdings aus Sunnyvale, CA, ausführen) ausgeführt werden kann. Der Befehlskonverter 1112 wird verwendet, um den ersten Binärcode 1106 in Code zu konvertieren, der vom Prozessor ohne einen ersten Befehlssatzkern 1114 nativ ausgeführt werden kann. Dieser konvertierte Code ist wahrscheinlich nicht der gleiche wie der Alternativ-Befehlssatz-Binärcode 1110, da ein Befehlskonverter, der dazu in der Lage ist, schwierig herzustellen ist; der konvertierte Code wird jedoch die allgemeine Operation ausführen und aus Befehlen aus dem alternativen Befehlssatz bestehen. Daher repräsentiert der Befehlskonverter 1112 Software, Firmware, Hardware oder eine Kombination davon, die durch Emulation, Simulation oder irgendeinen anderen Prozess einem Prozessor oder einer anderen elektronischen Einrichtung, die keinen ersten Befehlssatzprozessor oder -kern hat, gestattet, den ersten Binärcode 1106 auszuführen.
  • EINRICHTUNG UND VERFAHREN ZUM VEKTORMULTIPLIZIEREN UND AKKUMULIEREN VON GEPACKTEN WÖRTERN
  • Verschiedene neue Befehle sind weiter unten beschrieben. In einer Ausführungsform sind die Schaltung und Logik zum Durchführen der von den neuen Befehlen angeforderten Operationen in die in 4B gezeigte Ausführungs-Engine-Einheit 450 in den verschiedenen vorstehend beschriebenen Kernen (siehe z. B. Kerne 602A-N in 6 und 10) und/oder in die in 5A gezeigte Vektoreinheit 510 integriert. Zum Beispiel können die verschiedenen Quell- und Zielregister SIMD-Register in den Einheit(en) der physikalischen Registerdatei 458 in 4B und/oder Vektorregister 310 in 3 sein. Die weiter unten beschriebenen Multiplikationsschaltungen, Addiererschaltungen, Akkumulationsschaltungen und anderen Schaltungen können in den Ausführungskomponenten der weiter oben beschriebenen Architekturen, einschließlich in beispielhafter und nicht einschränkender Weise der Ausführungseinheit(en) 462 in 4B, integriert werden. Es sei jedoch angemerkt, dass die zugrunde liegenden Prinzipien der Erfindung nicht auf diese spezifischen Architekturen beschränkt sind.
  • Eine Ausführungsform umfasst eine Multiply-Accumulate(MAC)-Architektur mit acht 16x16-Bit-Multiplizierern und zwei 64-Bit-Akkumulatoren, wenngleich die zugrunde liegenden Prinzipien der Erfindung nicht auf diese bestimmte Implementierung beschränkt sind. Die beschriebene Befehlssatzarchitektur (ISA) kann verschiedene Multiplizieren- und MAC-Operationen auf 128-Bit-, 256-Bit- oder 512-Bit-Vektordaten mit 8-Bit-, 16-Bit-, 32-Bit- oder 64-Bit-Datenelementen verarbeiten, die Ganzzahl-, Festpunkt- und/oder komplexe Datentypen sein können. Außerdem führen bestimmte Befehle ein Nachverarbeiten von akkumulierten Daten durch Verschiebungs-, Rundungs- und Sättigungsoperationen durch.
  • In einer Ausführungsform unterstützen die Befehle auch eine Vielzahl von Ganzzahl- und Festpunktdatentypen, einschließlich:
    1. 1) eines Q31 -Datentyps für Signale, die eine Analog-Digital-Wandlung (ADC) und eine Digital-Analog-Wandlung (DAC) mit mehr als 16 Bits erfordern;
    2. 2) eines Q15-Datentyps;
    3. 3) eines komplexen 16-Bit-Datentyps und
    4. 4) eines komplexen 32-Bit-Datentyps.
  • Zu Zielanwendungen der Ausführungsformen der Erfindung zählen neuronale Netzwerke, Klassifikationsaufgaben für Computervision und Spracherkennung. Daher können die beschriebenen Befehle in tiefen neuronalen Netzwerken (Deep Neural Networks, DNN), bei der automatische Spracherkennung (Automatic Speech Recognition, ASR) und bei der Sensorfusion mit Kalman-Filtern, um nur einige zu nennen, ausgeführt werden. Aufgrund der Gewichtssequenz {w1, w2, ...wk} und der Eingabesequenz {x1, x2, x3, ....xn} v ist es bei vielen bildverarbeitenden Maschinenlernaufgaben erforderlich, die Ergebnissequenz {y1, y2, y3, ...yn+1-k} definiert durch yi = w1xi+w2xi+1+ ................. + wkxi+k-1 zu berechnen.
  • 12 veranschaulicht einen beispielhaften Prozessor 1255, auf dem Ausführungsformen der Erfindung implementiert werden können, der eine Vielzahl von Kernen 0-N zum gleichzeitigen Ausführen einer Vielzahl von Befehls-Threads einschließt. Die veranschaulichte Ausführungsform schließt eine DSP-Befehl-Decodierschaltung/-logik 1231 in dem Decoder 1230 und eine DSP-Befehl-Ausführungsschaltung/-logik 1341 in der Ausführungseinheit 1240 ein. Diese Pipeline-Komponenten können die hier beschriebenen Operationen als Reaktion auf die Decodierung und Ausführung der DSP-Befehle durchführen. Während in 12 nur Details eines Einzelkerns (Kern 0) gezeigt sind, versteht es sich, dass alle der anderen Kerne von Prozessor 1255 ähnliche Komponenten einschließen können.
  • Vor der Beschreibung spezifischer Details der Ausführungsformen der Erfindung ist unmittelbar nachstehend eine Beschreibung der verschiedenen Komponenten des beispielhaften Prozessors 1255 bereitgestellt. Die mehreren Kerne 0-N können jeweils eine Speichermanagementeinheit 1290 zum Durchführen von Speicheroperationen (z. B. Lade-/Speicheroperationen), einen Satz Universalregister (GPR, General Purpose Register) 1205, einen Satz Vektorregister 1206 und einen Satz Maskenregister 1207 enthalten. In einer Ausführungsform sind mehrere Vektordatenelemente in jedes Vektorregister 1206 gepackt, das eine Breite von 512 Bit zum Speichern von zwei 256-Bit-Werten, vier 128-Bit-Werten, acht 64-Bit-Werten, sechzehn 32-Bit-Werten usw. aufweisen kann. Die zugrunde liegenden Prinzipien der Erfindung sind jedoch nicht auf irgendeine spezielle Größe/Art von Vektordaten beschränkt. In einer Ausführungsform enthalten die Maskenregister 1207 acht 64-Bit-Operandenmaskenregister, die zum Durchführen von Bitmaskierungsoperationen an den in den Vektorregistern 1206 gespeicherten Werten verwendet werden (z. B. als hier beschriebene Maskenregister k0-k7 implementiert). Die zugrunde liegenden Prinzipien der Erfindung sind jedoch nicht auf eine bestimmte Größe/einen bestimmten Typ von Maskenregister beschränkt.
  • Jeder Kern 0-N kann einen dedizierten Level-1-Cache (L1) 1212 und Level-2-Cache (L2) 1211 zum Zwischenspeichern von Befehlen und Daten gemäß einer spezifizierten Cache-Management-Regel enthalten. Der L1-Cache 1212 schließt einen separaten Befehls-Cache 1220 zum Speichern von Befehlen und einen separaten Daten-Cache 1221 zum Speichern von Daten ein. Die in den verschiedenen Prozessor-Caches gespeicherten Befehle und Daten werden auf der Granularität von Cache-Leitungen verwaltet, die eine feste Größe (z. B. eine Länge von 64, 128, 512 Bytes) aufweisen können. Jeder Kern dieser beispielhaften Ausführungsform weist eine Befehlsabrufeinheit 1210 zum Abrufen von Befehlen aus dem Hauptspeicher 1200 und/oder einem gemeinsamen Level 3 (L3)-Cache 1216 auf. Die Befehlsabrufeinheit 1210 umfasst verschiedene gut bekannte Komponenten, einschließlich eines Zeigers 1203 zum nächsten Befehl zum Speichern der Adresse des nächsten aus dem Speicher 1200 (oder einem der anderen Caches) abzurufenden Befehls; eines Befehlsübersetzungspuffers (ITLB, Instruction Translation Look-aside Buffer) 1204 zum Speichern einer Abbildung kürzlich verwendeter virtueller-zuphysischer Befehlsadressen zum Verbessern der Geschwindigkeit der Adressenübersetzung; einer Verzweigungsvorhersageeinheit 1202 zum spekulativen Vorhersagen von Befehlsverzweigungsadressen und Verzweigungszielpuffer (BTB, Branch Target Buffer) 1201 zum Speichern von Verzweigungsadressen und Zieladressen.
  • Wie erwähnt, enthält eine Decodiereinheit 1230 eine MAC-Befehlsdecodier-Schaltungsanordnung/Logik 1231 zum Decodieren der hierin beschriebenen MAC-Befehle in Mikro-Operationen oder „uops“, und die Ausführungseinheit 1240 enthält eine MAC-Befehlsausführungs-Schaltungsanordnung/Logik 1241 zum Ausführen der MAC-Befehle. Eine Rückschreib-/Rückzugseinheit 1250 zieht die ausgeführten Befehle zurück und schreibt die Ergebnisse zurück.
  • Eine Implementierung schließt MAC-Befehle ein, die die einzelnen Wörter eines ersten Quelloperanden mit entsprechenden Wörtern eines zweiten Quelloperanden multiplizieren, wodurch Wortzwischenergebnisse erzeugt werden (Vorzeichen-/Nullerweiterung auf Wortwerte, wie erforderlich). Sätze der Wortergebnisse werden dann summiert und mit entsprechenden Doppelwortwerten im Zielregister akkumuliert. Eine bestimmte Version eines MAC-Befehls führt eine Sättigung bei den Wortzwischenergebnissen durch. Wenn die Zwischensumme eine vorzeichenbehaftete 32b-Zahl überschreitet, wird das Ergebnis entweder auf 0x7FFF_FFFF für positive Zahlen von 0x8000_0000 für negative Zahlen gesättigt. Eine Implementierung verwendet ein EVEX-Befehlsformat und unterstützt eine Speicherfehlerunterdrückung.
  • In einer Ausführungsform sind die xmm1-, xmm2- und xmm3-Register gepackte 128-Bit-Datenregister, die duale Quadwort-Werte, vier Doppelwortwerte, acht Wortwerte oder sechzehn Bytes unterstützen. 13 veranschaulicht beispielhafte Datenelement- und Bitverteilungen für ein beispielhaftes Quellregister und/oder Zielregister. Datenelemente können als gepackte Bytes 1301 (8 Bits), Wörter 1302 (16 Bits), Doppelwörter 1303 (32 Bits) und/oder Quadwörter 1304 (64 Bits) in das Quellregister und/oder Zielregister gepackt werden, wie veranschaulicht ist.
  • Verschiedene Implementierungen des MAC-Befehls arbeiten unter Verwendung von Quell- und Zielregistern verschiedener Größen, einschließlich 128-Bit-Registern (z. B. xmm-Registern), 256-Bit-Registern (z. B. ymm-Registern) und 512-Bit-Registern (z. B. zmm-Registern). Eine Ausführungsform verwendet eines der folgenden Befehlsformate, um die zu verwendende Registergröße zu bestimmen:
    • VPDPBx xmm1, xmm2, xmm3/m128;
    • VPDPBx ymm1, ymm2, ymm3/m256;
    • VPDPBx zmm1, zmm2, zmm3/m512;
    wobei x für verschiedene Zeichenketten steht, die zu der Basismnemonik VPDPB hinzugefügt werden können, um verschiedene Variationen des hierin beschriebenen Befehls zu identifizieren. Im obigen Beispiel ist das erste Quellregister xmm2, ymm2 oder zmm2; ist das zweite Quellregister xmm3, ymm3 oder zmm3 (oder ein 128-, 256- bzw. 512-Bit-Speicherort) bzw. ist das Zielregister xmm1, ymm1 oder zmm1.
  • Verschiedene Implementierungen werden in Bezug auf die folgende Code-Sequenz beschrieben. Insbesondere spiegeln die verschiedenen nachstehend genannten IF/THEN/ELSE-Aussagen die verschiedenen Variationen eines MAC-Befehls und/oder verschiedener MAC-Befehle wider.
VPDPWSSQ,S dest, src1, src2
VL = (128,256,512)
KL = VL/64

 
ORIGDEST := DEST
FOR i := 0 TO KL-1:
   IF kl[i] or *no writemask*:
      if SRC2 is memory and EVEX.b == 1:
         t := SRC2.qword[0]
      ELSE:
         t := SRC2.qword[i]
      p0dword := SIGN_EXTEND(SRC1.word[4*i+0]) *
      SIGN_EXTEND(t.word[0])
      p1dword := SIGN_EXTEND(SRC1.word[4*i+1]) *
      SIGN EXTEND(t.word[1])
      p2dword := SIGN_EXTEND(SRC1.word[4*i+2]) *
      SIGN EXTEND(t.word[2])
      p3dword := SIGN_EXTEND(SRC1.word[4*i+3]) *
      SIGN EXTEND(t.word[3])
      IF *Saturating*:    
         DEST.qword[i] := SIGNED_QWORD_SATURATE
         (ORIGDEST.qword [i] + p0dword + p1dword +
         p2dword + p3dword)
      ELSE:
         DEST.qword[i] := ORIGDEST.qword [i] +
         p0dword + p1dword + p2dword + p3dword
   ELSE IF *Zeroing*:
      DEST.qword[i] := 0
   ELSE:
      DEST.qword [i] := ORIGDEST.qword[i]
DEST[MAX VL- 1:VL] 0
  • In dem vorstehenden Code ist die Variable VL (Vektorlänge) gemäß den Registerbreiten von 128 Bits, 256 Bits bzw. 512 Bits auf 128, 256 oder 512 gesetzt. Je nach dem Wert von VL ist die Variable KL auf 2, 4 oder 8 gesetzt. Die Variable i identifiziert das aktuelle gepackte Datenelement, das verarbeitet wird. Wenn keine Schreibmaske verwendet wird oder wenn der Wert in der Schreibmaske entsprechend dem Quadwort-Datenelement i gleich 1 ist, dann wird die Variable t auf das Quadwort-Datenelement i von Quelle 2 (SRC2) gesetzt. Alternativ dazu, wenn SRC2 ein Speicherort ist und das EVEX.b-Bit gleich 1 ist, wird die Variable t auf das Datenelement 0 von SRC2 gesetzt.
  • Wenn die Wortelemente in SRC1 und SRC2 vorzeichenbehaftet sind (wie es in dem veranschaulichten Code der Fall ist), werden sie auf Doppelwörter (32 Bits) vorzeichenerweitert. In einer anderen Ausführungsform, wenn die Wörter vorzeichenlos sind, können die Byte-Elemente auf Wörter nullerweitert werden. Für jeden Wert von i werden Doppelwortwerte p1 dword, p2dword, p3dword und p4dword durch Multiplizieren des vorzeichenerweiterten word[4*i+0] von SRC1 mit dem vorzeichenerweiterten word[0] von quadword[i] von SRC2; word[4*i+1] von SRC1 mit word[1] von quadword[i] von SRC2; word[4*i+2] von SRC1 mit word[2] von quadword[i] von SRC2 bzw. word[4*i+3] von SRC1 mit word[3] von quadword[i] von SRC2 erzeugt.
  • Der im Quadwort-Ort [i] des Zielregisters (DEST.iword[i]) gespeicherte akkumulierte Wert (falls vorhanden) wird zu der Summe von p1word, p2word, p3word und p4word addiert. Wenn der Befehl eine Sättigung anfordert, dann wird eine vorzeichenbehaftete oder vorzeichenlose Sättigung an der resultierenden Summe durchgeführt und wird das Ergebnis in dem Quadwort-Ort [i] des Zielregisters gespeichert. Wenn keine Sättigung verwendet wird, dann wird die ungesättigte Summe in dem Quadwort-Ort [i] des Zielregisters gespeichert.
  • Wenn der Schreibmaskenwert k1 [i] auf 0 gesetzt ist und Null-Maskieren verwendet wird, dann werden Nullen zu dem Quadwort an dem Ort [i] des Zielregisters geschrieben. Alternativ dazu, wenn ein Zusammenführungsmaskieren verwendet wird, dann wird der aktuelle Wert an dem Ort [i] beibehalten.
  • Somit können verschiedene Ausführungsformen eines MAC-Befehls unter anderem die Verwendung einer Schreibmaske und, wenn verwendet, ob Zusammenführungsmaskieren oder Null-Maskieren verwendet wird, einschließen. Außerdem können verschiedene Ausführungsformen vorzeichenbehaftete Werte oder vorzeichenlose Werte verwenden, die vorzeichenerweitert (wenn vorzeichenbehaftet) oder nullerweitert (wenn vorzeichenlos) werden können. Darüber hinaus kann eine Sättigung, einschließlich einer vorzeichenbehafteten Quadwort-Sättigung oder einer vorzeichenlosen Quadwort-Sättigung, verwendet werden. Andere Ausführungsformen eines MAC-Befehls verwenden keine Sättigung. Ferner kann ein MAC-Befehl, wie weiter oben angegeben, unter Verwendung von Quell- und Zielregistern verschiedener Größen, einschließlich 128-Bit-Registern (z. B. xmm-Registern), 256-Bit-Registern (z. B. ymm-Registern) und 512-Bit-Registern (z. B. zmm-Registern), arbeiten. Eine Implementierung eines Prozessors decodiert verschiedene MAC-Befehle und führt diese aus, welche jede Kombination der vorstehenden Variablen (z. B. 512-Bit-Quelle/-Ziel, Zusammenführungsmaskieren, vorzeichenlos, mit Sättigung; 128-Bit-Quelle/- Ziel, Null-Maskieren, vorzeichenbehaftet, Sättigung; Null-Maskieren, vorzeichenbehaftet, keine Sättigung usw.).
  • Eine beispielhafte Gruppe von MAC-Befehlen, die verschiedene Kombinationen von diesen Variablen einschließen, ist in 14 veranschaulicht. Diese bestimmte Gruppe von MAC-Befehlen nutzt ein EVEX-Befehlsformat, wie weiter oben unter Bezugnahme auf 1A-B und 2A-C beschrieben. In einer Implementierung ist das EVEX-Präfix unter Verwendung einer Vier-Byte-Form codiert. Die DDS-Codierung zeigt an, dass VEX.vvvv das zweite Quellregister, xmm2, ymm2 oder zmm2, in der Drei-Operanden-Befehlssyntax codiert, wobei die Inhalte des ersten Quellregisters, xmm1, ymm1 oder zmm1, durch das Ergebnis überschrieben werden. Die auf DDS folgenden Zahlen zeigen die Registergröße an und schließen 128-Bit-, 256-Bit- und 512-Bit-Register ein (d. h. xmm-, ymm- und zmm-Register, wie weiter oben beschrieben).
  • Der nächste Wert, F2, identifiziert, wie die VEX.pp-Feld-Codierungen abgebildet sind. Zum Beispiel beeinflusst der entsprechende VEX.pp-Wert das „Opcode“-Byte auf die gleiche Weise, wie ein SIMD-Präfix (66H, F2H oder F3H) das nachfolgende Opcode-Byte beeinflusst. Der OF38-Indikator bildet eine gültige Codierung des VEX.mmmmm-Felds ab, und WO zeigt an, dass VEX.W = 0. Verschiedene zusätzliche Details der EVEX- und VEX-Codierung sind weiter oben bereitgestellt.
  • 15 veranschaulicht eine beispielhafte Architektur zum Ausführen von einem oder mehreren der MAC-Befehle, was erste und zweite Quellregister, SRC2 und SRC3, 1502 bzw. 1503, und ein drittes Quellregister, das auch das Zielregister, SRC1/DEST 1501, ist, einschließt. Die veranschaulichte Architektur führt verschiedene Befehle aus, die verschiedene Registergrößen (z. B. 128b, 256b, 512b) und/oder Datenelementgrößen aufweisen können. In dem bestimmten Beispiel, das in 15 gezeigt ist, sind die Register 128 Bits, die 8 Wörter (A-H in SRC2 1502 und SRC3 1503) und zwei Quadwörter (HE und DA in SRC1/DEST 1501) speichern. Wie erwähnt, können die Quelldatenelemente vorzeichenbehaftete oder vorzeichenlose Werte sein.
  • In einer Implementierung leitet ein Eingangsmultiplexer 1504 Wortelemente zu einem Satz von parallelen Multiplizierern 1505 weiter, der Wortelemente in SRC3 1503 mit entsprechenden Wortelementen in SRC2 1502 multipliziert (z. B., wie im obigen Codebeispiel beschrieben). Die resultierenden Produkte können dann auf Doppelwörter vorzeichenerweitert oder nullerweitert und durch Addierernetzwerke 1511 addiert werden. Akkumulatoren 1520-1521 addieren die resultierenden Summen zu vorhandenen Quadwort-Ergebnissen, die in SRC1/DEST 1501 gespeichert sind, um finale Quadwort-Ergebnisse zu erzeugen. Für bestimmte Befehle sättigt die Sättigungsschaltung 1540-1541 die Quadwort-Ergebnisse (wenn erforderlich) und leitet ein Ausgangsmultiplexer 1550 die gesättigten Quadwort-Ergebnisse zu vorgegebenen Quadwort-Elementorten in SRC1/DEST 1501 weiter.
  • In einer bestimmten Implementierung führt die veranschaulichte Architektur den folgenden Befehlssatz aus:
    • VPDPWSSQ xmm1, xmm2, xmm3/m128/m64bcst
    • VPDPWSSQ ymm1, ymm2, ymm3/m256/m64bcst
    • VPDPWSSQ zmm1, zmm2, zmm3/m512/m64bcst
    • VPDPWSSQS xmm1, xmm2, xmm3/m128/m64bcst
    • VPDPWSSQS ymm1, ymm2, ymm3/m256/m64bcst
    • VPDPWSSQS zmm1, zmm2, zmm3/m512/m64bcst
  • Somit schließen sowohl die VPDPWSSQ- als auch die VPDPWSSQS-Befehle eine erste Version, die xmm-Register verwendet, eine zweite Version, die ymm-Register verwendet, und eine dritte Version, die zmm-Register verwendet, ein. Bei allen Befehlen kann die dritte Quelle (xmm3, ymm3, zmm3) auch ein 512/256/128-Bit-Speicherort oder ein von einem 64-Bit-Speicherort geladener 512/256/128-Bit-Vektor sein.
  • Der VPDPWSSQ-Befehl multipliziert die vorzeichenbehafteten Wörter des ersten Quelloperanden in SRC2 1502 mit den entsprechenden vorzeichenbehafteten Wörtern des zweiten Quelloperanden in SRC3 1503, wodurch Zwischenergebnisse erzeugt werden, die auf Doppelwortergebnisse vorzeichenerweitert sind. Die Doppelwortergebnisse werden dann durch Addierernetzwerke 1510-1511 summiert, und die temporäre Summe wird zu einem akkumulierten Quadwort-Wert von SRC1/DEST 1501 addiert. Das akkumulierte Endergebnis wird in den gleichen Quadwort-Elementort in SRC1/DEST 1501 geschrieben.
  • Der VPDPWSSQS-Befehl arbeitet in der gleichen Weise, verwendet jedoch Sättigungsschaltungen 1540-1541, um vor dem Zurückschreiben des Ergebnisses in SRC1/DEST eine Sättigung bei den Doppelwortergebnissen durchzuführen.
  • Während die weiter oben beschriebenen Ausführungsformen Wörter aus Quellregistern multiplizieren, können die zugrunde liegenden Prinzipien der Erfindung unter Verwendung beliebiger anderer Datenelementgrößen, einschließlich Bytes, Doppelwort und Quadwörter, implementiert werden. Diese Befehle werden auf die gleiche grundlegende Weise implementiert, jedoch mit Quellelementen und Zielelementen, die 2x, 4x usw. die Größe der weiter oben beschriebenen Wortbefehle sind.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 16 veranschaulicht. Das Verfahren kann im Kontext der weiter oben beschriebenen Prozessor- und Systemarchitekturen implementiert werden, ist jedoch nicht auf eine bestimmte Systemarchitektur beschränkt.
  • In 1601 wird ein Befehl abgerufen, der Felder für einen Opcode und erste und zweite Quelloperanden, die gepackte Wörter angeben, einen dritten Quelloperanden, der akkumulierte Quadwörter angibt, und einen Zieloperanden, der gepackte Quadwörter angibt, aufweist. In 1602 wird der Befehl decodiert, um einen ersten decodierten Befehl zu erzeugen (z. B. mehrere Mikrooperationen umfassend). In 1603 werden erste und zweite gepackte Wörter abgerufen und in den ersten bzw. zweiten Quellregistern gespeichert (z. B. von Speicher, einem Daten-Cache usw.). Wie erwähnt, werden die gepackten Wörter in einer Ausführungsform in gepackten 128-Bit-, 256-Bit- oder 512-Bit-Datenquell-Registern gespeichert.
  • In 1604 wird der decodierte Befehl ausgeführt, um gleichzeitig gepackte Wörter aus dem ersten Quellregister mit entsprechenden Wörtern aus dem zweiten Quellregister zu multiplizieren, um temporäre Doppelwortprodukte zu erzeugen. In einer Ausführungsform kann das Produkt jedes Paars von Wörtern nullerweitert oder vorzeichenerweitert werden, um die Wortwerte zu bestimmen (z. B. Vorzeichenerweitern für vorzeichenbehaftete Werte und Nullerweitern für vorzeichenlose Werte). Die temporären Doppelwortprodukte werden dann summiert und zu einem akkumulierten Quadwort-Wert von einem entsprechenden Quadwort-Ort in dem Quell-/Zielregister addiert. Die Quadwort-Ergebnisse können gesättigt und in entsprechende Quadwort-Orte in dem Ziel in 1605 zurückgespeichert werden.
  • BEISPIELE
  • Es folgen beispielhafte Prozessoren, Verfahren und maschinenlesbar, die dazu ausgelegt sind, Multiply-Accumulate-Befehle zu implementieren.
    • Beispiel 1. Ein Prozessor, umfassend: einen Decoder zum Decodieren von Befehlen; ein erstes Quellregister zum Speichern einer ersten Vielzahl von gepackten Wörtern; ein zweites Quellregister zum Speichern einer zweiten Vielzahl von gepackten Wörtern; ein drittes Quellregister zum Speichern einer Vielzahl von gepackten Doppelwörtern; eine Ausführungsschaltung zum Ausführen eines ersten Befehls, die Ausführungsschaltung umfassend: eine Erweiterungsschaltung zum Vorzeichenerweitern oder Nullerweitern der ersten und zweiten Vielzahl von gepackten Wörtern, um eine erste und zweite Vielzahl von Doppelwörtern entsprechend der ersten und zweiten Vielzahl von gepackten Bytes zu erzeugen; eine Multipliziererschaltung zum Multiplizieren von jedem der ersten Vielzahl von Doppelwörtern mit einem entsprechenden der zweiten Vielzahl von Doppelwörtern, um eine Vielzahl von temporären Produkten zu erzeugen; eine Addiererschaltung zum Addieren von zumindest einem ersten Satz der temporären Produkte, um eine erste temporäre Summe zu erzeugen; eine Akkumulationsschaltung zum Kombinieren der ersten temporären Summe mit einem ersten gepackten Quadwort-Wert von einem ersten Quadwort-Ort in dem dritten Quellregister, um ein erstes akkumuliertes Quadwort-Ergebnis zu erzeugen; ein Zielregister zum Speichern des ersten akkumulierten Quadwort-Ergebnisses in dem ersten Quadwort-Ort.
    • Beispiel 2. Der Prozessor von Beispiel 1, wobei das Zielregister und das dritte Quellregister das gleiche Register sind.
    • Beispiel 3. Der Prozessor von Beispiel 1, ferner umfassend: eine Sättigungsschaltung zum Sättigen des ersten akkumulierten Quadwort-Ergebnisses vor der Speicherung im Zielregister.
    • Beispiel 4. Der Prozessor von Beispiel 1, wobei die erste und zweite Vielzahl von gepackten Wörtern vorzeichenbehaftet sind und wobei die Erweiterungsschaltung die erste und zweite Vielzahl von gepackten Bytes vorzeichenerweitern soll.
    • Beispiel 5. Der Prozessor von Beispiel 1, wobei die ersten, zweiten und dritten Quellregister 128-Bit-, 256-Bit- oder 512-Bit-Register umfassen, um 16 Bytes, 32 Bytes bzw. 64 Bytes zu speichern und/oder um 4 Doppelwörter, 8 Doppelwörter bzw. 16 Doppelwörter zu speichern.
    • Beispiel 6. Der Prozessor von Beispiel 1, ferner umfassend: eine Maskierungsschaltung zum Auswerten einer Schreibmaske mit einer Vielzahl von Bits, wobei jedes Bit mit einem gepackten Datenelementort in dem Zielregister verbunden ist.
    • Beispiel 7. Der Prozessor von Beispiel 6, wobei die Maskierungsschaltung zum Bestimmen, ob das erste akkumulierte Quadwort-Ergebnis beim Erfassen eines Wert eines Schreibmasken-Bits in Verbindung mit dem ersten Quadwort-Ort in das Zielregister geschrieben werden soll.
    • Beispiel 8. Der Prozessor von Beispiel 7, wobei, wenn die Maskierungsschaltung bestimmt, das erste akkumulierte Quadwort-Ergebnis nicht zu schreiben, entweder Nullen in den ersten Quadwort-Ort geschrieben werden oder keine Aktualisierung an dem ersten Quadwort-Ort durchgeführt wird.
    • Beispiel 9. Ein Verfahren, umfassend: Decodieren eines Befehls; Ausführen des Befehls durch: Vorzeichenerweitern oder Nullerweitern einer ersten und zweiten Vielzahl von gepackten Wörtern von ersten und zweiten Quellregistern, um eine erste und zweite Vielzahl von Doppelwörtern entsprechend der ersten und zweiten Vielzahl von gepackten Bytes zu erzeugen; Multiplizieren von jedem der ersten Vielzahl von Doppelwörtern mit einem entsprechenden der zweiten Vielzahl von Doppelwörtern, um eine Vielzahl von temporären Produkten zu erzeugen; Addieren von zumindest einem ersten Satz der temporären Produkte, um eine erste temporäre Summe zu erzeugen; Akkumulieren der ersten temporären Summe mit einem ersten gepackten Quadwort-Wert von einem ersten Quadwort-Ort in einem dritten Quellregister, um ein erstes akkumuliertes Quadwort-Ergebnis zu erzeugen; Speichern des ersten akkumulierten Quadwort-Ergebnisses in dem ersten Quadwort-Ort in einem Zielregister.
    • Beispiel 10. Das Verfahren von Beispiel 9, wobei das Zielregister und das dritte Quellregister das gleiche Register sind.
    • Beispiel 11. Das Verfahren von Beispiel 9, ferner umfassend:
      • Sättigen des ersten akkumulierten Quadwort-Ergebnisses vor der Speicherung im Zielregister.
    • Beispiel 12. Das Verfahren von Beispiel 9, wobei die erste und zweite Vielzahl von gepackten Wörtern vorzeichenbehaftet sind und wobei die erste und zweite Vielzahl von gepackten Wörtern vorzeichenerweitert werden sollen.
    • Beispiel 13. Das Verfahren von Beispiel 9, wobei die ersten, zweiten und dritten Quellregister 128-Bit-, 256-Bit- oder 512-Bit-Register umfassen, um 16 Bytes, 32 Bytes bzw. 64 Bytes zu speichern und/oder um 4 Doppelwörter, 8 Doppelwörter bzw. 16 Doppelwörter zu speichern.
    • Beispiel 14. Das Verfahren von Beispiel 9, ferner umfassend:
      • Auswerten einer Schreibmaske mit einer Vielzahl von Bits, wobei jedes Bit mit einem gepackten Datenelementort in dem Zielregister verbunden ist.
    • Beispiel 15. Das Verfahren von Beispiel 14, ferner umfassend:
      • Bestimmen, ob das erste akkumulierte Quadwort-Ergebnis beim Erfassen eines Werts eines Schreibmasken-Bits in Verbindung mit dem ersten Quadwort-Ort in das Zielregister geschrieben werden soll.
    • Beispiel 16. Das Verfahren von Beispiel 15, wenn eine Bestimmung vorgenommen wird, das erste akkumulierte Quadwort-Ergebnis nicht zu schreiben, entweder Nullen in den ersten Quadwort-Ort geschrieben werden oder keine Aktualisierung an dem ersten Quadwort-Ort durchgeführt wird.
    • Beispiel 17. Ein Herstellungsartikel, auf dem Programmcode gespeichert ist, der bei Ausführung durch eine Maschine die Maschine dazu veranlasst, die folgenden Operationen durchzuführen: Decodieren eines Befehls; Ausführen des Befehls durch: Vorzeichenerweitern oder Nullerweitern einer ersten und zweiten Vielzahl von gepackten Wörtern von ersten und zweiten Quellregistern, um eine erste und zweite Vielzahl von Doppelwörtern entsprechend der ersten und zweiten Vielzahl von gepackten Bytes zu erzeugen; Multiplizieren von jedem der ersten Vielzahl von Doppelwörtern mit einem entsprechenden der zweiten Vielzahl von Doppelwörtern, um eine Vielzahl von temporären Produkten zu erzeugen; Addieren von zumindest einem ersten Satz der temporären Produkte, um eine erste temporäre Summe zu erzeugen; Akkumulieren der ersten temporären Summe mit einem ersten gepackten Quadwort-Wert von einem ersten Quadwort-Ort in einem dritten Quellregister, um ein erstes akkumuliertes Quadwort-Ergebnis zu erzeugen; Speichern des ersten akkumulierten Quadwort-Ergebnisses in dem ersten Quadwort-Ort in einem Zielregister.
    • Beispiel 18. Der Herstellungsartikel von Beispiel 17, wobei das Zielregister und das dritte Quellregister das gleiche Register sind.
    • Beispiel 19. Der Herstellungsartikel von Beispiel 17, ferner umfassend Programmcode, der die Maschine dazu veranlasst, die folgende Operation durchzuführen:
      • Sättigen des ersten akkumulierten Quadwort-Ergebnisses vor der Speicherung im Zielregister.
    • Beispiel 20. Der Herstellungsartikel von Beispiel 17, wobei die erste und zweite Vielzahl von gepackten Wörtern vorzeichenbehaftet sind und wobei die erste und zweite Vielzahl von gepackten Wörtern vorzeichenerweitert werden sollen.
    • Beispiel 21. Der Herstellungsartikel von Beispiel 17, wobei die ersten, zweiten und dritten Quellregister 128-Bit-, 256-Bit- oder 512-Bit-Register umfassen, um 16 Bytes, 32 Bytes bzw. 64 Bytes zu speichern und/oder um 4 Doppelwörter, 8 Doppelwörter bzw. 16 Doppelwörter zu speichern.
    • Beispiel 22. Der Herstellungsartikel von Beispiel 17, ferner umfassend Programmcode, der die Maschine dazu veranlasst, die folgende Operation durchzuführen:
      • Auswerten einer Schreibmaske mit einer Vielzahl von Bits, wobei jedes Bit mit einem gepackten Datenelementort in dem Zielregister verbunden ist.
    • Beispiel 23. Der Herstellungsartikel von Beispiel 22, ferner umfassend Programmcode, der die Maschine dazu veranlasst, die folgende Operation durchzuführen:
      • Bestimmen, ob das erste akkumulierte Quadwort-Ergebnis beim Erfassen eines Werts eines Schreibmasken-Bits in Verbindung mit dem ersten Quadwort-Ort in das Zielregister geschrieben werden soll.
    • Beispiel 24. Der Herstellungsartikel von Beispiel 23, wenn eine Bestimmung vorgenommen wird, das erste akkumulierte Quadwort-Ergebnis nicht zu schreiben, entweder Nullen in den ersten Quadwort-Ort geschrieben werden oder keine Aktualisierung an dem ersten Quadwort-Ort durchgeführt wird.
  • In der vorstehenden Spezifikation wurden die Ausführungsformen der Erfindung unter Bezugnahme auf spezifische Ausführungsbeispiele davon beschrieben. Es ist jedoch offensichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne vom umfassenderen Wesen und Umfang der Erfindung abzuweichen, wie sie in den beigefügten Ansprüchen dargelegt werden. Die Beschreibung und die Zeichnungen sind dementsprechend in einem veranschaulichenden und nicht einschränkenden Sinne zu betrachten.
  • Ausführungsformen der Erfindung können verschiedene Schritte einschließen, die weiter oben beschrieben wurden. Die Schritte können in maschinenausführbaren Befehlen ausgeführt sein, die verwendet werden können, um einen Universal- oder Spezialprozessor zum Durchführen der Schritte zu veranlassen. Alternativ dazu können diese Schritte durch spezifische Hardwarekomponenten, die festverdrahtete Logik zum Durchführen der Schritte enthalten, oder durch eine beliebige Kombination programmierter Computerkomponenten und angepasster Hardwarekomponenten durchgeführt werden.
  • Wie hierin beschrieben, können sich Befehle auf spezifische Konfigurationen von Hardware, wie anwendungsspezifische integrierte Schaltungen (Application Specific Integrated Circuits, ASICs), die dazu konfiguriert sind, bestimmte Operationen durchzuführen, oder eine vorher festgelegte Funktionalität aufweisen, oder Softwarebefehle, die in einem Speicher gespeichert sind, der in einem nichtflüchtigen computerlesbaren Medium ausgeführt ist, beziehen. Somit können die in den Figuren gezeigten Techniken unter Verwendung von Code und Daten implementiert werden, die auf einer oder mehreren elektronischen Vorrichtungen (z. B. einer Endstation, einem Netzwerkelement usw.) gespeichert und ausgeführt werden. Diese elektronischen Vorrichtungen speichern und kommunizieren (intern und/oder mit anderen elektronischen Vorrichtungen über ein Netzwerk) Code und Daten unter Verwendung von computermaschinenlesbaren Medien, wie zum Beispiel nichtflüchtigen computermaschinenlesbaren Speichermedien (z. B. Magnetplatten; optische Platten; Speicher mit wahlfreiem Zugriff; schreibgeschützter Speicher; Flash-Speicher-Einrichtungen; Phasenwechselspeicher) und flüchtigen computermaschinenlesbaren Kommunikationsmedien (z. B. elektrische, optische, akustische oder eine andere Form propagierter Signale - wie zum Beispiel Trägerwellen, Infrarotsignale, digitale Signale usw.). Außerdem enthalten solche elektronischen Vorrichtungen üblicherweise einen Satz von einem oder mehreren Prozessoren, die an eine oder mehrere andere Komponenten, wie zum Beispiel eine oder mehrere Speichereinrichtungen (nichtflüchtige maschinenlesbare Speichermedien), Benutzereingabe/-ausgabevorrichtungen (z. B. eine Tastatur, einen Touchscreen und/oder eine Anzeige), gekoppelt sind, und Netzwerkverbindungen. Das Koppeln des Satzes von Prozessoren und anderen Komponenten erfolgt üblicherweise durch einen oder mehrere Busse und Brücken (auch als Bus-Controller bezeichnet). Die Speichervorrichtung bzw. die Signale, die den Netzwerkverkehr tragen, stellen ein oder mehrere maschinenlesbare Speichermedien und maschinenlesbare Kommunikationsmedien dar. Somit speichert die Speichervorrichtung einer gegebenen elektronischen Vorrichtung typischerweise Code und/oder Daten zur Ausführung auf dem Satz von einem oder mehreren Prozessoren dieser elektronischen Vorrichtung. Natürlich können ein oder mehrere Teile einer Ausführungsform der Erfindung unter Verwendung unterschiedlicher Kombinationen von Software, Firmware und/oder Hardware implementiert sein. Über diese gesamte detaillierte Beschreibung hinweg wurden zur Erläuterung zahlreiche spezifische Details dargelegt, um ein tiefes Verständnis der vorliegenden Erfindung bereitzustellen. Es ist jedoch für den Fachmann ersichtlich, dass die Erfindung ohne einige dieser spezifischen Details ausgeführt werden kann. In bestimmten Fällen wurden hinlänglich bekannte Strukturen und Funktionen nicht in ausführlichem Detail beschrieben, um zu verhindern, dass der Gegenstand der vorliegenden Erfindung unverständlich wird. Entsprechend sind der Umfang und das Wesen der Erfindung mittels der nachfolgenden Ansprüche zu beurteilen.
  • Claims (25)

    1. Beansprucht wird:
    2. Prozessor, umfassend: einen Decoder zum Decodieren von Befehlen; ein erstes Quellregister zum Speichern einer ersten Vielzahl von gepackten Wörtern; ein zweites Quellregister zum Speichern einer zweiten Vielzahl von gepackten Wörtern; ein drittes Quellregister zum Speichern einer Vielzahl von gepackten Quadwörtern; eine Ausführungsschaltung zum Ausführen eines ersten Befehls, die Ausführungsschaltung umfassend: eine Erweiterungsschaltung zum Vorzeichenerweitern oder Nullerweitern der ersten und zweiten Vielzahl von gepackten Wörtern, um eine erste und zweite Vielzahl von Doppelwörtern entsprechend der ersten und zweiten Vielzahl von gepackten Wörtern zu erzeugen; eine Multipliziererschaltung zum Multiplizieren von jedem der ersten Vielzahl von Doppelwörtern mit einem entsprechenden der zweiten Vielzahl von Doppelwörtern, um eine Vielzahl von temporären Produkten zu erzeugen; eine Addiererschaltung zum Addieren von zumindest einem ersten Satz der temporären Produkte, um eine erste temporäre Summe zu erzeugen; eine Akkumulationsschaltung zum Kombinieren der ersten temporären Summe mit einem ersten gepackten Quadwort-Wert von einem ersten Quadwort-Ort in dem dritten Quellregister, um ein erstes akkumuliertes Quadwort-Ergebnis zu erzeugen; ein Zielregister zum Speichern des ersten akkumulierten Quadwort-Ergebnisses in dem ersten Quadwort-Ort.
    3. Prozessor nach Anspruch 1, wobei das Zielregister und das dritte Quellregister das gleiche Register sind.
    4. Prozessor nach Anspruch 1, ferner umfassend: eine Sättigungsschaltung zum Sättigen des ersten akkumulierten Quadwort-Ergebnisses vor der Speicherung im Zielregister.
    5. Prozessor nach Anspruch 1, wobei die erste und zweite Vielzahl von gepackten Wörtern vorzeichenbehaftet sind und wobei die Erweiterungsschaltung die erste und zweite Vielzahl von gepackten Wörtern vorzeichenerweitern soll.
    6. Prozessor nach Anspruch 1, wobei die ersten, zweiten und dritten Quellregister 128-Bit-, 256-Bit- oder 512-Bit-Register umfassen, um 16 Wörter, 32 Wörter bzw. 64 Wörter zu speichern und/oder um 4 Quadwörter, 8 Quadwörter bzw. 16 Quadwörter zu speichern.
    7. Prozessor nach Anspruch 1, ferner umfassend: eine Maskierungsschaltung zum Auswerten einer Schreibmaske mit einer Vielzahl von Bits, wobei jedes Bit mit einem gepackten Datenelementort in dem Zielregister verbunden ist.
    8. Prozessor nach Anspruch 6, wobei die Maskierungsschaltung zum Bestimmen, ob das erste akkumulierte Quadwort-Ergebnis beim Erfassen eines Werts eines Schreibmasken-Bits in Verbindung mit dem ersten Quadwort-Ort in das Zielregister geschrieben werden soll.
    9. Prozessor nach Anspruch 7, wobei, wenn die Maskierungsschaltung bestimmt, das erste akkumulierte Quadwort-Ergebnis nicht zu schreiben, entweder Nullen in den ersten Quadwort-Ort geschrieben werden oder keine Aktualisierung an dem ersten Quadwort-Ort durchgeführt wird.
    10. Verfahren, umfassend: Decodieren eines Befehls; Ausführen des Befehls durch: Vorzeichenerweitern oder Nullerweitern einer ersten und zweiten Vielzahl von gepackten Wörtern von ersten und zweiten Quellregistern, um eine erste und zweite Vielzahl von Doppelwörtern entsprechend der ersten und zweiten Vielzahl von gepackten Wörtern zu erzeugen; Multiplizieren von jedem der ersten Vielzahl von Doppelwörtern mit einem entsprechenden der zweiten Vielzahl von Doppelwörtern, um eine Vielzahl von temporären Produkten zu erzeugen; Addieren von zumindest einem ersten Satz der temporären Produkte, um eine erste temporäre Summe zu erzeugen; Akkumulieren der ersten temporären Summe mit einem ersten gepackten Quadwort-Wert von einem ersten Quadwort-Ort in einem dritten Quellregister, um ein erstes akkumuliertes Quadwort-Ergebnis zu erzeugen; Speichern des ersten akkumulierten Quadwort-Ergebnisses in dem ersten Quadwort-Ort in einem Zielregister.
    11. Verfahren nach Anspruch 9, wobei das Zielregister und das dritte Quellregister das gleiche Register sind.
    12. Verfahren nach Anspruch 9, ferner umfassend: Sättigen des ersten akkumulierten Quadwort-Ergebnisses vor der Speicherung im Zielregister.
    13. Verfahren nach Anspruch 9, wobei die erste und zweite Vielzahl von gepackten Wörtern vorzeichenbehaftet sind und wobei die erste und zweite Vielzahl von gepackten Wörtern vorzeichenerweitert werden sollen.
    14. Verfahren nach Anspruch 9, wobei die ersten, zweiten und dritten Quellregister 128-Bit-, 256-Bit- oder 512-Bit-Register umfassen, um 16 Wörter, 32 Wörter bzw. 64 Wörter zu speichern und/oder um 4 Quadwörter, 8 Quadwörter bzw. 16 Quadwörter zu speichern.
    15. Verfahren nach Anspruch 9, ferner umfassend: Auswerten einer Schreibmaske mit einer Vielzahl von Bits, wobei jedes Bit mit einem gepackten Datenelementort in dem Zielregister verbunden ist.
    16. Verfahren nach Anspruch 14, ferner umfassend: Bestimmen, ob das erste akkumulierte Quadwort-Ergebnis beim Erfassen eines Werts eines Schreibmasken-Bits in Verbindung mit dem ersten Quadwort-Ort in das Zielregister geschrieben werden soll.
    17. Verfahren nach Anspruch 15, wenn eine Bestimmung vorgenommen wird, das erste akkumulierte Quadwort-Ergebnis nicht zu schreiben, entweder Nullen in den ersten Quadwort-Ort geschrieben werden oder keine Aktualisierung an dem ersten Quadwort-Ort durchgeführt wird.
    18. Herstellungsartikel, auf dem Programmcode gespeichert ist, der bei Ausführung durch eine Maschine die Maschine dazu veranlasst, die folgenden Operationen durchzuführen: Decodieren eines Befehls; Ausführen des Befehls durch: Vorzeichenerweitern oder Nullerweitern einer ersten und zweiten Vielzahl von gepackten Wörtern von ersten und zweiten Quellregistern, um eine erste und zweite Vielzahl von Doppelwörtern entsprechend der ersten und zweiten Vielzahl von gepackten Wörtern zu erzeugen; Multiplizieren von jedem der ersten Vielzahl von Doppelwörtern mit einem entsprechenden der zweiten Vielzahl von Doppelwörtern, um eine Vielzahl von temporären Produkten zu erzeugen; Addieren von zumindest einem ersten Satz der temporären Produkte, um eine erste temporäre Summe zu erzeugen; Akkumulieren der ersten temporären Summe mit einem ersten gepackten Quadwort-Wert von einem ersten Quadwort-Ort in einem dritten Quellregister, um ein erstes akkumuliertes Quadwort-Ergebnis zu erzeugen; Speichern des ersten akkumulierten Quadwort-Ergebnisses in dem ersten Quadwort-Ort in einem Zielregister.
    19. Herstellungsartikel nach Anspruch 17, wobei das Zielregister und das dritte Quellregister das gleiche Register sind.
    20. Herstellungsartikel nach Anspruch 17, ferner umfassend Programmcode, der die Maschine dazu veranlasst, die folgende Operation durchzuführen: Sättigen des ersten akkumulierten Quadwort-Ergebnisses vor der Speicherung im Zielregister.
    21. Herstellungsartikel nach Anspruch 17, wobei die erste und zweite Vielzahl von gepackten Wörtern vorzeichenbehaftet sind und wobei die erste und zweite Vielzahl von gepackten Wörtern vorzeichenerweitert werden sollen.
    22. Herstellungsartikel nach Anspruch 17, wobei die ersten, zweiten und dritten Quellregister 128-Bit-, 256-Bit- oder 512-Bit-Register umfassen, um 16 Wörter, 32 Wörter bzw. 64 Wörter zu speichern und/oder um 4 Quadwörter, 8 Quadwörter bzw. 16 Quadwörter zu speichern.
    23. Herstellungsartikel nach Anspruch 17, ferner umfassend Programmcode, der die Maschine dazu veranlasst, die folgende Operation durchzuführen: Auswerten einer Schreibmaske mit einer Vielzahl von Bits, wobei jedes Bit mit einem gepackten Datenelementort in dem Zielregister verbunden ist.
    24. Herstellungsartikel nach Anspruch 22, ferner umfassend Programmcode, der die Maschine dazu veranlasst, die folgende Operation durchzuführen: Bestimmen, ob das erste akkumulierte Quadwort-Ergebnis beim Erfassen eines Werts eines Schreibmasken-Bits in Verbindung mit dem ersten Quadwort-Ort in das Zielregister geschrieben werden soll.
    25. Herstellungsartikel nach Anspruch 23, wenn eine Bestimmung vorgenommen wird, das erste akkumulierte Quadwort-Ergebnis nicht zu schreiben, entweder Nullen in den ersten Quadwort-Ort geschrieben werden oder keine Aktualisierung an dem ersten Quadwort-Ort durchgeführt wird.
    DE102018131842.1A 2018-01-24 2018-12-12 Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern Pending DE102018131842A1 (de)

    Applications Claiming Priority (2)

    Application Number Priority Date Filing Date Title
    US15/879,420 2018-01-24
    US15/879,420 US11409525B2 (en) 2018-01-24 2018-01-24 Apparatus and method for vector multiply and accumulate of packed words

    Publications (1)

    Publication Number Publication Date
    DE102018131842A1 true DE102018131842A1 (de) 2019-07-25

    Family

    ID=67145151

    Family Applications (1)

    Application Number Title Priority Date Filing Date
    DE102018131842.1A Pending DE102018131842A1 (de) 2018-01-24 2018-12-12 Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern

    Country Status (3)

    Country Link
    US (1) US11409525B2 (de)
    CN (1) CN110069282A (de)
    DE (1) DE102018131842A1 (de)

    Families Citing this family (5)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    CN116009814A (zh) * 2016-10-20 2023-04-25 英特尔公司 用于经融合的乘加的系统、装置和方法
    US11294679B2 (en) * 2017-06-30 2022-04-05 Intel Corporation Apparatus and method for multiplication and accumulation of complex values
    WO2019005115A1 (en) 2017-06-30 2019-01-03 Intel Corporation APPARATUS AND METHOD FOR MULTIPLICATION AND CUMULATION OF COMPLEX VALUES
    US11442726B1 (en) 2021-02-26 2022-09-13 International Business Machines Corporation Vector pack and unpack instructions
    US20230004387A1 (en) * 2021-06-26 2023-01-05 Intel Corporation Apparatus and method for vector packed multiply of signed and unsigned words

    Family Cites Families (11)

    * Cited by examiner, † Cited by third party
    Publication number Priority date Publication date Assignee Title
    US5511017A (en) * 1994-06-01 1996-04-23 Exponential Technology, Inc. Reduced-modulus address generation using sign-extension and correction
    US7107305B2 (en) * 2001-10-05 2006-09-12 Intel Corporation Multiply-accumulate (MAC) unit for single-instruction/multiple-data (SIMD) instructions
    US7676647B2 (en) * 2006-08-18 2010-03-09 Qualcomm Incorporated System and method of processing data using scalar/vector instructions
    US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
    US8631224B2 (en) * 2007-09-13 2014-01-14 Freescale Semiconductor, Inc. SIMD dot product operations with overlapped operands
    JP2009075676A (ja) * 2007-09-18 2009-04-09 Nec Electronics Corp マイクロプロセッサ
    JP2011090592A (ja) * 2009-10-26 2011-05-06 Sony Corp 情報処理装置とその命令デコーダ
    US8855446B2 (en) * 2012-04-19 2014-10-07 Qualcomm Incorporated Accelerated video compression multi-tap filter and bilinear interpolator
    US9384168B2 (en) * 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
    US10120649B2 (en) * 2016-07-29 2018-11-06 Microunity Systems Engineering, Inc. Processor and method for outer product accumulate operations
    CN116009814A (zh) 2016-10-20 2023-04-25 英特尔公司 用于经融合的乘加的系统、装置和方法

    Also Published As

    Publication number Publication date
    US20190227797A1 (en) 2019-07-25
    CN110069282A (zh) 2019-07-30
    US11409525B2 (en) 2022-08-09

    Similar Documents

    Publication Publication Date Title
    DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
    DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
    DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
    DE102018005105A1 (de) Befehle für entfernte atomare operationen
    DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
    DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
    DE112012007119T5 (de) Threadmigration-Unterstützung für Kerne unterschiedlicher Architektur
    DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern
    DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
    DE102018125232A1 (de) Einrichtung und Verfahren für komplexe Multiplikation und Akkumulation
    DE102013021221A1 (de) Befehle und Logik zur Vektorisierung von bedingten Schleifen
    DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
    DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
    DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
    DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
    DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
    DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
    DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
    DE112013003741T5 (de) Systeme, Vorrichtungen und Verfahren zum Durchführen einer Konfliktdetektion unf einer Übertragung von Inhalten eines Registers an Datenelementpositionen eines anderen Registers
    DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
    DE102018005859A1 (de) Einrichtung und Verfahren zur Multiplikation und Akkumulation von komplexen und echten gepackten Datenelementen
    DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
    DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
    DE102014003659A1 (de) Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters
    DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge

    Legal Events

    Date Code Title Description
    R012 Request for examination validly filed