DE102018132196A1 - Vorrichtung und verfahren zum verarbeiten von reziproken quadratwurzeloperationen - Google Patents

Vorrichtung und verfahren zum verarbeiten von reziproken quadratwurzeloperationen Download PDF

Info

Publication number
DE102018132196A1
DE102018132196A1 DE102018132196.1A DE102018132196A DE102018132196A1 DE 102018132196 A1 DE102018132196 A1 DE 102018132196A1 DE 102018132196 A DE102018132196 A DE 102018132196A DE 102018132196 A1 DE102018132196 A1 DE 102018132196A1
Authority
DE
Germany
Prior art keywords
data item
input data
coefficients
packed
processor
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
DE102018132196.1A
Other languages
English (en)
Inventor
Cristina Anderson
Elmoustapha Ould-Ahmed-Vall
Marius Cornea-Hasegan
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 DE102018132196A1 publication Critical patent/DE102018132196A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/552Powers or roots, e.g. Pythagorean sums
    • G06F7/5525Roots or inverse roots of single operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/02Digital function generators
    • G06F1/03Digital function generators working, at least partly, by table look-up
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/552Indexing scheme relating to groups G06F7/552 - G06F7/5525
    • G06F2207/5521Inverse root of a number or a function, e.g. the reciprocal of a Pythagorean sum

Landscapes

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

Abstract

Eine Vorrichtung und ein Verfahren zum Durchführen einer reziproken Quadratwurzel. Zum Beispiel umfasst eine Ausführungsform eines Prozessors: einen Decodierer, um einen reziproken Quadratwurzelbefehl zu decodieren, um einen decodierten reziproken Quadratwurzelbefehl zu generieren; ein Quellenregister, um mindestens ein gepacktes Eingabedatenelement zu speichern; ein Zielregister, um ein Ergebnisdatenelement zu speichern; und eine Ausführungsverschaltung für reziproke Quadratwurzeln, um den decodierten reziproken Quadratwurzelbefehl auszuführen, wobei die Ausführungsverschaltung für reziproke Quadratwurzeln einen ersten Abschnitt des gepackten Eingabedatenelements als einen Index für eine Datenstruktur zu verwenden hat, die eine Vielzahl von Sätzen von Koeffizienten enthält, um einen ersten Satz von Koeffizienten aus der Vielzahl der Sätze zu identifizieren, wobei die Ausführungsverschaltung für reziproke Quadratwurzeln unter Verwendung einer Kombination der Koeffizienten und eines zweiten Abschnitts des gepackten Eingabedatenelements eine reziproke Quadratwurzel des gepackten Eingabedatenelements zu erzeugen hat.

