DE102018129263A1 - Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes - Google Patents

Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes Download PDF

Info

Publication number
DE102018129263A1
DE102018129263A1 DE102018129263.5A DE102018129263A DE102018129263A1 DE 102018129263 A1 DE102018129263 A1 DE 102018129263A1 DE 102018129263 A DE102018129263 A DE 102018129263A DE 102018129263 A1 DE102018129263 A1 DE 102018129263A1
Authority
DE
Germany
Prior art keywords
register
packed
double word
sums
temporary
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
DE102018129263.5A
Other languages
English (en)
Inventor
Elmoustapha Ould-Ahmed-Vall
Robert Valentine
Mark Charney
Jesus Corbal
Venkateswara Madduri
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102018129263A1 publication Critical patent/DE102018129263A1/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
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator

Abstract

Eine Vorrichtung und ein Verfahren zum Durchführen von Multiplikation, Summierung, Negation, Vorzeichenerweiterung und Akkumulation mit gepackten Bytes. Beispielsweise umfasst eine Ausführungsform eines Prozessors das Folgende: einen Decodierer zum Decodieren eines Befehls, um einen decodierten Befehl zu generieren, wobei der Befehl einen Opcode und mehrere Operanden beinhaltet, die mehrere gepackte Datenquellregister und ein gepacktes Datenzielregister identifizieren; ein erstes Quellregister zum Speichern einer ersten Vielzahl von gepackten vorzeichenbehafteten Bytes; ein zweites Quellregister zum Speichern einer zweiten Vielzahl von gepackten vorzeichenbehafteten Bytes; Ausführungsschaltungsanordnung zum Ausführen des decodierten Befehls, wobei die Ausführungsschaltungsanordnung Folgendes umfasst: eine Multipliziererschaltungsanordnung zum Multiplizieren jedes gepackten vorzeichenbehafteten Bytes aus dem ersten Quellregister mit einem entsprechenden gepackten vorzeichenbehafteten Byte aus dem zweiten Quellregister, um mehrere temporäre Produkte zu generieren, eine Addiererschaltungsanordnung zum Addieren mehrerer Sätze der temporären Produkte, um mehrere temporäre Summen zu generieren; eine Negations- und Erweiterungsschaltungsanordnung zum Negieren und Erweitern von jeder der temporären Summen zu Doppelwortsummen; und eine Akkumulationsschaltungsanordnung zum Addieren von jeder der Doppelwortsummen zu einem Doppelwort aus einem dritten Quellregister, um endgültige Doppelwortergebnisse zu generieren; und ein gepacktes Datenzielregister zum Speichern der endgültigen Doppelwortergebnisse an spezifizierten Datenelementorten.