Description

  • STAND DER TECHNIK
  • Gebiet der Erfindung
  • Die Ausführungsformen der Erfindung betreffen allgemein das Gebiet der Computerprozessoren. Genauer betreffen die Ausführungsformen eine Vorrichtung und ein Verfahren zum Verarbeiten von fraktionalen Umkehr- und reziproken Quadratwurzeloperationen.
  • Beschreibung der verwandten Technik
  • Ein Befehlssatz oder eine Befehlssatzarchitektur (ISA) ist der Teil der Computerarchitektur, der mit Programmierung verbunden ist und die nativen Datentypen, Befehle, Registerarchitektur, Adressierungsarten, Arbeitsspeicherarchitektur, Interrupt- und Ausnahmebehandlung und externe Eingabe und Ausgabe (E/A) enthält. 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 Decoders eines Prozessors, der Makrobefehle decodiert. Die Mikrobefehle oder Mikro-Ops können ausgelegt sein, eine Ausführungseinheit am Prozessor anzuweisen, Operationen durchzuführen, um die mit dem Makrobefehl assoziierte Logik zu implementieren.
  • Die ISA unterscheidet sich von der Mikroarchitektur, die der Satz von Prozessordesigntechniken ist, der zum Implementieren des Befehlssatzes verwendet wird. Prozessoren mit verschiedenen Mikroarchitekturen können einen gemeinsamen Befehlssatz teilen. Zum Beispiel implementieren Intel® Pentium 4-Prozessoren, Intel® Core™-Prozessoren und Prozessoren von Advanced Micro Devices, Inc. in Sunnyvale, CA, nahezu identische Versionen des x86-Befehlssatzes (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden), weisen jedoch verschiedene interne Konstruktionen 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 physischer Register, wobei ein oder mehrere dynamisch zugeordnete physische Register einen Registerumbenennungsmechanismus verwenden (z. B. die Verwendung einer Registeraliastabelle (Register Alias Table, RAT), eines Neuordnungspuffers (Reorder Buffer, ROB) und einer Stilllegungsregisterdatei). 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. physisches Register, Neuordnungspuffer, Stilllegungsregister, Register-Pool).
  • Multiplikation-Akkumulation ist eine übliche digitale Signalverarbeitungsoperation, bei der das Produkt von zwei Zahlen berechnet und zu einem akkumulierten Wert addiert wird. Bestehende Einzelbefehls-Mehrfachdaten(SIMD)-Mikroarchitekturen implementieren Multiplikation-Akkumulations-Operationen durch Ausführen einer Folge von Befehlen. Zum Beispiel kann eine Multiplikation-Akkumulation mit einem Multiplikationsbefehl, gefolgt von einer 4-Wege-Addition und dann einer Akkumulation mit den Ziel-Quadwort-Daten zum Erzeugen von zwei gesättigten 64-Bit-Ergebnissen ausgeführt werden.
  • Figurenliste
    • Ein besseres Verständnis der vorliegenden Erfindung kann aus der folgenden ausführlichen Beschreibung in Verbindung mit den folgenden Zeichnungen erhalten werden, wobei Folgendes gilt:
    • 1A und 1B sind Blockdiagramme, die ein generisches vektorgerechtes Befehlsformat und dessen Befehlsvorlagen 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-, Decodier-, Stilllegungs-Pipeline als auch eine beispielhafte Registerumbenennungs-, Out-of-Order-Ausgabe-/Ausführungs-Pipeline nach Ausführungsformen der Erfindung illustriert;
    • 4B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines In-Order-Kerns für Abrufen, Decodieren, Stilllegung 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 einzelnen Prozessorkerns zusammen mit seiner Verbindung zu einem rohchipinternen Zwischenverbindungsnetz;
    • 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 integrierter Arbeitsspeichersteuerung 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 Ein-Chip-Systems (SoC) gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 11 veranschaulicht ein Blockdiagramm, das die Verwendung eines Software-Befehlswandlers zum Umwandeln 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 gepackte Datenelemente, die reelle und komplexe Werte gemäß einer Ausführungsform enthalten;
    • 14 veranschaulicht eine Ausführungsform einer Architektur, auf der fraktionale Umkehr- und reziproke Quadratwurzelbefehle implementiert werden können;
    • 15 veranschaulicht ein Beispiel einer Ausführungsform zum Verarbeiten fraktionaler Umkehrbefehle;
    • 16 veranschaulicht ein Verfahren zum Verarbeiten fraktionaler Umkehroperationen gemäß einer Ausführungsform der Erfindung;
    • 17 veranschaulicht ein Beispiel einer Ausführungsform zum Verarbeiten fraktionaler Umkehrbefehle; und
    • 18 veranschaulicht ein Verfahren zum Verarbeiten fraktionaler Umkehroperationen 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 zugrunde liegenden Prinzipien der Ausführungsformen der Erfindung unverständlich werden.
  • BEISPIELHAFTE PROZESSORARCHITEKTUREN, BEFEHLSFORMATE UND DATENTYPEN
  • Ein Befehlssatz enthält ein 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. Manche Befehlsformate sind ferner durch die Definition von Befehlsvorlagen (oder Teilformaten) aufgegliedert. Zum Beispiel können die Befehlsvorlagen 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. Deshalb wird jeder Befehl einer ISA unter Verwendung eines bestimmten Befehlsformats ausgedrückt (und, falls definiert, in einer bestimmten der Befehlsvorlagen 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 des hierin beschriebenen Befehls bzw. der hierin beschriebenen Befehle können in unterschiedlichen Formaten ausgeführt werden. Zusätzlich werden beispielhafte Systeme, Architekturen und Pipelines nachfolgend ausführlich beschrieben. Ausführungsformen des Befehls bzw. der Befehle können auf derartigen Systemen, Architekturen und Pipelines ausgeführt werden, sind jedoch nicht auf die besprochenen beschränkt.
  • Generisches vektorfreundliches Befehlsformat
  • Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (zum Beispiel gibt es bestimmte Felder, die für Vektorvorgänge 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.
  • 1A-1B sind Blockdiagramme, die ein generisches vektorgerechtes Befehlsformat und Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulichen. 1A ist ein Blockdiagramm, das ein generisches vektorgerechtes Befehlsformat und Klasse-A-Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulicht; während 1B ein Blockdiagramm ist, das das generische vektorgerechte Befehlsformat und Klasse-B-Befehlsvorlagen davon gemäß Ausführungsformen der Erfindung veranschaulicht. Genauer, ein generisches vektorgerechtes Befehlsformat 100, für das Klasse-A- und Klasse-B-Befehlsvorlagen definiert sind, die beide Befehlsvorlagen 105 ohne Arbeitsspeicherzugriff und Befehlsvorlagen 120 mit Arbeitsspeicherzugriff 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 Datenelementbreiten (oder -größen) von 32 Bit (4 Byte) oder 64 Bit (8 Byte) (und somit besteht ein 64-Byte-Vektor entweder aus 16 Elementen mit Doppelwortgröße oder alternativ dazu aus 8 Elementen mit Quadwortgröße); eine 64-Byte-Vektoroperandenlänge (oder - größe) mit Datenelementbreiten (oder -größen) von 16 Bit (2 Byte) oder 8 Bit (1 Byte); eine 32-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); und eine 16-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); können alternative Ausführungsformen mehr, weniger und/oder andere Vektoroperandengrößen unterstützen (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder andere Datenelementbreiten (z. B. Datenelementbreiten von 128 Bit (16 Byte)).
  • Die Klasse-A-Befehlsvorlagen in 1A enthalten: 1) innerhalb der Befehlsvorlagen 105 ohne Arbeitsspeicherzugriff ist eine Befehlsvorlage für eine Operation 110 vom vollen Rundungssteuertyp ohne Arbeitsspeicherzugriff und eine Befehlsvorlage für eine Operation 115 vom Datentransformationstyp ohne Arbeitsspeicherzugriff gezeigt; und 2) innerhalb der Befehlsvorlagen 120 mit Arbeitsspeicherzugriff ist eine zeitliche Befehlsvorlage mit Arbeitsspeicherzugriff 125 und eine nicht zeitliche Befehlsvorlage mit Arbeitsspeicherzugriff 130 gezeigt. Die Klasse-B-Befehlsvorlagen in der 1B enthalten Folgendes: 1) in den Befehlsvorlagen ohne Arbeitsspeicherzugriff 105 wird eine Operationsbefehlsvorlage 112 ohne Arbeitsspeicherzugriff vom vollständigen Schreibmaskensteuerungs- und teilweisen Rundungssteuerungstyp und eine Operationsbefehlsvorlage 117 ohne Arbeitsspeicherzugriff vom Schreibmaskensteuerungs-vsize-Typ gezeigt; und 2) in den Befehlsvorlagen mit Arbeitsspeicherzugriff 120 wird eine Schreibmaskensteuerungsbefehlsvorlage 127 mit Arbeitsspeicherzugriff gezeigt.
  • Das generische vektorgerechte Befehlsformat 100 enthält die unten aufgeführten folgenden Felder in der in den 1A-1B veranschaulichten Reihenfolge.
  • Formatfeld 140 - Ein spezifischer Wert (ein Befehlsformatidentifikatorwert) in diesem Feld identifiziert das vektorgerechte Befehlsformat eindeutig und somit Fälle des Auftretens von Befehlen im vektorgerechten Befehlsformat in Befehlsströmen. Als solches ist dieses Feld in dem Sinne optional, dass es für einen Befehlssatz, der nur das generische vektorgerechte Befehlsformat aufweist, nicht erforderlich ist.
  • Basisoperationsfeld 142 - Sein Inhalt unterscheidet verschiedene Basisoperationen.
  • Registerindexfeld 144 - Sein Inhalt spezifiziert direkt oder durch Adressgenerierung die Orte der Quell- und Zieloperanden an, egal ob in Registern oder in Arbeitsspeicher. Diese enthalten eine ausreichende Anzahl von Bits, um N Register aus einer P×Q-Registerdatei (z. B. 32×512, 16×128, 32×1024, 64×1024) auszuwählen. Während in einer Ausführungsform N bis zu drei Quellen- und ein Zielregister sein kann, können alternative Ausführungsformen mehr oder weniger Quellen- und Zielregister unterstützen (z. B. können sie bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel fungiert, können sie bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel fungiert, können sie bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifikatorfeld 146 - Sein Inhalt unterscheidet Fälle des Auftretens von Befehlen in dem generischen Vektorbefehlsformat, die einen Arbeitsspeicherzugriff angeben, von denen, die dies nicht tun; das heißt, es unterscheidet zwischen Befehlsvorlagen ohne Arbeitsspeicherzugriff 105 und Befehlsvorlagen mit Arbeitsspeicherzugriff 120. Arbeitsspeicherzugriffsoperationen lesen aus der Arbeitsspeicherhierarchie 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 Arbeitsspeicherzugriff dies nicht tun (z. B. sind die Quelle und die Ziele Register). Während in einer Ausführungsform dieses Feld auch aus drei verschiedenen Wegen zum Durchführen von Arbeitsspeicheradressenberechnungen auswählt, können alternative Ausführungsformen mehr, weniger oder unterschiedliche Wege zum Durchführen von Arbeitsspeicheradressenberechnungen 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 ist dieses Feld in ein Klassenfeld 168, ein Alphafeld 152 und ein Betafeld 154 aufgeteilt. 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 Indexfelds zur Arbeitsspeicheradressgenerierung (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis verwendet).
  • Offsetfeld 162A - Sein Inhalt wird als Teil der Arbeitsspeicheradressgenerierung verwendet (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis + Verschiebung verwendet).
  • Offsetfaktorfeld 162B (es sei darauf hingewiesen, dass die Anordnung des Offsetfeldes 162A direkt über dem Offsetfaktorfeld 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 Arbeitsspeicherzugriffs (N) skaliert werden soll - wobei N die Anzahl von Byte im Arbeitsspeicherzugriff ist (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis + skalierte Verschiebung verwendet). Redundante niederwertige Bits werden ignoriert, und somit wird der Inhalt des Offsetfaktorfeldes mit der Gesamtgröße (N) des Arbeitsspeicheroperanden 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 Offsetfeld 162A und das Offsetfaktorfeld 162B sind in dem Sinn optional, dass sie für die Befehlsvorlagen ohne Arbeitsspeicherzugriff 105 nicht verwendet werden und/oder andere Ausführungsformen nur eines oder keines der beiden implementieren können.
  • Datenelementbreitenfeld 164 - Sein Inhalt unterscheidet, welche einer Reihe von Datenelementbreiten verwendet werden soll (in einigen Ausführungsformen für alle Befehle; in anderen Ausführungsformen nur für einige der Befehle). Dieses Feld ist in dem Sinne optional, dass es nicht erforderlich ist, wenn nur eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unter Verwendung einiger Aspekt der Opcodes unterstützt werden.
  • Schreibmaskenfeld 170 - Sein Inhalt steuert für jede Datenelementposition einzeln, ob diese Datenelementposition im Zielvektoroperand das Ergebnis der Basisoperation und der Ergänzungsoperation widerspiegelt. Befehlsvorlagen der Klasse A unterstützen eine Schreimaskenanwendung mit Zusammenführen, während Befehlsvorlagen der Klasse B sowohl eine Schreibmaskenanwendung mit Zusammenführen als auch eine mit Nullsetzen unterstützen. Beim Zusammenführen ermöglichen Vektormasken, dass ein beliebiger Satz von Elementen im Ziel vor Aktualisierungen während der Ausführung einer beliebigen Operation (die durch die Basisoperation und die Zusatzoperation spezifiziert ist) geschützt ist; in einer anderen Ausführungsform Beibehalten des alten Werts jedes Elements des Ziels, wobei das entsprechende Maskenbit eine 0 aufweist. 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. Eine Teilmenge dieser Funktionalität ist die Fähigkeit, die Vektorlänge der Operation, die durchgeführt wird, zu steuern (das heißt den Umfang der Elemente, die modifiziert werden, vom ersten bis zum letzten); es ist jedoch nicht notwendig, dass die Elemente, die modifiziert werden, aufeinanderfolgend sind. Deshalb ermöglicht das Schreibmaskenfeld 170 teilweise Vektoroperationen, einschließlich Lade-, Speicher-, arithmetische, logische Vorgänge usw. Während Ausführungsformen der Erfindung beschrieben werden, in denen der Inhalt des Schreibmaskenfelds 170 eines von einer Anzahl von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske beinhaltet (und deshalb identifiziert der Inhalt des Schreibmaskenfelds 170 diese durchzuführende Maskierung indirekt), ermöglichen alternative Ausführungsformen stattdessen oder zusätzlich, dass der Inhalt des Schreibmaskenfelds 170 direkt die durchzuführende Maskierung angibt.
  • Direktfeld 172 - Sein Inhalt ermöglicht die Angabe eines direkten Elements. Dieses Feld ist in dem Sinn optional, dass es in einer Implementierung des generischen vektorfreundlichen Formats nicht vorhanden ist, das keinen Direktoperanden unterstützt, und es in Befehle nicht vorhanden ist, die keinen Direktoperanden 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 Vierecke mit abgerundeten Ecken verwendet, um anzuzeigen, dass ein bestimmter Wert in einem Feld vorhanden ist (z. B. Klasse A 168A bzw. Klasse B 168B für das Klassenfeld 168 in den 1A-B).
  • Befehlsvorlagen der Klasse A
  • Im Falle der Befehlsvorlagen 105 der Klasse A ohne Arbeitsspeicherzugriff wird das Alpha-Feld 152 als ein RS-Feld 152A interpretiert, dessen Inhalt unterscheidet, welche der unterschiedlichen Ergänzungsoperationstypen durchgeführt werden sollen (z. B. Runden 152A.1 und Datentransformation 152A.2 sind jeweils für die Befehlsvorlagen für Operation 110 vom Rundungstyp ohne Arbeitsspeicherzugriff bzw. die Operation 115 vom Datentransformationstyp ohne Arbeitsspeicherzugriff spezifiziert), während das Beta-Feld 154 unterscheidet, welche der Operationen des angegebenen Typs durchzuführen sind. In den Befehlsvorlagen ohne Arbeitsspeicherzugriff 105 sind das Skalierungsfeld 160, das Offsetfeld 162A und das Offsetskalierungsfeld 162B nicht vorhanden.
  • Befehlsvorlagen ohne Arbeitsspeicherzugriff - Operation vom vollen Rundungssteuertyp
  • In der Befehlsvorlage für die Operation vom vollen Rundungssteuertyp ohne Arbeitsspeicherzugriff 110 wird das Beta-Feld 154 als Rundungssteuerungsfeld 154A interpretiert, dessen Inhalt(e) statisches Runden bereitstellen. Während in den beschriebenen Ausführungsformen der Erfindung das Rundungssteuerungsfeld 154A ein Feld zum Unterdrücken aller Gleitkommaausnahmen (SAE) 156 und ein Rundungsoperationssteuerungsfeld 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 Rundungsoperationssteuerungsfeld 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 Gleitkommaausnahmen-Handler an.
  • Rundungsoperationssteuerungsfeld 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 der Rundenoperationssteuerbereich 158 das Ändern des Rundungsmodus für jeden Befehl einzeln. In einer Ausführungsform der Erfindung, in der ein Prozessor ein Steuerregister zum Angeben von Rundungsmodi enthält, ist der Inhalt des Rundungsoperationssteuerungsfelds 150 diesem Registerwert übergeordnet.
  • Befehlsvorlagen ohne Arbeitsspeicherzugriff - Operationen vom Datentransformationstyp
  • In der Befehlsvorlage ohne Arbeitsspeicherzugriff 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 einer Befehlsvorlage mit Arbeitsspeicherzugriff 120 der Klasse A wird das Alpha-Feld 152 als ein Entfernungshinweisfeld 152B interpretiert, dessen Inhalt unterscheidet, welcher der Entfernungshinweise zu verwenden ist (in 1A, wird zeitlich 152B.1 bzw. nicht zeitlich 152B.2 für die zeitliche Arbeitsspeicherzugriffs-Befehlsvorlage 125 bzw. die nicht zeitliche Arbeitsspeicherzugriffs-Befehlsvorlage 130 spezifiziert), während das Beta-Feld 154 als ein Datenmanipulationsfeld 154C interpretiert wird, dessen Inhalt unterscheidet, welche einer Anzahl von Datenmanipulationsoperationen (auch als Stammfunktionen bekannt) durchzuführen ist (z. B. keine Manipulation; Broadcast; Aufwärtskonversion einer Quelle; und Abwärtskonversion eines Ziels). Die Befehlsvorlagen mit Arbeitsspeicherzugriff 120 enthalten das Skalierungsfeld 160 und optional das Offsetfeld 162A oder das Offsetskalierungsfeld 162B.
  • Vektorspeicherbefehle führen ein Laden von Vektoren aus dem und ein Speichern von Vektoren in den Arbeitsspeicher mit Konvertierungsunterstützung durch. Wie bei normalen Vektorbefehlen übertragen Vektorspeicherbefehle Daten in einer datenelementweisen Art aus dem/in den Arbeitsspeicher, wobei die Elemente, die tatsächlich übertragen werden, durch den Inhalt der Vektormaske, die als die Schreibmaske ausgewählt ist, vorgegeben werden.
  • Befehlsvorlagen mit Arbeitsspeicherzugriff - zeitlich
  • Zeitliche Daten sind Daten, die wahrscheinlich bald genug wiederverwendet werden, um von einem Zwischenspeichern zu profitieren. Dies ist jedoch ein Hinweis, und unterschiedliche Prozessoren können ihn auf unterschiedliche Weise implementieren, einschließlich des vollständigen Ignorierens des Hinweises.
  • Befehlsvorlagen mit Arbeitsspeicherzugriff - nicht zeitlich
  • Nicht zeitliche Daten sind Daten, bei denen es unwahrscheinlich ist, dass sie bald genug wiederverwendet werden, um von einem Zwischenspeichern im Level-1-Zwischenspeicher zu profitieren, und denen Priorität für eine Entfernung gegeben werden sollte. Dies ist jedoch ein Hinweis, und unterschiedliche Prozessoren können ihn auf unterschiedliche Weise implementieren, einschließlich des vollständigen Ignorierens des Hinweises.
  • Befehlsvorlagen der Klasse B
  • Im Fall der Befehlsvorlagen der Klasse B wird das Alpha-Feld 152 als ein Feld der Schreibmaskensteuerung (Z) 152C interpretiert, dessen Inhalt unterscheidet, ob das durch das Schreibmaskenfeld 170 gesteuerte Schreibmaskieren ein Zusammenführen oder ein Nullsetzen sein soll.
  • Im Fall der Befehlsvorlagen 105 ohne Arbeitsspeicherzugriff 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 die Befehlsvorlage ohne Arbeitsspeicherzugriff, mit Schreibmaskensteuerung, mit Operation des Typs teilweise Rundungssteuerung 112 bzw. die Befehlsvorlage ohne Arbeitsspeicherzugriff, 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 Befehlsvorlagen ohne Arbeitsspeicherzugriff 105 sind das Skalierungsfeld 160, das Offsetfeld 162A und das Offsetskalierungsfeld 162B nicht vorhanden.
  • In der Operationsbefehlsvorlage vom vollständigen Rundungssteuerungstyp ohne Arbeitsspeicherzugriff 110 wird der Rest des Beta-Felds 154 als ein Rundungsoperationsfeld 159A interpretiert und die Ausnahmeereignismeldung ist deaktiviert (ein bestimmter Befehl meldet keine Art von Gleitkommaausnahmeflag und startet keinen Gleitkommaausnahmehandler).
  • Rundungsoperationssteuerungsfeld 159A - Genau wie beim Rundungsoperationssteuerungsfeld 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). Deshalb ermöglicht das Rundungsoperationssteuerungsfeld 159A das Ändern des Rundungsmodus pro Befehl. In einer Ausführungsform der Erfindung, in der ein Prozessor ein Steuerregister zum Angeben von Rundungsmodi enthält, ist der Inhalt des Rundungsoperationssteuerungsfelds 150 diesem Registerwert übergeordnet.
  • In der Operationsbefehlsvorlage 117 ohne Arbeitsspeicherzugriff vom Schreibmaskensteuerungs-VSIZE-Typ wird der Rest des Beta-Felds 154 als ein Vektorlängenfeld 159B interpretiert, dessen Inhalt unterscheidet, an welcher einer Anzahl von Datenvektorlängen die Operation durchzuführen ist (z. B. 128, 256 oder 512 Bytes).
  • Im Fall einer Befehlsvorlage 120 mit Arbeitsspeicherzugriff der Klasse B wird ein Teil des Beta-Felds 154 als ein Broadcastfeld 157B interpretiert, dessen Inhalt unterscheidet, ob die Datenmanipulation vom Broadcasttyp durchzuführen ist oder nicht, während der Rest des Beta-Felds 154 als das Vektorlängenfeld 159B interpretiert wird. Die Befehlsvorlagen mit Arbeitsspeicherzugriff 120 enthalten das Skalierungsfeld 160 und optional das Offsetfeld 162A oder das Offsetskalierungsfeld 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 Datenelementbreitenfeldes 164 gezeigt. Während eine Ausführungsform gezeigt ist, in der das vollständige Opcode-Feld 174 alle dieser Felder enthält, enthält das vollständige Opcode-Feld 174 weniger als alle dieser Felder in Ausführungsformen, die nicht alle davon unterstützen. Das Feld des vollständigen Opcodes 174 stellt den Operationscode (Opcode) bereit.
  • Das Ergänzungsoperationsfeld 150, das Datenelementbreitenfeld 164 und das Schreibmaskenfeld 170 ermöglichen, dass diese Merkmale für jeden Befehl einzeln in dem generischen vektorgerechten Befehlsformat spezifiziert werden.
  • Die Kombination aus Schreibmaskenfeld und Datenelementbreitenfeld erzeugt dahingehend typenbehaftete Befehle, dass sie ermöglichen, die Maske auf Grundlage unterschiedlicher Datenelementbreiten anzuwenden.
  • Die diversen Befehlsvorlagen, die in Klasse A und Klasse B zu finden sind, sind in unterschiedlichen Situationen vorteilhaft. 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. Ein Hochleistungs-Out-of-Order-Universalkern für Universalrechenzwecke kann zum Beispiel nur Klasse B unterstützen, ein Kern, der hauptsächlich für Grafik und/oder wissenschaftliches (Durchsatz-)Rechnen gedacht ist, kann nur Klasse A unterstützen und ein Kern, der für beides gedacht ist, kann beides unterstützen (natürlich liegt ein Kern, der eine Mischung von Vorlagen und Befehlen von beiden Klassen, aber nicht alle Vorlagen und Befehle von beiden Klassen aufweist, innerhalb des Geltungsbereichs 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
  • Eine VEX-Codierung ermöglicht, dass Befehle mehr als zwei Operanden aufweisen, und ermöglicht, dass SIMD-Vektorregister länger als 28 Bits sind. 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.
  • 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 Offsetfeld 262 und ein IMM8 272 enthält. 2B veranschaulicht, 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.
  • Das VEX-Präfix (Bytes 0-2) 202 ist in einer Drei-Byte-Form codiert. Das erste Byte ist das Formatfeld 290 (VEX-Byte 0, Bits [7:0]), das einen expliziten C4-Bytewert (den eindeutigen Wert, der zum Unterscheiden des C4-Befehlsformat verwendet wird) beinhaltet. Das zweite bis dritte Byte (VEX-Bytes 1-2) enthält eine Reihe von Bitfeldern, die eine spezifische Fähigkeit bereitstellen. Insbesondere besteht REX-Feld 205 (VEX-Byte 1, Bits [7-5]) aus einem VEX.R-Bitfeld (VEX-Byte 1, Bit [7] - R), einem VEX.X-Bitfeld (VEX-Byte 1, Bit [6] - X) und einem VEX.B-Bitfeld (VEX-Byte 1, Bit[5] - B). Andere Felder der Befehle codieren die niedrigeren drei Bits der Registerindizes, wie im Fachgebiet bekannt ist (rrr, xxx und bbb), sodass Rrrr, Xxxx und Bbbb durch Addieren von VEX.R, VEX.X und VEX.B gebildet werden können. Opcode-Abbildungsfeld 215 (VEX-Byte 1, Bits [4:0] - mmmmm) enthält Inhalt zum Codieren eines implizierten führenden Opcode-Bytes. W-Feld 264 (VEX-Byte 2, Bit [7] - W) - ist durch die Notation VEX.W dargestellt und stellt unterschiedliche Funktionen in Abhängigkeit vom Befehl bereit. Die Rolle von VEX.vvvv 220 (VEX-Byte 2, Bits [6:3]-ww) kann das Folgende beinhalten: 1) VEX.vvvv codiert den ersten Quellenregisteroperanden, der in invertierter (1er-Komplement-)Form angegeben ist und für Befehle mit 2 oder mehr Quellenoperationen gültig ist; 2) VEX.vvvv codiert den Zielregisteroperanden, der in Form eines 1er-Komplements für bestimmte Vektorverschiebungen angegeben ist; oder 3) VEX.vvw codiert keinen Operanden, das Feld ist reserviert und sollte 1111b beinhalten. 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 angegeben.
  • MOD-R/M-Feld 240 (Byte 4) enthält MOD-Feld 242 (Bits [7-6]), Reg-Feld 244 (Bits [5-3]) und R/M-Feld 246 (Bits [2-0]). Die Rolle des Reg-Felds 244 kann Folgendes enthalten: Codieren entweder des Zielregisteroperanden oder eines Quellenregisteroperanden (rrr von Rrrr) oder Behandlung als eine Opcode-Erweiterung und keine Verwendung zum Codieren irgendeines Befehlsoperanden. Die Rolle des R/M-Felds 246 kann Folgendes enthalten: Codieren des Befehlsoperanden, der eine Arbeitsspeicheradresse referenziert, oder Codieren von entweder dem Zielregisteroperanden oder einem Quellenregisteroperanden.
  • Skalierung, Index, Basis (SIB) - der Inhalt des Skalierungsfelds 250 (Byte 5) enthält SS252 (Bits [7-6]), was zur Arbeitsspeicheradressgenerierung 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 Direktfeld (IMM8) 272 enthalten Daten.
  • Beispielhafte Registerarchitektur
  • 3 ist ein Blockdiagramm einer Registerarchitektur 300 gemäß einer Ausführungsform der Erfindung. In der illustrierten Ausführungsform gibt es 32 Vektorregister 310, die 512 Bits breit sind; auf diese Register wird mit zmm0 bis zmmm31 verwiesen. 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 Arbeitsspeicheroperanden verwendet werden. Auf diese Register wird mit den Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 Bezug genommen.
  • Skalare Gleitkomma-Stapelregisterdatei (x87-Stapel) 345, auf der der MMX-gepackte ganzzahlige flache Registerdatei 350 ein Alias zugewiesen ist - In der veranschaulichten Ausführungsform ist der x87-Stapel ein Stapel mit acht Elementen, der verwendet wird, um unter Verwendung der x87-Befehlssatzerweiterung skalare Gleitkommaoperationen an 32/64/80-Bit-Gleitkommadaten durchzuführen; während die MMX-Register verwendet werden, um Operationen an 64-Bit-gepackten ganzzahligen Daten durchzuführen, sowie um Operanden für einige Operationen zu halten, die zwischen den MMX- und XMM-Registern durchgeführt werden.
  • Alternative Ausführungsformen der Erfindung können breitere oder schmälere Register verwenden. Zusätzlich können alternative Ausführungsformen der Erfindung mehr, weniger oder unterschiedliche Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf verschiedene Arten, für verschiedene Zwecke und in verschiedenen Prozessoren implementiert werden. Zum Beispiel können Implementierungen solcher Kerne Folgendes beinhalten: 1) einen Universal-In-Order-Kern, der für allgemeine Rechenzwecke gedacht ist; 2) einen Hochleistungs-Universal-Out-of-Order-Kern, der für allgemeine Rechenzwecke gedacht ist; 3) einen Kern für Sonderzwecke, der primär für Grafik- und/oder wissenschaftliches Rechnen (Durchsatzrechnen) gedacht ist. Implementierungen von verschiedenen Prozessoren können Folgendes enthalten: 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), die einen Coprozessor, der einen oder mehrere Spezialkerne, die hauptsächlich für Grafik- und/oder wissenschaftliches (Durchsatz-) Rechnen vorgesehen sind, enthält. Derartige unterschiedliche 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 werden Schaltkreise (Einheiten) ausführlich besprochen, die beispielhafte Kerne, Prozessoren usw. umfassen.
  • Beispielhafte Kernarchitekturen
  • 4A ist ein Blockdiagramm, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Registerumbenennungs-, Out-of-Order-Ausgabe-/Ausführungs-Pipeline nach Ausführungsformen der Erfindung illustriert. 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 Abrufphase 402, eine Längendecodierphase 404, eine Decodierphase 406, eine Zuordnungsphase 408, eine Umbenennungsphase 410, eine Zeitplanungsphase (auch als Versand- oder Ausgabephase bekannt) 412, eine Registerlese-/Speicherlesephase 414, eine Ausführungsphase 416, eine Zurückschreib-/Speicherschreibphase 418, eine Ausnahmebehandlungsphase 422 und eine Festschreibphase 424.
  • 4B zeigt einen Prozessorkern 490, der eine Front-End-Einheit 430 enthält, die an eine Ausführengineeinheit 450 gekoppelt ist, und beide sind an eine Arbeitsspeichereinheit 470 gekoppelt. Der Kern 490 kann ein Reduced-Instruction-Set-Computing(RISC)-Kern, ein Complex-Instruction-Set-Computing(CISC)-Kern, ein Very-Long-lnstruction-Word(VLIW)-Kern oder ein Hybrid- oder alternativer Kerntyp sein. Als noch eine weitere Option kann der Kern 490 ein Kern für Sonderzwecke sein, wie zum Beispiel ein Netzwerk- oder Kommunikationskern, eine Komprimierungsengine, ein Coprozessorkern, einen Kern einer Grafikverarbeitungseinheit für allgemeine Rechenzwecke (GPGPU), ein Grafikkern oder Ähnliches.
  • Die Front-End-Einheit 430 enthält eine
  • Verzweigungsvorhersageeinheit 432, die an eine Befehls-ZwischenspeicherEinheit 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 verschiedener 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 enthält der Kern 490 einen Mikrocode-ROM oder ein anderes Medium, 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 in der Ausführungsengineeinheit 450 an eine Umbenennungs-/Zuordnungseinheit 452 gekoppelt.
  • Die Ausführungsengineeinheit 450 enthält die an eine Stilllegungseinheit 454 gekoppelte Umbenennungs-/Zuordnungseinheit 452 und einen Satz von einer oder mehreren Planungseinheiten 456. Die Planungseinheit(en) 456 stellt bzw. stellen irgendeine Anzahl von unterschiedlichen Planern dar, einschließlich Reservierungsstationen, zentrales Befehlsfenster usw. Die Planungseinheit(en) 456 ist bzw. sind an die Einheit(en) der physischen Registerdatei(en) 458 gekoppelt. Jede der physischen Registerdateieinheit(en) 458 repräsentiert eine oder mehrere physische Registerdateien, von denen verschiedene einen oder mehrere verschiedene Datentypen speichern, wie skalare ganze Zahl, skalares Gleitkomma, gepackte ganze Zahl, gepacktes Gleitkomma, vektorielle ganze Zahl, vektorielles Gleitkomma, Status (z. B. einen Anweisungszeiger, der die Adresse der nächsten auszuführenden Anweisung ist) usw. In einer Ausführungsform umfasst die Einheit der physischen Registerdatei(en) 458 eine Vektorregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister und Universalregister bereitstellen. Die physische(n) Registerdatei(en)-Einheit(en) 458 wird bzw. werden von der Stilllegungseinheit 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 Stilllegungsregisterdatei(en), unter Verwendung von Zukunftsdatei(en), von Verlaufspuffer(n) und von Stilllegungsregisterdatei(en), unter Verwendung von Registerabbildungen und eines Pools von Registern usw.). Die Stilllegungseinheit 454 und die physische(n) Registerdateieinheit(en) 458 sind an das bzw. die Ausführungscluster 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 Arbeitsspeicherzugriffseinheiten 464. Die Ausführungseinheiten 462 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und an verschiedenen Datentypen (z. B. skalares Gleitkomma, gepackte ganze Zahl, gepacktes Gleitkomma, vektorielle ganze Zahl, vektorielles Gleitkomma) 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 Planungseinheit(en) 456, physische(n) Registerdateieinheit(en) 458 und Ausführungscluster 460 sind als möglicherweise mehrzahlig gezeigt, da bestimmte Ausführungsformen separate Pipelines für bestimmte Arten von Daten/Operationen erstellen (z. B. eine Pipeline für skalare ganze Zahlen, eine Pipeline für skalares Gleitkomma/gepackte ganze Zahlen/gepacktes Gleitkomma/vektorielle ganze Zahlen/vektorielles Gleitkomma und/oder eine Arbeitsspeicherzugriffs-Pipeline, die jeweils ihre eigene Planungseinheit, physische Registerdateieinheit und/oder ihr eigenes Ausführungscluster aufweisen - und im Fall einer separaten Arbeitsspeicherzugriffs-Pipeline sind bestimmte Ausführungsformen implementiert, in denen nur das Ausführungscluster dieser Pipeline die Arbeitsspeicherzugriffseinheit(en) 464 aufweist). Es sollte auch klar sein, dass, wo separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-Order-Ausgabe-/Ausführungs- und der Rest In-Order-Pipelines sein können.
  • Der Satz von Arbeitsspeicherzugriffseinheiten 464 ist an die Arbeitsspeichereinheit 470 gekoppelt, die eine Daten-TLB-Einheit 472 enthält, die an eine Daten-Zwischenspeichereinheit 474 gekoppelt ist, die an eine Level 2 (L2)-Zwischenspeichereinheit 476 gekoppelt ist. In einer beispielhaften Ausführungsform können die Arbeitsspeicherzugriffseinheiten 464 eine Ladeeinheit, eine Adressspeichereinheit und eine Datenspeichereinheit enthalten, die alle an die Daten-TLB-Einheit 472 in der Arbeitsspeichereinheit 470 gekoppelt sind. Die Befehls-Zwischenspeichereinheit 434 ist des Weiteren an eine Level 2 (L2)-Zwischenspeichereinheit 476 in der Arbeitsspeichereinheit 470 gekoppelt. Die L2-Zwischenspeichereinheit 476 ist an eine oder mehrere andere Zwischenspeicher-Levels und letztendlich 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) der Befehlsabruf 438 führt die Abruf- und die Längendecodierphasen 402 und 404 durch; 2) die Decodiereinheit 440 führt die Decodierphase 406 durch; 3) die Umbenennungs-/Zuordnungseinheit 452 führt die Zuordnungsphase 408 und die Umbenennungsphase 410 durch; 4) die Ablaufsteuereinheit(en) 456 führt bzw. führen die Ablaufsteuerphase 412 durch; 5) die physische(n) Registerdatei(en)einheit(en) 458 und die Arbeitsspeichereinheit 470 führen die Registerlese-/Speicherlesephase 414 durch; das Ausführungscluster 460 führt die Ausführungsphase 416 durch; 6) die Arbeitsspeichereinheit 470 und die physische(n) Registerdatei(en)einheit(en) 458 führen die Zurückschreibe-/Speicherschreibphase 418 durch; 7) diverse Einheiten können bei der Ausnahmenbehandlungsphase 422 beteiligt sein; und 8) die Abscheidungseinheit 454 und die physische(n) Registerdatei(en)einheit(en) 458 führen die Übergabephase 424 durch.
  • Der Kern 490 kann eine 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; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) von ARM Holdings in Sunnyvale, CA), die den bzw. die hierin beschriebene(n) Befehl(e) enthalten. In einer Ausführungsform enthält der Kern 490 Logik, um eine gepackte Datenbefehlssatzerweiterung (z. B. AVX1, AVX2) zu unterstützen, wodurch erlaubt wird, dass die von vielen Multimedia-Anwendungen verwendeten Operationen unter Verwendung von gepackten Daten durchgeführt werden.
  • Es versteht sich, dass der Kern Multithreading (Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies auf vielfältige Weisen vornehmen kann, was Zeitscheiben-Multithreading, simultanes Multithreading (wobei ein einzelner physischer Kern einen logischen Kern für jeden der Threads bereitstellt, welche der physische Kern simultan im Multithreading behandelt) oder eine Kombination davon (z. B. Zeitscheibenabruf und -Decodierung und simultanes Multithreading danach, wie etwa bei der Hyperthreading-Technologie von Intel®) umfasst.
  • Während Registerumbenennen im Kontext einer Out-of-Order-Ausführung beschrieben wird, sollte klar sein, dass das Registerumbenennen in einer In-Order-Architektur verwendet werden kann. Während die illustrierte Ausführungsform des Prozessors auch separate Befehls- und Datenzwischenspeichereinheiten 434/474 und eine gemeinsam genutzte L2-Zwischenspeichereinheit 476 enthält, können alternative Ausführungsformen einen einzigen internen Zwischenspeicher für sowohl Befehle als auch Daten aufweisen, wie zum Beispiel einen internen Level-1 (L1)-Zwischenspeicher oder mehrere Levels von internem Zwischenspeicher. In einigen Ausführungsformen kann das System eine Kombination von einem internen Zwischenspeicher und einem externen Zwischenspeicher, der sich außerhalb des Kerns und/oder des Prozessors befindet, enthalten. Alternativ kann der gesamte Zwischenspeicher extern zum Kern und/oder zum Prozessor sein.
  • Spezifische beispielhafte In-Order-Kernarchitektur
  • 5A-B illustrieren ein Blockdiagramm einer spezifischeren beispielhaften In-Order-Kernarchitektur, wobei der Kern einer von mehreren logischen Blöcken (die andere Kerne des gleichen Typs und/oder anderer Typen enthalten) in einem Chip wäre. Die logischen Blöcke kommunizieren über ein Verbindungsnetzwerk hoher Bandbreite (z. B. ein Ringnetzwerk) mit einiger Logik mit festen Funktionen, Arbeitsspeicher-E/A-Schnittstellen und anderer notwendiger E/A-Logik, abhängig von der Anwendung.
  • 5A ist ein Blockschaltbild eines Einzelprozessorkerns zusammen mit seiner Verbindung zum rohchipinternen Zwischenverbindungsnetzwerk 502 und seinem lokalen Teilsatz des Level-2- (L2-) Zwischenspeicher 504, gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdecoder 500 den x86-Befehlssatz mit einer Erweiterung für gepackte Datenbefehlssätze. Ein L1-Zwischenspeicher 506 ermöglicht Zugriffe mit geringer Latenz auf Zwischenspeicher in den Skalar- 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 Arbeitsspeicher geschrieben und dann von einem Level-1- (L1-) Zwischenspeicher 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-Zwischenspeichers 504 ist Teil eines globalen L2-Zwischenspeichers, der in separate lokale Teilsätze, einer je Prozessorkern, geteilt ist. Jeder Prozessorkern weist einen direkten Zugriffspfad zu seinem eigenen lokalen Teilsatz des L2-Zwischenspeichers 504 auf. Von einem Prozessorkern gelesene Daten werden in seinem L2-Zwischenspeicher-Teilsatz 504 gespeichert und auf sie kann schnell zugegriffen werden, parallel zu anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Zwischenspeicher-Teilsätze zugreifen. Von einem Prozessorkern geschriebene Daten werden in seinem eigenen L2-Zwischenspeicher-Teilsatz 504 gespeichert und aus anderen Teilsätzen wenn nötig geleert. Das Ringnetzwerk stellt die Kohärenz für gemeinsame Daten sicher. Das Ringnetzwerk ist bidirektional, um Agenten wie Prozessorkernen, L2-Zwischenspeichern und anderen Logikblöcken zu erlauben, miteinander innerhalb des Chips zu kommunizieren. Jeder Ringdatenpfad ist bei manchen Ausführungsformen je Richtung 1024 Bit breit.
  • 5B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 5A nach Ausführungsformen der Erfindung. 5B enthält einen L1-Daten-Zwischenspeicher 506A als Teil des L1-Zwischenspeichers 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 ein Swizzeln der Registereingänge mit Swizzleeinheit 520, numerische Umwandlung mit numerischen Umwandlungseinheiten 522A-B und Replizierung mit Replizierungseinheit 524 am Arbeitsspeichereingang.
  • Prozessor mit integrierter Arbeitsspeichersteuerung und integrierter Grafik
  • 6 ist ein Blockdiagramm eines Prozessors 600, der nach Ausführungsformen der Erfindung mehr als einen Kern aufweisen kann, eine integrierte Arbeitsspeichersteuerung aufweisen kann und 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 Bussteuerungseinheiten 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 Arbeitsspeichersteuerungseinheit(en) 614 in der Systemagenteneinheit 610 und eine Speziallogik 608 veranschaulicht.
  • Deshalb können verschiedene Implementierungen des Prozessors 600 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) (der 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 eines und/oder kann auf einem oder mehreren Substraten unter Verwendung einer beliebigen Anzahl von Prozesstechnologien umgesetzt sein, wie etwa, beispielsweise, BiCMOS, CMOS oder NMOS.
  • Die Arbeitsspeicherhierarchie enthält eine oder mehrere Zwischenspeicherebenen innerhalb der Kerne 604A-N, einen Satz von einer oder mehreren gemeinsam genutzten Zwischenspeichereinheiten 606 und externen Arbeitsspeicher (nicht gezeigt), gekoppelt an den Satz von integrierten Arbeitsspeichersteuerungseinheiten 614. Der Satz der gemeinsam genutzten Zwischenspeichereinheiten 606 kann einen oder mehrere Zwischenspeicher mittlerer Levels enthalten, wie Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Zwischenspeicherlevel, einen Last-Level-Zwischenspeicher (LLC) und/oder Kombinationen davon. Während in einer Ausführungsform eine ringbasierte Verbindungseinheit 612 die integrierte Grafiklogik 608, den Satz der gemeinsam genutzten Zwischenspeichereinheiten 606 und die Systemagenteneinheit 610/den bzw. die integrierten Arbeitsspeichersteuerungseinheit(en) 614 verbindet, können alternative Ausführungsformen eine beliebige Anzahl von gut bekannten Techniken zum Verbinden solcher Einheiten verwenden. In einer Ausführungsform wird Kohärenz zwischen einem oder mehreren Zwischenspeichereinheiten 606 und den Kernen 602-A-N beibehalten.
  • In manchen Ausführungsformen sind einer oder mehrere der Kerne 602-A-N multithreadingfähig. Der Systemagent 610 umfasst diejenigen Komponenten, die Kerne 602-A-N koordinieren und betreiben. Die Systemagenteneinheit 610 kann beispielsweise eine Leistungssteuerungseinheit (PCU, Power Control Unit) und eine Anzeigeeinheit umfassen. Die PCU kann Logik und Komponenten, die zum Regeln des Leistungszustands der Kerne 602-A-N und der integrierten Grafiklogik 608 benötigt werden, sein oder umfassen. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 602-A-N können in Bezug auf den Architekturbefehlssatz homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 602-A-N können fähig sein, den gleichen Befehlssatz auszuführen, während andere fähig sein können, nur einen Teilsatz dieses Befehlssatzes oder einen anderen Befehlssatz auszuführen.
  • Beispielhafte Computerarchitekturen
  • 7-10 sind Blockdiagramme von beispielhaften Computerarchitekturen. Andere Systemdesigns und -konfigurationen, die in der Technik für Laptops, Desktops, tragbare PCs, Organizer, Entwicklungs-Workstations, Server, Netzwerkeinrichtungen, Netzwerkhubs, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Grafikeinrichtungen, Videospieleinrichtungen, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Mediaplayer, tragbare Geräte und verschiedene andere Elektronikgeräte bekannt sind, sind ebenfalls geeignet. Im Allgemeinen ist eine enorm große Vielfalt von Systemen oder Elektronikeinrichtungen geeignet, die einen Prozessor und/oder eine andere Ausführungslogik, wie hierin offenbart, einbinden können.
  • Nun Bezug nehmend auf 7 ist ein Blockdiagramm eines Systeme 700 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 700 kann einen oder mehrere Prozessoren 710, 715 enthalten, die mit einem Steuerungshub 720 gekoppelt sind. In einer Ausführungsform enthält der Steuerungshub 720 einen Grafikspeicher-Steuerungshub (GMCH, Graphics Memory Steuerung 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 Arbeitsspeicher- und Grafiksteuerungen, mit denen Arbeitsspeicher 740 und ein Coprozessor 745 gekoppelt sind; der IOH 750 koppelt die Eingabe-/Ausgabe- (E/A-) Einrichtungen 760 mit dem GMCH 790. Alternativ sind eine oder beide, die Arbeitsspeicher- und/oder die Grafiksteuerung, in den Prozessor integriert (wie hier beschrieben), der Arbeitsspeicher 740 und der Coprozessor 745 sind direkt mit dem Prozessor 710 gekoppelt, und der Steuerungshub 720 befindet sich in einem einzelnen Chip mit dem IOH 750.
  • Der optionale Charakter der zusätzlichen Prozessoren 715 wird in 7 durch unterbrochene Linien angezeigt. Jeder Prozessor 710, 715 kann einen oder mehrere der hierin beschriebenen Verarbeitungskerne enthalten und kann eine Version des Prozessors 600 sein.
  • Der Arbeitsspeicher 740 kann zum Beispiel Dynamic Random Access Memory (DRAM), Phase-Change-Memory (PCM) oder eine Kombination der zwei sein. Für wenigstens eine Ausführungsform kommuniziert der Steuerungshub 720 mit dem (den) Prozessor(en) 710, 715 über einen Multi-Drop-Bus, wie etwa einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle oder eine ähnliche Verbindung 795.
  • In einer Ausführungsform ist der Coprozessor 745 ein Prozessor für Sonderzwecke, wie zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsengine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder Ähnliches. In einer Ausführungsform kann der Steuerungshub 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. Coprozessor-Befehle können in die Befehle eingebettet sein. Der Prozessor 710 erkennt diese Coprozessor-Befehle als von einem Typ, der durch den verbundenen Coprozessor 745 ausgeführt werden soll. Entsprechend gibt der Prozessor 710 diese Coprozessorbefehle (oder Steuersignale, welche Coprozessorbefehle repräsentieren) auf einem Coprozessorbus oder einer anderen Zwischenverbindung an den Coprozessor 745 aus. Der (die) Coprozessor(en) 745 nehmen die erhaltenen Coprozessorbefehle an und führen sie aus.
  • Jetzt wird mit Bezug auf die 8 ein Blockdiagramm eines ersten spezifischeren Systems 800 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 8 gezeigt, ist das Multiprozessorsystem 800 ein Punkt-zu-Punkt-Verbindungssystem und 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 sind einschließlich integrierter Arbeitsspeicher-Steuerungs(Integrated Memory Controller, IMC)-Einheiten 872 bzw. 882 gezeigt. Der Prozessor 870 enthält auch als Teil seiner Bussteuerungseinheiten Punkt-zu-Punkt(P-P)-Schnittstellen 876 und 878; gleichermaßen 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 der P-P-Schnittstellenschaltkreise 878, 888 austauschen. Wie in 8 gezeigt, koppeln die IMCs 872 und 882 die Prozessoren an jeweilige Arbeitsspeicher, nämlich einen Arbeitsspeicher 832 und einen Arbeitsspeicher 834, die Teile von Hauptspeicher sein können, die lokal an die jeweiligen Prozessoren angebunden sind.
  • 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 optional Informationen mit dem Coprozessor 838 über eine Hochleistungsschnittstelle 892 austauschen. In einer Ausführungsform ist der Coprozessor 838 ein Prozessor für Sonderzwecke, wie zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsengine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder Ähnliches.
  • Ein gemeinsam genutzter Zwischenspeicher (nicht gezeigt) kann in einem der Prozessoren oder außerhalb beider Prozessoren enthalten sein, jedoch mit den Prozessoren über eine P-P-Verbindung verbunden sein, sodass die lokalen Zwischenspeicherinformationen von einem der beiden oder beiden Prozessoren im gemeinsam genutzten Zwischenspeicher gespeichert werden können, wenn ein Prozessor in einen Niedrigenergiemodus versetzt wird.
  • Der Chipsatz 890 kann über eine Schnittstelle 896 mit einem erstem Bus 816 gekoppelt sein. In einer Ausführungsform ist der erste Bus 816 ein Peripheral-Component-Interconnect(PCI)-Bus oder ein Bus wie ein PCI-Express-Bus oder ein anderer E/A-Verbindungsbus sein, obwohl der Umfang der vorliegenden Erfindung dadurch nicht eingeschränkt ist.
  • Wie in 8 gezeigt, können verschiedene E/A-Einrichtungen 814 zusammen mit einer Busbrücke 818, die den ersten Bus 816 an einen zweiten Bus 820 koppelt, an den ersten Bus 816 gekoppelt sein. 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. Gleiche Elemente in den 8 und 9 tragen gleiche Bezugsziffern, und bestimmte Aspekte von 8 wurden aus 9 weggelassen, um ein Verdecken anderer Aspekte von 9 zu vermeiden.
  • 9 veranschaulicht, dass die Prozessoren 870, 880 integrierte Arbeitsspeicher- und E/A-Steuerlogik („CL“, Control Logic) 972 bzw. 982 enthalten können. Daher enthält die CL 972, 982 integrierte Arbeitsspeichersteuerungseinheiten und E/A-Steuerlogik. 9 veranschaulicht, dass nicht nur die Arbeitsspeicher 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. Alt-E/A-Einrichtungen 915 sind an den Chipsatz 890 gekoppelt.
  • Nun wird mit Bezug auf 10 ein Blockdiagramm eines SoC 1000 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in 6 tragen gleiche Referenzziffern. Gestrichelt umrandete Kästchen sind außerdem optionale Merkmale an hochentwickelteren SoCs. In 10 ist bzw. sind Verbindungseinheit(en) 1002 gekoppelt mit: einem Anwendungsprozessor 1010, der einen Satz von einem oder mehreren Kernen 102A-N, Zwischenspeicher-Einheiten 604A-N und gemeinsam genutzte(n) Zwischenspeicher-Einheit(en) 606 enthält; einer Systemagenteneinheit 610; einer oder mehreren Bussteuerungseinheiten 616; einer oder mehreren integrierten Arbeitsspeichersteuerungseinheiten 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 mindestens einen Prozess, ein Speichersystem (das flüchtigen und nichtflüchtigen Arbeitsspeicher und/oder Speicherelemente enthält), mindestens eine Eingabeeinrichtung und mindestens eine Ausgabeeinrichtung umfassen.
  • Programmcode, wie zum Beispiel der in 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 angewandt werden, auf bekannte Weise. Zum Zweck dieser Anmeldung enthält ein Verarbeitungssystem ein beliebiges System, das einen Prozessor aufweist, wie zum Beispiel einen digitalen Signalprozessor (DSP), einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (ASIC: Application Specific Integrated Circuit) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren prozeduralen oder objektorientierten Programmiersprache implementiert werden, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann, falls gewünscht, auch in einer Assembler- oder Maschinensprache implementiert werden. Tatsächlich sind die hierin beschriebenen Mechanismen im Umfang nicht auf eine beliebige bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch repräsentative Befehle implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik innerhalb des Prozessors repräsentiert, die, wenn sie von einer Maschine gelesen wird, bewirkt, dass die Maschine Logik erzeugt, um die hierin beschriebenen Techniken durchzuführen. 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 enthalten Ausführungsformen der Erfindung auch nicht-transitorische, greifbare maschinenlesbare Medien, die Befehle enthalten oder die Designdaten enthalten, wie Hardwarebeschreibungssprache (HDL), die hierin beschriebene Strukturen, Schaltkreise, 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 Befehlswandler verwendet werden, um einen Befehl von einem Quellbefehlssatz in einen Zielbefehlssatz umzuwandeln. Zum Beispiel kann der Befehlswandler 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 umwandeln. Der Befehlswandler kann in Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. Der Befehlswandler kann sich auf dem Prozessor, außerhalb des Prozessors oder teilweise auf und teilweise außerhalb des Prozessors befinden.
  • 11 ist ein Blockdiagramm, das die Verwendung eines Softwarebefehlswandlers gegenüberstellt, um binäre Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz nach Ausführungsformen der Erfindung umzuwandeln. Bei der illustrierten Ausführungsform ist der Befehlswandler ein Softwarebefehlswandler, obwohl alternativ dazu der Befehlswandler in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert werden kann. 11 zeigt, dass ein Programm in einer höheren Sprache 1102 unter Verwendung eines ersten Compilers 1104 compiliert werden kann, um ersten Binärcode (z. B. x86) 1106 zu generieren, der nativ von einem Prozessor mit mindestens einem ersten Befehlssatzkern 1116 ausgeführt werden kann. In einigen Ausführungsformen repräsentiert der Prozessor mit mindestens einem ersten Befehlssatzkern 1116 einen beliebigen Prozessor, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern durchführen kann, indem er Folgendes kompatibel ausführt oder anderweitig verarbeitet: (1) einen wesentlichen Teil des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die auf einem Intel-Prozessor mit mindestens einem x86-Befehlssatzkern laufen sollen, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern zu erreichen. Der erste Compiler 1104 repräsentiert einen Compiler, der betrieben werden kann, um Binärcode des ersten Befehlssatzes 1106 (z. B. Objektcode) zu generieren, der ohne oder mit zusätzlicher Verlinkungsverarbeitung auf dem Prozessor mit mindestens einem ersten Befehlssatzkern 1116 ausgeführt werden kann. In ähnlicher Weise zeigt 11, wie das Programm in der höheren Sprache 1102 mit einem alternativen Befehlssatz-Compiler 1108 compiliert 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 Befehlswandler 1112 wird verwendet, um den ersten Binärcode 1106 in Code umzuwandeln, der nativ vom Prozessor ohne einen ersten Befehlssatzkern 1114 ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht der gleiche wie der Alternativ-Befehlssatz-Binärcode 1110, da ein Befehlswandler, der dazu in der Lage ist, schwierig herzustellen ist; der umgewandelte Code wird jedoch die allgemeine Operation ausführen und aus Befehlen aus dem alternativen Befehlssatz bestehen. Daher repräsentiert der Befehlswandler 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.
  • BEISPIELHAFTE DIGITALSIGNALVERARBEITUNGSARCHITEKTUREN
  • Eine Ausführungsform der Erfindung enthält eine Verschaltung und/oder Logik zum Verarbeiten von Befehlen für die digitale Signalverarbeitung (DSP). Insbesondere umfasst eine Ausführungsform eine Multiplikations-Akkumulations-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 Arbeitsspeicheroperanden können weniger strenge Arbeitsspeicherausrichtungsanforderungen 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, Polynomauswertung 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} erfordern viele Bildverarbeitungs- und Maschinenlernaufgaben die Berechnung der Ergebnissequenz {y1, y2, y3, ...yn+1-k}, definiert durch yi = w1xi+w2xi+1+ ................. + wkxi+k-1.
  • 12 veranschaulicht einen beispielhaften Prozessor 1255, auf dem Ausführungsformen der Erfindung implementiert werden können, der eine Vielzahl von Kernen 0-N zum gleichzeitigen Ausführen einer Vielzahl von Befehls-Threads enthält. Die veranschaulichte Ausführungsform enthält eine DSP-Befehl-Decodierschaltung/-logik 1231 in dem Decoder 1230 und eine DSP-Befehl-Ausführungsschaltung/-logik 1341 in der Ausführungseinheit 1240. Diese Pipeline-Komponenten können die hierin beschriebenen Operationen in Reaktion auf das Decodieren und die Ausführung der DSP-Befehle durchführen. Während in 12 nur Details eines Einzelkerns (Kern 0) gezeigt sind, versteht es sich, dass alle der anderen Kerne von Prozessor 1255 ähnliche Komponenten enthalten können.
  • Vor der Beschreibung konkreter Details der Ausführungsformen der Erfindung wird direkt nachfolgend eine Beschreibung der verschiedenen Komponenten des beispielhaften Prozessors 1255 bereitgestellt. Die Vielzahl von Kernen 0-N können jeweils eine Arbeitsspeicherverwaltungseinheit 1290 zum Durchführen von Arbeitsspeicheroperationen (z. B. Lade-/Speicheroperationen), einen Satz von Universalregistern (General Purpose Registers, GPRs) 1205, einen Satz von Vektorregistern 1206 und einen Satz von Maskenregistern 1207 enthalten. In einer Ausführungsform werden mehrere Vektordatenelemente in jedes Vektorregister 1206 gepackt, das eine Breite von 512 Bit zum Speichern von zwei 256-Bit-Werten, vier 128-Bit-Werten, acht 64-Bit-Werten, sechzehn 32-Bit-Werten usw. aufweisen kann. Die zugrunde liegenden Prinzipien der Erfindung sind jedoch nicht auf eine bestimmte Größe/einen bestimmten Typ von Vektordaten beschränkt. In einer Ausführungsform enthalten die Maskenregister 1207 acht 64-Bit-Operanden-Maskenregister, die zum Durchführen von Bit-Maskieroperationen bei den in dem Vektorregister 1206 gespeicherten Werten verwendet werden (z. B. als hierin beschriebene Maskenregister k0-k7 implementiert). Die zugrunde liegenden Prinzipien der Erfindung sind jedoch nicht auf eine bestimmte Größe/einen bestimmten Typ von Maskenregister beschränkt.
  • Jeder Kern 0-N kann einen dedizierten Level-1 (L1)-Zwischenspeicher 1212 und Level-2(L2)-Zwischenspeicher 1211 zum Zwischenspeichern von Befehlen und Daten gemäß einer angegebenen Zwischenspeicher-Verwaltungs-Richtlinie enthalten. Der L1-Zwischenspeicher 1212 enthält einen separaten Befehlszwischenspeicher 1220 zum Speichern von Befehlen und einen separaten Datenzwischenspeicher 1221 zum Speichern von Daten. Die in den verschiedenen Prozessorzwischenspeichem gespeicherten Befehle und Daten werden auf der Granularität von Zwischenspeicherleitungen verwaltet, die eine feste Größe (z. B. eine Länge von 64, 128, 512 Bytes) aufweisen können. Jeder Kern dieser beispielhaften Ausführungsform weist eine Befehlsabrufeinheit 1210 zum Abrufen von Befehlen aus dem Hauptspeicher 1200 und/oder einem gemeinsamen Level 3 (L3)-Zwischenspeicher 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 Arbeitsspeicher 1200 (oder einem der Zwischenspeichers) abgerufen werden soll; eines Befehlsübersetzungspuffers (Instruction Translation Lookaside Buffer, ITLB) 1204 zum Speichern einer Abbildung von kürzlich verwendeten virtuell-zu-physisch-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-Verschaltung/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-Verschaltung/Logik 1241 zum Ausführen der DSP-Befehle. Eine Rückschreib-/Stilllegungseinheit 1250 legt die ausgeführten Befehle still und schreibt die Ergebnisse zurück.
  • Eine Ausführungsform des ersten Befehls wird als VPRCPUFW xmm1, xmm2/m128 dargestellt, wobei xmm2/m128 ein Quellenregister oder eine Arbeitsspeicherstelle ist, das bzw. die einen Eingabewortwert speichert, dessen Umkehrung zu berechnen ist, und xmm1 ist ein Zielregister, um das reziproke Ergebnis zu speichern. Ein zweiter Befehl, als VPRCPUFD xmm1, xmm2/m128 dargestellt, nimmt die Umkehrung eines Doppelwortwerts, der in xmm2/m128 gespeichert ist, und speichert die Umkehrung in xmm1.
  • 13 veranschaulicht beispielhafte Datenelement- und Bitverteilungen für ein beispielhaftes Quellregister und/oder Zielregister (SRCx/DESTx). Datenelemente können in das Quellregister und/oder Zielregister in Wörtern (16 Bits), Doppelwörtern (32 Bits) und/oder Quadwörtern (64 Bits) gepackt werden, wie veranschaulicht ist. In einigen Ausführungsformen, welche komplexe Zahlen verarbeiten, können die reellen und imaginären Komponenten in benachbarten Datenelementorten gespeichert werden. Eine reelle Komponente kann zum Beispiel als Datenelement A gespeichert werden und die entsprechende imaginäre Komponente kann als Datenelement B gespeichert werden. In einigen der hierin beschriebenen Ausführungsformen, einschließlich der reziproken Befehle und der reziproken Quadratwurzelbefehle, repräsentieren die gepackten Datenelemente keine komplexen Zahlen. Vielmehr sind die gepackten Datenelemente in diesen Ausführungsformen reelle Wörter und Doppelwörter.
  • 14 veranschaulicht eine beispielhafte Architektur zum Ausführen verschiedener unterschiedlicher DSP-Befehle, einschließlich zumindest einiger der von den fraktionalen Umkehr- und reziproken Quadratwurzelanweisungen erforderlichen Operationen. Zuerst wird die allgemeine Operation dieser Architektur beschrieben, gefolgt von einer ausführlichen Beschreibung der reziproken Befehle. Beim Ausführen eines DSP-Befehls werden ein oder mehrere gepackte Wort-, Doppelwort- oder Quadwort-Werte in Registern SRC 1401 und/oder SRC 1402 gespeichert. Ein Satz von Multiplikatoren 1405 multiplizieren ausgewählte gepackten Datenelementen in SRC 1401 mit ausgewählten gepackten Datenelementen in SRC2. Unterschiedliche Datenelementgrößen und unterschiedliche Kombinationen von gepackten Datenelementen können für Multiplikationen auf Grundlage des bestimmten DSP-Befehls ausgewählt werden, der ausgeführt wird. Additionsnetzwerke 1410-1411 können dann die resultierenden Produkte der Multiplikationen in unterschiedlichen Kombination gemäß dem Befehl addieren/subtrahieren.
  • Abhängig vom Befehl können Akkumulatoren 1420-1421 ausgewählte Ergebnisse, die von den Multiplikatoren 1405 und/oder Additionsnetzwerken 1410-1411 erzeugt wurden, mit im SRC/DEST-Register 1440 akkumulieren Ergebnissen kombinieren. Sättigungseinheiten 1440-1441 erzeugen gesättigte Datenelemente aus den akkumulierten Ergebnissen (wiederum abhängig vom Befehl) und Ausgabe-Mux 1450 leitet die Endergebnisse an das SRC/DEST-Register 1460 weiter.
  • Verschiedene andere Operationen können abhängig vom Befehl durchgeführt werden, wie Verschieben, Extrahieren, Laden, Speichern, Permutieren, mit Null Erweitern, mit Vorzeichen Erweitern und Runden, um nur einige zu nennen. Darüber hinaus können von den Multiplikatoren 1405 erzeugte Produkte und von den Additionsnetzwerken 1410-1411 erzeugte Ergebnisse in temporären Registern oder Arbeitsspeicherpositionen gespeichert werden, die nicht veranschaulicht sind. Auf einige dieser temporären Speicherstellen wird unten unter Verwendung von Bezeichnungen ftmp[n] verwiesen, wobei n eine ganze Zahl ist, die eine bestimmte temporäre Speicherstelle identifiziert.
  • In einer Ausführungsform operieren die folgenden Funktionen an vorzeichenlosen Wörtern und Doppelwörter werden in Festkomma-DSP-Algorithmen verwendet: y = 1/x  ( fraktionale Umkehrung ) ;
    Figure DE102018132196A1_0001
    y = 1/sqrt ( x ) ( reziproke Quadratwurzel ) .
    Figure DE102018132196A1_0002
  • Ausführungsformen des fraktionalen Umkehrbefehls werden zuerst in Abschnitt A unten beschrieben. Ausführungsformen der reziproken Quadratwurzel werden dann in Abschnitt B beschrieben.
  • AUSFÜHRUNGSFORMEN ZUM DURCHFÜHREN FRAKTIONALER UMKEHROPERATIONEN AN GEPACKTEN DATENELEMENTEN
  • Eine Ausführungsform der Erfindung enthält einen ersten Befehl zum Ermitteln einer Umkehrung eines vorzeichenlosen Worts und einen zweiten Befehl zum Ermitteln einer Umkehrung eines vorzeichenlosen Doppelworts. Die Wortwerte können als gepackte 16-Bit-Datenelemente gespeichert sein und die Doppelwortwerte können als gepackte 32-Bit-Datenelemente innerhalb der hierin beschriebenen Quellen- und Zielregister gespeichert sein.
  • Wenn der Eingabewert x gegeben ist, berechnet eine Ausführungsform der Erfindung y = 1/x. Ein erster Befehl kann für einen Doppelwortwert von x ausgeführt werden (z. B. VPRCPUFD) und ein zweiter Befehl kann für einen Wortwert von x ausgeführt werden (z. B. VPRCPUFW). Die Doppelwort-Implementierung wird zuerst beschrieben, gefolgt von der Wort-Implementierung.
  • BEISPIELHAFTE REZIPROKE DOPPELWORT-OPERATIONEN
  • In einer Ausführungsform ist die Eingabe x ein Doppelwort mit einem vorzeichenlosen Q0.32-Format. Q bezeichnet ein Festkommazahlenformat, wobei die Anzahl der fraktionalen Bits und möglicherweise die Anzahl der ganzzahligen Bits angegeben ist. Eine Q1.14-Ziffer weist beispielsweise 1 ganzzahliges Bit und 14 fraktionale Bits auf. In der sofortigen Anwendung weist das Q0.32-Zahlenformat für x 32 fraktionale Bits auf wird deshalb mit 232 skaliert. In einer Ausführungsform ist der Bereich von x auf zwischen 0,5 und 1 festgelegt (d. h. [0,5, 1]) oder [0x80000000, 0xFFFFFFFF]). Darüber hinaus ist das Ergebnis y in einer Ausführungsform eine vorzeichenlose Q1.31-Zahl und ist deshalb mit 231 skaliert. Der erlaubbare Bereich von y liegt in einer Ausführungsform zwischen 1 und 2 (d. h. [1,2] oder [0x80000000,0xFFFFFFFF]). In einer Implementierung beträgt der maximale absolute Fehler für die Umkehroperation 1,09 ulp und die Umkehrung wird unter Verwendung eines Polynoms 3. Grades auf fast 16 Bits geschätzt.
  • 15 veranschaulicht eine beispielhafte Ausführungsverschaltung 1240 zum Ausführen des fraktionalen Umkehrbefehls y = 1/x nach den obigen Spezifikationen. Die Ausführungsverschaltung in 15 kann Komponenten der DSP-Architektur von 14 enthalten und/oder kann eine andere Ausführungsverschaltung verwenden. In einer Ausführungsform umfasst der Eingabewert X einen Doppelwortwert (32 Bits), in dem Bits b30 und b29 verwendet werden, um eine Koeffiziententabelle zu indizieren, wie veranschaulicht. Jede Zeile in der Koeffiziententabelle enthält einen anderen Satz von Koeffizienten c3n , c2n , c1n und c0n , aus denen ein Satz auf Grundlage der Werte von b30 und b29 ausgewählt wird. In einer Ausführungsform wird ein Permutationsbefehl, wie VPERMILPS, ausgeführt, um die Koeffizienten aus der durch die Werte b30 und b29 identifizierten Zeile der Koeffiziententabelle zu lesen. Auf Grundlage eines bestimmten Steuerwerts kann der VPERMILPS-Befehl zum Beispiel unterschiedliche Koeffizienten aus unterschiedlichen Register- oder Arbeitsspeicherpositionen abrufen.
  • In einer Ausführungsform lesen die Multiplikatoren 1405 dann die Koeffizienten aus einem der Quellenregister 1401-1402 (über den Eingabemultiplexer 1403) und multiplizieren die gepackten Werte wie in 15 angezeigt. In der veranschaulichten Implementierung ist c32 zum Beispiel mit R3 multipliziert, c22 ist mit R2 multipliziert und c12 ist mit R multipliziert. Die resultierenden Produkte c12*R, c22*R2, c32*R3 und c02 werden von Additionsnetzwerken 1410-1411 addiert, um das Ergebnis: c02 + c12*R + c22*R2 + c32*R3 zu erzeugen.
  • In einer Ausführungsform wendet Newton-Raphson-Logik/Verschaltung 1510 Newton-Raphson-Approximationstechniken an, um die Genauigkeit des Ergebnisses ungefähr zu verdoppelt. Dies kann durch Berechnen des relativen Fehlers für die Anfangsapproximation und nachfolgendes Anwenden eines Verfeinerungsschrittes auf die Approximation erreicht werden. Die zugrunde liegenden Prinzipien der Erfindung erfordern jedoch keine Newton-Raphson-Techniken. In einer Ausführungsform beträgt die Ausgabe für Eingaben außerhalb des Bereichs (z. B. x<0,5) 0xFFFFFFFF.
  • In einer Ausführungsform wird die reziproke Wort-Operation auf eine ähnliche Weise implementiert, aber mit Wortwerten anstatt von Doppelwortwerten. Die gesamte Berechnung ist wiederum y=1/x, wobei die Eingabe x im vorzeichenlosen Q0.16-Format ist und deshalb mit 216 skaliert ist. Der x-Bereich liegt in [0,5, 1] oder [0x8000,0xFFFF] und das Ergebnis y verwendet ein vorzeichenloses Q1.15-Format und ist deshalb mit 215 skaliert. Der y-Bereich liegt in [1,2] oder [0x8000,0xFFFF].
  • In der Wortimplementierung ist die Koeffiziententabelle 1505 eine Tabelle mit 8 Einträgen und die drei führenden Bits der Eingabe (d. h. Bits 14, 13 und 12 in einer Ausführungsform) werden als ein Tabellenindex verwendet, um Koeffizienten c3n, c2n, c1n und c0n aus Tabellen mit 8 Einträgen abzurufen (wobei n im Bereich [0, 7] liegt). Die restlichen Eingabebits [11:0] für den Bruch R werden als das Argument für das Polynom verwendet: c3*R3 + c2*R2 + c1*R + c0. Das Ergebnis dieser polynomen Auswertung ist die Befehlsausgabe (für Eingaben innerhalb des Bereichs). Für Eingaben außerhalb des Bereichs (z. B. x<0,5) ist die Ausgabe 0xFFFF.
  • Wie beim oben beschriebenen reziproken Doppelwortbefehl multiplizieren die Multiplikatoren 1405 Eingabewerte (R) mit Koeffizienten und die Ergebnisse werden durch Additionsnetzwerke 1410-1411 (wie im Codebeispiel unten gezeigt) addiert/subtrahiert. Wie beim Doppelwortbefehl kann Newton-Raphson-Logik/Verschaltung 1510 Newton-Raphson-Abschätzungstechniken auf das Ergebnis anwenden, um die Genauigkeit ungefähr zu verdoppeln. In einer Ausführungsform kann dies kann durch Berechnen des relativen Fehlers für die Anfangsapproximation und nachfolgendes Anwenden eines Verfeinerungsschrittes auf die Approximation erreicht werden. Die zugrunde liegenden Prinzipien der Erfindung erfordern jedoch keine Newton-Raphson-Techniken.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 16 veranschaulicht. Das Verfahren kann innerhalb des Kontexts der Prozessor- und Systemarchitekturen, die oben beschrieben sind, implementiert werden, ist jedoch nicht auf eine bestimmte Systemarchitektur beschränkt.
  • Bei 1601 wird ein erster reziproker Befehl abgerufen, der Felder für einen Opcode, Quelloperanden für gepackte Daten und einen Zieloperanden für gepackte Daten aufweist. Bei 1602 wird der reziproke Befehl decodiert, um einen (z. B. in eine Vielzahl von Mikrooperationen, die die hierin beschriebenen individuellen Operationen durchführen) decodierten reziproken Befehl zu erzeugen.
  • Bei 1603 werden Koeffizientenwerte, die zum Durchführen der Umkehroperation notwendig sind, (z. B. aus dem Zwischenspeicher/Arbeitsspeicher) abgerufen und in temporären Registern oder an anderen Speicherstellen gespeichert. Darüber hinaus werden die Eingabedaten abgerufen und in einem Quellenregister gespeichert (z. B. SRC 1401). Wie erwähnt ermittelt der Doppelwort-Umkehrbefehl eine Umkehrung unter Verwendung von Doppelwortwerten und der Wort-Umkehrbefehl ermittelt eine Umkehrung unter Verwendung von Wortwerten. Dementsprechend können die Eingabedaten im ersten Quellenregister als gepackte Doppelwort- (32-Bit-) oder gepackte Wort- (16-Bit-)Werte gespeichert werden, abhängig von der Implementierung. Wie erwähnt sind die Quellenregister in einer Ausführungsform gepackte 128-Bit-Datenregister. Die Operationen der Umkehrbefehle werden geplant. Beispielsweise können Mikrooperationen, in die die Anweisung decodiert ist, zur Ausführung an einer Vielzahl von verschiedenen funktionalen Einheiten der Ausführungsverschaltung in eine Warteschlange gereiht werden.
  • Bei 1604 wird der erste decodierte Befehl unter Verwendung eines ersten Abschnitts der Eingabedaten als einen Indexwert zum Identifizieren der aus der Koeffiziententabelle zu verwendenden Koeffizienten ausgeführt. In einer Ausführungsform ist die Koeffiziententabelle über eine Vielzahl von temporären Speicherstellen verteilt. In einer alternativen Ausführungsform kann sie in einem der in 14 gezeigten Quellenregister gespeichert sein. Unabhängig davon, wo er gespeichert ist, wird ein Permutationsbefehl unter Verwendung des ersten Abschnitts der Eingabedaten als den Indexwert (wie unten ausführlich beschrieben) ausgeführt, um die Nachschlageoperation durchzuführen. In einer Ausführungsform umfasst der erste Abschnitt der Eingabedaten Bits 29 und 30 für einen Doppelwortwert und der erste Abschnitt der Eingabedaten umfasst Bits 12, 13 und 14 für einen Wortwert. Deshalb werden Bits 29-30 in der Doppelwortimplementierung verwendet, um einen von vier Einträgen in der Koeffiziententabelle zu indizieren, und in der Wortimplementierung werden Bits 12-14 verwendet, um einen von acht Einträgen in der Koeffiziententabelle zu indizieren.
  • Sobald die Koeffizienten identifiziert sind, werden am zweiten Abschnitt der Eingabedaten (R) und/oder den Koeffizienten Multiplikationen durchgeführt, um die temporären Werte c3*R3, c2*R2 und c1*R zu ermitteln. Die temporären Werte und Koeffizienten werden dann in Übereinstimmung mit dem Polynom c3*R3 + c2*R2 + c1*R + c0 addiert, um erste Ergebnisse zu erstellen. Falls Newton-Raphson-Techniken verwendet werden, werden diese auf die ersten Ergebnisse angewandt, um endgültige Ergebnisse zu erstellen. Bei 1605 werden die endgültigen Ergebnisse im gepackten Zielregister gespeichert.
  • BEISPIELHAFTE CODEFOLGE FÜR EINE DOPPELWORT-UMKEHROPERATION
  • Umkehrungs-Codefolge
  • In einer Ausführungsform führt diese Architektur beim Ausführen eines fraktionalen Umkehrbefehls an einer Doppelwort-Eingabe die folgende Abfolge von Operationen durch:
    Figure DE102018132196A1_0003
    Figure DE102018132196A1_0004
    Figure DE102018132196A1_0005
    Figure DE102018132196A1_0006
    Figure DE102018132196A1_0007
    Figure DE102018132196A1_0008
  • Analyse der Umkehrungs-Codefolge
  • Im obigen Code sind jeweils jeder der vier möglichen Werte der vier Koeffizienten c0, c1, c2 und c3 angegeben. Die vier möglichen Werte für c3 sind beispielsweise 0xA2D2ED1E, 0x488414BD, 0x250AB12B und 0x14D9F815. Darüber hinaus werden die Variablen RMASK und NEG_MASK festgelegt (d. h. auf 0xffffffff initialisiert), wie ebenfalls die Variable ONE (auf 0x80000000f0000000 initialisiert).
  • Die „fmtpn“-Variablen im Code identifizieren unterschiedliche temporäre Speicherstellen. Der anfängliche Befehl vmovdqa ftmp0, xmm2/m128 bewegt beispielsweise den Eingabewert X aus dem xmm2-Register (oder der 128-Bit-Arbeitsspeicherstelle) an die temporäre Speicherstelle ftmp0.
  • Der Vektor-UND-Befehl vandps führt danach ein bitweises UND des in fmtp0 gespeicherten Quellenwerts X und des RMASK-Werts durch, um den Quellenwert auf R zu reduzieren, gemäß den Anforderungen der Umkehrungsberechnung. Der resultierende Wert wird in ftmp6 gespeichert. Danach wird der Vektor-UND-Befehl vpanddd ausgeführt, wobei sowohl Quellen als auch das Ziel auf ftmp6 gesetzt sind, um den Skalierungsfaktor für die Umkehrung anzupassen.
  • Der Befehl vpsrld zum Verschieben der gepackten Daten nach rechts wird dann ausgeführt, um die zwei führenden Bits des Bruchwerts aus ftmp0 zu isolieren. Insbesondere wird der Wert um 29 nach rechts verschoben, wodurch die zwei Indexbits (b29 und b30, wie in 15 gezeigt) in den niederwertigsten Bitpositionen des temporären Speichers ftmp1 positioniert werden.
  • Die folgende Befehlsfolge bewegt Koeffizientendaten für c3 bzw. c1 zu ftmp5 und ftmp3:
    • vmovdqa ftmp5, XMMWORD PTR [_c3]
    • vmovdqa ftmp3, XMMWORD PTR [_c1]
  • Der Permutationsbefehl vpermilps verwendet dann den Indexwert in ftmp1 (der b29 und b30 oder den Eingabewert umfasst), um bestimmte c3- und c1-gepackte Datenwerte aus ftmp5 bzw. ftmp3 auszuwählen (was einem Tabellenabruf unter Verwendung dieser Indexwerte äquivalent ist):
    • vpermilps ftmp5, ftmp5, ftmp1 //c3
    • vpermilps ftmp3, ftmp3, ftmp1 // c1
  • Die Multiplikationsoperation (c3 * 231) * (R * 232) ist durch den folgenden Befehlssatz implementiert:
    • vpmuludq ftmp4, ftmp5, ftmp6
    • vmovdqa XMMWORD PTR [temp1], ftmp6
    • vpmuludhhq ftmp5, ftmp5, ftmp6
  • In einer Ausführungsform können dann Vermischungsbefehle verwendet werden, um Ergebnisse aus diesen zwei Multiplikationen in ein SIMD-Register zu kombinieren (zwei 32x32->64-bit MUL-Befehle werden für jeden 4-Wege-SIMD-Multiplikationsschritt verwendet). Insbesondere ist die Operation c3*R*231 durch den Befehl vpsrlq zum Verschieben nach rechts implementiert, der das 64-Bit-Produkt in ftmp4 um 32 verschiebt (Ausrichten der relevanten 32 Bits), gefolgt vom Vermischungsbefehl vpblendw, der relevante Wort-Datenelemente aus ftmp4 und ftmp5 in ftmp5 kombiniert:
    • vpsrlq ftmp4, ftmp4, 32
    • vpblendw ftmp5, ftmp5, ftmp4, 0x33
  • Der Wert c1*R*2(32+31) wird mit dualen Multiplikationsbefehlen ermittelt, die verschiedene Komponenten des in ftmp3 gespeicherten c1 mit Komponenten des in ftmp6 gespeicherten Quellenwerts multiplizieren:
    • vpmuludq ftmp2, ftmp3, ftmp6
    • vpmuludhhq ftmp3, ftmp3, ftmp6
  • Der Wert c1*R*231 wird dann unter Verwendung einer Verschiebung nach rechts gefolgt von einer Vermischung ermittelt, wie oben für c3 besprochen:
    • vpsrlq ftmp2, ftmp2, 32
    • vpblendw ftmp3, ftmp3, ftmp2, 0x33
  • Der Wert R2 * 264 wird unter Verwendung von dualen Multiplikationsbefehlen wie oben besprochen ermittelt, unter Verwendung unterschiedlicher Komponenten der Quellendaten in ftmp6:
    • vpmuludq ftmp7, ftmp6, ftmp6
    • VPMULUDHHQ ftmp6, ftmp6, ftmp6
  • Der Wert R2*232 wird dann unter Verwendung von Befehlen zur Verschiebung nach rechts und zur Vermischung ermittelt, wie oben besprochen:
    • vpsrlq ftmp7, ftmp7, 32
    • vpblendw ftmp6, ftmp6, ftmp7, 0x33
  • In einer Ausführungsform bewegt die folgende Befehlsfolge Koeffizientendaten von c2 und c0 in ftmp4 bzw. ftmp2 und verwendet dann Permutationsbefehle, vpermilps, um Tabellenabrufe für c2 bzw. c0 durchzuführen (wie oben für c3 und c1 besprochen):
    • vmovdqa ftmp4, XMMWORD PTR [_c2]
    • vmovdqa ftmp2, XMMWORD PTR [_c0]
    • vpermilps ftmp4, ftmp4, ftmp1 //c2
    • vpermilps ftmp2, ftmp2, ftmp1 //c0
  • Der Wert (c2-c3*R) * 231 wird mit dem Subtraktionsbefehl vpsubd ftmp4, ftmp4, ftmp5 ermittelt, und der Wert (c0-c1 *R)*231 wird mit dem Subtraktionsbefehl vpsubd ftmp2, ftmp2, ftmp3 ermittelt.
  • In einer Ausführungsform wird der Wert (c2-c3*R)*R2 * 263 dann durch duale Multiplikationsoperationen vpmuludq ftmp7, ftmp6, ftmp4 und vpmuludhhq ftmp6, ftmp6, ftmp4 ermittelt,und der Wert (c2-c3*R)*R2 * 231 durch eine Verschiebung nach rechts und Vermischungsoperationen vpsrlq ftmp7, ftmp7, 32 und vpblendw ftmp6, ftmp6, ftmp7, 0x33. Der Wert (c0-c1*R)*231 + (c2-c3*R)*R2 * 231 wird mit dem Additionsbefehl vpaddd ftmp6, ftmp6, ftmp2 ermittelt.
  • In dieser Phase wird die Anfangsapproximation in ftmp6 gespeichert:
    • vmovdqa ftmp4, XMMWORD PTR [ONE]
    • vmovdqa ftmp2, XMMWORD PTR [ONE]
  • Der Wert x*rcp*263 wird durch duale Multiplikationsbefehle vpmuludq ftmp1, ftmp0, ftmp6 und vpmuludhhq ftmp5, ftmp0, ftmp6 ermittelt und der Wert eps*263=(1-x*rcp)*263 wird durch Subtraktionsbefehle vpsubq ftmp4, ftmp4, ftmp1 und vpsubq ftmp2, ftmp2, ftmp5 ermittelt.
  • In diesem Beispiel befindet sich der relative 64-Bit-Fehlerterm in (ftmp4, ftmp2). In einer Ausführungsform wird eine Korrekturmaske folgendermaßen vorbereitet:
    • vpsrad ftmp0, ftmp0, 32
    • vpxor ftmp0, ftmp0, XMMWORD PTR [NEG_MASK] // ftmp0=0 für Eingaben innerhalb des Bereichs, andernfalls OxFFFFFFFF
  • Die folgenden Anweisungen werden verwendet, um die Genauigkeit für eps*232 zu verbessern (z. B. als Teil der oben erwähnten Newton-Raphson-Techniken). Die folgenden zwei Verschiebungsbefehle verschieben die Werte in ftmp4 und ftmp2 nach rechts bzw. nach links, um den angegebenen Betrag (31 bzw. 1):
    • vpsrlq ftmp4, ftmp4, 31
    • vpsllq ftmp2, ftmp2, 1
  • Der Vermischungsbefehl, vpblendw, mischt dann ausgewählte Datenelemente aus ftmp4 und ftmp2 und speichert sie in ftmp4:
    • vpblendw ftmp4, ftmp2, ftmp4, 0x33
  • Der vpsrad-Befehl ermittelt danach das Vorzeichen des Werts in ftmp4 (eps) unter Verwendung von vpsrad ftmp3, ftmp4, 31.
  • Der folgende Korrekturterm wird dann verwendet, da eps vorzeichenbehaftet ist, aber vorzeichenlose MUL-Ops verwendet werden:
    • vpandn ftmp3, ftmp3, ftmp6
  • Insbesondere wird der UND-NICHT-Befehl unter Verwendung von Werten aus ftmp6 und ftmp3 verwendet und speichert die Ergebnisse in ftmp3.
  • Die folgenden zwei Multiplikationsbefehle werden verwendet, um den Wert rcp*eps*263 zu ermitteln, wobei ausgewählte Elemente aus ftmp4 und ftmp6 multipliziert werden:
    • vpmuludq ftmp2, ftmp6, ftmp4
    • vpmuludhhq ftmp6, ftmp6, ftmp4
  • Der Wert rcp*eps*231 wird dann durch Ausführen eines Verschiebebefehls nach rechts und eines Vermischungsbefehls ermittelt:
    • vpsrlq ftmp2, ftmp2, 32
    • vpblendw ftmp6, ftmp6, ftmp2, 0x33
  • Das Endergebnis wird dann durch Addieren der Elemente aus ftmp3 mit ftmp6 und Speichern der Ergebnisse in ftmp6 ermittelt:
    • vpaddd ftmp6, ftmp6, ftmp3
  • Das ftmp6-Ergebnis kann mit ftmp einer ODER-Operation unterzogen werden, um Eingaben außerhalb des Bereichs zu korrigieren (d. h. ftmp0=0xFFFFFFFFF, falls außerhalb des Bereichs):
    • vporxmm1, ftmp0, ftmp6
  • BEISPIELHAFTE CODEFOLGE FÜR EINE WORT-UMKEHROPERATION
  • Umkehrungs-Codefolge
  • Wie erwähnt ist die gesamte Berechnung y=1/x, wobei die Eingabe x im vorzeichenlosen Q0.16-Forma ist und deshalb mit 216 skaliert ist. Der x-Bereich liegt in [0,5, 1] oder [0x8000,0xFFFF] und das Ergebnis y verwendet ein vorzeichenloses Q1.15-Format und ist deshalb mit 215 skaliert. Der y-Bereich liegt in [1,2] oder [0x8000,0xFFFF].
  • Die Koeffiziententabelle 1505 ist eine Tabelle mit 8 Einträgen und die drei führenden Bits der Eingabe (d. h. Bits 14, 13 und 12 in einer Ausführungsform) werden als ein Tabellenindex verwendet, um Koeffizienten c3n, c2n, c1n und c0n aus Tabellen mit 8 Einträgen abzurufen (wobei n im Bereich [0, 7] liegt). Die restlichen Eingabebits [11:0] für den Bruch R werden als das Argument für das Polynom verwendet: c3*R3 + c2*R2 + c1*R + c0. Das Ergebnis dieser polynomen Auswertung ist die Befehlsausgabe (für Eingaben innerhalb des Bereichs). Für Eingaben außerhalb des Bereichs (z. B. x<0,5) ist die Ausgabe 0xFFFF.
    Figure DE102018132196A1_0009
    Figure DE102018132196A1_0010
    Figure DE102018132196A1_0011
    Figure DE102018132196A1_0012
  • Analyse der Codefolge
  • Es ist aus dem obigen Code ersichtlich, dass viele der gleichen Techniken, die für den Doppelwort-Befehl verwendet wurden, für den Umkehrungsbefehl verwendet werden. Die gesamte Berechnung ist y=1/x, wobei die Eingabe x im vorzeichenlosen Q0.16-Forma ist und deshalb mit 216 skaliert ist. Der x-Bereich liegt in [0,5, 1] oder [0x8000,0xFFFF] und das Ergebnis y verwendet ein vorzeichenloses Q1.15-Format und ist deshalb mit 215 skaliert. Der y-Bereich liegt in [1,2] oder [0x8000,0xFFFF].
  • In der Wortimplementierung ist die Koeffiziententabelle eine Tabelle mit 8 Einträgen und die drei führenden Bits der Eingabe (d. h. Bits 14, 13 und 12 in einer Ausführungsform) werden als ein Tabellenindex verwendet, um Koeffizienten c3n, c2n, c1n und c0n aus Tabellen mit 8 Einträgen abzurufen (wobei n im Bereich [0, 7] liegt). Folglich gibt der Code acht verschiedene Werte für c3n, c2n, c1n und c0n an. Beispielsweise werden die Werte 0xC9EC, 0x8146, 0x5690, 0x3C20, 0x2B0E, 0x1FA2, Ox17C3 und 0x1232 für c3 angegeben. Die restlichen Eingabebits [11:0] für den Bruch R werden als das Argument für das Polynom verwendet: c3*R3 + c2*R2 + c1*R + c0. Das Ergebnis dieser polynomen Auswertung ist für Eingaben innerhalb des Bereichs die Befehlsausgabe. Für Eingaben außerhalb des Bereichs (z. B. x<0,5) ist die Ausgabe 0xFFFF.
  • AUSFÜHRUNGSFORMEN ZUM DURCHFÜHREN REZIPROKER QUADRATWURZELOPERATIONEN AN GEPACKTEN DATENELEMENTEN
  • Eine Ausführungsform der Erfindung enthält einen ersten Befehl zum Durchführen einer reziproken Quadratwurzel an einem vorzeichenlosen Doppelwort und einen zweiten Befehl zum Durchführen einer reziproken Quadratwurzel an einem vorzeichenlosen Wort. Die Doppelwortwerte können als gepackte 32-Bit-Datenelemente gespeichert sein und die Doppelwortwerte können als gepackte 16-Bit-Datenelemente innerhalb der hierin beschriebenen Quellen- und Zielregister gespeichert sein.
  • Eine Ausführungsform des ersten Befehls wird als VPRSQRTUFD xmm1, xmm2/m128 dargestellt, die die reziproke Quadratwurzel eines Doppelwortwerts bildet, der in xmm2/m128 gespeichert ist, und speichert das Reziproke in xmm1. Eine Ausführungsform des zweiten Befehls wird als VPRSQRTUFW xmm1, xmm2/m128 dargestellt, wobei xmm2/m128 ein Quellenregister oder eine Arbeitsspeicherstelle ist, das bzw. die einen Eingabewortwert speichert, dessen reziproke Quadratwurzel zu berechnen ist, und xmm1 ist ein Zielregister, um das reziproke Ergebnis zu speichern.
  • Diese Befehle können auf der oben beschriebenen und in 14 veranschaulichten Architektur ausgeführt werden. Wie bereits beschrieben werden beim Ausführen eines DSP-Befehls ein oder mehrere gepackte Wort-, Doppelwort- oder Quadwort-Werte in Registern SRC 1401 und/oder SRC 1402 gespeichert. Ein Satz von Multiplikatoren 1405 multiplizieren ausgewählte gepackten Datenelementen in SRC 1401 mit ausgewählten gepackten Datenelementen in SRC2. Unterschiedliche Datenelementgrößen und unterschiedliche Kombinationen von gepackten Datenelementen können für Multiplikationen auf Grundlage des bestimmten DSP-Befehls ausgewählt werden, der ausgeführt wird. Additionsnetzwerke 1410-1411 können dann die resultierenden Produkte der Multiplikationen in unterschiedlichen Kombination gemäß dem Befehl addieren/subtrahieren.
  • Abhängig vom Befehl können Akkumulatoren 1420-1421 ausgewählte Ergebnisse, die von den Multiplikatoren 1405 und/oder Additionsnetzwerken 1410-1411 erzeugt wurden, mit im SRC/DEST-Register 1440 akkumulieren Ergebnissen kombinieren. Sättigungseinheiten 1440-1441 erzeugen gesättigte Datenelemente aus den akkumulierten Ergebnissen (wiederum abhängig vom Befehl) und Ausgabe-Mux 1450 leitet die Endergebnisse an das SRC/DEST-Register 1460 weiter.
  • Verschiedene andere Operationen können gemäß dem Befehl, der ausgeführt wird, durchgeführt werden, wie nach links/rechts Verschieben, Extrahieren, Laden, Speichern, Permutieren, mit Null Erweitern, mit Vorzeichen Erweitern, Runden und Durchführen von bitweisen Operationen (z. B. UND, ODER, NICHT UND usw.) an gepackten Datenelementen, um nur einige zu nennen. Darüber hinaus können von den Multiplikatoren 1405 erzeugte Produkte und von den Additionsnetzwerken 1410-1411 erzeugte Ergebnisse in temporären Registern oder Arbeitsspeicherpositionen gespeichert werden, die nicht veranschaulicht sind. Auf einige dieser temporären Speicherstellen wird unten unter Verwendung von Bezeichnungen FTMPx verwiesen (wobei x eine ganze Zahl ist, die einen bestimmten temporären Speicherbereich identifiziert).
  • BEISPIELHAFTE REZIPROKE DOPPELWORT-QUADRATVWRZELOPERATIONEN
  • In einer Ausführungsform wird der Wert y = 1/sqrt(x) ermittelt, wobei die Eingabe x ein vorzeichenloser Q0.32-Wert ist, der mit 232 skaliert ist. Der Bereich von x liegt in [0,25, 1] oder [0x40000000, 0xFFFFFFFF] und das Ergebnis y ist in einem vorzeichenlosen Q1.31-Format, das mit 231 skaliert ist. Der Bereich von y liegt in [1,2] oder [0x80000000,0xFFFFFFFF]. In einer Ausführungsform beträgt der maximale absolute Fehler 1,26 ulp und kann mit einem ~2-Zyklus-Zuschlag weiter verbessert werden, wie hierin beschrieben. Die reziproke Quadratwurzel kann auf fast 7,65 Bits (lineare Interpolation) approximiert werden. Wie bei den oben beschriebenen reziproken Befehlen kann ein Permutationsbefehl verwendet werden, um 16-Bit-Koeffizienten aus Tabellen abzurufen (z. B. VPERMW). Der relative Fehler wird berechnet, danach wird ein Polynom 3. Grades angewandt.
  • In einer Ausführungsform wird die Eingabe, x, auf [0,5, 1] „normiert“ und Bit 31 wird auf 0 gesetzt, falls die ursprüngliche Eingabe x<0,5 war. Dann werden die führenden Bits der „normierten Eingabe“ (Bits 31, 30, 29) als ein Tabellenindex verwendet, um Koeffizienten c0, c1 aus Tabellen mit 8 Einträgen abzurufen. Die restlichen Eingabebits (R = Bits 28, 27, ...0) werden als das Argument für c0 + c1*R verwendet, was eine Anfangsapproximation für die reziproke Quadratwurzel (RS) ist und bis auf -7,65 Bits genau ist. Nachdem der relative Fehler, eps, berechnet wurde, wird die endgültige Ausgabe als RS + RS * eps * (pc1 +pc2*eps + pc3*eps2) ausgewertet, wobei pc1, pc2 und pc3 konstante Koeffizienten sind.
  • 17 veranschaulicht eine beispielhafte Ausführungsverschaltung 1240 zum Ausführen des reziproken Quadratwurzelbefehls y = 1/sqrt(x) nach den obigen Spezifikationen. Insbesondere umfasst der Eingabewert X die oben beschriebene „normierte“ Eingabe, die ein ein Doppelwortwert (32-Bit-Wert) ist, in dem Bits b31, b30 und b29 verwendet werden, um eine Koeffiziententabelle 1705 zu indizieren, wie veranschaulicht. Jede Zeile in der Koeffiziententabelle 1705 enthält ein anderes Paar von Koeffizienten c1n und c0n, wobei ein Paar aus einer Zeile auf Grundlage der Werte von b31, b30 und b29 ausgewählt wird. In einer Ausführungsform wird ein Permutationsbefehl ausgeführt, um die Koeffizienten aus der durch die Werte b31, b30 und b29 identifizierten Zeile der Koeffiziententabelle zu lesen. Die restlichen Eingabebits (R = Bits 28, 27, ...0) werden als das Argument für c0 + c1*R verwendet. Insbesondere führen Multiplikatoren 1405 die Multiplikation c1*R durch und Additionsnetzwerke 1410-1411 ermitteln c0+c1*R.
  • Fehlerauswertungsverschaltung/-logik 1710 ermittelt einen relativen Fehlerwert, eps. Nachdem der relative Fehler berechnet wurde, wird die endgültige Ausgabe als RS + RS * eps * (pc1 +pc2*eps + pc3*eps2) ausgewertet, wobei pc1, pc2 und pc3 konstante Koeffizienten sind und RS = c0 + c1*R. Deshalb führen die Multiplikatoren 1405 die Operationen pc2*eps und pc3*eps2 durch und die Additionsnetzwerke 1410-1411 führen die Operation pc1 +pc2*eps + pc3*eps2 durch. Die Multiplikatoren 1405 verwenden diesen Wert, um die Operation RS * eps * (pc1 +pc2*eps + pc3*eps2) durchzuführen und die Additionsnetzwerke generieren das endgültige Ergebnis: RS + RS * eps * (pc1 +pc2*eps + pc3*eps2).
  • In einer Ausführungsform arbeitet die Wortimplementierung des reziproken Quadratwurzelbefehls auf ähnliche Weise wie oben beschrieben. In dieser Ausführungsform ist die Eingabe x ein Wortwert in einem vorzeichenlosen Q0.16-Format, mit 216 skaliert. Der Wert x liegt in Bereich [0,25, 1] oder [0x4000,0xFFFF] und das Ergebnis y ist ein vorzeichenloser Q1.15- Wert, mit 215 skaliert. Der y- Wert liegt im Bereich [1,2] oder [0x8000,0xFFFF]. In einer Ausführungsform beträgt der maximale absolute Fehler 1,23 ulp (der mit einem ~2-Zyklus-Zuschlag weiter verbessert werden kann). Die reziproke Quadratwurzel wird als ein Polynom 3. Grades mit Koeffizienten approximiert, die aus Nachschlagetabellen wie in vorherigen Ausführungsformen extrahiert werden.
  • In einer Ausführungsform wird die Eingabe x auf [0,5, 1] „normiert“ und Bit 15 wird auf 0 gesetzt, falls die ursprüngliche Eingabe x<0,5 war. Dann werden die führenden Bits der „normierten Eingabe“ (Bits 15, 14, 13) als ein Tabellenindex verwendet, um Koeffizienten c3, c2, c1, c0 aus Tabellen mit 8 Einträgen abzurufen. Die restlichen Eingabebits (Bruch R = Bits 11, 10, ...0) werden als das Argument für das folgende Polynom verwendet: c3*R3 + c2*R2 + c1*R + c0. Das Ergebnis dieser polynomen Auswertung ist die Befehlsausgabe (für Eingaben innerhalb des Bereichs). Für Eingaben außerhalb des Bereichs (x<0,5) ist die Ausgabe 0xFFFF.
  • Ein Verfahren gemäß einer Ausführungsform der Erfindung ist in 18 veranschaulicht. Das Verfahren kann innerhalb des Kontexts der Prozessor- und Systemarchitekturen, die oben beschrieben sind, implementiert werden, ist jedoch nicht auf eine bestimmte Systemarchitektur beschränkt.
  • Bei 1801 wird ein erster reziproker Quadratwurzel(SR)/Befehl abgerufen, der Felder für einen Opcode, Quelloperanden für gepackte Daten und einen Zieloperanden für gepackte Daten aufweist. Bei 1802 wird der reziproke Quadratwurzelbefehl decodiert, um einen (z. B. in eine Vielzahl von Mikrooperationen, die die restlichen Operationen des Verfahrens durchführen) decodierten reziproken Quadratwurzelbefehl zu erzeugen.
  • Bei 1803 werden Koeffizientenwerte, die zum Durchführen der reziproken Quadratwurzel benötigt werden, und Eingabedaten für den reziproken Quadratwurzelbefehl abgerufen und in gepackten Datenquellenregistern oder an temporären Speicherstellen gespeichert. Die Operationen der Umkehrbefehle werden geplant. Die während der Decodierphase generierten Mikrooperationen können beispielsweise in eine Warteschlange gereiht werden und zur Ausführung an einer Vielzahl von funktionalen Einheiten der Ausführungsverschaltung geplant werden.
  • Bei 1804 wird der decodierte Umkehrbefehl unter Verwendung eines ersten Abschnitts von Eingabedaten als ein Index zum Identifizieren der Koeffizienten ausgeführt. Für eine Doppelwort-Implementierung umfasst der Index c0 und c1 und für eine Wort-Implementierung umfasst der Index c0, c1, c2 und c3. Darüber hinaus werden die konstanten Werte pc1, pc2 und pc3 für die Doppelwort-Implementierung aus dem Speicher gelesen. Danach werden Multiplikationen und Additionen unter Verwendung der Koeffizienten, Konstanten (für Doppelwörter) und des zweiten Abschnitts der Eingabedaten (R) durchgeführt, um RS * eps * (pc1 + pc2*eps + pc3 * eps2) für Doppelwörter oder c3*R3 + c2*R2 + c1*R + c0 für Wörter zu ermitteln.
  • Bei 1805 wird das Ergebnis in einem gepackten Zielregister gespeichert.
  • BEISPIELHAFTE CODEFOLGE FÜR DOPPELWORT-QUADRATWURZEL-UMKEHRUNG
  • Reziproke Quadratwurzel-Codefolge
  • Eine Ausführungsform führt beim Ausführen eines reziproken Doppelwort-Quadratwurzelbefehls die folgende Abfolge von Operationen durch:
    Figure DE102018132196A1_0013
    Figure DE102018132196A1_0014
    Figure DE102018132196A1_0015
    Figure DE102018132196A1_0016
    Figure DE102018132196A1_0017
    Figure DE102018132196A1_0018
    Figure DE102018132196A1_0019
  • Analyse der Codefolge
  • Deshalb werden die acht möglichen Werte für die Koeffizienten c0 und c1 zuerst angegeben. Abhängig von den Indexwerten, die zum Indizieren der Nachschlagetabelle verwendet wurden, kann c1 beispielsweise auf 0x6bdb, 0x4fad, 0x3df4, 0x31f4, 0x4c44, 0x3857, Ox2bcf oder 0x235 gesetzt sein. Die Polynomkoeffizienten pc1, pc2 und pc3 werden angegeben und eine weitere Konstante (CRANGE) wird für Korrekturoperationen angegeben.
  • Eine Abfolge von Multiplikations-, Vermischungs-, Verschiebeoperationen wird unter Verwendung der Koeffizienten und eines Maskenwerts (ABSMASK) durchgeführt, um die Anfangsapproximation zu generieren, die in ftmp6 gespeichert ist (im nachfolgenden Code als R identifiziert). Die relativen Fehlerterme (z. B. eps) werden ermittelt und in ftmp4 gespeichert. Danach wird unter Verwendung von 64 Bits zum Durchführen der Berechnung (z. B. PADDQ) zur hinreichenden Genauigkeit eine Auswertung von pc1*eps+pc2*eps2+pc3*eps3 initiiert. Verschiedene Verschiebeoperationen werden durchgeführt, um Skalierungsfaktoren anzupassen, und Vermischungen werden verwendet, um 32-Bit-Datenelemente in ein SIMD-Register zu packen. Der Wert von (pc1 + pc2*eps + pc3*eps2) wird ermittelt und eine temporäre Variable P wird verwendet, um eps * (pc1 + pc2*eps + pc3*eps2) zu repräsentieren. Das Endergebnis, RS + RS * eps * (pc1 + pc2*eps + pc3*eps2) wird anfänglich in ftmp6 gespeichert und wird dann einer ODER-Operation mit einem berechneten und in ftmp0 gespeicherten Korrekturwert unterzogen. Das Endergebnis wird im xmm1 -Register gespeichert. Es ist anzumerken, dass in der veranschaulichten Codefolge R = RS.
  • BEISPIELHAFTE CODEFOLGE FÜR WORT-QUADRATWURZEL-UMKEHRUNG
  • Reziproke Quadratwurzel-Codefolge
  • Eine Ausführungsform führt beim Ausführen eines reziproken Doppelwort-Quadratwurzelbefehls die folgende Abfolge von Operationen durch:
    Figure DE102018132196A1_0020
    Figure DE102018132196A1_0021
    Figure DE102018132196A1_0022
    Figure DE102018132196A1_0023
    Figure DE102018132196A1_0024
  • Analyse der Codefolge
  • Deshalb werden die Maskenwerte, ABSMASK und CMASK, und die Variablen MONE und ZERO initialisiert und acht mögliche Werte für die Koeffizienten c0, c1, c2 und c3 werden zuerst angegeben. Abhängig von den Indexwerten, die zum Indizieren der Nachschlagetabelle verwendet wurden, kann c1 beispielsweise auf 0xffa8, 0xb70a, 0x8b49, 0x6e8c, 0xb4c6, 0x816e, 0x627d oder 0x4e2b gesetzt sein. Die für die Doppelwort-Umkehrung verwendeten Polynomkoeffizienten pc1, pc2 und pc3 werden nicht verwendet.
  • Eine Abfolge von Multiplikations-, Vermischungs- und Verschiebeoperationen werden unter Verwendung der Koeffizienten und Maskenwerte durchgeführt, beginnend mit einer Bewegungsoperation, um den Eingabewert von xmm2 nach ftmp0 zu transferieren. Nachdem die Koeffizienten an temporäre Speicherstellen (ftmpn) transferiert sind, wird eine Abfolge von Permutationsoperationen durchgeführt (vpermw), um Tabellenabrufe durchzuführen, um den richtigen Satz von zu verwendenden Koeffizienten zu ermitteln. Wie erwähnt werden Bits 15, 14 und 13 verwendet, um den Tabellenabruf durchzuführen. Die restlichen Eingabebits (Bruch R = Bits 11, 10, ...0) werden als das Argument für das Polynom verwendet: c3*R3 + c2*R2 + c1*R + c0.
  • In einer Implementierung werden zwei führende Bits von c0 herausverschoben, um die Genauigkeit zu verbessern. Diese passen nicht in die niedrigsten 16 Bits von c0*218, das in der Tabelle gespeichert ist. Diese führenden Bits sind 11, wenn x in [0,25,0,5] liegt, und 10 für x in [0,5, 1]. Im beispielhaften Code sind sie in ftmp1 gespeichert und werden nachfolgend zum in ftmp0 gespeicherten Ergebnis addiert. Das Ergebnis in ftmp0 wird dann einer ODER-Operation mit dem Korrekturmaskenwert aus ftmp4 unterzogen (der für Eingaben außerhalb des Bereichs auf OxFFFF gesetzt ist) und das endgültige Ergebnis, c3*R3 + c2*R2 + c1*R + c0 (für Eingaben innerhalb des Bereichs) oder OxFFFF (für Eingaben außerhalb des Bereichs) wird in xmm1 gespeichert. In der vorstehenden Beschreibung wurden Ausführungsformen der Erfindung unter Bezugnahme auf bestimmte Ausführungsbeispiele davon beschrieben. Es ist jedoch offensichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne vom allgemeinen Gedanken und Umfang der Erfindung abzuweichen, wie in den beigefügten Ansprüchen dargelegt. Die Beschreibung 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 universellen oder speziellen Prozessor zum Durchführen der Schritte zu veranlassen. Alternativ können diese Schritte durch spezifische Hardwarekomponenten, die fest verdrahtete Logik zum Durchführen der Schritte haben, oder durch eine beliebige Kombination aus programmierten Computerkomponenten und maßgeschneiderten Hardwarekomponenten durchgeführt werden.
  • Wie hierin beschrieben, können sich Befehle auf spezifische Auslegungen von Hardware, wie anwendungsspezifische integrierte Schaltungen (Application Specific Integrated Circuits, ASICs), die dazu ausgelegt sind, bestimmte Operationen durchzuführen, oder die eine vorher festgelegte Funktionalität aufweisen, oder Softwarebefehle, die in einem Arbeitsspeicher gespeichert sind, der in einem nicht-flüchtigen computerlesbaren Medium ausgeführt ist, beziehen. Somit können die in den Figuren gezeigten Techniken unter Verwendung von Code und Daten umgesetzt 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 Vorrichtungen über ein Netzwerk) Code und Daten unter Verwendung von computermaschinenlesbaren Medien, wie nicht-flüchtigen computermaschinenlesbaren Speichermedien (z. B. Magnetplatten; optische Platten; Direktzugriffsspeicher; Nur-Lese-Speicher; Flash-SpeicherVorrichtungen; Phasenwechselspeicher) und transitorischen computermaschinenlesbaren Kommunikationsmedien (z. B. elektrische, optische, akustische oder eine andere Form propagierter Signale - wie Trägerwellen, Infrarotsignale, digitale Signale usw.). Außerdem enthalten diese elektronischen Einrichtungen üblicherweise einen Satz von einem oder mehreren Prozessoren, die an eine oder mehrere andere Komponenten, wie eine oder mehrere Speichereinrichtungen (nichtflüchtige maschinenlesbare Speichermedien), Benutzereingabe/-ausgabevorrichtungen (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 eine/n oder mehrere Busse und Brücken (auch als Bussteuerungen 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 typischerweise Code und/oder Daten zur Ausführung auf dem Satz von einem oder mehreren Prozessoren dieser elektronischen Einrichtung. Natürlich können ein oder mehrere Teile einer Ausführungsform der Erfindung unter Verwendung unterschiedlicher Kombinationen von Software, Firmware und/oder Hardware implementiert sein. In dieser ausführlichen Beschreibung sind zur Erklärung durchweg zahlreiche spezifische Details dargelegt worden, um ein gründliches Verständnis der vorliegenden Erfindung bereitzustellen. Es ist jedoch für Fachleute 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 Geltungsbereich und der Gedanke der Erfindung mittels der nachfolgenden Ansprüche zu beurteilen.

Claims (25)

  1. Prozessor, umfassend: einen Decoder zum Decodieren eines Befehls zum Erzeugen eines decodierten Befehls; ein Quellenregister, um mindestens ein gepacktes Eingabedatenelement zu speichern; ein Zielregister, um ein Ergebnisdatenelement zu speichern; und eine Ausführungsverschaltung, um die decodierte Anweisung auszuführen, wobei die Ausführungsverschaltung einen ersten Abschnitt des gepackten Eingabedatenelements als einen Index für eine Datenstruktur zu verwenden hat, die eine Vielzahl von Sätzen von Koeffizienten enthält, um einen ersten Satz von Koeffizienten aus der Vielzahl der Sätze zu identifizieren, wobei die Ausführungsverschaltung unter Verwendung einer Kombination der Koeffizienten und eines zweiten Abschnitts des gepackten Eingabedatenelements eine reziproke Quadratwurzel des gepackten Eingabedatenelements zu erzeugen hat und die reziproke Quadratwurzel als ein Ergebnisdatenelement im Zielregister zu speichern hat.
  2. Prozessor nach Anspruch 1, wobei das Kombinieren der Koeffizienten mit dem zweiten Abschnitt des gepackten Eingabedatenelements Ermitteln eines relativen Fehlerwerts („eps“) auf Grundlage des zweiten Abschnitts des gepackten Eingabedatenelements und Verwenden des relativen Fehlerwerts zum Abschätzen der reziproken Quadratwurzel umfasst.
  3. Prozessor nach Anspruch 2, wobei das Verwenden des relativen Fehlerwerts ein Ermitteln des Werts c0 + c1*R + (c0 + c1*R) * eps * (pc1 +pc2*eps + pc3*eps2) umfasst, wobei R den zweiten Abschnitt des gepackten Eingabedatenelements umfasst, pc1, pc2 und pc3 konstante Werte umfassen und eps den relativen Fehlerwert umfasst.
  4. Prozessor nach Anspruch 1 oder 2, wobei das gepackte Eingabedatenelement ein Doppelwortdatenelement umfasst.
  5. Prozessor nach Anspruch 1 oder 3, wobei das Kombinieren der Koeffizienten mit dem zweiten Abschnitt des gepackten Eingabedatenelements ein Auswerten einer Polynomfunktion mit den Koeffizienten als Polynomkoeffizienten und dem zweiten Abschnitt des gepackten Eingabedatenelements als Eingabe in die Polynomfunktion umfasst.
  6. Prozessor nach Anspruch 4, wobei die Polynomfunktion c3*R3 + c2*R2 + c1*R + c0 umfasst, wobei c0, c1, c2 und c3 die Koeffizienten sind und R der zweite Abschnitt des gepackten Eingabedatenelements ist.
  7. Prozessor nach Anspruch 1 oder 6, wobei die Ausführungsverschaltung eine Vielzahl von Multiplikatoren umfasst, um einen oder mehrere des ersten Satzes von Koeffizienten mit dem zweiten Abschnitt der gepackten Eingabedaten oder mit aus dem zweiten Abschnitt der gepackten Eingabedaten abgeleiteten Datenwerten zu multiplizieren, wobei die Multiplikationen eine Vielzahl von temporären Produkten erzeugen.
  8. Prozessor nach Anspruch 7, wobei die Ausführungsverschaltung ferner ein Additionsnetzwerk umfasst, um die temporären Produkte zu addieren, um ein Ergebnis zu erstellen, das als ein gepacktes Datenelement im Zielregister zu speichern ist.
  9. Prozessor nach Anspruch 8, wobei das Additionsnetzwerk ebenfalls einen oder mehrere zusätzliche Werte zu den temporären Produkten zu addieren hat, um das Ergebnis zu erstellen.
  10. Prozessor nach Anspruch 9, wobei der eine oder die mehreren zusätzlichen Werte mindestens einen der Koeffizienten umfassen.
  11. Verfahren, umfassend: Decodieren einer Anweisung; Speichern mindestens eines gepackten Eingabedatenelements in einem Quellenregister; Ausführen der decodierten Anweisung, wobei das Ausführen ein Verwenden eines ersten Abschnitts eines gepackten Eingabedatenelements eines Quellenregisters als ein Index für eine Datenstruktur umfasst, die eine Vielzahl von Sätzen von Koeffizienten enthält, um einen ersten Satz von Koeffizienten aus der Vielzahl der Sätze zu identifizieren, Generieren und Speichern, in einem Zielregister, einer reziproken Quadratwurzel des gepackten Eingabedatenelements unter Verwendung einer Kombination der Koeffizienten und eines zweiten Abschnitts des gepackten Eingabedatenelements und Speichern der reziproken Quadratwurzel als ein Ergebnisdatenelement im Zielregister.
  12. Verfahren nach Anspruch 11, wobei das Kombinieren der Koeffizienten mit dem zweiten Abschnitt des gepackten Eingabedatenelements ein Ermitteln eines relativen Fehlerwerts („eps“) auf Grundlage des zweiten Abschnitts des gepackten Eingabedatenelements und Verwenden des relativen Fehlerwerts zum Abschätzen der reziproken Quadratwurzel umfasst.
  13. Verfahren nach Anspruch 12, wobei das Verwenden des relativen Fehlerwerts ein Ermitteln des Werts c0 + c1*R + (c0 + c1*R) * eps * (pc1 +pc2*eps + pc3*eps2) umfasst, wobei R den zweiten Abschnitt des gepackten Eingabedatenelements umfasst, pc1, pc2 und pc3 konstante Werte umfassen und eps den relativen Fehlerwert umfasst.
  14. Verfahren nach Anspruch 11 oder 12, wobei das gepackte Eingabedatenelement ein Doppelwortdatenelement umfasst.
  15. Verfahren nach Anspruch 11 oder 13, wobei das Kombinieren der Koeffizienten mit dem zweiten Abschnitt des gepackten Eingabedatenelements ein Auswerten einer Polynomfunktion mit den Koeffizienten als Polynomkoeffizienten und dem zweiten Abschnitt des gepackten Eingabedatenelements als Eingabe in die Polynomfunktion umfasst.
  16. Verfahren nach Anspruch 14, wobei die Polynomfunktion c3*R3 + c2*R2 + c1*R + c0 umfasst, wobei c0, c1, c2 und c3 die Koeffizienten sind und R der zweite Abschnitt des gepackten Eingabedatenelements ist.
  17. Verfahren nach Anspruch 11 oder 16, wobei das Generieren einer reziproken Quadratwurzel ein Multiplizieren eines oder mehrerer des ersten Satzes von Koeffizienten mit dem zweiten Abschnitt der gepackten Eingabedaten oder mit aus dem zweiten Abschnitt der gepackten Eingabedaten abgeleiteten Datenwerten umfasst, wobei die Multiplikationen eine Vielzahl von temporären Produkten erzeugen.
  18. Verfahren nach Anspruch 17, wobei das Generieren einer reziproken Quadratwurzel ein Addieren der temporären Produkte umfasst, um ein Ergebnis zu erstellen, das als ein gepacktes Datenelement im Zielregister zu speichern ist.
  19. Verfahren nach Anspruch 18, ferner umfassend: Addieren eines oder mehrerer zusätzlicher Werte zu den temporären Produkten, um das Ergebnis zu generieren.
  20. Verfahren nach Anspruch 19, wobei der eine oder die mehreren zusätzlichen Werte mindestens einen der Koeffizienten umfassen.
  21. 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 zum Erzeugen eines decodierten Befehls; Speichern mindestens eines gepackten Eingabedatenelements in einem Quellenregister; Ausführen der decodierten Anweisung, wobei das Ausführen ein Verwenden eines ersten Abschnitts des gepackten Eingabedatenelements als ein Index für eine Datenstruktur, die eine Vielzahl von Sätzen von Koeffizienten enthält, um einen ersten Satz von Koeffizienten aus der Vielzahl der Sätze zu identifizieren, umfasst, Generieren einer reziproken Quadratwurzel des gepackten Eingabedatenelements unter Verwendung einer Kombination der Koeffizienten und eines zweiten Abschnitts des gepackten Eingabedatenelements und Speichern der reziproken Quadratwurzel als ein Ergebnisdatenelement im Zielregister.
  22. Maschinenlesbares Medium nach Anspruch 21, wobei das Kombinieren der Koeffizienten mit dem zweiten Abschnitt des gepackten Eingabedatenelements ein Ermitteln eines relativen Fehlerwerts („eps“) auf Grundlage des zweiten Abschnitts des gepackten Eingabedatenelements und Verwenden des relativen Fehlerwerts zum Abschätzen der reziproken Quadratwurzel umfasst.
  23. Maschinenlesbares Medium nach Anspruch 22, wobei das Verwenden des relativen Fehlerwerts ein Ermitteln des Werts c0 + c1*R + (c0 + c1*R) * eps * (pc1 +pc2*eps + pc3*eps2) umfasst, wobei R den zweiten Abschnitt des gepackten Eingabedatenelements umfasst, pc1, pc2 und pc3 konstante Werte umfassen und eps den relativen Fehlerwert umfasst.
  24. Maschinenlesbares Medium nach Anspruch 21 oder 22, wobei das gepackte Eingabedatenelement ein Doppelwortdatenelement umfasst.
  25. Maschinenlesbares Medium nach Anspruch 21 oder 23, wobei das Kombinieren der Koeffizienten mit dem zweiten Abschnitt des gepackten Eingabedatenelements ein Auswerten einer Polynomfunktion mit den Koeffizienten als Polynomkoeffizienten und dem zweiten Abschnitt des gepackten Eingabedatenelements als Eingabe in die Polynomfunktion umfasst.
DE102018132196.1A 2017-12-21 2018-12-14 Vorrichtung und verfahren zum verarbeiten von reziproken quadratwurzeloperationen Pending DE102018132196A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/850,673 US10664237B2 (en) 2017-12-21 2017-12-21 Apparatus and method for processing reciprocal square root operations
US15/850,673 2017-12-21

Publications (1)

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

Family

ID=66768181

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018132196.1A Pending DE102018132196A1 (de) 2017-12-21 2018-12-14 Vorrichtung und verfahren zum verarbeiten von reziproken quadratwurzeloperationen

Country Status (3)

Country Link
US (1) US10664237B2 (de)
CN (1) CN109947475A (de)
DE (1) DE102018132196A1 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10915494B1 (en) * 2017-11-12 2021-02-09 Habana Labs Ltd. Approximation of mathematical functions in a vector processor

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5996066A (en) * 1996-10-10 1999-11-30 Sun Microsystems, Inc. Partitioned multiply and add/subtract instruction for CPU with integrated graphics functions
US5973705A (en) 1997-04-24 1999-10-26 International Business Machines Corporation Geometry pipeline implemented on a SIMD machine
US6163791A (en) * 1998-02-02 2000-12-19 International Business Machines Corporation High accuracy estimates of elementary functions
US6976043B2 (en) * 2001-07-30 2005-12-13 Ati Technologies Inc. Technique for approximating functions based on lagrange polynomials
US7313584B2 (en) * 2003-07-31 2007-12-25 International Business Machines Corporation Increased precision in the computation of a reciprocal square root
US20060271615A1 (en) * 2005-05-27 2006-11-30 Shearer James B Method to compute an approximation to the reciprocal of the square root of a floating point number in IEEE format
US8676871B2 (en) 2010-09-24 2014-03-18 Intel Corporation Functional unit capable of executing approximations of functions
US8775494B2 (en) 2011-03-01 2014-07-08 Nvidia Corporation System and method for testing whether a result is correctly rounded
US8990278B1 (en) * 2011-10-17 2015-03-24 Xilinx, Inc. Circuitry for computing mathematical functions
KR102359265B1 (ko) * 2015-09-18 2022-02-07 삼성전자주식회사 프로세싱 장치 및 프로세싱 장치에서 연산을 수행하는 방법
CN106775587B (zh) 2016-11-30 2020-04-14 上海兆芯集成电路有限公司 计算机指令的执行方法以及使用此方法的装置

Also Published As

Publication number Publication date
US20190196790A1 (en) 2019-06-27
US10664237B2 (en) 2020-05-26
CN109947475A (zh) 2019-06-28

Similar Documents

Publication Publication Date Title
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
DE102018124919A1 (de) Skalierbare speicheroptimierte Hardware für Matrix-Solve
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE102018005859A1 (de) Einrichtung und Verfahren zur Multiplikation und Akkumulation von komplexen und echten gepackten Datenelementen
DE102018126036A1 (de) Systeme und verfahren zum setzen eines kachelregisterpaars auf null
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
DE102018005976A1 (de) Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten
DE102018125971A1 (de) Systeme und verfahren zum berechnen von skalaprodukten von halbbytes in operanden aus zwei kacheln

Legal Events

Date Code Title Description
R012 Request for examination validly filed