Description

  • HINTERGRUND
  • Gebiet der Erfindung
  • Die Ausführungsformen der Erfindung betreffen im Allgemeinen das Gebiet der Computerprozessoren. Genauer betreffen die Ausführungsformen eine Vorrichtung und ein Verfahren zum Multiplizieren, Summieren und Akkumulieren von Sätzen von gepackten Bytes.
  • Beschreibung des Standes der Technik
  • Ein Befehlssatz oder eine Befehlssatzarchitektur (Instruction Set Architecture, ISA) ist der Teil der Computerarchitektur, der sich auf das Programmieren bezieht, einschließlich der nativen Datentypen, Befehle, Registerarchitektur, Adressierungsmodi, Speicherarchitektur, Unterbrechungs- und Ausnahmebehandlung und externer 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 verwendet wird, um den Befehlssatz zu implementieren. Prozessoren mit unterschiedlichen Mikroarchitekturen können einen gemeinsamen Befehlssatz gemeinsam nutzen. Zum Beispiel implementieren Intel® Pentium 4 Prozessoren, Intel® Core™ Prozessoren und Prozessoren von Advanced Micro Devices, Inc., Sunnyvale, CA, nahezu identische Versionen des x86-Befehlssatzes (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt worden sind), weisen jedoch unterschiedliche 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).
  • Multiplizieren-Akkumulieren ist eine übliche digitale Signalverarbeitungsoperation, bei der das Produkt von zwei Zahlen berechnet und zu einem akkumulierten Wert addiert wird. Vorhandene SIMD-Mikroarchitekturen (Single Instruction Multiple Data; ein Befehl, mehrere Daten) implementieren Multiplizieren-Akkumulieren-Operationen durch Ausführen einer Befehlssequenz. Ein Multiplizieren-Akkumulieren kann zum Beispiel mit einem Multiplizierbefehl durchgeführt werden, gefolgt von einer 4-Wege-Addition und dann einer Akkumulation mit den Ziel-Quadwort-Daten, um zwei gesättigte 64-Bit-Ergebnisse zu generieren.
  • Figurenliste
  • Ein besseres Verständnis der vorliegenden Erfindung kann anhand der folgenden ausführlichen Beschreibungen in Verbindung mit den folgenden Zeichnungen gewonnen werden, darin:
    • 1A und 1B sind Blockschaltbilder, die ein generisches vektorgerechtes Befehlsformat und dessen Befehls-Templates 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 der 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 Software-Befehlskonverters 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 mehrere gepackten Datenelementen, die reelle und komplexe Werte gemäß einer Ausführungsform enthalten;
    • 14 veranschaulichen Ausführungsformen einer gepackten Datenverarbeitungs-Architektur; und
    • 15 veranschaulicht ein Verfahren gemäß einer Ausführungsform der Erfindung.
  • AUSFÜHRLICHE 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 allerdings für Fachleute auf dem Gebiet offensichtlich, dass die Ausführungsformen der Erfindung ohne einige dieser spezifischen Details umgesetzt werden können. In anderen Fällen werden allgemein bekannte Strukturen und Einrichtungen in Blockdiagrammform dargestellt, um zu vermeiden, dass die zugrundeliegenden Prinzipien der Ausführungsformen der Erfindung unverständlich werden.
  • BEISPIELHAFTE PROZESSORARCHITEKTUREN, BEFEHLSFORMATE UND DATENTYPEN
  • Ein Befehlssatz enthält eines oder mehrere Befehlsformate. 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 Befehls-Templates (oder -Subformaten) weiter aufgeteilt. Zum Beispiel können die Befehls-Templates eines gegebenen Befehlsformats so definiert sein, dass sie unterschiedliche Teilsätze der Felder des Befehlsformats aufweisen (die enthaltenen Felder sind üblicherweise in der gleichen Reihenfolge, aber wenigstens einige weisen andere Bit-Positionen auf, weil weniger Felder enthalten sind), und/oder so definiert sein, dass ein gegebenes Feld anders interpretiert wird. Somit wird jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats ausgedrückt (und, wenn definiert, in einem gegebenen der Befehls-Templates dieses Befehlsformats) und enthält Felder zum Spezifizieren der Operation und der Operanden. Zum Beispiel weist ein beispielhafter ADD-Befehl einen spezifischen Opcode und ein Befehlsformat auf, das ein Opcode-Feld enthält, um diese Opcode- und Operandenfelder zum Auswählen von Operanden (Quelle1/Ziel und Quelle2) zu spezifizieren; und ein Vorhandensein dieses ADD-Befehls in einem Befehlsstrom wird spezifische Inhalte in den Operandenfeldern aufweisen, die spezifische Operanden auswählen.
  • Ausführungsformen der hierin beschriebenen Befehl(e) können in unterschiedlichen Formaten ausgeführt werden. Zusätzlich werden beispielhafte Systeme, Architekturen und Pipelines nachfolgend ausführlich 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). Obwohl Ausführungsformen beschrieben werden, bei denen sowohl Vektor- als auch skalare Operationen durch das vektorgerechte Befehlsformat unterstützt werden, verwenden alternative Ausführungsformen nur Vektoroperationen des vektorgerechten Befehlsformats.
  • Die 1A - 1B sind Blockdiagramme, die ein generisches vektorgerechtes Befehlsformat und Befehls-Templates davon gemäß Ausführungsformen der Erfindung veranschaulichen. Die 1A ist ein Blockdiagramm, das ein generisches vektorgerechtes Befehlsformat und Klasse-A-Befehls-Templates davon gemäß Ausführungsformen der Erfindung veranschaulicht; während die 1B ein Blockdiagramm ist, das das generische vektorgerechte Befehlsformat und Klasse-B-Befehls-Templates davon gemäß Ausführungsformen der Erfindung veranschaulicht. Insbesondere ein generisches vektorgerechtes Befehlsformat 100, für das Klasse-A- und Klasse-B-Befehls-Templates definiert sind, die beide Befehls-Templates 105 ohne Speicherzugriff und Befehls-Templates 120 mit Speicherzugriff umfassen. Der Begriff „generisch“ im Kontext des vektorgerechten Befehlsformats bezieht sich darauf, dass das Befehlsformat an keinen 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 Datenelementebreiten (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 Datenelementebreiten (oder - größen) von 16 Bit (2 Byte) oder 8 Bit (1 Byte); eine 32-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementebreiten (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 Datenelementebreiten (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 unterstützen (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder anderen Datenelementebreiten (z. B. Datenelementebreiten von 128 Bit (16 Byte)).
  • Die Klasse-A-Befehls-Templates in der 1A enthalten Folgendes: 1) innerhalb der Befehls-Templates 105 ohne Speicherzugriff ist ein Befehls-Template für eine Operation 110 vom vollen Rundungssteuertyp ohne Speicherzugriff und ein Befehls-Template für eine Operation 115 vom Datentransformationstyp ohne Speicherzugriff gezeigt; und 2) innerhalb der Befehls-Templates 120 mit Speicherzugriff ist ein temporales Befehls-Template mit Speicherzugriff 125 und ein nicht temporales Befehls-Template mit Speicherzugriff 130 gezeigt. Die Klasse-B-Befehls-Templates in der 1B enthalten Folgendes: 1) innerhalb der Befehls-Templates 105 ohne Speicherzugriff ist ein Befehls-Template 112 für eine Schreibmaskensteuerung-Teilrundungssteueroperation ohne Speicherzugriff und ein Befehls-Template 117 für eine Schreibmaskensteuerung-VSIZE-Operation mit Speicherzugriff gezeigt; und 2) innerhalb der Befehls-Templates 120 mit Speicherzugriff ist ein Speicherzugriffs-Schreibmaskensteuerungs-Befehls-Template 127 gezeigt.
  • Das generische vektorgerechte Befehlsformat 100 enthält die unten aufgeführten folgenden Felder in der in den 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. Von daher 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 - dessen Inhalt unterscheidet unterschiedliche Basisoperationen.
  • Registerindexfeld 144 - sein Inhalt spezifiziert 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 im generischen Vektorbefehlsformat, die Speicherzugriff spezifizieren, von denen, die dies nicht tun; das heißt, es unterscheidet zwischen Befehls-Templates 105 ohne Speicherzugriff und Befehls-Templates 120 mit Speicherzugriff. 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.
  • Ergänzungsoperationsfeld 150 - sein Inhalt unterscheidet, welche von einer Vielzahl von unterschiedlichen Operationen zusätzlich zu der Basisoperation durchgeführt werden soll. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Erfindung wird dieses Feld in ein Klassenfeld 168, ein Alpha-Feld 152 und ein Beta-Feld 154 unterteilt. Das Ergänzungsoperationsfeld 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 Indexfeldes 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 Verschiebungsfeldes 162A direkt über dem Verschiebungsfaktorfeld 162B anzeigt, dass der eine oder der andere verwendet wird) - sein Inhalt wird als Teil der Adressgenerierung verwendet; er spezifiziert einen Verschiebungsfaktor, der durch die Größe eines Speicherzugriffs (N) skaliert werden soll - wobei N die Anzahl von Byte im Speicherzugriff ist (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis + skalierte Verschiebung verwendet). Redundante niederwertige Bits werden ignoriert, und somit wird der Inhalt des Verschiebungsfaktorfeldes 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 Prozessor-Hardware zur Laufzeit auf Basis des Feldes 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 Befehls-Templates 105 ohne Speicherzugriff verwendet werden und/oder andere Ausführungsformen nur eine oder keine der beiden implementieren.
  • Datenelementebreitenfeld 164 - sein Inhalt unterscheidet, welche einer Reihe von Datenelementebreiten 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 Datenelementebreite unterstützt wird und/oder Datenelementebreiten unter Verwendung einiger Aspekt der Opcodes unterstützt werden.
  • Schreibmaskenfeld 170 - sein Inhalt steuert für jede Datenelementeposition einzeln, ob diese Datenelementeposition in dem Zielvektoroperand das Ergebnis der Basisoperation und der Ergänzungsoperation widerspiegelt. Klasse-A-Befehls-Templates unterstützen Zusammenführen-Schreibmaskieren, während Klasse-B-Befehls-Templates sowohl Zusammenführen- als auch Nullsetzen-Schreibmaskieren unterstützen. Beim Zusammenführen ermöglichen Vektormasken, dass irgendein Satz von Elementen im Ziel vor Aktualisierungen während der Ausführung irgendeiner Operation (spezifiziert durch die Basisoperation und die Ergänzungsoperation) 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 irgendein Satz von Elementen im Ziel während der Ausführung irgendeiner Operation (spezifiziert durch die Basisoperation und die Ergänzungsoperation) auf Null gesetzt wird; in einer Ausführungsform wird ein Element des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen Wert von 0 hat. Ein Teilsatz dieser Funktionalität ist die Fähigkeit, die Vektorlänge der durchgeführten Operation zu steuern (das heißt, die Spanne modifizierter Elemente, vom ersten zum letzten); es ist jedoch nicht erforderlich, dass die modifizierten Elemente aufeinanderfolgend sind. Somit ermöglicht 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 Schreibmaskenfeldes 170 eines aus einer Reihe von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält (und der Inhalt des Schreibmaskenfeldes 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 Maskenschreibfeldes 170 das durchzuführende Maskieren direkt spezifiziert.
  • Immediate-Feld 172 - sein Inhalt gestattet die Spezifikation eines Immediate. Dieses Feld ist optional in dem Sinn, dass es in einer Implementierung des generischen vektorgerechten Formats, das kein Immediate unterstützt, nicht vorhanden ist, und dass es nicht in Befehlen vorhanden ist, die kein Immediate verwenden.
  • Klassenfeld 168 - sein Inhalt unterscheidet zwischen unterschiedlichen Klassen von Befehlen. Unter Bezugnahme auf die 1A - B wählen die Inhalte dieser Felder zwischen Klasse-A- und Klasse-B-Befehlen aus. In den 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 den 1A-B).
  • Befehls-Templates der Klasse A
  • Im Falle der Befehls-Templates der Klasse A ohne Speicherzugriff 105 wird das Alpha-Feld 152 als ein RS-Feld 152A interpretiert, dessen Inhalt unterscheidet, welche der unterschiedlichen Ergänzungsoperationstypen durchgeführt werden sollen (Runden 152A.1 und Datentransformation 152A.2 sind z. B. jeweils für die Befehls-Templates für Operation 110 vom Rundungstyp ohne Speicherzugriff bzw. die Operation 115 vom Datentransformationstyp ohne Speicherzugriff spezifiziert), während das Beta-Feld 154 unterscheidet, welche der Operationen des angegebenen Typs durchzuführen sind. In den Befehls-Templates ohne Speicherzugriff 105 sind das Skalierungsfeld 160, das Verschiebungsfeld 162A und das Verschiebungsskalierungsfeld 162B nicht vorhanden.
  • Befehls-Templates ohne Speicherzugriff - Operation vom vollen Rundungssteuertyp
  • Im Befehls-Template für die Operation 110 vom vollen Rundungssteuertyp ohne Speicherzugriff wird das Beta-Feld 154 als Rundungssteuerfeld 154A interpretiert, dessen Inhalt(e) statisches Runden 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 Melden von Ausnahmeereignissen deaktiviert werden soll oder nicht; wenn der Inhalt des SAE-Felds 156 anzeigt, dass Unterdrückung aktiviert ist, meldet ein gegebener Befehl keine Art von Gleitkommaausnahme-Kennzeichen und zeigt keinen Gleitkommaausnahme-Handler an.
  • Rundungsoperationssteuerfeld 158 - sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen durchzuführen ist (z. B. Aufrunden, Abrunden, Runden Richtung null und Runden zur nächstgelegenen Rundungszahl). Somit ermöglicht das Rundungsoperationssteuerfeld 158 das Ändern des Rundungsmodus für jeden Befehl einzeln. In einer Ausführungsform der Erfindung, wobei ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi enthält, überschreibt der Inhalt des Rundungsoperationssteuerfeldes 150 diesen Registerwert.
  • Befehls-Templates ohne Speicherzugriff - Operation des Typs Datentransformation
  • Im Befehls-Template ohne Speicherzugriff, mit Operation 115 des Typs Datentransformation wird das Beta-Feld 154 als ein Datentransformationsfeld 154B interpretiert, dessen Inhalt unterscheidet, welche einer Reihe von Datentransformationen durchgeführt werden sollen (z. B. ohne Datentransformation, Swizzeln, Broadcast).
  • Im Fall eines Befehls-Templates 120 mit Speicherzugriff der Klasse A wird das Alpha-Feld 152 als ein Entfernungshinweisfeld 152B interpretiert, dessen Inhalt unterscheidet, welcher der Entfernungshinweise verwendet werden soll (in der 1A sind temporal 152B.1 und nicht temporal 152B.2 jeweils für das Befehls-Template 125 mit Speicherzugriff, temporal bzw. das Befehls-Template 130 mit Speicherzugriff, nicht temporal spezifiziert), während das Beta-Feld 154 als ein Datenmanipulationsfeld 154C interpretiert wird, dessen Inhalt unterscheidet, welche einer Reihe von Datenmanipulationsoperationen (auch bekannt als Primitive) durchgeführt werden soll (z. B. ohne Manipulation, Broadcast, Aufwärtskonvertierung einer Quelle und Abwärtskonvertierung eines Ziels). Die Befehls-Templates 120 mit Speicherzugriff enthalten das Skalierungsfeld 160 und optional das Verschiebungsfeld 162A oder das Verschiebungsskalierungsfeld 162B.
  • Vektorspeicherbefehle führen ein Laden von Vektoren aus dem und ein Speichern von Vektoren in den Speicher mit Konvertierungsunterstützung durch. Wie bei normalen Vektorbefehlen übertragen Vektorspeicherbefehle Daten in einer datenelementweisen Art aus dem/in den Speicher, wobei die Elemente, die tatsächlich übertragen werden, durch den Inhalt der Vektormaske, die als die Schreibmaske ausgewählt ist, vorgegeben werden.
  • Befehls-Templates mit Speicherzugriff - temporal
  • Temporale 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.
  • Befehls-Templates mit Speicherzugriff - nicht temporal
  • Nicht temporale 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.
  • Befehls-Templates der Klasse B
  • Im Fall der Befehls-Templates 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 Befehls-Templates 105 ohne Speicherzugriff der Klasse B wird ein Teil des Beta-Feldes 154 als ein RL-Feld 157A interpretiert, dessen Inhalt unterscheidet, welcher der unterschiedlichen Ergänzungsoperationstypen durchgeführt werden soll (z. B. sind Runden 157A.1 und Vektorlänge (VSIZE) 157A.2 für das Befehls-Template ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs teilweise Rundungssteuerung 112 bzw. das Befehls-Template ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs VSIZE 117 spezifiziert), während der Rest des Beta-Feldes 154 unterscheidet, welche der Operationen des spezifizierten Typs durchgeführt werden soll. In den Befehls-Templates ohne Speicherzugriff 105 sind das Skalierungsfeld 160, das Verschiebungsfeld 162A und das Verschiebungsskalierungsfeld 162B nicht vorhanden.
  • Im Befehls-Template ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs teilweise Rundungssteuerung 110 wird der Rest des Beta-Feldes 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 dessen 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 der Rundungsoperationssteuerfeld 159A das Ändern des Rundungsmodus für jeden Befehl einzeln. In einer Ausführungsform der Erfindung, wobei ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi enthält, überschreibt der Inhalt des Rundungsoperationssteuerfeldes 150 diesen Registerwert.
  • Im Befehls-Template 117 ohne Speicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs VSIZE wird der Rest des Beta-Feldes 154 als ein Vektorlängenfeld 159B interpretiert, dessen Inhalt unterscheidet, welche einer Reihe von Datenvektorlängen durchgeführt werden soll (z. B. 128, 256 oder 512 Byte).
  • Im Fall eines Befehls-Templates 120 mit Speicherzugriff der Klasse B wird ein Teil des Beta-Feldes 154 als ein Broadcast-Feld 157B interpretiert, dessen Inhalt unterscheidet, ob die Datenmanipulationsoperation vom Broadcast-Typ durchgeführt werden soll oder nicht, während der Rest des Beta-Feldes 154 als das Vektorlängenfeld 159B interpretiert wird. Die Befehls-Templates 120 mit Speicherzugriff enthalten das Skalierungsfeld 160 und optional das Verschiebungsfeld 162A oder das Verschiebungsskalierungsfeld 162B.
  • In Bezug auf das generische vektorgerechte Befehlsformat 100 ist ein Feld des vollständigen Opcodes 174 einschließlich des Formatfeldes 140, des Basisoperationsfeldes 142 und des Datenelementebreitenfeldes 164 gezeigt. Während eine Ausführungsform gezeigt ist, in der das Feld des vollständigen Opcodes 174 alle dieser Felder enthält, enthält das Feld des vollständigen Opcodes 174 in Ausführungsformen, die nicht alle von diesen unterstützen, weniger als alle dieser Felder. Das Feld des vollständigen Opcodes 174 stellt den Operationscode (Opcode) bereit.
  • Das Ergänzungsoperationsfeld 150, das Datenelementebreitenfeld 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 Datenelementebreitenfeld schafft insofern typisierte Befehle, als diese es ermöglichen, dass die Maske auf Basis unterschiedlicher Datenelementebreiten angewendet wird.
  • Die verschiedenen Befehls-Templates, die in der Klasse A und in der Klasse B enthalten sind, sind in unterschiedlichen 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 Templates und Befehlen aus beiden Klassen aufweist, aber nicht alle Templates 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, die primär für Grafik und/oder wissenschaftliches Rechnen gedacht sind, nur Klasse A unterstützen, während einer oder mehrere der Universalkerne Universalhochleistungskerne mit Out-Of-Order-Ausführung und Registerumbenennung sein können, die für Universalrechenvorgänge gedacht sind, die nur Klasse B unterstützen. Ein anderer Prozessor, der keinen separaten Grafikkern aufweist, kann einen oder mehrere In-Order- oder Out-Of-Order-Kerne enthalten, die sowohl Klasse A als auch Klasse B unterstützen. Natürlich können in anderen Ausführungsformen der Erfindung Merkmale von einer Klasse auch in der anderen Klasse implementiert sein. In einer Hochsprache geschriebene Programme werden in eine Vielzahl unterschiedlicher ausführbarer Formen gebracht (z. B. Just-in-Time-kompiliert oder statisch kompiliert), einschließlich: 1) einer Form, die nur Befehle der Klasse(n) aufweist, die vom Zielprozessor zur Ausführung unterstützt werden; oder 2) einer Form, die alternative Routinen aufweist, die unter Verwendung unterschiedlicher Kombinationen der Befehle aller Klassen geschrieben worden sind und die einen Steuerflusscode aufweisen, der die auszuführenden Routinen auf Basis der Befehle auswählt, die vom Prozessor unterstützt werden, der gerade den Code ausführt.
  • VEX-Befehlsformat
  • VEX-Codierung ermöglicht es Befehlen, mehr als zwei Operanden zu haben, und ermöglicht SIMD-Vektorregistern, länger als 28 Bit zu sein. Die Verwendung eines VEX-Präfixes stellt eine Drei-Operanden-Syntax (oder mehr) bereit. Zum Beispiel führten vorherige Zwei-Operanden-Befehle Operationen wie zum Beispiel A = A + B durch, wobei ein Quelloperand überschrieben wird. Die Verwendung eines VEX-Präfixes ermöglicht Operanden, zerstörungsfreie Operationen durchzuführen, wie zum Beispiel A = B + C.
  • Die 2A stellt ein beispielhaftes AVX-Befehlsformat dar, das ein VEX-Präfix 202, ein Real-Opcode-Feld 230, ein Mod-R/M-Byte 240, ein SIB-Byte 250, ein Verschiebungsfeld 262 und ein IMM8 272 enthält. Die 2B stellt dar, welche Felder aus der 2A ein volles Opcode-Feld 274 und ein Basisoperationsfeld 241 bilden. Die 2C stellt dar, welche Felder aus der 2A ein Registerindexfeld 244 bilden.
  • VEX-Präfix (Bytes 0-2) 202 ist in einer Drei-Byte-Form codiert. Das erste Byte ist das Formatfeld 290 (VEX-Byte 0, Bits [7:0]), das einen expliziten C4-Bytewert enthält (den eindeutigen Wert, der zum Unterscheiden des C4-Befehlsformats verwendet wird). 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]-vvvv) kann das Folgende beinhalten: 1) VEX.vvvv codiert den ersten Quellregisteroperanden, spezifiziert in invertierter Form (Einerkomplement) und ist gültig für Befehle mit 2 oder mehr Quelloperanden; 2) VEX.vvvv 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 Größenfeld VEX.L 268 (VEX-Byte 2, Bit [2]-L) = 0, zeigt es einen 28-Bit-Vektor an; wenn VEX.L = 1, zeigt es einen 256-Bit-Vektor an. Präfixcodierungsfeld (Prefix Encoding) 225 (VEX-Byte 2, Bits [1:0]-pp) stellt zusätzliche Bits für das Basisoperationsfeld 241 bereit.
  • Das Real-Opcode-Feld 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 von Reg-Feld 244 kann das Folgende beinhalten: 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 von R/M-Feld 246 kann das Folgende beinhalten: Codieren des Befehlsoperanden, der eine Speicheradresse referenziert, oder Codieren von entweder dem Zielregisteroperanden oder einem 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 Immediate-Feld (IMM8) 272 enthalten Daten.
  • Beispielhafte Registerarchitektur
  • Die 3 ist ein Blockdiagramm einer Registerarchitektur 300 gemäß einer Ausführungsform der Erfindung. In der dargestellten Ausführungsform gibt es 32 Vektorregister 310, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die niederwertigen 256 Bits der unteren 6 zmm-Register sind auf den Registern ymm0-15 überlagert. Die niederwertigen 128 Bits auf den unteren 6 zmm-Registern (die niederwertigen 128 Bits des ymm-Registers) sind auf den Registern xmm0-15 überlagert.
  • Universalregister 325 - in der veranschaulichten Ausführungsform gibt es sechzehn 64-Bit-Universalregister, die zusammen mit den vorhandenen x86-Adressierungsmodi zum Adressieren von Speicheroperanden verwendet werden. Diese Register werden durch die Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Skalare Gleitkomma-Stapel-Registerdatei (x87-Stapel) 345, auf der die gepackte flache MMX-Ganzzahl-Registerdatei 350 zugeordnet ist - in der veranschaulichten Ausführungsform ist der x87-Stapel ein Acht-Elemente-Stapel, der verwendet wird, um skalare Gleitkommaoperationen auf 32/64/80-Bit-Gleitkomma-Daten unter Verwendung der x87-Befehlssatz-Erweiterung durchzuführen; während die MMX-Register verwendet werden, um Operationen auf gepackten 64-Bit-Ganzzahl-Daten durchzuführen und Operanden für einige Operationen zu enthalten, die zwischen den MMX- und XMM-Registern durchgeführt werden.
  • Alternative Ausführungsformen der Erfindung können breitere oder engere Register verwenden. Außerdem können alternative Ausführungsformen der Erfindung mehr, weniger oder andere Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf unterschiedliche Arten, für unterschiedliche Zwecke und in unterschiedlichen Prozessoren implementiert sein. 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 der CPU separaten Chip; 2) den Coprozessor auf einem separaten Chip im gleichen Package wie eine CPU; 3) den Coprozessor auf dem gleichen Chip wie eine CPU (in diesem Fall wird ein solcher Coprozessor manchmal als spezielle Logik, wie zum Beispiel als integrierte Grafik und/oder wissenschaftliche (Durchsatz-) Logik, oder als spezielle Kerne bezeichnet); und 4) ein System auf einem Chip, das auf demselben Chip die beschriebene CPU (manchmal als der bzw. die Anwendungskerne oder Anwendungsprozessor(en) bezeichnet), den oben beschriebenen Coprozessor und zusätzliche Funktionalität enthalten 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
  • Die 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 darstellt. Die 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 Felder mit durchgezogenen Linien in den 4A-B stellen die In-Order-Pipeline und den In-Order-Kern dar, während die optionale Hinzufügung von Feldern 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.
  • Die 4B zeigt den Prozessorkern 490, der eine Front-End-Einheit 430 enthält, gekoppelt mit einer Ausführungs-Engine-Einheit 450, und beide sind mit einer Speichereinheit 470 gekoppelt. Der Kern 490 kann ein Kern mit reduziertem Befehlssatz (RISC, Reduced Instruction Set Computing), ein Kern mit komplexem Befehlssatz (CISC, Complex Instruction Set Computing), ein Kern mit sehr langen Befehlswörtern (VLIW, Very Long Instruction Word) oder ein hybrider oder alternativer Kerntyp sein. Als noch eine weitere Option kann der Kern 490 ein Spezialkern, wie zum Beispiel 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 unterschiedlicher 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. ein. In einer Ausführungsform schließt der Kern 490 einen Mikrocode-ROM oder ein anderes Medium ein, das Mikrocode für bestimmte Makrobefehle speichert (z. B. in der Decodiereinheit 440 oder auf andere Weise in der Front-End-Einheit 430). Die Decodiereinheit 440 ist an eine Umbenennungs-/Zuordnungseinheit 452 in der Ausführungs-Engine-Einheit 450 gekoppelt.
  • Die Ausführungs-Engine-Einheit 450 enthält die Umbenennungs-/Zuordnungseinheit 452, die mit einer Rückzugseinheit 454 und einem Satz aus einer oder mehreren Scheduler-Einheit(en) 456 gekoppelt ist. Die Scheduler-Einheit(en) 456 stellen irgendeine Anzahl von unterschiedlichen Schedulern dar, einschließlich Reservierungsstationen, ein zentrales Befehlsfenster usw. Die Scheduler-Einheit(en) 456 sind mit der/den physikalischen Registerdatei(en)-Einheit(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 Funktionen durchführen. Die Scheduler-Einheit(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/Vektor-Gleitkomma und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre eigene Scheduler-Einheit, 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 sei auch klargestellt, dass bei Verwendung von separaten Pipelines eine oder mehrere dieser Pipelines Out-Of-Order-Ausgabe/-Ausführung und der Rest In-Order sein können.
  • Der Satz von Speicherzugriffseinheiten 464 ist an die Speichereinheit 470 gekoppelt, die eine Daten-TLB-Einheit 472 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 Abruf- und Längendecodierstufen 402 und 404 durch; 2) die Decodiereinheit 440 führt die Decodierstufe 406 durch; 3) die Umbenennungs-/Allokator-Einheit 452 führt die Zuordnungsstufe 408 und die Umbenennungsstufe 410 durch; 4) die Scheduler-Einheit(en) 456 führt bzw. führen die Schedule-Stufe 412 durch; 5) die physikalischen Registerdatei(en)-Einheit(en) 458 und die Speichereinheit 470 führen die Registerlese/Speicherlesestufe 414 durch; der 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ückschreib-/Speicherschreibstufe 418 durch; 7) verschiedene Einheiten können in der Ausnahmebehandlungsstufe 422 einbezogen sein; und 8) die Rückzugseinheit 454 und die physikalischen Registerdatei(en)-Einheit(en) 458 führt bzw. führen die Übergabestufe 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 zum Beispiel NEON) von ARM Holdings in Sunnyvale, CA, USA), einschließlich der hierin beschriebenen Befehle). In einer Ausführungsform enthält der Kern 490 Logik, um eine gepackte Daten-Befehlssatzerweiterung (z. B. AVX1, AVX2) zu unterstützen, wodurch gestattet wird, dass die Operationen, die von vielen Multimedia-Applikationen verwendet werden, 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 (z. B. 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
  • Die 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.
  • Die 5A ist ein Blockschaltbild eines Einzelprozessorkerns zusammen mit seiner Verbindung zum On-Die-Interconnect-Netzwerk 502 und seinem lokalen 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 den Entwurf 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-Cache, der in separate lokale Teilsätze aufgeteilt ist, einer je Prozessorkern. Jeder Prozessorkern weist einen direkten Zugriffspfad auf seinen eigenen lokalen Teilsatz des L2-Caches 504 auf. Von einem Prozessorkern gelesene Daten werden in seinem L2-Cache-Teilsatz 504 gespeichert, und es kann schnell auf sie 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 Kohärenz für gemeinsam genutzte Daten sicher. Das Ringnetzwerk ist bidirektional, um es Agenten, wie zum Beispiel Prozessorkernen, L2-Caches und anderen logischen Blöcken zu ermöglichen, in dem Chip miteinander zu kommunizieren. Jeder Ringdatenpfad ist in einigen Ausführungsformen je Richtung 1024 Bits breit.
  • Die 5B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in der 5A gemäß Ausführungsformen der Erfindung. Die 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 (VPU, Vector Processing Unit) (siehe die 16-breite ALU 528), die einen oder mehrere Ganzzahlbefehle, Gleitkommabefehle mit einfacher Genauigkeit und Gleitkommabefehle mit doppelter Genauigkeit ausführt. Die VPU unterstützt Swizzling der Registereingaben mit Swizzle-Einheit 520, numerische Konvertierung mit numerischen Konvertierungseinheiten 522A-B und Replikation mit Replikationseinheit 524 auf der Speichereingabe.
  • Prozessor mit integriertem Speicher-Controller und Grafik
  • Die 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 unterschiedliche Implementierungen des Prozessors 600 Folgendes enthalten: 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. Dementsprechend kann der Prozessor 600 ein Universalprozessor, ein Coprozessor oder Spezialprozessor, wie zum Beispiel ein Netz- oder Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, GPGPU (Universalgrafikverarbeitungseinheit), ein Hochdurchsatz-MIC-Coprozessor (MIC: Many Integrated Core - viele integrierte Kerne) (welcher 30 oder mehr Kerne enthält), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 600 kann ein Teil von und/oder auf einem oder mehreren Substraten unter Verwendung irgendeiner aus einer Reihe von Prozesstechnologien, wie zum Beispiel BiCMOS, CMOS oder NMOS, implementiert sein.
  • Die Speicherhierarchie enthält eine oder mehrere Cache-Ebenen innerhalb der Kerne 604A-N, einen Satz von einer oder mehreren gemeinsam genutzten Cache-Einheiten 606 und externen Speicher (nicht gezeigt), gekoppelt mit der Menge von integrierten Speicher-Controller-Einheiten 614. 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) Speicher-Controller-Einheit(en) 614 verbindet, können alternative Ausführungsformen irgendeine Anzahl von 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 602A-N beibehalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 602A-N zum Multithreading in der Lage. Der Systemagent 610 enthält die Komponenten, die die Kerne 602A-N koordinieren und betreiben. Die Systemagenteneinheit 610 kann zum Beispiel eine Energiesteuereinheit (Power Control Unit, PCU) und eine Anzeigeeinheit enthalten. Die PCU kann Logik und Komponenten sein oder enthalten, die zum Regeln des Energiezustands der Kerne 602A-N und der integrierten Grafiklogik 608 erforderlich sind. Die Anzeigeeinheit dient zum Ansteuern von einer oder mehreren extern verbundenen Anzeigen.
  • Die Kerne 602A-N können in Bezug auf den Architekturbefehlssatz homogen oder heterogen sein; das heißt, zwei oder mehrere der Kerne 602A-N können zur Ausführung des gleichen Befehlssatzes in der Lage sein, während andere dazu in der Lage sein können, nur einen Teilsatz von diesem Befehlssatz oder einem anderen Befehlssatz auszuführen.
  • Beispielhafte Computerarchitekturen
  • Die 7-10 sind Blockdiagramme beispielhafter Computerarchitekturen. Andere im Fachgebiet bekannte Systemdesigns und Konfigurationen für Laptops, Desktops, Handheld-PC, Personal Digital Assistants, Engineering-Workstations, Server, Netzwerkgeräte, Netzwerk-Hubs, Schalter, eingebettete Prozessoren, Digital-Signal-Processors (DSP), Grafikgeräte, Videospielgeräte, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Medienwiedergabegeräte, Handheld-Geräte und verschiedene andere elektronische Geräte sind ebenfalls geeignet. Im Allgemeinen ist eine große Vielzahl an Systemen oder elektronischen Einbindungen allgemein geeignet, die, wie hier offenbart wird, zur Integration eines Prozessors und/oder anderer Ausführungslogik in der Lage sind.
  • Jetzt wird unter Bezugnahme auf die 7 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-) Einrichtungen 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 der 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 dynamischer Direktzugriffsspeicher (DRAM, Direct Random Access Memory), Phasenwechselspeicher (PCM, Phase Change Memory) oder eine Kombination der beiden sein. Für wenigstens 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 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 Vielzahl an Unterschieden hinsichtlich eines Spektrums von Leistungsmetriken, einschließlich Architektur-, Mikroarchitektur-, thermischen, Stromverbrauchseigenschaften und dergleichen, zwischen den physischen Ressourcen 710, 7155 geben.
  • In einer Ausführungsform führt der Prozessor 710 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. In die Befehle können Coprozessorbefehle eingebettet sein. Der Prozessor 710 erkennt diese CoprozessorBefehle als einem Typ zugehörig, der vom angeschlossenen 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 der 8 gezeigt wird, ist das Mehrprozessorsystem 800 ein Punkt-zu-Punkt-Verbindungssystem und enthält einen ersten Prozessor 870 und einen zweiten Prozessor 880, die über eine Punkt-zu-Punkt-Verbindung 850 gekoppelt sind. Jeder der Prozessoren 870 und 880 kann eine Version des Prozessors 600 sein. In einer Ausführungsform der Erfindung sind 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 werden so gezeigt, dass sie die integrierten Speicher-Controller- (IMC, Integrated Memory Controller) Einheiten 872 bzw. 882 enthalten. Der Prozessor 870 enthält als Teil seiner Bus-Controller-Einheiten auch Punkt-zu-Punkt- (P-P-) Schnittstellen 876 und 878; in ähnlicher Weise enthält der zweite Prozessor 880 P-P-Schnittstellen 886 und 888. 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 der 8 gezeigt wird, koppeln die IMCs 872 und 882 die Prozessoren an jeweilige Speicher, nämlich an einen Speicher 832 und einen Speicher 834, die Abschnitte eines Hauptspeichers sein können, der lokal an den jeweiligen Prozessoren angeschlossen 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 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 erstem Bus 816 gekoppelt sein. In einer Ausführungsform kann der erste Bus 816 ein Peripheral Component Interconnect (PCI) -Bus oder ein Bus, wie zum Beispiel 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 der 8 gezeigt wird, können verschiedene E/A-Einrichtungen 814 mit dem ersten Bus 816 gekoppelt sein, zusammen mit einer Busbrücke 818, die den ersten Bus 816 mit einem zweiten Bus 820 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessor(en) 815, wie zum Beispiel Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie zum Beispiel Grafikbeschleuniger oder Digitalsignalverarbeitungs(Digital Signal Processing, DSP)-Einheiten), Field Programmable Gate Arrays oder irgendein anderer Prozessor, mit dem ersten Bus 816 gekoppelt. In einer Ausführungsform kann der zweite Bus 820 ein Low-Pin-Count (LPC-) Bus sein. Verschiedene Einrichtungen können in einer Ausführungsform mit einem zweiten Bus 820 gekoppelt sein, einschließlich zum Beispiel eine Tastatur und/oder eine Maus 822, Kommunikationseinrichtungen 827 und eine Speichereinheit 828, wie zum Beispiel ein Festplattenlaufwerk oder eine andere Massenspeichereinrichtung, die Befehle/Code und Daten 830 enthalten kann. Des Weiteren kann eine Audio-E/A 824 mit dem zweiten Bus 816 gekoppelt sein. 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 die 9 ein Blockdiagramm eines zweiten spezifischeren beispielhaften Systems 900 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in den 8 und 9 tragen ähnliche Bezugszeichen, und gewisse Aspekte der 8 wurden in der 9 weggelassen, um zu verhindern, dass andere Aspekte der 9 unverständlich werden.
  • Die 9 veranschaulicht, dass die Prozessoren 870, 880 integrierte Speicher- und E/A-Steuerlogik („CL“, Control Logic) 972 bzw. 982 enthalten können. Daher enthält die CL 972, 982 integrierte Speicher-Controller-Einheiten und E/A-Steuerlogik. Die 9 veranschaulicht, dass nicht nur die Speicher 832, 834 mit der CL 872, 882 gekoppelt sind, sondern auch, dass E/A-Geräte 914 ebenfalls mit der Steuerlogik 872, 882 gekoppelt sind. Legacy-E/A-Einrichtungen 915 sind mit dem 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 der 6 tragen gleiche Bezugszeichen. Außerdem sind Kästchen mit unterbrochenen Linien optionale Merkmale auf fortschrittlicheren SoCs. In der 10 ist bzw. sind Verbindungseinheit(en) 1002 gekoppelt mit: einem Anwendungsprozessor 1010, der einen Satz von einem oder mehreren Kernen 102A-N, Cache-Einheiten 604A-N und gemeinsam genutzte(n) Cache-Einheit(en) 606 enthält; einer Systemagenteneinheit 610; einer oder mehreren Bus-Controller-Einheiten 616; einer oder mehreren integrierten Speicher-Controller-Einheiten 614; einem Satz aus einem oder mehreren Coprozessoren 1020, der integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor enthalten kann; einer statischen Direktzugriffsspeichereinheit (SRAM, Static Random Access Memory) 1030; einer Direktzugriffsspeichereinheit (DMA, Direct Memory Access) 1032; und einer Anzeigeeinheit 1040 zum Koppeln mit einer oder mehreren externen Anzeigen. In einer Ausführungsform 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 hier offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsansätze implementiert werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert werden, die auf programmierbaren Systemen ausgeführt werden, die wenigstens einen Prozessor, ein Speichersystem (das flüchtigen und nichtflüchtigen Speicher und/oder Speicherelemente enthält), wenigstens eine Eingabeeinrichtung und wenigstens 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 generieren. Die Ausgabeinformationen können auf eine oder mehrere Ausgabeeinrichtungen in bekannter Weise angewandt werden. Zum Zweck dieser Anmeldung enthält ein Verarbeitungssystem irgendein System, das einen Prozessor aufweist, wie zum Beispiel einen digitalen Signalprozessor (DSP), einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (ASIC: Application Specific Integrated Circuit) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren prozeduralen oder objektorientierten Programmiersprache implementiert werden, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann, falls gewünscht, auch in einer Assembler- oder Maschinensprache implementiert werden. Tatsächlich sind die hier beschriebenen Mechanismen im Schutzumfang nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Einer oder mehrere Aspekte wenigstens 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, Vorrichtungen, 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 Quellbefehlssatz 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 daraus implementiert sein. Der Befehlskonverter kann sich auf dem Prozessor, außerhalb des Prozessors oder teilweise auf und teilweise außerhalb des Prozessors befinden.
  • Die 11 ist ein Blockdiagramm, das die Verwendung eines Software-Befehlskonverters zum Konvertieren binärer Befehle in einem Quellbefehlssatz 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 daraus implementiert sein kann. Die 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 generieren, der nativ durch einen Prozessor mit wenigstens einem ersten Befehlssatzkern 1116 ausgeführt werden kann. In einigen Ausführungsformen stellt der Prozessor mit wenigstens einem ersten Befehlssatzkern 1116 jeden Prozessor dar, der im Wesentlichen die gleichen Funktionen durchführen kann wie ein Intel-Prozessor mit wenigstens 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 wenigstens einem x86-Befehlssatzkern ausgeführt zu werden, um im Wesentlichen das gleiche Ergebnis zu erreichen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern. Der erste Compiler 1104 stellt einen Compiler dar, der betrieben werden kann, um Binärcode des ersten Befehlssatzes 1106 (zum Beispiel Objektcode) zu generieren, der, mit oder ohne zusätzliche Verknüpfungsverarbeitung, auf dem Prozessor mit wenigstens einem ersten Befehlssatzkern 1116 ausgeführt werden kann. In ähnlicher Weise zeigt die 11, wie das Programm in der höheren Sprache 1102 mit einem alternativen Befehlssatz-Compiler 1108 kompiliert werden kann, um alternativen Befehlssatz-Binärcode 1110 zu generieren, der nativ durch einen Prozessor ohne wenigstens 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 daraus, 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.
  • VORRICHTUNG UND VERFAHREN FÜR DIGITALE SIGNALVERARBEITUNGSBEFEHLE
  • Befehle für die digitale Signalverarbeitung (DSP) sind nachstehend beschrieben. In einer Ausführungsform sind die Schaltungsanordnungen und die Logik zum Durchführen der DSP-Operationen in die in der 4B gezeigte Ausführungs-Engine-Einheit 450 in den verschiedenen vorstehend beschriebenen Kernen (siehe z. B. Kerne 602A-N in den 6 und 10) und/oder in die in der 5A gezeigte Vektoreinheit 510 integriert. Die verschiedenen Quell- und Zielregister können zum Beispiel SIMD-Register in der/den physikalischen Registerdatei-Einheit(en) 458 in der 4B und oder Vektorregistern 310 in der 3 sein. Die nachstehend beschriebenen Multiplikationsschaltungen, Additionsschaltungen, Akkumulationsschaltungen und anderen Schaltungsanordnungen können in die Ausführungskomponenten der vorstehend beschriebenen Architekturen integriert sein, einschließlich beispielsweise und ohne Einschränkung der Ausführungseinheit(en) 462 in der 4B. Es sei jedoch angemerkt, dass die zugrundeliegenden Prinzipien der Erfindung nicht auf diese spezifischen Architekturen beschränkt sind.
  • Eine Ausführungsform der Erfindung enthält eine Schaltungsanordnung und/oder Logik zum Verarbeiten von Befehlen für die digitale Signalverarbeitung (DSP). Insbesondere umfasst eine Ausführungsform eine Multiplizieren-Akkumulieren-Architektur (MAC) mit acht 16x16-Bit-Multiplikatoren und zwei 64-Bit-Akkumulatoren. Die nachstehend beschriebene Befehlssatzarchitektur (ISA) kann verschiedene Multiplikations- und MAC-Operationen auf gepackten 128-Bit (8-Bit-, 16-Bit- oder 32-Bit-Datenelementen)-Ganzzahl-, Festpunkt- und komplexen Datentypen verarbeiten. Darüber hinaus werden bestimmte Befehle direkt für eine hocheffiziente schnelle Fouriertransformation (FFT, Fast Fourier Transform) und finites Impulsantwort-Filtern (FIR, Finite Impulse Response) sowie die Nachverarbeitung akkumulierter Daten durch Verschiebungs-, Rundungs- und Sättigungsoperationen unterstützt.
  • Eine Ausführungsform der neuen DSP-Befehle verwendet eine Opcode-Codierung auf der Grundlage eines VEX.128-Präfixes, und mehrere SSE/SSE2/AVX-Befehle, die die Nachverarbeitung von Daten handhaben, werden mit der DSP-ISA verwendet. Die VEX-codierten 128-Bit-DSP-Befehle mit Speicheroperanden können weniger strenge Speicherausrichtungsanforderungen aufweisen.
  • In einer Ausführungsform unterstützen die Befehle auch eine Vielzahl von Ganzzahl- und Festpunktdatentypen, einschließlich:
    1. 1) eines Q31 -Datentyps für Signale, die eine Analog-zu-Digital-Umwandlung (ADC) und eine Digital-zu-Analog-Umwandlung (DAC) mit mehr als 16 Bit erfordern;
    2. 2) eines Q15-Datentyps, der in DSP-Algorithmen häufig ist;
    3. 3) eines komplexen 16-Bit-Datentyps; und
    4. 4) eines komplexen 32-Bit-Datentyps.
  • Die hier beschriebene Befehlssatzarchitektur zielt auf einen großen Bereich an Standard-DSP (z. B. FFT, Filtern, Musterabgleich, Korrelation, Polynombeurteilung usw.) und statistischen Operationen (z. B. Mittelwert, gleitender Durchschnitt, Varianz usw.) ab.
  • Zu Zielanwendungen der Ausführungsformen der Erfindung zählen Sensor-, Audio-, Klassifikationsaufgaben für Computervision und Spracherkennung. Die hier beschriebene DSP-ISA enthält einen großen Bereich an Befehlen, die für tiefe neuronale Netzwerke (DNN, Deep Neural Network), automatische Spracherkennung (ASR, Automatic Speech Recognition), Sensorfusion mit Kalman-Filtern, andere wichtige DSP-Anwendungen usw. anwendbar sind. Angesichts der Sequenz der Gewichtungen {w1, w2, ...wk} und der Eingabesequenz {x1, x2, x3, ....xn} verlangen zahlreiche Bildverarbeitungs- und Maschinenlernaufgaben die Berechnung der Ergebnissequenz {y1, y2, y3, ...yn+1-k}, definiert durch yi = w1x1+w2xi+i+ ................. + wk Xi+k-1.
  • Die 12 veranschaulicht einen beispielhaften Prozessor 1255, auf dem Ausführungsformen der Erfindung implementiert werden können und der mehrere Kerne 0-N für die gleichzeitige Ausführung einer Vielzahl von Befehls-Threads enthält. Die veranschaulichte Ausführungsform enthält eine DSP-Befehlsdecodier-Schaltungsanordnung/-logik 1231 im Decodierer 1230 und eine DSP-Befehlsausführungs-Schaltungsanordnung/-logik 1341 in der Ausführungseinheit 1240. Diese Pipeline-Komponenten können die hier beschriebenen Operationen als Reaktion auf die Decodierung und Ausführung der DSP-Befehle durchführen. Obwohl in der 12 nur Details eines einzigen Kerns (Kern 0) gezeigt werden, versteht es sich, dass jeder der anderen Kerne des Prozessors 1255 ähnliche Komponenten enthalten kann.
  • 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 zugrundeliegenden Prinzipien der Erfindung sind jedoch nicht auf eine bestimmte 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 zugrundeliegenden Prinzipien der Erfindung sind jedoch nicht auf eine bestimmte Größe/Art von Maskenregistern beschränkt.
  • Jeder Kern 0 - N kann einen dedizierten Level-1-Cache (L1) 1212 und Level-2-Cache (L2) 1211 zum Caching von Befehlen und Daten gemäß einer spezifizierten Cache-Management-Regel enthalten. Der L1-Cache 1212 enthält einen separaten Befehls-Cache 1220 zum Speichern von Befehlen und einen separaten Daten-Cache 1221 zum Speichern von Daten. Die in den verschiedenen Prozessor-Caches gespeicherten Befehle und Daten werden mit der Granularität von Cache-Zeilen gemanagt, die eine feste Größe sein kann (z. B. eine Länge von 64, 128, 512 Byte). Jeder Kern dieser beispielhaften Ausführungsform weist eine Befehlsabrufeinheit 1210 zum Abrufen von Befehlen vom Hauptspeicher 1200 und/oder einen gemeinsam genutzten Level-3-Cache (L3) 1216 auf. Die Befehlsabrufeinheit 1210 enthält verschiedene allgemein bekannte Komponenten, einschließlich eines nächsten Befehlszeigers 1203 zum Speichern der Adresse des nächsten Befehls, der aus dem Speicher 1200 (oder einem der Caches) abgerufen werden soll; eines Befehlsübersetzungspuffers (Instruction Translation Lookaside Buffer, ITLB) 1204 zum Speichern einer Abbildung von kürzlich verwendeten virtuell-zu-physikalisch-Befehlsadressen, um die Geschwindigkeit der Adressübersetzung zu verbessern; einer Verzweigungsvorhersageeinheit 1202 zum spekulativen Vorhersagen von Befehlsverzweigungsadressen; und Verzweigungszielpuffer (Branch Target Buffers, BTBs) 1201 zum Speichern von Verzweigungsadressen und Zieladressen.
  • Wie erwähnt, enthält eine Decodiereinheit 1230 eine DSP-Befehlsdecodier-Schaltungsanordnung/Logik 1231 zum Decodieren der hierin beschriebenen DSP-Befehle in Mikro-Operationen oder „uops“, und die Ausführungseinheit 1240 enthält eine DSP-Befehlsausführungs-Schaltungsanordnung/Logik 1241 zum Ausführen der DSP-Befehle. Eine Rückschreib-/Rückzugseinheit 1250 zieht die ausgeführten Befehle zurück und schreibt die Ergebnisse zurück.
  • Ausführungsformen zum Multiplizieren. Summieren, und Akkumulieren von Sätzen von gepackten Bytes
  • Eine Ausführungsform der Erfindung beinhaltet einen Befehl zum Durchführen einer vektorgepackten Multiplikation von Sätzen von vorzeichenbehafteten Bytes in einem ersten und einem zweiten Quellregister. Die Multiplikationsausgaben werden summiert, negiert und zu Doppelwörtern (32 Bits) vorzeichenerweitert und jedes der Doppelwörter wird mit jedem der entsprechenden Doppelwörter in einem Akkumulationsregister akkumuliert. Mittels eines Beispiels wird hier auf eine Ausführungsform der Erfindung als VPNDPBSSD xmm1, xmm2, xmm3/m128 Bezug genommen, wobei xmm2 ein erstes Quellregister ist, xmm3 ein zweites Quellregister (wobei m128 anzeigt, dass die Daten im Arbeitsspeicher gespeichert sind) und xmm1 ein Quellregister und ein Zielregister ist (d. h. Speichern des akkumulierten Werts).
  • In einer Ausführungsform sind die xmm1-, xmm2- und xmm3-Register gepackte 128-Bit-Datenregister, die duale Quadwortwerte, vier Doppelwortwerte, acht Wortwerte oder sechzehn Bytes speichern. 13 veranschaulicht beispielhafte Datenelement- und Bitverteilungen für ein beispielhaftes Quellregister und/oder Zielregister. Datenelemente können in das Quellregister und/oder Zielregister in Bytes (8 Bits), Wörtern (16 Bits), Doppelwörtern (32 Bits) und/oder Quadwörtern (64 Bits) gepackt werden, wie veranschaulicht ist.
  • 14 veranschaulicht eine beispielhafte Architektur zum Ausführen des Befehls zum Durchführen einer vektorgepackten Multiplikation von Sätzen von vorzeichenbehafteten Bytes in jeweils einem ersten und einem zweiten Quellregister, 1401 und 1402, Summieren und Negieren der Ausgabe und Vorzeichenerweitern zu Doppelwörtern (32 Bits) und Akkumulieren mit Doppelwörtern in einem dritten Quellregister 1460 (auch das Zielregister). Insbesondere multipliziert ein Satz von Multiplikatoren 1405 jedes Byte in dem ersten Quellregister 1401 mit einem entsprechenden Byte in dem zweiten Quellregister 1402. Beispielsweise wird ein Byte B0 an einem Datenelementort [7:0] im Quellregister 1401 mit einem Byte B0 an einem Datenelementort [7:0] im Quellregister 1402 multipliziert, Byte B1 am Datenelementort [15:8] im Quellregister 1401 mit einem Byte B1 am Datenelementort [15:8] im Quellregister 1402 multipliziert usw., was zu 16 gleichzeitigen Multiplikationsoperationen zum Generieren von 16 temporären Produkten führt. In einer Ausführungsform werden diese temporären Produkte in vier Sätze von vier gruppiert.
  • In einer Ausführungsform addieren Addierernetzwerke 1410-1411 die vier temporären Produkte in jedem Satz, um viert temporäre Summen zu generieren, welche an vier temporären Speicherorten (z. B. TEMP1-4, wie nachfolgend erörtert, welche Register oder Speicherorte sein können) gespeichert werden. In einer Ausführungsform negieren und vorzeichenerweitern die Addierernetzwerke 1410-1411 (oder andere Schaltungsanordnungen) jede der temporären Summen auf 32 Bits und die Akkumulatoren 1420-1421 kombinieren die 32-Bit vorzeichenerweiterten Ergebnisse mit entsprechenden Doppelwörtern (DW0-DW3) aus dem Quell-/Zielregister 1460.
  • Eine Ausführungsform der Erfindung arbeitet gemäß der folgenden Code-Sequenz:
    • TEMP0[17:0] ← ((SRC2[31:24] * SRC3[31:24]) + (SRC2[23:16] * SRC3[23:16]) + (SRC2[15:8] * SRC3[15:8]) + (SRC2[7:0] * SRC3[7:0]));
    • TEMP1[17:0] ← ((SRC2[63:56] * SRC3[63:56]) + (SRC2[55:48] * SRC3[55:48]) + (SRC2[47:40] * SRC3[47:40]) + (SRC2[39:32] * SRC3[39:32]));
    • TEMP2[17:0] ← ((SRC2[95:88] * SRC3[95:88]) + (SRC2[87:80] * SRC3[87:80]) + (SRC2[79:72] * SRC3[79:72]) + (SRC2[71:64] * SRC3[71:64]));
    • TEMP3[17:0] ← ((SRC2[127:120] * SRC3[127:120]) + (SRC2[119:112] * SRC3[119:112]) + (SRC2[111:104] * SRC3[111:104]) + (SRC2[103:96] * SRC3[103:96]));
    • TEMP4[17:0] ← (~TEMP0[17:0] + 1'b1);
    • TEMP5[17:0] ← (~TEMP1[17:0] + 1'b1);
    • TEMP6[17:0] ← (~TEMP2[17:0] + 1'b1);
    • TEMP7[17:0] ← (~TEMP3[17:0] + 1'b1);
    • DEST[31:0] ← AddToDword({14{TEMP4[17]},TEMP4[17:0]}, DEST[31:0]);
    • DEST[63:32] ← AddToDword({14{TEMP5[17]},TEMP5[17:0]}, DEST[63:32]);
    • DEST[95:64] ← AddToDword({14{TEMP6[17]},TEMP6[17:0]}, DEST[95:64]);
    • DEST[127:96] ← AddToDword({14{TEMP7[17]},TEMP7[17:0]}, DEST[127:96]);
  • Somit werden die Bytes an den gepackten Datenelementorten [31:24], [23:16], [15:8] und [7:0] in dem ersten Quellregister 1401 mit den entsprechenden Bytes an den gepackten Datenelementorten [31:24], [23:16], [15:8] und [7:0] in dem zweiten Quellregister 1402 multipliziert. Die vier Produkte werden summiert und in TEMP0[17:0] gespeichert. Die gleichen Multiplikations- und Additionsoperationen werden durchgeführt für die Bytes [63:56], [55:48], [47:40] und [39:32], wobei die Ergebnisse in TEMP1[17:0] gespeichert werden; die Bytes [95:88], [87:80], [79:72] und [71:64], wobei die Ergebnisse in TEMP2[17:0] gespeichert werden; und die Bytes [127:120], [119:112], [111:104] und [103:96], wobei die Ergebnisse in TEMP3[17:0] gespeichert werden.
  • In einer Ausführungsform wird die Zweierkomplementnegation an den Ergebnissen in TEMP0[17:0], TEMP1[17:0], TEMP2[17:0] und TEMP3[17:0] eingesetzt, um diese Werte zu negieren (z. B. innerhalb der Addierernetzwerke 1410-1411 oder anderer Schaltungsanordnungen). Die negierten Ergebnisse werden dann an temporären Speicherorten TEMP4[17:0], TEMP5[17:0], TEMP6[17:0] und TEMP7[17:0] gespeichert. In einer alternativen Implementation können andere Techniken, wie etwa Null-Erweiterung eingesetzt werden.
  • Die negierten Werte in TEMP4[17:0], TEMP5[17:0], TEMP6[17:0] und TEMP7[17:0] werden dann auf 32 Bits vorzeichenerweitert (z. B. innerhalb der Addierernetzwerke 1410-1411, Akkumulatoren 1420-1421 oder anderen Schaltungsanordnungen). Jedes der resultierenden Doppelwörter wird zu einem Doppelwort in dem Quell-/Zielregister 1460 addiert und das endgültige Doppelwortergebnis wird an denselben Ort in dem Quell-/Zielregister 1460 zurückgespeichert. Beispielsweise wird in der obigen Code-Sequenz der Doppelwortwert in DEST[31:0] zu dem negierten, null-erweiterten Wert von TEMP4[17:0] addiert und das Ergebnis wird in DEST[31:0] zurückgespeichert.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung wird in der 15 veranschaulicht. Das Verfahren kann innerhalb des Kontexts der Prozessor- und Systemarchitekturen, die oben beschrieben sind, implementiert werden, ist jedoch nicht auf irgendeine bestimmte Systemarchitektur beschränkt.
  • In 1501 wird ein Befehl abgerufen, der Felder für einen Opcode, erste und zweite Quelloperanden, die gepackte vorzeichenbehaftete Bytes angeben, einen dritten Quelloperanden, der gepackte vorzeichenbehaftete Doppelwörter angibt, und einen Zieloperanden, der gepackte vorzeichenbehaftete Doppelwörter angibt, aufweist. Bei 1502 wird der Befehl decodiert, um einen decodierten Befehl zu generieren (z. B. in mehrere Mikrooperationen, welche die Multiplikationen, Additionen und anderen beschriebenen Operationen durchführen). In 1503 werden die gepackten vorzeichenbehafteten Bytes für den ersten und den zweiten Operanden abgefragt (z. B. aus dem Speicher, einem Daten-Cache usw.) und jeweils in einem ersten bzw. zweiten Quellregister gespeichert. Wie erwähnt worden ist, sind in einer Ausführungsform das dritte Quellregister und das Zielregister dasselbe Register, das den dritten Quelloperanden speichert. Die hier beschriebenen vorzeichenbehafteten Bytewerte und Doppelwortwerte können in gepackten 128-Bit Datenquell-Registern (z. B. mit 16-Byte pro Register) gespeichert werden.
  • Bei 1504 wird der decodierte Befehl ausgeführt (oder vielmehr werden die durch Decodieren generierten Mikrooperationen ausgeführt), um jedes gepackte vorzeichenbehaftete Byte aus dem ersten Quellregister mit einem entsprechenden gepackten vorzeichenbehafteten Byte aus dem zweiten Quellregister zu multiplizieren, um erste Ergebnisse zu generieren. In mindestens einer Ausführungsform sind die ersten Ergebnisse 18-Bit temporäre Produkte, gespeichert an temporären Speicherorten (z. B. in Registern oder System-/Cache-Speichern). Sätze der ersten Ergebnisse werden dann kombiniert, um zweite Ergebnisse zu generieren. Beispielsweise können vier Sätze von vier temporären Produkten zusammengruppiert und addiert werden, um vier Summen zu generieren. Jede der vier Summen wird an einem 18-Bit temporären Speicherort gespeichert, die vier Summen werden negiert (z. B. unter Verwendung von Zweierkomplementnegation wie zuvor beschrieben) und auf 32-Bit Ergebnisse vorzeichenerweitert. Die resultierenden vier 32-Bit Ergebnisse werden akkumuliert (z. B. addiert) mit vier Doppelwortwerten aus dem dritten Quell-/Zielregister, um vier Doppelwortwertergebnisse zu generieren, welche, bei 1505, in das Zielregister zurückgespeichert werden
  • In der vorstehenden Beschreibung sind die Ausführungsformen der Erfindung unter Bezugnahme auf spezifische beispielhafte Ausführungsformen davon beschrieben worden. 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 Spezifikation und die Zeichnungen sind entsprechend als veranschaulichend und nicht als einschränkend zu betrachten.
  • Ausführungsformen der Erfindung können verschieden Schritte beinhalten, die oben beschrieben worden sind. 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 Hardware-Komponenten, die festverdrahtete Logik zum Durchführen der Schritte enthalten, oder durch irgendeine Kombination programmierter Computerkomponenten und angepasster Hardware-Komponenten durchgeführt werden.
  • Wie hierin beschrieben, können sich Befehle auf spezifische Konfigurationen von Hardware, wie zum Beispiel anwendungsspezifische integrierte Schaltungen (Application Specific Integrated Circuits, ASICs), die dazu konfiguriert sind, bestimmte Operationen durchzuführen, oder eine vorher festgelegte Funktionalität aufweisen, oder Software-Befehle, 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 Einrichtungen (z. B. einer Endstation, einem Netzwerkelement usw.) gespeichert und ausgeführt werden. Diese elektronischen Einrichtungen speichern und kommunizieren (intern und/oder mit anderen elektronischen Einrichtungen ü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-SpeicherEinrichtungen; Phasenwechselspeicher) und flüchtige computermaschinenlesbare 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 Einrichtungen ü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/-ausgabeeinrichtungen (z. B. eine Tastatur, ein 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 Speichereinrichtung bzw. die Signale, die den Netzwerkverkehr tragen, stellen ein oder mehrere maschinenlesbare Speichermedien und maschinenlesbare Kommunikationsmedien dar. Somit speichert die Speichereinrichtung einer gegebenen elektronischen Einrichtung üblicherweise Code und/oder Daten zur Ausführung auf dem Satz von einem oder mehreren Prozessoren dieser elektronischen Einrichtung. Selbstverständlich können ein oder mehrere Teile einer Ausführungsform der Erfindung unter Verwendung anderer Kombinationen von Software, Firmware und/oder Hardware implementiert werden. Ü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. Prozessor, umfassend: einen Decodierer zum Decodieren eines Befehls, wobei der Befehl einen Opcode und mehrere Operanden beinhaltet, die mehrere gepackte Datenquellregister und ein gepacktes Datenzielregister identifizieren; ein erstes Quellregister zum Speichern einer ersten Vielzahl von gepackten vorzeichenbehafteten Bytes; ein zweites Quellregister zum Speichern einer zweiten Vielzahl von gepackten vorzeichenbehafteten Bytes; Ausführungsschaltungsanordnung zum Ausführen des decodierten Befehls, wobei die Ausführungsschaltungsanordnung Folgendes umfasst: eine Multipliziererschaltungsanordnung zum Multiplizieren jedes gepackten vorzeichenbehafteten Bytes aus dem ersten Quellregister mit einem entsprechenden gepackten vorzeichenbehafteten Byte aus dem zweiten Quellregister, um mehrere temporäre Produkte zu generieren, eine Addiererschaltungsanordnung zum Addieren mehrerer Sätze der temporären Produkte, um mehrere temporäre Summen zu generieren; eine Negations- und Erweiterungsschaltungsanordnung zum Negieren und Erweitern von jeder der temporären Summen zu Doppelwortsummen; und eine Akkumulationsschaltungsanordnung zum Addieren von jeder der Doppelwortsummen zu einem Doppelwort aus einem dritten Quellregister, um endgültige Doppelwortergebnisse zu generieren; und ein gepacktes Datenzielregister zum Speichern der endgültigen Doppelwortergebnisse an spezifizierten Datenelementorten.
  2. Prozessor nach Anspruch 1, wobei das dritte Quellregister und das gepackte Datenzielregister dasselbe Register umfassen.
  3. Prozessor nach Anspruch 1 oder 2, wobei die Vielzahl von gepackten vorzeichenbehafteten Bytes 16 gepackte vorzeichenbehaftete Bytes in jedem des ersten und des zweiten Quellregisters umfasst.
  4. Prozessor nach Anspruch 1 oder 3, wobei die temporären Produkte an 18-Bit temporären Speicherorten gespeichert werden sollen.
  5. Prozessor nach Anspruch 1 oder 4, wobei die Negationsschaltungsanordnung eine Zweierkomplementnegation an den temporären Produkten durch Invertieren der Bits und Addieren von eins zu jedem der temporären Produkte durchführen soll.
  6. Prozessor nach Anspruch 1 oder 5, wobei die Erweiterungsschaltungsanordnung eine Vorzeichenerweiterungsschaltungsanordnung zum Durchführen von Vorzeichenerweiterung, um die Doppelwortsummen zu generieren, umfasst.
  7. Prozessor nach Anspruch 2, wobei die endgültigen Doppelwortergebnisse vier Doppelwortergebnisse umfassen und wobei jedes Doppelwortergebnis an einem Datenelementort in dem Zielregister gespeichert werden soll, der einem Ort des Doppelworts entspricht, das zum Generieren des Doppelwortergebnisses verwendet wurde.
  8. Verfahren, das Folgendes umfasst: Decodieren eines Befehls, wobei der Befehl einen Opcode und mehrere Operanden beinhaltet, die mehrere gepackte Datenquellregister und ein gepacktes Datenzielregister identifizieren; Ausführen des decodierten Befehls durch: Multiplizieren jedes gepackten vorzeichenbehafteten Bytes aus einem ersten Quellregister mit einem entsprechenden gepackten vorzeichenbehafteten Byte aus einem zweiten Quellregister, um mehrere temporäre Produkte zu generieren, Addieren mehrerer Sätze der temporären Produkte, um mehrere temporäre Summen zu generieren, Negieren und Erweitern von jeder der temporären Summen zu Doppelwortsummen, Addieren von jeder der Doppelwortsummen zu einem Doppelwort aus einem dritten Quellregister, um endgültige Doppelwortergebnisse zu generieren, und Speichern der endgültigen Doppelwortergebnisse an spezifizierten Datenelementorten in einem gepackten Datenzielregister.
  9. Verfahren nach Anspruch 8, wobei das dritte Quellregister und das gepackte Datenzielregister dasselbe Register umfassen.
  10. Verfahren nach Anspruch 8 oder 9, wobei die Vielzahl von gepackten vorzeichenbehafteten Bytes 16 gepackte vorzeichenbehaftete Bytes in jedem des ersten und des zweiten Quellregisters umfasst.
  11. Verfahren nach Anspruch 8 oder 10, wobei die temporären Produkte an 18-Bit temporären Speicherorten gespeichert werden sollen.
  12. Verfahren nach Anspruch 8 oder 11, wobei die Negationsschaltungsanordnung eine Zweierkomplementnegation an den temporären Produkten durch Invertieren der Bits und Addieren von eins zu jedem der temporären Produkte durchführen soll.
  13. Verfahren nach Anspruch 8 oder 12, wobei die Erweiterungsschaltungsanordnung eine Vorzeichenerweiterungsschaltungsanordnung zum Durchführen von Vorzeichenerweiterung, um die Doppelwortsummen zu generieren, umfasst.
  14. Verfahren nach Anspruch 9, wobei die endgültigen Doppelwortergebnisse vier Doppelwortergebnisse umfassen und wobei jedes Doppelwortergebnis an einem Datenelementort in dem Zielregister gespeichert werden soll, der einem Ort des Doppelworts entspricht, das zum Generieren des Doppelwortergebnisses verwendet wurde.
  15. Maschinenlesbares Medium mit darauf gespeichertem Programmcode, der beim Ausführen durch eine Maschine bewirkt, dass die Maschine die folgenden Operationen durchführt: Decodieren eines Befehls, wobei der Befehl einen Opcode und mehrere Operanden beinhaltet, die mehrere gepackte Datenquellregister und ein gepacktes Datenzielregister identifizieren; Ausführen des decodierten Befehls durch: Multiplizieren jedes gepackten vorzeichenbehafteten Bytes aus einem ersten Quellregister mit einem entsprechenden gepackten vorzeichenbehafteten Byte aus einem zweiten Quellregister, um mehrere temporäre Produkte zu generieren, Addieren mehrerer Sätze der temporären Produkte, um mehrere temporäre Summen zu generieren, Negieren und Erweitern von jeder der temporären Summen zu Doppelwortsummen, Addieren von jeder der Doppelwortsummen zu einem Doppelwort aus einem dritten Quellregister, um endgültige Doppelwortergebnisse zu generieren, und Speichern der endgültigen Doppelwortergebnisse an spezifizierten Datenelementorten in einem gepackten Datenzielregister.
  16. Maschinenlesbares Medium nach Anspruch 15, wobei das dritte Quellregister und das gepackte Datenzielregister dasselbe Register umfassen.
  17. Maschinenlesbares Medium nach Anspruch 15 oder 16, wobei die Vielzahl von gepackten vorzeichenbehafteten Bytes 16 gepackte vorzeichenbehaftete Bytes in jedem des ersten und des zweiten Quellregisters umfasst.
  18. Maschinenlesbares Medium nach Anspruch 15 oder 17, wobei die temporären Produkte an 18-Bit temporären Speicherorten gespeichert werden sollen.
  19. Maschinenlesbares Medium nach Anspruch 15 oder 18, wobei die Negationsschaltungsanordnung eine Zweierkomplementnegation an den temporären Produkten durch Invertieren der Bits und Addieren von eins zu jedem der temporären Produkte durchführen soll.
  20. Maschinenlesbares Medium nach Anspruch 15 oder 19, wobei die Erweiterungsschaltungsanordnung eine Vorzeichenerweiterungsschaltungsanordnung zum Durchführen von Vorzeichenerweiterung, um die Doppelwortsummen zu generieren, umfasst.
  21. Maschinenlesbares Medium nach Anspruch 16, wobei die endgültigen Doppelwortergebnisse vier Doppelwortergebnisse umfassen und wobei jedes Doppelwortergebnis an einem Datenelementort in dem Zielregister gespeichert werden soll, der einem Ort des Doppelworts entspricht, das zum Generieren des Doppelwortergebnisses verwendet wurde.
  22. Vorrichtung, die Folgendes umfasst: ein Mittel zum Decodieren eines Befehls, wobei der Befehl einen Opcode und mehrere Operanden beinhaltet, die mehrere gepackte Datenquellregister und ein gepacktes Datenzielregister identifizieren; ein Mittel zum Speichern einer ersten Vielzahl von gepackten vorzeichenbehafteten Bytes in einem ersten Quellregister; ein Mittel zum Speichern einer zweiten Vielzahl von gepackten vorzeichenbehafteten Bytes in einem zweiten Quellregister; ein Mittel zum Ausführen des decodierten Befehls durch: Multiplizieren jedes gepackten vorzeichenbehafteten Bytes aus dem ersten Quellregister mit einem entsprechenden gepackten vorzeichenbehafteten Byte aus dem zweiten Quellregister, um mehrere temporäre Produkte zu generieren, Addieren mehrerer Sätze der temporären Produkte, um mehrere temporäre Summen zu generieren, Negieren und Erweitern von jeder der temporären Summen zu Doppelwortsummen, Addieren von jeder der Doppelwortsummen zu einem Doppelwort aus einem dritten Quellregister, um endgültige Doppelwortergebnisse zu generieren, und Speichern der endgültigen Doppelwortergebnisse an spezifizierten Datenelementorten in einem gepackten Datenzielregister.
  23. Vorrichtung nach Anspruch 22, wobei das dritte Quellregister und das gepackte Datenzielregister dasselbe Register umfassen.
  24. Vorrichtung nach Anspruch 22 oder 23, wobei die Vielzahl von gepackten vorzeichenbehafteten Bytes 16 gepackte vorzeichenbehaftete Bytes in jedem des ersten und des zweiten Quellregisters umfasst.
  25. Vorrichtung nach Anspruch 22 oder 24, wobei die temporären Produkte an 18-Bit temporären Speicherorten gespeichert werden sollen.
DE102018129263.5A 2017-12-21 2018-11-21 Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes Pending DE102018129263A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/850,499 US10705839B2 (en) 2017-12-21 2017-12-21 Apparatus and method for multiplying, summing, and accumulating sets of packed bytes
US15/850,499 2017-12-21

Publications (1)

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

Family

ID=66768615

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018129263.5A Pending DE102018129263A1 (de) 2017-12-21 2018-11-21 Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes

Country Status (3)

Country Link
US (1) US10705839B2 (de)
CN (1) CN109947471A (de)
DE (1) DE102018129263A1 (de)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11366663B2 (en) 2018-11-09 2022-06-21 Intel Corporation Systems and methods for performing 16-bit floating-point vector dot product instructions
US11372643B2 (en) 2018-11-09 2022-06-28 Intel Corporation Systems and methods for performing instructions to convert to 16-bit floating-point format
CN112631657A (zh) * 2019-09-24 2021-04-09 阿里巴巴集团控股有限公司 用于字符串处理的字节比较方法以及指令处理装置
CN111443948B (zh) * 2020-03-30 2022-09-09 龙芯中科技术股份有限公司 指令执行方法、处理器和电子设备
CN116501385B (zh) * 2022-12-16 2024-04-09 海光信息技术股份有限公司 指令处理方法、处理器、芯片及计算机设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7395298B2 (en) * 1995-08-31 2008-07-01 Intel Corporation Method and apparatus for performing multiply-add operations on packed data
US20060149804A1 (en) * 2004-11-30 2006-07-06 International Business Machines Corporation Multiply-sum dot product instruction with mask and splat
GB2464292A (en) * 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US9804840B2 (en) * 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction

Also Published As

Publication number Publication date
CN109947471A (zh) 2019-06-28
US10705839B2 (en) 2020-07-07
US20190196813A1 (en) 2019-06-27

Similar Documents

Publication Publication Date Title
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
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
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE102018005859A1 (de) Einrichtung und Verfahren zur Multiplikation und Akkumulation von komplexen und echten gepackten Datenelementen
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE112013003735T5 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE102018128626A1 (de) Systeme, Verfahren und Vorrichtungen für Matrixoperationen
DE102018125971A1 (de) Systeme und verfahren zum berechnen von skalaprodukten von halbbytes in operanden aus zwei kacheln
DE102018129273A1 (de) Einrichtung und verfahren zum vektor-multiplizieren; und -akkumulieren von unsignierten doppelwörtern
DE102018131484A1 (de) Einrichtung und verfahren zum vektormultiplizieren und zur subtraktion von vorzeichenbehafteten doppelwörtern

Legal Events

Date Code Title Description
R012 Request for examination validly filed