DE102014003696A1 - Systeme, Vorrichtungen und Verfahren zur Verringerung der Anzahl von "Short-Integer"-Multiplikationen - Google Patents

Systeme, Vorrichtungen und Verfahren zur Verringerung der Anzahl von "Short-Integer"-Multiplikationen Download PDF

Info

Publication number
DE102014003696A1
DE102014003696A1 DE102014003696.0A DE102014003696A DE102014003696A1 DE 102014003696 A1 DE102014003696 A1 DE 102014003696A1 DE 102014003696 A DE102014003696 A DE 102014003696A DE 102014003696 A1 DE102014003696 A1 DE 102014003696A1
Authority
DE
Germany
Prior art keywords
data value
operand
data
source operand
source
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
DE102014003696.0A
Other languages
English (en)
Inventor
Ilya Albrekht
Elmoustapha Ould-Ahmed-Vall
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 DE102014003696A1 publication Critical patent/DE102014003696A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/533Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros

Landscapes

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

Abstract

Es werden Systeme, Verfahren und Vorrichtungen zur Berechnung eines Quadrats eines Datenwerts eines ersten Quellenoperanden, eines Quadrats eines Datenwerts eines zweiten Quellenoperanden und einer Multiplikation der Daten des ersten und des zweiten Operanden unter Verwendung nur einer Multiplikation beschrieben.

Description

  • GEBIET DER ERFINDUNG
  • Das Gebiet der Erfindung betrifft im Allgemeinen die Computerprozessorarchitektur und genauer Befehle, die bei Ausführung ein bestimmtes Ergebnis verursachen.
  • ALLGEMEINER STAND DER TECHNIK
  • Ein Befehlssatz oder eine Befehlssatzarchitektur (instruction set architecture, ISA) ist der Teil der Computerarchitektur, der das Programmieren betrifft, und kann die native(n) Datenarten, Befehle, Registerarchitektur, Adressierweisen, Speicherarchitektur, Unterbrechungs- und Ausnahmenbehandlung und externe Ein- und Ausgänge (E/A) umfassen. Es sollte bemerkt werden, dass sich der Ausdruck ”Befehl” hier – im Gegensatz zu Mikrobefehlen oder Mikroops, die sich aus der Decodierung von Makrobefehlen durch den Decodierer eines Prozessors ergeben – im Allgemeinen auf Makrobefehle, das heißt, Befehle, die dem Prozessor zur Ausführung bereitgestellt werden, bezieht.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Die vorliegende Erfindung ist in den Figuren der beiliegenden Zeichnungen, in denen gleiche Bezugszeichen ähnliche Elemente angeben, beispielhaft und ohne Beschränkung veranschaulicht, wobei
  • 1 eine beispielhafte Ausführung des SQRMUL-Befehls veranschaulicht.
  • 2 ist ein Blockdiagramm einer beispielhaften Ausführungsform eines Prozessors (Prozessorkerns) zu Ausführung eines oder mehrerer Befehle.
  • 3 veranschaulicht eine Ausführungsform der Ausführung eines SQRMUL-Befehls in einem Prozessor.
  • 4 und 5 veranschaulichen Ausführungsformen von Verfahren zur Verarbeitung eines SQRMUL-Befehls.
  • 6 veranschaulicht ein beispielhaftes Verfahren der Wahl zwischen den Abläufen von 4 und 5.
  • 7 ist ein Blockdiagramm einer Registerarchitektur 700 nach einer Ausführungsform der Erfindung.
  • 8A ist ein Blockdiagramm, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte registerumbenennende Out-of-Order-Ausgabe/Ausführungspipeline nach Ausführungsformen der Erfindung veranschaulicht.
  • 8B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines In-Order-Architekturkerns als auch eines beispielhaften registerumbenennenden Out-of-Order-Ausgabe/Ausführungsarchitekturkerns zur Aufnahme in einen Prozessor nach Ausführungsformen der Erfindung veranschaulicht.
  • 9A bis B veranschaulichen ein Blockdiagramm einer genaueren beispielhaften In-Order-Architektur, deren Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne von der gleichen Art und/oder von verschiedenen Arten) in einem Chip sein würde.
  • 10 ist ein Blockdiagramm eines Prozessors 1000, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann, und integrierte Grafik aufweisen kann, nach Ausführungsformen der Erfindung.
  • 11 bis 14 sind Blockdiagramme von beispielhaften Computerarchitekturen.
  • 15 ist ein Blockdiagramm, das die Verwendung eines Softwarebefehlskonverters zur Umwandlung von binären Befehlen in einem Quellenbefehlssatz in binäre Befehle in einem Zielbefehlssatz nach Ausführungsformen der Erfindung vergleicht.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der folgenden Beschreibung sind zahlreiche bestimmte Einzelheiten dargelegt. Es versteht sich jedoch, dass Ausführungsformen der Erfindung ohne diese bestimmten Einzelheiten ausgeführt werden können. In anderen Fällen wurden wohlbekannte Schaltungen, Aufbauten und Techniken nicht ausführlich gezeigt, um das Verständnis dieser Beschreibung nicht unklar zu machen.
  • Wenn in der Beschreibung auf ”eine Ausführungsform”, ”eine beispielhafte Ausführungsform” usw. Bezug genommen wird, deutet dies an, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, einen bestimmten Aufbau oder eine bestimmte Eigenschaft umfassen kann, doch braucht nicht notwendigerweise jede Ausführungsform das bestimmte Merkmal, den bestimmten Aufbau oder die bestimmte Eigenschaft zu umfassen. Überdies beziehen sich derartige Ausdrücke nicht notwendigerweise auf die gleiche Ausführungsform. Ferner wird dann, wenn ein bestimmtes Merkmal, ein bestimmter Aufbau oder eine bestimmte Eigenschaft in Verbindung mit einer Ausführungsform beschrieben ist, unterstellt, dass es innerhalb der Kenntnisse eines Fachmanns liegt, dieses Merkmal, diesen Aufbau oder diese Eigenschaft in Verbindung mit anderen Ausführungsformen auszuführen, ob dies nun ausdrücklich beschrieben ist, oder nicht.
  • Überblick
  • Die Befehlssatzarchitektur unterscheidet sich von der Mikroarchitektur, bei der es sich um die innere Gestaltung des Prozessors, der den ISA ausführt, handelt. Prozessoren mit unterschiedlichen Mikroarchitekturen können sich einen gemeinsamen Befehlssatz teilen. Zum Beispiel führen Intel-Pentium-4-Prozessoren, Intel-Core-Prozessoren und Prozessoren der Advanced Micro Devices, Inc. in Sunnyvale, Kalifornien, beinahe identische Versionen des x86-Befehlssatzes (wobei neueren Versionen einige Erweiterungen hinzugefügt wurden) aus, doch weisen sie unterschiedliche innere Gestaltungen auf. Zum Beispiel kann die gleiche Registerarchitektur des ISA in verschiedenen Mikroarchitekturen unter Verwendung wohlbekannter Techniken einschließlich zweckbestimmter physischer Register, eines oder mehrerer dynamisch zugewiesener physischer Register unter Verwendung eines Registerumbenennungsmechanismus (z. B. der in der US-Patentschrift Nr. 5,446,912 beschriebenen Verwendung einer Registeraliastabelle (RAT), eines Reorder Buffers (ROB) und einer Stilllegungsregister-Datei; der in der US-Patentschrift Nr. 5,207,132 beschriebenen Verwendung von mehreren Plänen und eines Satzes von Registern) usw. auf unterschiedliche Weisen ausgeführt werden. Sofern nicht anders angegeben beziehen sich die Ausdrücke ”Registerarchitektur”, ”Registerdatei” und ”Register” auf das, was für die Software/den Programmierer sichtbar ist, und die Weise, auf die Befehle Register angeben. Wo Genauigkeit erwünscht ist, werden die Eigenschaftsworte ”logisch”, ”architektonisch”, oder ”für die Software sichtbar” verwendet werden, um Register/Dateien in der Registerarchitektur anzugeben, während andere Eigenschaftsworte verwendet werden, um Register in einer gegebenen Mikroarchitektur zu bezeichnen (z. B. ein physisches Register, einen Reorder Buffer, ein Stilllegungsregister, einen Registersatz).
  • Ein Befehlssatz umfasst ein oder mehr Befehlsformate. Ein gegebenes Befehlsformat definiert verschiedene Felder (Anzahl von Bits, Speicherstelle von Bits), um unter anderem die Operation, die ausgeführt werden soll, und den/die Operand(en), woran diese Operation ausgeführt werden soll, zu bestimmen. Ein gegebener Befehl ist unter Verwendung eines gegebenen Befehlsformats ausgedrückt und bestimmt die Operation und die Operanden. Ein Befehlsstrom ist eine bestimmte Abfolge von Befehlen, wobei jeder Befehl in der Abfolge ein Auftreten eines Befehls in einem Befehlsformat ist.
  • Wissenschaftliche, finanzielle, autovektorisierte Allzweck-, RMS (recognition, mining and synthesis, Erkennungs- Schürf- und Synthese)/visuelle und Multimedia-Anwendungen (z. B. 2D/3D-Grafik, Bildverarbeitung, Videokompression/-dekompression, Spracherkennungsalgorithmen und Audiobearbeitung) erfordern häufig, dass die gleiche Operation an einer großen Zahl von Datenfeldern durchgeführt wird (als ”Datenparallelität” bezeichnet). Single-Instruction-Multiple-Data (SIMD) bezieht sich auf eine Art von Befehl, der einen Prozessor dazu bringt, die gleiche Operation an mehreren Datenfeldern durchzuführen. Die SIMD-Technologie ist besonders für Prozessoren geeignet, die die Bits in einem Register in eine Anzahl von Datenelementen von fester Größe teilen können, von denen jedes einen gesonderten Wert darstellt. Zum Beispiel können die Bits in einem 64-Bit-Register als Quellenoperand bestimmt werden, der als vier gesonderte 16-Bit-Datenelemente, wovon jedes einen gesonderten 16-Bit-Wert darstellt, gehandhabt werden soll. Als anderes Beispiel können die Bits in einem 256-Bit-Register als Quellenoperand bestimmt sein, der als vier gesonderte gepackte 64-Bit-Datenelemente (Datenelemente von der Größe eines Quadworts (Q)), acht gesonderte gepackte 32-Bit-Datenelemente (Datenelemente von der Größe eines Doppelworts (D)), sechzehn gesonderte gepackte 16-Bit-Datenelemente (Datenelemente von der Größe eines Worts (W)) oder zweiunddreißig gesonderte gepackte 8-Bit-Datenelemente (Datenelemente von der Größe eines Bytes (B)) gehandhabt werden soll. Diese Art von Daten wird als gepackte Datenart oder Vektordatenart bezeichnet, und Operanden dieser Art werden als gepackte Datenoperanden oder Vektoroperanden bezeichnet. Mit anderen Worten bezieht sich ein gepacktes Datenfeld oder ein Vektor auf eine Abfolge von gepackten Datenelementen; und ist ein gepackter Datenoperand oder ein Vektoroperand ein Quellen- oder Destinationsoperand eines SIMD-Befehls (auch als gepackter Datenbefehl oder Vektorbefehl bekannt).
  • Beispielhaft bestimmt eine Art von SIMD-Befehl eine einzelne Vektoroperation, die an zwei Quellenvektoroperanden auf eine senkrechte Weise durchgeführt werden soll, um einen Destinationsvektoroperanden (auch als Ergebnisvektoroperand bezeichnet) von der gleichen Größe, mit der gleichen Anzahl von Datenelementen und in der gleichen Datenelementreihenfolge zu erzeugen. Die Datenelemente in den Quellenvektoroperanden werden als Quellendatenelemente bezeichnet, während die Datenelemente in dem Destinationsvektoroperanden als Destination- oder Ergebnisdatenelemente bezeichnet werden. Diese Quellenvektoroperanden weisen die gleiche Größe auf und enthalten Datenelemente mit der gleichen Breite und enthalten daher die gleiche Anzahl von Datenelementen. Die Quellendatenelemente an den gleichen Bitpositionen in den beiden Quellenvektoroperanden bilden Paare von Datenelementen (auch als entsprechende Datenelemente bezeichnet; das heißt, das Datenelement an der Datenelementposition 0 jedes Quellenoperanden stimmt überein, das Datenelement an der Datenelementposition 1 jedes Quellenoperanden stimmt überein, und so weiter). Die durch diesen SIMD-Befehl bestimmte Operation wird gesondert an jedem dieser Paare von Quellendatenelementen durchgeführt, um eine übereinstimmende Anzahl von Ergebnisdatenelementen zu erzeugen, und daher weist jedes Paar von Quellendatenelementen ein entsprechendes Ergebnisdatenelement auf. Da die Operation senkrecht ist, und da der Ergebnisvektoroperand von gleicher Größe ist, die gleiche Anzahl von Datenelementen aufweist, und die Ergebnisdatenelemente in der gleichen Datenelementreihenfolge wie die Quellenvektoroperanden gespeichert werden, befinden sich die Ergebnisdatenelemente an den gleichen Bitpositionen des Ergebnisvektoroperanden wie ihr entsprechendes Paar von Quellendatenelementen in den Quellenvektoroperanden. Zusätzlich zu dieser beispielhaften Art von SIMD-Befehl gibt es eine Vielfalt von anderen Arten von SIMD-Befehlen (z. B., die nur einen oder mehr als zwei Quellenvektoroperanden aufweisen; die nur auf eine waagerechte Weise arbeiten; die einen Ergebnisvektoroperanden erzeugen, der eine unterschiedliche Größe aufweist; die eine unterschiedliche Größe von Datenelementen aufweisen und/oder die eine andere Datenelementreihenfolge aufweisen). Es sollte sich versehen, dass der Ausdruck ”Destinationsvektoroperand” (oder ”Destinationsoperand”) als das direkte Ergebnis der Durchführung der durch einen Befehl bestimmten Operation definiert ist, einschließlich der Speicherung dieses Destinationsoperanden an einem Speicherort (sei es ein Register oder an einer durch diesen Befehl bestimmten Speicheradresse), so dass ein Zugriff darauf als Quellenoperand durch einen anderen Befehl (durch Bestimmung dieses gleichen Speicherorts durch den anderen Befehl) möglich ist.
  • Die SIMD-Technologie, wie etwa jene, die durch die Intel®-CoreTM-Prozessoren, welche einen Befehlssatz aufweisen, der x86-, MMXTM-, Streaming-SIMD-Erweiterungen (SSE)-, SSE2-, SSE3-, SSE4.1- und SSE4.2-Befehle enthält, eingesetzt wird, hat eine bedeutende Verbesserung der Anwendungsleistung ermöglicht (CoreTM und MMXTM sind eingetragene Warenzeichen oder Warenzeichen der Intel Corporation in Santa Clara, Kalifornien). Es wurde ein zusätzlicher Satz von SIMD-Erweiterungen, der als die Advanced-Vektor-Erweiterungen (AVX) (AVX1 und AVX2) bezeichnet wird und das VEX-Codierschema verwendet, veröffentlicht oder herausgebracht (siehe z. B. das Dokument "Intel® 64 and IA-32 Intel Architectures Software Developers Manual", Oktober 2011; und siehe das Dokument "Intel® Advanced Vector Extensions Programming Reference", Juni 2011). Einige normale mathematische Operationen wie das Berechnen von a2 + a·b + b2 und a[i] = b[i]2 kommen bei der Matrixmultiplikation und der Multiplikation langer Zahlen ziemlich häufig vor. Solche mathematischen Operationen verwenden viele Multiplikationsbefehle, die an den modernen CPUs hinsichtlich der Wartezeit nach wie vor ziemlich aufwändig sind. Zum Beispiel sollen a und b vorzeichenlose Ganzzahlen in der Basis B sein. Der Code zum Berechnen von a2 + a·b + b2 lautet
    • 1: a_sq = a·a;
    • 2: a_times_b = a·b;
    • 3: b_sq = b·b;
    • 4: Additionen der drei Multiplikationen.
  • Bei modernen CPUs braucht jede Multiplikation bis zu 5 Zyklen, weshalb die gesamte Wartezeit für drei Multiplikationen 15 Zyklen betragen wird.
  • Nachstehend finden sich Ausführungsformen eines generisch als ”Quadrier-Multiplizier”-Befehl (square-multiply, SQRMUL) bezeichneten Befehls des Befehlssatzes und Ausführungsformen von Systemen, Architekturen, Befehlsformaten usw., die zur Verbesserung dieser Wartezeit verwendet werden können. Die Ausführung eines SQRMUL berechnet ein Quadrat eines Datenwerts eines ersten Quellenoperanden, ein Quadrat eines Datenwerts eines zweiten Quellenoperanden und eine Multiplikation der Daten des ersten und des zweiten Operanden und speichert alle drei Berechnungen in einem einzelnen Destinationsoperanden.
  • 1 veranschaulicht eine beispielhafte Ausführung des SQRMUL-Befehls. Zwei Quellenregister 101 und 103 halten Werte A bzw. B. Diese Werte werden durch eine Ausführungslogik 107 verarbeitet, um A2, A·B und B2 zu erzeugen. Diese Ergebnisse werden in einem Destinationsregister 105 gespeichert. Bei diesem Register kann es sich um ein Allzweckregister (z. B. ein Register mit der Größe eines Doppelworts) oder ein Register für gepackte Daten (mit Datenelementpositionen, die zum Speichern der berechneten Werte bestimmt sind) handeln. Obwohl eine bestimmte Reihenfolge veranschaulicht ist, kann jede beliebige andere Reihenfolge zum Speichern der berechneten Werte verwendet werden.
  • 2 ist ein Blockdiagramm einer beispielhaften Ausführungsform eines Prozessors (Prozessorkerns) 200 zur Ausführung eines oder mehrerer SQRMUL-Befehle 204. Bei einigen Ausführungsformen kann der Prozessor ein Allzweckprozessor (z. B. von der in einem Desktop, einem Laptop, Server oder ähnlichen Computer verwendeten Art) sein. Alternativ kann der Prozessor ein Spezialprozessor sein. Beispiele für geeignete Spezialprozessoren umfassen, jedoch ohne Beschränkung darauf, Netzwerkprozessoren, Kommunikationsprozessoren, kryptografische Prozessoren, Grafikprozessoren, Coprozessoren, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), und Steuerungen, um nur einige wenige Beispiele zu nennen. Bei dem Prozessor kann es sich um jeden beliebigen von verschiedenen Complex-Instruction-Set-Computing(CISC)-Prozessoren, Very-Long-Instruction-Word(VLIW)-Prozessoren, verschiedenen Hybriden davon oder völlig anderen Arten von Prozessoren handeln.
  • Der Prozessor 200 umfasst architektonisch sichtbare Register (z. B. eine architektonische Registerdatei) 205. Die architektonischen Register können hier auch einfach als Register bezeichnet sein. Sofern nicht anders angegeben oder offensichtlich, werden die Ausdrücke ”architektonisches Register”, ”Registerdatei” und ”Register” hier verwendet, um auf Register, die für die Software und/oder den Programmierer sichtbar sind, und/oder die Register, die durch Makrobefehle oder Assemblersprachenbefehle bestimmt sind, um Befehle zu identifizieren, Bezug zu nehmen. Diese Register stehen im Gegensatz zu anderen nicht architektonischen oder nicht architektonisch sichtbaren Registern in einer gegebenen Mikroarchitektur (z. B. temporäre Register, die durch Befehle verwendet werden, Reorder Buffer, Stilllegungsregister usw.). Die Register stellen im Allgemeinen Speicherstellen des Prozessors auf einem Chip dar. Die veranschaulichten architektonischen Register umfassen Gepackte-Daten-Register 206. Jedes der Gepackte-Daten-Register kann dazu betriebsfähig sein, gepackte oder Vektordaten zu speichern. Die veranschaulichten architektonischen Register können auch Gepackte-Daten-Operationsmaskenregister 207 umfassen. Jedes der Gepackte-Daten-Operationsmaskenregister kann dazu betriebsfähig sein, eine Gepackte-Daten-Operationsmaske zu speichern Diese Register können in dieser Beschreibung als ”Schreibmaskenregister” bezeichnet sein. Gepackte Datenoperanden können in den Gepackte-Daten-Registern 206 gespeichert sein.
  • Der Prozessor umfasst auch Ausführungslogik 208. Die Ausführungslogik ist dazu betriebsfähig, den einen oder die mehreren SQRMUL-Befehle 204 auszuführen oder zu verarbeiten. Bei einigen Ausführungsformen kann die Ausführungslogik eine besondere Logik (z. B. eine besondere Schaltung oder Hardware, die möglicherweise mit Firmware kombiniert ist) umfassen, um diese Befehle auszuführen.
  • Ein beispielhaftes Format des SQRMUL
  • Ein beispielhaftes Format dieses Befehls ist ”SQRMUL DEST, SOURCE 1, SOURCE 2”, wobei alle Operanden Register sind. Bei einigen Ausführungsformen sind die Register Allzweckregister. Diese Register können jede beliebige Größe aufweisen, einschließlich, aber ohne Beschränkung darauf, 8-, 16-, 32-, 64- und 128-Bit. Bei anderen Ausführungsformen sind die Register Gleitkomma- oder Gepackte-Daten-Register. Bei anderen Ausführungsformen sind die Quellen Allzweckregister und ist die Destination ein Gepackte-Daten-Register.
  • Die Quellenregister speichern bei den meisten Ausführungsformen vorzeichenlose Ganzzahlen.
  • Beispielhafte Verfahren zur Ausführung von SQRMUL
  • 3 veranschaulicht eine Ausführungsform der Ausführung eines SQRMUL-Befehls in einem Prozessor. Bei 301 wird ein SQRMUL-Befehl mit einem ersten und einem zweiten Quellenregisteroperanden, einem Destinationsregisteroperanden und einem Opcode geholt.
  • Bei 303 wird der SQRMUL-Befehl durch eine Decodierlogik decodiert.
  • Bei 305 werden die Werte der Quellenoperanden abgerufen/gelesen. Zum Beispiel werden die Quellenregister gelesen.
  • Bei 307 wird der decodierte SQRMUL-Befehl (oder werden Operationen, die einen solchen Befehl umfassen, wie etwa Mikrooperationen) durch Ausführungsbetriebsmittel wie etwa eine oder mehrere funktionale Einheiten ausgeführt, um ein Quadrat eines Datenwerts eines ersten Quellenoperanden, ein Quadrat eines Datenwerts eines zweiten Quellenoperanden und eine Multiplikation der Daten des ersten und des zweiten Operanden zu berechnen und alle drei Berechnungen in einem einzelnen Destinationsoperanden zu speichern.
  • Bei 309 werden die berechneten Werte in den Destinationsregisteroperanden gespeichert. Diese Werte können in einer bestimmten Reihenfolge wie etwa von Niedrigstwertig zu Höchstwertig (A2, A·B bis B2) oder umgekehrt usw. gespeichert werden. Bei einigen Ausführungsformen werden die berechneten Werte in Datenelementen eines Gepackte-Daten-Registers gespeichert.
  • Obwohl 307 und 309 getrennt veranschaulicht wurden, werden sie bei einigen Ausführungsformen zusammen als Teil der Ausführung des Befehls durchgeführt.
  • 4 und 5 veranschaulichen Ausführungsformen von Verfahren zur Verarbeitung eines SQRMUL-Befehls. Bei diesen Ausführungsformen ist L als Allzweckregistergröße in Bit (32 oder 64) definiert und sind a und b vorzeichenlose Ganzzahlen des ersten bzw. zweiten Operanden in der Basis B mit N gleich log2(B) in Bit. Bei dem nachstehenden Beispiel stellt a oder A jene Daten dar, die in der ersten Quelle gespeichert sind, und stellt b oder B die in der zweiten Quelle gespeicherten Daten dar. Bei einigen Ausführungsformen wird ein Verschieben usw. um eine Anzahl von Bits vorgenommen.
  • 4 veranschaulicht eine Ausführungsform eines Verfahrens zur Verarbeitung eines SQRMUL-Befehls. Es handelt sich um einen allgemeinen Fall, bei dem L >= 6N ist. Bei dieser Ausführungsform wird angenommen, dass vorher einige, wenn nicht alle, der Operationen 301 bis 305 durchgeführt wurden, doch sind diese nicht gezeigt, um die nachstehend vorgestellten Einzelheiten nicht unklar zu machen. Zum Beispiel sind das Holen und Decodieren nicht gezeigt, und ist auch das Abrufen der Operanden nicht gezeigt.
  • Bei 401 wird eine temporäre Variable t aufgebaut. Bei einigen Ausführungsformen wird diese temporäre Variable durch Verschieben von A um 2N nach links und dann ODERn des verschobenen Werts mit B aufgebaut. Mit anderen Worten bedeutet dies t = (A << 2·N)|B. Typischerweise dauert dies zwei Taktzyklen. Der sich ergebende Wert für t beträgt A·22N + B.
  • Bei 403 wird das Quadrat der temporären Variablen berechnet. Dies erzeugt eine zweite temporäre Variable von t = t·t = A2·24N + 2AB·2N + B2. In einigen Fällen dauert diese Multiplikation fünf Zyklen.
  • Bei 405 werden A2, A·B und B2 aus der zweiten temporären Variablen extrahiert. A2 wird durch Verschieben der zweiten temporären Variablen um 4N nach rechts extrahiert. Mit anderen Worten bedeutet dies A2 = t >> 4N. A·B wird durch UNDen der zweiten temporären Variablen mit einem Wert von ((1 um 2N nach links verschoben) minus 1 und dann um 2N plus 1 nach rechts verschoben extrahiert. Mit anderen Worten bedeutet dies A·B = (t&(1 << 2N – 1)) >> (2N + 1). Schließlich wird B2 durch UNDen der zweiten temporären Variablen mit einem Einerkomplement eines Werts von ((2 um N nach links verschoben) minus 1) extrahiert. Mit anderen Worten bedeutet dies B2 = t& ~ (2 << N – 1). Bei einigen Systemen dauert dies insgesamt zwei bis drei Zyklen.
  • Bei 407 werden die extrahierten Werte gespeichert. Bei einigen Ausführungsformen werden A2, A·B und B2 in dem unteren, mittleren bzw. oberen Quadranten eines Doppelworts gespeichert. Bei anderen Ausführungsformen werden diese Werte in gesonderten Datenelementen eines Gepackte-Daten-Registers gespeichert.
  • 5 veranschaulicht eine Ausführungsform eines Verfahrens zur Verarbeitung eines SQRMUL-Befehls. Es handelt sich um einen allgemeinen Fall, bei dem 4N = L ist. Bei dieser Ausführungsform wird angenommen, dass vorher einige, wenn nicht alle, der Operationen 301 bis 305 durchgeführt wurden, doch sind diese nicht gezeigt, um die nachstehend vorgestellten Einzelheiten nicht unklar zu machen. Zum Beispiel sind das Holen und Decodieren nicht gezeigt, und ist auch das Abrufen der Operanden nicht gezeigt.
  • Bei 501 wird eine temporäre Variable t aufgebaut. Bei einigen Ausführungsformen wird diese temporäre Variable durch Verschieben von A um 2N nach links und dann ODERn des verschobenen Werts mit B aufgebaut. Mit anderen Worten bedeutet dies t = (A << 2·N)|B. Typischerweise dauert dies zwei Taktzyklen. Der sich ergebende Wert für t beträgt A·22N + B.
  • Bei 503 wird das Quadrat der temporären Variablen berechnet und an einem ersten und einem zweiten Speicherort gespeichert. Dies erzeugt Speicherorte, die A2·24N – 2AB·22N + B2 speichern. In einigen Fällen dauert diese Multiplikation fünf Zyklen. Bei einigen Ausführungsformen sind der erste und der zweite Speicherort Register.
  • Bei 505 werden A2, A·B und B2 extrahiert. A2 ist der Wert, der an dem ersten Speicherort gespeichert ist. Mit anderen Worten ist A2 der Speicherort 1. A·B wird durch Verschieben der an dem zweiten Speicherort gespeicherten Daten um (2N plus 1) nach rechts extrahiert. Mit anderen Worten bedeutet dies A·B = Speicherort 2 >> (2N + 1). Schließlich wird B2 durch UNDen der Inhalte des zweiten Speicherorts mit einem Einerkomplement eines Werts von (22N minus 1) extrahiert. Mit anderen Worten bedeutet dies B2 = Speicherort 2& ~ (2 << 2N – 1). Bei einigen Systemen dauert dies insgesamt einen Zyklus.
  • Bei 507 werden die extrahierten Werte gespeichert. Bei einigen Ausführungsformen werden A2, A·B und B2 in dem unteren, mittleren bzw. oberen Quadranten eines Doppelworts gespeichert. Bei anderen Ausführungsformen werden diese Werte in gesonderten Datenelementen eines Gepackte-Daten-Registers gespeichert.
  • 6 veranschaulicht ein beispielhaftes Verfahren der Wahl zwischen den Abläufen der 4 und 5. Bei 601 wird eine Bestimmung vorgenommen, ob 4N = L ist. Wenn dies der Fall ist, wird bei 603 der Ablauf von 5 verwendet. Wenn dies nicht der Fall ist, wird bei 605 der Ablauf von 4 verwendet.
  • Obwohl das Obige unter Bezugnahme auf einen SQRMUL-Befehl beschrieben wurde, können die obigen Codeabfolgen durch mehrere Befehle in Prozessoren, die SQRMUL nicht unterstützen, durchgeführt werden.
  • Eine beispielhafte Registerarchitektur
  • 7 ist ein Blockdiagramm einer Registerarchitektur 700 nach einer Ausführungsform der Erfindung. Bei der veranschaulichten Ausführungsform gibt es 32 Vektorregister 710, die 512 Bit breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die niederwertigen 256 Bit der unteren 16 zmm-Register sind auf Register ymm0 bis 16 gefügt. Die niederwertigen 128 Bit der unteren 16 zmm-Register (die niederwertigen 128 Bit der ymm-Register) sind auf Register xmm0 bis 15 gefügt.
  • Allzweckregister 725: bei der veranschaulichten Ausführungsform gibt es sechzehn 64-Bit-Allzweckregiste, die zusammen mit den bestehenden x86-Adressierweisen zur Adressierung von Speicheroperanden verwendet werden. Diese Register sind mit den Bezeichnungen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Skalare Gleitkomma-Stapelregisterdatei (x87-Stapel) 745, worauf die flache MMX-Gepackte-Ganzzahl-Registerdatei 750 ”gestuft” ist: bei der veranschaulichten Ausführungsform ist der x87-Stapel ein Stapel von 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 gepackten Ganzzahldaten von 64 Bit durchzuführen, wie auch, um Operanden für einige Operationen, die zwischen den MMX- und den XMM-Registern durchgeführt werden, zu halten.
  • Alternative Ausführungsformen der Erfindung können breitere oder engere Register verwenden. Zusätzlich können alternative Ausführungsformen der Erfindung mehr, weniger oder andere Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf unterschiedliche Weisen, für unterschiedliche Zwecke und in unterschiedlichen Prozessoren ausgeführt werden. Zum Beispiel können Ausführungen solcher Kerne Folgendes umfassen: 1) einen Allzweck-In-Order-Kern, der für Allzweckberechnungen bestimmt ist; 2) einen Hochleistungs-Allzweck-Out-of-Order-Kern, der für Allzweckberechnungen bestimmt ist; 3) einen Spezialkern, der hauptsächlich für Grafik und/oder wissenschaftliche (Durchsatz)berechnungen bestimmt ist. Ausführungen unterschiedlicher Prozessoren können Folgendes umfassen: 1) eine CPU, die einen oder mehrere Allzweck-In-Order-Kerne, die für Allzweckberechnungen bestimmt sind, und/oder einen oder mehrere Allzweck-Out-of-Order-Kerne, die für Allzweckberechnungen bestimmt sind, umfasst; und 2) einen Coprozessor, der einen oder mehrere Spezialkerne, die hauptsächlich für Grafik und/oder Wissenschaftlich (Durchsatz) bestimmt sind, umfasst. Solche unterschiedliche Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die Folgendes umfassen können: 1) den Coprozessor auf einem von der CPU gesonderten Chip; 2) den Coprozessor auf einem gesonderten Chip in dem gleichen Paket wie die CPU; 3) den Coprozessor auf dem gleichen Chip wie die CPU (in welchem Fall ein derartiger Coprozessor manchmal als Speziallogik wie etwa integrierte Grafik- und/oder wissenschaftliche (Durchsatz)logik oder als Spezialkern bezeichnet wird); und 4) ein System auf einem Chip, das die beschriebene CPU (manchmal als Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den oben beschriebenen Coprozessor und zusätzliche Funktionalität auf dem gleichen Chip umfassen kann. Als nächstes werden beispielhafte Kernarchitekturen beschrieben werden, worauf Beschreibungen von beispielhaften Prozessoren und Computerarchitekturen folgen.
  • Beispielhafte Kernarchitekturen
  • Blockdiagramme eines In-Order- und eines Out-of-Order-Kerns
  • 8A ist ein Blockdiagramm, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte registerumbenennende Out-of-Order-Ausgabe/Ausführungspipeline nach Ausführungsformen der Erfindung veranschaulicht. 8B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines In-Order-Architekturkerns als auch eines beispielhaften registerumbenennenden Out-of-Order-Ausgabe/Ausführungsarchitekturkerns zur Aufnahme in einen Prozessor nach Ausführungsformen der Erfindung veranschaulicht. Die mit den durchgehenden Linien gezeigten Kästchen in 8A bis B veranschaulichen die In-Order-Pipeline und den In-Order-Kern, während das optionale Hinzufügen der gestrichelten Kästchen die registerumbenennende Out-of-Order-Ausgabe/Ausführungspipeline und den ebensolchen Kern veranschaulicht. Sofern der In-Order-Aspekt ein Untersatz des Out-of-Order-Aspekts ist, wird der Out-of-Order-Aspekt beschrieben werden.
  • In 8A umfasst eine Prozessorpipeline 800 eine Abrufstufe 802, eine Längendecodierungsstufe 804, eine Decodierungsstufe 806, eine Zuteilungsstufe 808, eine Umbenennungsstufe 810, eine (auch als Abfertigungs- oder Ausgabestufe bezeichnete) Zeitplanungsstufe 812, eine Registerlese/Speicherlesestufe 814, eine Ausführungsstufe 816, eine Rückschreibstufe (Speicherschreibstufe 818, eine Ausnahmenbehandlungsstufe 822 und eine Festschreibstufe 824.
  • 8B zeigt einen Prozessorkern 890, der eine vordere Endeinheit 830 umfasst, die mit einer Ausführungsmaschineneinheit 850 gekoppelt ist, wobei beide mit einer Speichereinheit 870 gekoppelt sind. Der Kern 890 kann ein Reduced-Instruction-Set-Computing(RISC)-Kern, ein Complex-Instruction-Set-Computing(CISC)-Kern, ein Very-Long-Instruction-Word(VLIW)-Kern, oder ein Hybrid oder eine alternative Kernart sein. Als noch eine andere Option kann der Kern 890 ein Spezialkern wie etwa zum Beispiel ein Netzwerk- oder ein Kommunikationskern, eine Kompressionsmaschine, ein Coprozessorkern, ein Kern für Allzweckberechnungen auf Grafikprozessoreinheiten (general purpose computing graphics processing unit, GPGPU), ein Grafikkern oder dergleichen sein.
  • Die vordere Endeinheit 830 umfasst eine Verzweigungsvorhersageeinheit 832, die mit einer Befehlscache-Einheit 834 gekoppelt ist, welche mit einem Befehlsübersetzungspuffer (translation lookaside buffer, TLB) 836 gekoppelt ist, der mit einer Befehlsabrufeinheit 838 gekoppelt ist, die mit einer Decodierungseinheit 840 gekoppelt ist. Die Decodierungseinheit 840 (oder der Decodierer) kann Befehle decodieren und einen oder mehrere Mikrooperationen, Mikrocodezugangspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale, die aus den ursprünglichen Befehlen decodiert werden oder sie auf eine andere Weise widerspiegeln oder daraus erlangt werden, als Ausgang erzeugen. Die Decodierungseinheit 840 kann unter Verwendung verschiedener unterschiedlicher Mechanismen ausgeführt sein. Beispiele für geeignete Mechanismen umfassen, aber ohne Beschränkung darauf, Nachschlagetabellen, Hardwareausführungen, programmierbare Logikanordnungen (PLAs), Mikrocodenurlesespeicher (ROMs) usw. Bei einer Ausführungsform umfasst der Kern 890 einen Mikrocode-ROM oder ein anderes Medium, der bzw. das Mikrocode für bestimmte Makrobefehle speichert (z. B. in der Decodierungseinheit 840 oder andernfalls in der vorderen Endeinheit 830). Die Decodierungseinheit 840 ist mit einer Umbenennungs/Zuteilungseinheit 852 in der Ausführungsmaschineneinheit 850 gekoppelt.
  • Die Ausführungsmaschineneinheit 850 umfasst die Umbenennungs/Zuteilungseinheit 852, die mit einer Stilllegungseinheit 854 und einem Satz aus einer oder mehreren Zeitplanungseinheit(en) 856 gekoppelt ist. Die Zeitplanungseinheit(en) 856 stellt bzw. stellen jede beliebige Anzahl von verschiedenen Zeitplanern einschließlich Reservierungsstationen, einem zentralen Befehlsfenster usw. dar. Die Zeitplanungseinheit(en) 856 ist bzw. sind mit der (den) physischen Registerdatei(en)einheit(en) 858 gekoppelt. Jede der physischen Registerdatei(en)einheiten 858 stellt eine oder mehrere physische Registerdateien dar, wovon verschiedene eine oder mehrere unterschiedliche Datenarten wie etwa Skalar-Ganzzahl, Skalar-Gleitkomma, Gepackt-Ganzzahl, Gepackt-Gleitkomma, Vektor-Ganzzahl, Vektor-Gleitkomma, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. speichern. Bei einer Ausführungsform umfasst bzw. umfassen die physische(n) Registerdatei(en) 858 eine Vektorregistereinheit und eine Skalarregistereinheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister, und Allzweckregister bereitstellen. Die physische(n) Registerdatei(en)einheit(en) 858 ist bzw. sind mit der Stilllegungseinheit 8/54 überlappt, um verschiedene Wege zu veranschaulichen, auf die die Registerumbenennung und die Out-of-Order-Ausführung ausgeführt werden können (z. B. unter Verwendung eines Umordnungspuffers bzw. von Umordnungspuffern, und einer (von) Stilllegungsregisterdatei(en), unter Verwendung einer (von) Zukunftsdatei(en), einer (von) Geschichtsdatei(en) und einer (von) Stilllegungsregisterdatei(en); unter Verwendung von Registerplänen und einem Satz von Registern; usw.). Die Stilllegungseinheit 854 und die physische(n) Registerdatei(en)einheit(en) 858 sind mit (einem) Ausführungscluster(n) 860 gekoppelt. Der (die) Ausführungscluster 860 umfasst bzw. umfassen einen Satz aus einer oder mehreren Ausführungseinheiten 862 und einen Satz aus einer oder mehreren Speicherzugriffseinheiten 864. Die Ausführungseinheiten 862 können verschiedene Operationen (z. B. Verschiebungen, Additionen, Subtraktionen, Multiplikationen) an verschiedenen Arten von Daten (z. B. Skalar-Gleitkomma, Gepackt-Ganzzahl, Gepackt-Gleitkomma, Vektor-Ganzzahl, Vektor-Gleitkomma) durchführen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten umfassen können, die für bestimmte Funktionen oder Sätze von Funktionen bestimmt sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten umfassen, die alle sämtliche Funktionen durchführen. Die Zeitplanungseinheit(en) 856, physischen Registerdatei(en)einheit(en) 858 und Ausführungscluster 860 sind als möglicherweise in einer Vielzahl vorhanden gezeigt, da bestimmte Ausführungsformen für bestimmte Arten von Daten/Operationen gesonderte Pipelines erzeugen (z. B. eine Pipeline für Skalar-Ganzzahl, eine Pipeline für Skalar-Gleitkomma/Gepackt-Ganzzahl/Gepackt-Gleitkomma/Vektor-Ganzzahl/Vektor-Gleitkomma, und/oder eine Speicherzugriffspipeline, die jeweils ihre eigene Zeitplanereinheit, physische Registerdatei(en)einheit und/oder ihren eigenen Ausführungscluster aufweisen, wobei im Fall einer gesonderten Speicherzugriffspipeline bestimmte Ausführungsformen ausgeführt sind, bei denen nur der Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 864 aufweist). Es sollte sich auch verstehen, dass dort, wo gesonderte Pipelines verwendet werden, eine oder mehrere dieser Pipelines eine Out-of-Order-Ausgabe/Ausführung betreffen können, während der Rest In-Order betrifft.
  • Der Satz von Speicherzugriffseinheiten 864 ist mit der Speichereinheit 870 gekoppelt, die eine Daten-TLB-Einheit 872 umfasst, welche mit einer Datencache-Einheit 874 gekoppelt ist, die mit einer Level-2(L2)-Cache-Einheit 876 gekoppelt ist. Bei einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 864 eine Ladeeinheit, eine Speicheradresseneinheit und eine Datenspeicherungseinheit umfassen, die jeweils mit der Daten-TLB-Einheit 872 in der Speichereinheit 870 gekoppelt sind. Die Befehlscache-Einheit 834 ist ferner mit einer Level-2(L2)-Cache-Einheit 876 in der Speichereinheit 870 gekoppelt. Die L2-Cache-Einheit 876 ist mit einer oder mehreren anderen Cacheebenen und schließlich mit einem Hauptspeicher gekoppelt.
  • Beispielsweise kann die beispielhafte Registerumbenennungs- und Out-of-Order-Ausgabe/Ausführungskernarchitektur die Pipeline 800 wie folgt ausführen: 1) der Befehlsabruf 832 führt die Abruf- und die Längendecodierungsstufe 802 und 804 durch; 2) die Decodierungseinheit 804 führt die Decodierungsstufe 806 durch; 3) die Umbenennungs/Zuteilungseinheit 852 führt die Zuteilungsstufe 808 und die Umbenennungsstufe 810 durch; 4) die Zeitplanungseinheit(en) 856 führt bzw. führen die Zeitplanungsstufe 812 durch; 5) die physische(n) Registerdatei(en)einheit(en) 858 und die Speichereinheit 870 führen die Registerlese/Speicherlesestufe 814 durch; der Ausführungscluster 860 führt die Ausführungsstufe 816 durch; 6) die Speichereinheit 870 und die physische(n) Registerdatei(en)einheit(en) 858 führen die Rückschreib/Speicherschreibstufe 818 durch; 7) verschiedene Einheiten können mit der Ausnahmenbehandlungsstufe 822 befasst sein; und 8) die Stilllegungsstufe 854 und die physische(n) Registerdatei(en)einheit(en) 858 führen die Festschreibstufe 824 durch.
  • Der Kern 890 kann einen oder mehrere Befehlssätze (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, Kalifornien; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie etwa NEON) von ARM Holdings in Sunnyvale, Kalifornien) einschließlich des bzw. der hier beschriebenen Befehl(e) unterstützen. Bei einer Ausführungsform umfasst der Kern 890 Logik, um eine Gepackte-Daten-Befehlssatzerweiterung (z. B. AVX1, AVX2 und/oder irgendeine Form des vorher beschriebenen generischen vektorfreundlichen Befehlsformats (U = 0 und/oder U = 1)) zu unterstützen, wodurch gestattet wird, dass die Operationen, die durch viele Multimediaanwendungen verwendet werden, unter Verwendung von gepackten Daten durchgeführt werden.
  • Es sollte sich verstehen, dass der Kern Mehrsträngigkeit (das Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Strängen) unterstützen kann, und dies auf eine Vielfalt von Weisen einschließlich der Zeitscheiben-Mehrsträngigkeit, der gleichzeitigen Mehrsträngigkeit (wo ein einzelner physischer Kern für jeden der Stränge, die der physische Kern gleichzeitig mehrsträngig ausführt, einen Logikkern bereitstellt), oder einer Kombination davon (z. B. zeitlich gesplittetes Abrufen und Decodieren und danach gleichzeitiges mehrsträngiges Ausführen wie bei der Intel® Hyperthreading Technologie).
  • Obwohl die Registerumbenennung in dem Kontext der Out-of-Order-Ausführung beschrieben ist, sollte sich verstehen, dass die Registerumbenennung in einer In-Order-Architektur verwendet werden kann. Obwohl die veranschaulichte Ausführungsform des Prozessors auch eine gesonderte Befehls- und Datencache-Einheit 834/874 und eine geteilte L2-Cache-Einheit 876 umfasst, können alternative Ausführungsformen einen einzelnen internen Cache sowohl für Befehle als auch für Daten wie etwa, zum Beispiel, einen internen Level-1(L1)-Cache oder mehrere Ebenen von internen Caches aufweisen. Bei einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, umfassen. Alternativ kann sich der gesamte Cache außerhalb des Kerns und/oder des Prozessors befinden.
  • Eine bestimmte beispielhafte In-Order-Kern-Architektur
  • 9A bis B veranschaulichen ein Blockdiagramm einer konkreteren beispielhaften In-Order-Kern-Architektur, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderer gleichartiger und/oder unterschiedlicher Kerne) in einem Chip sein würde. Die Logikblöcke kommunizieren abhängig von der Anwendung durch ein Verbindungsnetzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit irgendeiner festen Funktionslogik, Speicher-E/A-Schnittstellen und anderer notwendiger E/A-Logik.
  • 9A ist ein Blockdiagramm eines Einzelprozessorkerns zusammen mit seiner Verbindung mit dem Verbindungsnetzwerk 902 auf dem Chip und mit seinem lokalen Untersatz des Level-2(L2)-Caches 904 nach Ausführungsformen der Erfindung. Bei einer Ausführungsform unterstützt ein Befehlsdecodierer 900 den x86-Befehlssatz mit einer Gepackte-Daten-Befehlssatzerweiterung. Ein L1-Cache 906 gestattet Zugriffe mit geringer Wartezeit, um den Speicher in die skalare und die Vektoreinheit zwischenzuspeichern. Während bei einer Ausführungsform (zur Vereinfachung der Gestaltung) eine Skalareinheit 908 und eine Vektoreinheit 910 gesonderte Registersätze (jeweils Skalarregister 912 und Vektorregister 914) verwenden und dazwischen übertragene Daten in den Speicher geschrieben werden und dann von einem Level-1(L1)-Cache 906 zurück eingelesen werden, können alternative Ausführungsformen der Erfindung einen anderen Ansatz verwenden (z. B. einen einzelnen Registersatz verwenden oder einen Kommunikationspfad umfassen, der gestattet, dass Daten zwischen den beiden Registern übertragen werden, ohne geschrieben und zurück eingelesen zu werden).
  • Der lokale Untersatz des L2-Caches 904 ist Teil eines globalen L2-Caches, der in gesonderte lokale Untersätze – für jeden Prozessorkern einen – geteilt ist. Jeder Prozessorkern weist einen direkten Zugangspfad zu seinem eigenen lokalen Untersatz des L2-Caches 904 auf. Daten, die durch einen Prozessorkern gelesen werden, werden in seinem L2-Cache-Untersatz 904 gespeichert und können – parallel zu anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Untersätze zugreifen – einen raschen Zugriff erfahren. Daten, die durch einen Prozessorkern geschrieben werden, werden in seinem eigenen L2-Cache-Untersatz 904 gespeichert und werden, falls nötig, aus anderen Untersätzen gelöscht. Das Ringnetzwerk ist bidirektional, um Agenten wie Prozessorkernen, L2-Caches und anderen Logikblöcken zu gestatten, miteinander in dem Chip zu kommunizieren. Jeder Ringdatenpfad ist pro Richtung 1012 Bit breit.
  • 9B ist eine auseinandergezogene Ansicht eines Teils des Prozessorkerns in 9A nach Ausführungsformen der Erfindung. 9B enthält einen L1-Daten-Cache 906A als Teil des L1-Caches 906 wie auch weitere Einzelheiten im Hinblick auf die Vektoreinheit 910 und die Vektorregister 914. Im Besonderen ist die Vektoreinheit 910 eine 16-breite Vektorverarbeitungseinheit (vector processing unit, VPU) (siehe die 16-breite ALU 928), die einen oder mehrere von Ganzzahl-, einfach genauen Gleitkomma- und doppelt genauen Gleitkommabefehlen ausführt. Die VPU unterstützt ein Umordnen der Registereingänge mit einer Umordnungseinheit 920, eine numerische Umwandlung mit numerischen Umwandlungseinheiten 922A–B und eine Replikation mit einer Replikationseinheit 924 an dem Speichereingang.
  • Ein Prozessor mit integrierter Speichersteuerung und Grafik
  • 10 ist ein Blockdiagramm eines Prozessors 1000, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann, und integrierte Grafik aufweisen kann, nach Ausführungsformen der Erfindung. Die mit den durchgehenden Linien gezeigten Kästchen in 10 veranschaulichen einen Prozessor 1000 mit einem einzelnen Kern 1002A, einem Systemagenten 1010, einen Satz von einer oder mehreren Bussteuerungseinheiten 1016, während das optionale Hinzufügen der gestrichelt gezeigten Kästchen einen alternativen Prozessor 1000 mit mehreren Kernen 1002A–N, einem Satz von einer oder mehreren integrierten Speichersteuerungseinheit(en) 1014 in der Systemagenteneinheit 1010 und Speziallogik 1008 veranschaulicht.
  • Somit können verschiedene Ausführungen des Prozessors 1000 Folgendes umfassen: 1) eine CPU mit der Speziallogik 1008, bei der es sich um integrierte Grafik und/oder wissenschaftliche (Durchsatz)logik (die einen oder mehrere Kerne umfassen kann) handelt, und die Kerne 1002A–N, bei denen es sich um einen oder mehrere Allzweckkerne handelt (z. B. Allzweck-In-Order-Kerne, Allzweck-Out-of-Order-Kerne, eine Kombination der beiden); 2) einen Coprozessor, wobei die Kerne 1002A–N eine große Anzahl von Spezialkernen sind, die hauptsächlich für Grafik und/oder Wissenschaft (Durchsatz) bestimmt sind; und 3) einen Coprozessor, wobei die Kerne 1002A–N eine große Anzahl von Allzweck-In-Order-Kernen sind. Somit kann der Prozessor 1000 ein Allzweckprozessor, Coprozessor oder Spezialprozessor wie etwa, zum Beispiel, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, eine GPGPU (Allzweckgrafikverarbeitungseinheit), ein Many-Integrated-Core(MIC)-Coprozessor (der 30 oder mehr Kerne enthält), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann auf einem oder mehreren Chips ausgeführt sein. Der Prozessor 1000 kann unter Verwendung jeder beliebigen aus einer Anzahl von Prozesstechnologien wie etwa BiCMOS, CMOS oder NMOS ein Teil eines oder mehrerer Substrate sein oder auf einem oder mehreren Substraten ausgeführt sein.
  • Die Speicherhierarchie umfasst eine oder mehrere Cache-Ebenen in den Kernen, einen Satz von einer oder mehreren geteilten Cache-Einheiten 1006 und einen externen Speicher (nicht gezeigt), der mit dem Satz von integrierten Speichersteuerungseinheiten 1014 gekoppelt ist. Der Satz von geteilten Cache-Einheiten 1006 kann einen oder mehrere Caches mittlerer Ebenen wie etwa Level 2 (L2), Level 3 (L3), Level 4 (L4), oder andere Cacheebenen, einen Cache der letzten Ebene (LLC) und/oder Kombinationen davon umfassen. Obwohl bei einer Ausführungsform eine ringbasierte Verbindungseinheit 1012 die integrierte Grafiklogik 1008, den Satz von geteilten Cache-Einheiten 1006 und die Systemagenteneinheit 1010/die integrierte(n) Speichersteuerungseinheit(en) 1014 verbindet, können alternative Ausführungsformen jede beliebige Anzahl von wohlbekannten Techniken zur Verbindung dieser Einheiten verwenden. Bei einer Ausführungsform wird zwischen einer oder mehreren Cache-Einheiten 1006 und den Kernen 1002A–N Kohärenz bewahrt.
  • Bei einigen Ausführungsformen sind einer oder mehrere der Kerne 1002A–N zur Mehrsträngigkeit fähig. Der Systemagent 1010 umfasst jene Komponenten, die die Kerne 1002A–N koordinieren und betreiben. Die Systemagenteneinheit 1010 kann zum Beispiel eine Leistungssteuerungseinheit (PCU) und eine Anzeigeeinheit umfassen. Die PCU kann Logik und Komponenten, die zur Regulierung des Leistungszustands der Kerne 1002A–N und der integrierten Grafiklogik 1008 nötig sind, sein oder sie umfassen. Die Anzeigeeinheit dient zum Antrieb einer oder mehrerer extern angeschlossener Anzeigen.
  • Die Kerne 1002A–N können im Hinblick auf den Architekturbefehlssatz homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 1002A–N können zur Ausführung des gleichen Befehlssatzes fähig sein, während andere zur Ausführung nur eines Untersatzes dieses Befehlssatzes oder eines anderen Befehlssatzes fähig sein können.
  • Beispielhafte Computerarchitekturen
  • 11 bis 14 sind Blockdiagramme von beispielhaften Computerarchitekturen. Andere Systemgestaltungen und Konfigurationen, die in der Technik für Laptops, Desktops, Handheld-PCs, Minicomputer, technische Arbeitsstationen, Server, Netzwerkvorrichtungen, Netzwerkhubs, Vermittlungen, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrosteuerungen, Mobiltelefone, tragbare Medienabspielgeräte, Handheld-Geräte und verschiedene andere elektronische Vorrichtungen bekannt sind, sind ebenfalls geeignet. Generell ist im Allgemeinen eine riesige Vielfalt von Systemen oder elektronischen Vorrichtungen, die zur Aufnahme eines Prozessors und/oder einer anderen Ausführungslogik, der bzw. die hier offenbart ist, fähig sind, geeignet.
  • Unter nun erfolgender Bezugnahme auf 11 ist ein Blockdiagramm eines Systems 1100 nach einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 1100 kann einen oder mehrere Prozessoren 1110, 1115 umfassen, die mit einem Steuerungshub 1120 gekoppelt sind. Bei einer Ausführungsform umfasst der Steuerungshub 1120 einen Grafikspeichersteuerungshub (GMCH) 1190 und einen Eingabe/Ausgabe-Hub (Input/Output Hub, IOH) 1150 (die sich auf gesonderten Chips befinden können); der GMCH 1190 umfasst eine Speicher- und eine Grafiksteuerung, mit der ein Speicher 1140 und ein Coprozessor 1145 gekoppelt sind; der IOH 1150 koppelt Eingabe/Ausgabe(E/A)-Vorrichtungen 1160 mit dem GMCH 1190. Alternativ ist eine oder sind beide aus der Speicher- und der Grafiksteuerung in den Prozessor integriert (wie hier beschrieben), sind der Speicher 1140 und der Coprozessor 1145 direkt mit dem Prozessor 1110 gekoppelt, und befindet sich der Steuerungshub 1120 in einem einzelnen Chip mit dem IOH 1150.
  • Die optionale Natur zusätzlicher Prozessoren 1115 ist in 11 gestrichelt angegeben. Jeder Prozessor 1110, 1115 kann einen oder mehr der hier beschriebenen Verarbeitungskerne umfassen und kann irgendeine Version des Prozessors 1000 sein.
  • Der Speicher 1140 kann zum Beispiel ein dynamischer Direktzugriffsspeicher (DRAM), ein phasenwechselnder Speicher (phase change memory, PCM), oder eine Kombination der beiden sein. Bei wenigstens einer Ausführungsform kommuniziert der Steuerungshub 1120 über einen Multi-Drop-Bus wie etwa einen Frontside Bus (FSB), eine Point-to-Point-Schnittstelle wie etwa QuickPath Interconnect (QPI) oder eine ähnliche Verbindung 1195 mit dem/den Prozessor(en) 1110, 1115.
  • Bei einer Ausführungsform ist der Coprozessor 1145 ein Spezialprozessor wie etwa zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. Bei einer Ausführungsform kann der Steuerungshub 1120 einen integrierten Grafikbeschleuniger enthalten.
  • Zwischen den physischen Ressourcen 1110, 1115 kann hinsichtlich des Spektrums der Bewertungsfaktoren einschließlich der architektonischen, mikroarchitektonischen, thermischen bzw. der Stromverbrauchseigenschaften und dergleichen eine Vielfalt an Unterschieden bestehen.
  • Bei einer Ausführungsform führt der Prozessor 1110 Befehle aus, die Datenverarbeitungsoperationen von einer allgemeinen Art steuern. In die Befehle können Coprozessorbefehle eingebettet sein. Der Prozessor 1110 erkennt, dass diese Coprozessorbefehle von einer Art sind, die durch den angeschlossenen Coprozessor 1145 ausgeführt werden soll. Entsprechend gibt der Prozessor 1110 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle darstellen) auf einem Coprozessorbus oder einer anderen Verbindung an den Coprozessor 1145 aus. Der/die Coprozessor(en) 1145 akzeptiert/akzeptieren und führt/führen die empfangenden Coprozessorbefehle aus.
  • Unter nun erfolgender Bezugnahme auf 12 ist ein Blockdiagramm eines ersten konkreteren beispielhaften Systems 1200 nach einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 12 gezeigt ist das Mehrprozessorsystem 1200 ein Point-to-Point-Verbindungssystem und umfasst es einen ersten Prozessor 1270 und einen zweiten Prozessor 1280, die über eine Point-to-Point-Verbindung 1250 gekoppelt sind. Jeder der Prozessoren 1270 und 1280 kann irgendeine Version des Prozessors 1000 sein. Bei einer Ausführungsform der Erfindung sind die Prozessoren 1270 und 1280 jeweils Prozessoren 1110 und 1115, während der Coprozessor 1238 der Coprozessor 1145 ist. Bei einer anderen Ausführungsform sind die Prozessoren 1270 und 1280 der Prozessor 1110 bzw. der Coprozessor 1145.
  • Es ist gezeigt, dass die Prozessoren 1270 und 1280 integrierte Speichersteuerungseinheiten (integrated memory controller, IMC) 1272 bzw. 1282 umfassen. Der Prozessor 1270 umfasst als Teil seiner Bussteuerungseinheiten auch Point-to-Point(P-P)-Schnittstellen 1276 und 1278; ebenso umfasst der zweite Prozessor 1280 P-P-Schnittstellen 1286 und 1288. Die Prozessoren 1270, 1280 können über eine Point-to-Point-(P-P)-Schnittstelle 1250 unter Verwendung von P-P-Schnittstellenschaltungen 1278, 1288 Informationen austauschen. Wie in 12 gezeigt koppeln die IMCs 1272 und 1282 die Prozessoren mit jeweiligen Speichern, und zwar einem Speicher 1232 und einem Speicher 1234, die Teile eines Hauptspeichers sein können, welche lokal an den jeweiligen Prozessoren angebracht sind.
  • Die Prozessoren 1270, 1280 können jeweils über individuelle P-P-Schnittstellen 1252, 1254 unter Verwendung von Point-to-Point-Schnittstellenschaltungen 1276, 1294, 1286, 1298 Informationen mit einem Chipsatz 1290 austauschen. Der Chipsatz 1290 kann optional über eine Hochleistungs-Schnittstelle 1239 Informationen mit dem Coprozessor 1238 austauschen. Bei einer Ausführungsform ist der Coprozessor 1238 ein Spezialprozessor wie etwa zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein geteilter Cache (nicht gezeigt) kann in einem der Prozessoren enthalten sein oder sich außerhalb beider Prozessoren befinden, aber über eine P-P-Verbindung mit den Prozessoren verbunden sein, so dass die lokalen Cacheinformationen eines oder beider Prozessoren in dem geteilten Cache gespeichert werden können, wenn ein Prozessor in einen Energiesparmodus gebracht wird.
  • Der Chipsatz 1290 kann über eine Schnittstelle 1296 mit einem ersten Bus 1216 gekoppelt sein. Bei einer Ausführungsform kann der erste Bus 1216 ein Peripheral Component Interconnect(PCI)-Bus oder ein Bus wie etwa ein PCI-Express-Bus oder ein anderer E/A-Verbindungsbus der dritten Generation sein, obwohl der Umfang der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in 12 gezeigt können gemeinsam mit einer Busbrücke 1218, die den ersten Bus 1216 mit einem zweiten Bus 1220 koppelt, verschiedene E/A-Vorrichtungen 1214 mit dem ersten Bus 1216 gekoppelt sein. Bei einer Ausführungsform sind ein oder mehrere zusätzliche Prozessor(en) 1215 wie etwa Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie etwa z. B. Grafikbeschleuniger oder digitale Signalverarbeitungs(DSP)einheiten), feldprogrammierbare Gateanordnungen oder jeder beliebige andere Prozessor mit dem ersten Bus 1216 gekoppelt. Bei einer Ausführungsform kann der zweite Bus 1220 ein Low Pin Count(LPC)-Bus sein. Mit dem zweiten Bus 1220 können verschiedene Vorrichtungen gekoppelt sein, einschließlich, zum Beispiel, einer Tastatur und/oder einer Maus 1222, Kommunikationsvorrichtungen 1227 und einer Speichereinheit 1228 wie etwa ein Laufwerk oder eine andere Massenspeichervorrichtung, die bei einer Ausführungsform Befehle/Codes und Daten 1230 enthalten kann. Ferner kann eine Audio-E/A 1224 mit dem zweiten Bus 1220 gekoppelt sein. Es ist zu beachten, dass andere Architekturen möglich sind. Zum Beispiel kann ein System anstelle der Point-to-Point-Architektur von 12 einen Multi-Drop-Bus oder eine andere derartige Architektur ausführen.
  • Unter nun erfolgender Bezugnahme auf 13 ist ein Blockdiagramm eines zweiten konkreteren beispielhaften Systems 1300 nach einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in 12 und 13 tragen gleiche Bezugszeichen, und bestimmte Gesichtspunkte von 12 wurden in 13 weggelassen, um zu vermeiden, dass andere Aspekte von 13 unklar gemacht werden.
  • 13 veranschaulicht, dass die Prozessoren 1270, 1280 eine integrierte Speicher- und E/A-Steuerlogik (”CL”) 1272 bzw. 1282 umfassen können. Somit umfassen die CLs 1272, 1282 integrierte Speichersteuerungseinheiten und umfassen sie E/A-Steuerlogik. 13 veranschaulicht, dass nicht nur die Speicher 1232, 1234 mit den CLs 1272, 1282 gekoppelt sind, sondern dass auch E/A-Vorrichtungen 1314 ebenfalls mit der Steuerlogik 1272, 1282 gekoppelt sind. Vorläufer-E/A-Vorrichtungen 1315 sind mit dem Chipsatz 1290 gekoppelt.
  • Unter nun erfolgender Bezugnahme auf 14 ist ein Blockdiagramm eines SoC 1400 nach einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in 10 tragen gleiche Bezugszeichen. Außerdem sind gestrichelt gezeigte Kästchen optionale Merkmale bei fortschrittlicheren SoCs. In 14 ist eine (sind) Verbindungseinheit(en) 1402 mit einem Anwendungsprozessor 1410, der einen Satz von einem oder mehreren Kernen 202A–N und (eine) geteilte Cache-Einheit(en) 1006 umfasst; einer Systemagenteneinheit 1010; (einer) Bussteuerungseinheit(en) 1016; (einer) integrierten Speichersteuerungseinheit(en) 1014; einem Satz von einem oder mehreren Coprozessoren 1420, die integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor, und einen Videoprozessor umfassen können; einer statischen Direktzugriffsspeicher(SRMA)-Einheit 1430; einer Direktspeicherzugriffs(DMA)-Einheit 1432; und einer Anzeigeeinheit 1440 zur Kopplung mit einer oder mehreren externen Anzeigen gekoppelt. Bei einer Ausführungsform umfasst der bzw. umfassen die Coprozessor(en) 1420 einen Spezialprozessor wie etwa zum Beispiel einen Netzwerk- oder Kommunikationsprozessor, eine Kompressionsmaschine 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 dieser Ausführungsansätze ausgeführt werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode ausgeführt werden, die bzw. der an programmierbaren Systemen ausgeführt werden bzw. wird, welche wenigstens einen Prozessor, ein Speichersystem (einschließlich eines flüchtigen und eines nichtflüchtigen Speichers und/oder von Speicherelementen), wenigstens eine Eingabevorrichtung und wenigstens eine Ausgabevorrichtung umfassen.
  • Ein Programmcode wie etwa der in 12 veranschaulichte Code 1230 kann auf Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen durchzuführen und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können auf eine bekannte Weise an eine oder mehrere Ausgabevorrichtungen angelegt werden. Für die Zwecke dieser Anmeldung umfasst ein Verarbeitungssystem jedes beliebige System, das einen Prozessor wie zum Beispiel einen digitalen Signalprozessor (DSP), eine Mikrosteuerung, eine anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor aufweist.
  • Der Programmcode kann in einer höheren verfahrensorientierten oder objektorientierten Programmiersprache ausgeführt sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann, falls gewünscht, auch in einer Assembler- oder Maschinensprache ausgeführt sein. Tatsächlich sind die hier beschriebenen Mechanismen hinsichtlich ihres Umfangs nicht auf irgendeine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Gesichtspunkte von wenigstens einer Ausführungsform können durch repräsentative Befehle ausgeführt sein, die auf einem maschinenlesbaren Medium, welches verschiedenartige Logik in dem Prozessor darstellt, gespeichert sind, welches dann, wenn es durch eine Maschine gelesen wird, die Maschine dazu bringt, Logik zur Durchführung der hier beschriebenen Techniken zu erzeugen. Diese Darstellungen, die als ”IP-Kerne” bekannt sind, können auf einem greifbaren maschinenlesbaren Medium gespeichert sein und verschiedenen Kunden oder Produktionseinrichtungen geliefert werden, um in die Produktionsmaschinen, die die Logik oder den Prozessor tatsächlich herstellen, geladen zu werden.
  • Diese maschinenlesbaren Speichermedien können, jedoch ohne Beschränkung darauf, nicht vergängliche, greifbare Anordnungen von Artikeln, die durch eine Maschine oder Vorrichtung hergestellt oder gebildet sind, umfassen, einschließlich Speichermedien wie etwa Festplatten, jede beliebige andere Art von Platte einschließlich von Floppy Disks, optischen Platten, Compact-Disk-Nurlesepeichern (CD-ROMs), wiederbeschreibbaren Compact Disks (CD-RWs) und magnetooptischen Platten, Halbleitervorrichtungen wie etwa Nurlesespeicher (ROMs), Direktzugriffsspeicher (RAMS) wie etwa dynamische Direktzugriffsspeicher (DRAMs), statische Direktzugriffsspeicher (SRAMs), löschbare programmierbare Nurlesespeicher (EPROMs), Flash-Speicher, elektrisch löschbare programmierbare Nurlesespeicher (EEPROMs), magnetische oder optische Karten, oder jede beliebige andere Art von Medium, das zum Speichern elektronischer Befehle geeignet ist.
  • Entsprechend umfassen Ausführungsformen der Erfindung auch nicht vergängliche greifbare maschinenlesbare Medien, die Befehle enthalten oder Gestaltungdaten wie etwa Hardwarebeschreibungssprache (HDL), die hier beschriebene Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale definiert, enthalten. Derartige Ausführungsformen können auch als Programmerzeugnisse bezeichnet werden.
  • Emulation (einschließlich binäre Übersetzung, Codemorphing usw.)
  • In einigen Fällen kann ein Befehlskonverter verwendet werden, um einen Befehl von einem Quellenbefehlssatz in einen Zielbefehlssatz umzuwandeln. Zum Beispiel kann der Befehlskonverter einen Befehl in einen oder mehrere andere Befehle zur Ausführung durch den Kern übersetzen (z. B. unter Verwendung einer statischen binären Übersetzung oder einer dynamischen binären Übersetzung einschließlich einer dynamischen Kompilation), morphen, emulieren oder auf eine andere Weise umwandeln. Der Befehlskonverter kann in Software, Hardware, Firmware oder einer Kombination davon ausgeführt sein. Der Befehlskonverter kann sich an dem Prozessor, abseits von dem Prozessor, zum Teil an und zum Teil abseits von dem Prozessor befinden.
  • 15 ist ein Blockdiagramm, das die Verwendung eines Softwarebefehlskonverters zur Umwandlung von binären Befehlen in einem Quellenbefehlssatz in binäre Befehle in einem Zielbefehlssatz nach Ausführungsformen der Erfindung vergleicht. Bei der veranschaulichten Ausführungsform ist der Befehlskonverter ein Softwarebefehlskonverter, obwohl der Befehlskonverter alternativ in Software, Firmware, Hardware oder verschiedenen Kombinationen davon ausgeführt sein kann. 15 zeigt, dass ein Programm in einer höheren Programmiersprache 1502 unter Verwendung eines x86-Kompilierers 1504 kompiliert werden kann, um einen x86-Binärcode 1506 zu erzeugen, der durch einen Prozessor mit wenigstens einem x86-Befehlssatzkern 1516 nativ ausgeführt werden kann. Der Prozessor mit wenigstens einem x86-Befehlssatzkern 1516 stellt jeden beliebigen Prozessor dar, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern durchführen kann, indem er (1) einen wesentlichen Teil des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die auf das Laufen an einem Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern ausgerichtet sind, kompatibel ausführt oder auf eine andere Weise verarbeitet, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern zu erzielen. Der x86-Kompilierer 1504 stellt einen Kompilierer dar, der dazu betriebsfähig ist, einen x86-Binärcode 1506 (z. B. einen Objektcode) zu erzeugen, der mit oder ohne zusätzliche Verknüpfungsverarbeitung an dem Prozessor mit wenigstens einem x86-Befehlssatzkern 1516 ausgeführt werden kann. Ebenso zeigt 15, dass das Programm in der höheren Programmiersprache 1502 unter Verwendung eines Alternativer-Befehlssatz-Kompilierers 1508 kompiliert werden kann, um einen Binärcode eines alternativen Befehlssatzes 1510 zu erzeugen, der durch einen Prozessor ohne wenigstens einen x86-Befehlssatzkern 1514 (z. B. einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, Kalifornien, ausführen, und/oder die den ARM-Befehlssatz von ARM Holdings in Sunnyvale, Kalifornien, ausführen) nativ ausgeführt werden kann. Der Befehlskonverter 1512 wird verwendet, um den x86-Binärcode 1506 in Code umzuwandeln, der durch den Prozessor ohne einen x86-Befehlssatz 1514 nativ ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht der gleiche wie der alternative Befehlssatzbinärcode 1510, da ein Befehlskonverter, der dazu fähig ist, schwer herzustellen ist; der umgewandelte Code wird aber die allgemeine Operation vollbringen und aus Befehlen von dem alternativen Befehlssatz bestehen. Somit stellt der Befehlskonverter 1512 Software, Firmware, Hardware oder eine Kombination davon dar, die einem Prozessor oder einer anderen elektronischen Vorrichtung, der bzw. die keinen x86-Befehlssatzprozessor oder -kern aufweist, durch Emulation, Simulation oder irgendeinen anderen Prozess die Ausführung des x86-Binärcodes 1506 gestatten wird.
  • Ausführungsformen der Erfindung umfassen eine Vorrichtung, die Decodierlogik zum Decodieren eines Square-Multiply(SQRMUL)-Befehls, wobei der SQRMUL-Befehl einen ersten Quellenoperanden, einen zweiten Quellenoperanden und einen Destinationsoperanden umfasst; und Ausführungslogik zum Berechnen eines Quadrats eines Datenwerts eines ersten Quellenoperanden, zum Berechnen eines Quadrats eines Datenwerts eines zweiten Quellenoperanden, zum Berechnen einer Multiplikation der Daten des ersten und des zweiten Operanden, wobei die Berechnungen nur eine Multiplikationsoperation verwenden, und zum Speichern der Ergebnisse in dem Destinationsoperanden umfasst.
  • Bei einigen Ausführungsformen der Vorrichtung wird eines oder werden mehrere des Folgenden entweder in Verbindung miteinander oder einzeln ausgeführt: i) der Destinationsoperand ist ein Allzweckregister; ii) das Quadrat eines Datenwerts eines ersten Quellenoperanden wird in niederwertigen Bits des Destinationsoperanden gespeichert, das Quadrat eines Datenwerts eines zweiten Quellenoperanden wird in höherwertigen Bits des Destinationsoperanden gespeichert, und die Multiplikation der Daten des ersten und des zweiten Operanden wird in mittelwertigen Bits des Destinationsoperanden gespeichert; iii) der Destinationsoperand ist ein Gepackte-Daten-Register und jede der drei Berechnungen wird in einem unterschiedlichen Datenelement des Gepackte-Daten-Registers gespeichert; iv) die Ausführungslogik berechnet das Quadrats des Datenwerts des ersten Quellenoperanden durch Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen und Verschieben der temporären Variablen um 4N Bits nach rechts, wobei N = log2 (Basis des Datenwerts) ist; v) die Ausführungslogik berechnet die Multiplikation des Datenwerts des ersten Quellen- und des zweiten Quellenoperanden durch Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen, UNDen der quadrierten temporären Variablen mit einem Wert von ((2 um 2N nach links verschoben) minus 1 und Verschieben um 2N plus 1 nach rechts, wobei N = log2 (Basis des Datenwert) ist; vi) die Ausführungslogik berechnet das Quadrat des Datenwerts des zweiten Quellenoperanden durch Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen, UNDen der quadrierten temporären Variablen mit einem Einerkomplement eines Werts von ((1 um N nach links verschoben) minus 1), wobei N = log2 (Basis des Datenwerts) ist.
  • Ausführungsformen der Erfindung umfassen ein Verfahren zur Durchführung eines Square-Multiply(SQRMUL)-Befehls in einem Computerprozessor, wobei der SQRMUL-Befehl einen ersten Quellenoperanden, einen zweiten Quellenoperanden und einen Destinationsoperanden umfasst, wobei das Verfahren Folgendes umfasst: Berechnen eines Quadrats eines Datenwerts eines ersten Quellenoperanden, Berechnen eines Quadrats eines Datenwerts eines zweiten Quellenoperanden, Berechnen einer Multiplikation der Daten des ersten und des zweiten Operanden, wobei die Berechnungen nur eine Multiplikationsoperation verwenden, und Speichern der Ergebnisse in dem Destinationsoperanden.
  • Bei einigen Ausführungsformen des Verfahrens wird eines oder werden mehrere des Folgenden entweder in Verbindung miteinander oder einzeln ausgeführt: i) der Destinationsoperand ist ein Allzweckregister; ii) das Quadrat eines Datenwerts eines ersten Quellenoperanden wird in niederwertigen Bits des Destinationsoperanden gespeichert, das Quadrat eines Datenwerts eines zweiten Quellenoperanden wird in höherwertigen Bits des Destinationsoperanden gespeichert, und die Multiplikation der Daten des ersten und des zweiten Operanden wird in mittelwertigen Bits des Destinationsoperanden gespeichert; iii) der Destinationsoperand ist ein Gepackte-Daten-Register und jede der drei Berechnungen wird in einem unterschiedlichen Datenelement des Gepackte-Daten-Registers gespeichert; iv) das Quadrat des Datenwerts des ersten Quellenoperanden wird durch Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen und Verschieben der temporären Variablen um 4N Bits nach rechts, wobei N = log2 (Basis des Datenwerts) ist, berechnet; v) die Multiplikation des Datenwerts des ersten Quellen- und des zweiten Quellenoperanden wird durch Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen, UNDen der quadrierten temporären Variablen mit einem Wert von ((2 um 2N nach links verschoben) minus 1 und Verschieben um 2N plus 1 nach rechts, wobei N = log2 (Basis des Datenwert) ist, berechnet; vi) das Quadrat des Datenwerts des zweiten Quellenoperanden wird durch Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen, UNDen der quadrierten temporären Variablen mit einem Einerkomplement eines Werts von ((1 um N nach links verschoben) minus 1), wobei N = log2 (Basis des Datenwerts) ist, berechnet.
  • Ausführungsformen der Erfindung umfassen ein greifbares maschinenlesbares Medium, das Code enthält, der bei Ausführung durch einen Prozessor den Prozessor dazu bringt, ein Verfahren zur Durchführung eines Square-Multiply(SQRMUL)-Befehls auszuführen, wobei der SQRMUL-Befehl einen ersten Quellenoperanden, einen zweiten Quellenoperanden und einen Destinationsoperanden umfasst, wobei das Verfahren Folgendes umfasst: Berechnen eines Quadrats eines Datenwerts eines ersten Quellenoperanden, Berechnen eines Quadrats eines Datenwerts eines zweiten Quellenoperanden, Berechnen einer Multiplikation der Daten des ersten und des zweiten Operanden, wobei die Berechnungen nur eine Multiplikationsoperation verwenden, und Speichern der Ergebnisse in dem Destinationsoperanden.
  • Bei einigen Ausführungsformen des greifbaren maschinenlesbaren Mediums wird eines oder werden mehrere des Folgenden entweder in Verbindung miteinander oder einzeln ausgeführt: i) der Destinationsoperand ist ein Allzweckregister; ii) das Quadrat eines Datenwerts eines ersten Quellenoperanden wird in niederwertigen Bits des Destinationsoperanden gespeichert, das Quadrat eines Datenwerts eines zweiten Quellenoperanden wird in höherwertigen Bits des Destinationsoperanden gespeichert, und die Multiplikation der Daten des ersten und des zweiten Operanden wird in mittelwertigen Bits des Destinationsoperanden gespeichert; iii) der Destinationsoperand ist ein Gepackte-Daten-Register und jede der drei Berechnungen wird in einem unterschiedlichen Datenelement des Gepackte-Daten-Registers gespeichert; iv) das Quadrat des Datenwerts des ersten Quellenoperanden wird durch Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen und Verschieben der temporären Variablen um 4N Bits nach rechts, wobei N = log2 (Basis des Datenwerts) ist, berechnet; v) die Multiplikation des Datenwerts des ersten Quellen- und des zweiten Quellenoperanden wird durch Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen, UNDen der quadrierten temporären Variablen mit einem Wert von ((2 um 2N nach links verschoben) minus 1 und Verschieben um 2N plus 1 nach rechts, wobei N = log2 (Basis des Datenwert) ist, berechnet; vi) das Quadrat des Datenwerts des zweiten Quellenoperanden wird durch Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen, UNDen der quadrierten temporären Variablen mit einem Einerkomplement eines Werts von ((1 um N nach links verschoben) minus 1), wobei N = log2 (Basis des Datenwerts) ist, berechnet.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 5446912 [0018]
    • US 5207132 [0018]
  • Zitierte Nicht-Patentliteratur
    • ”Intel® 64 and IA-32 Intel Architectures Software Developers Manual”, Oktober 2011 [0022]
    • ”Intel® Advanced Vector Extensions Programming Reference”, Juni 2011 [0022]

Claims (20)

  1. Vorrichtung, umfassend: Decodierlogik zum Decodieren eines Square-Multiply(SQRMUL)-Befehls, wobei der SQRMUL-Befehl einen ersten Quellenoperanden, einen zweiten Quellenoperanden und einen Destinationsoperanden umfasst; Ausführungslogik, um ein Quadrat eines Datenwerts eines ersten Quellenoperanden zu berechnen, ein Quadrat eines Datenwerts eines zweiten Quellenoperanden zu berechnen, eine Multiplikation der Daten des ersten und des zweiten Operanden zu berechnen, wobei die Berechnungen nur eine Multiplikationsoperation verwenden; und die Ergebnisse in dem Destinationsoperanden zu speichern.
  2. Vorrichtung nach Anspruch 1, wobei der Destinationsoperand ein Allzweckregister ist.
  3. Vorrichtung nach Anspruch 1 oder 2, wobei das Quadrat eines Datenwerts eines ersten Quellenoperanden in niederwertigen Bits des Destinationsoperanden gespeichert wird, das Quadrat eines Datenwerts eines zweiten Quellenoperanden in höherwertigen Bits des Destinationsoperanden gespeichert wird, und die Multiplikation der Daten des ersten und des zweiten Operanden in mittelwertigen Bits des Destinationsoperanden gespeichert wird.
  4. Vorrichtung nach einem der vorhergehenden Ansprüche, wobei der Destinationsoperand ein Gepackte-Daten-Register ist und jede der drei Berechnungen in einem unterschiedlichen Datenelement des Gepackte-Daten-Registers gespeichert wird.
  5. Vorrichtung nach einem der vorhergehenden Ansprüche, wobei die Ausführungslogik das Quadrat des Datenwerts des ersten Quellenoperanden durch Folgendes berechnet: Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen und Verschieben der temporären Variablen um 4N Bits nach rechts, wobei N = log2 (Basis des Datenwerts) ist.
  6. Vorrichtung nach einem der vorhergehenden Ansprüche, wobei die Ausführungslogik die Multiplikation des Datenwerts des ersten Quellen- und des zweiten Quellenoperanden durch Folgendes berechnet: Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen, UNDen der quadrierten temporären Variablen mit einem Wert von ((2 um 2N nach links verschoben) minus 1 und Verschieben um 2N plus 1 nach rechts, wobei N = log2 (Basis des Datenwert) ist.
  7. Vorrichtung nach einem der vorhergehenden Ansprüche, wobei die Ausführungslogik das Quadrat des Datenwerts des zweiten Quellenoperanden durch Folgendes berechnet: Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen, UNDen der quadrierten temporären Variablen mit einem Einerkomplement eines Werts von ((1 um N nach links verschoben) minus 1), wobei N = log2 (Basis des Datenwerts) ist.
  8. Verfahren zur Durchführung eines Square-Multiply(SQRMUL)-Befehls in einem Computerprozessor, wobei der SQRMUL-Befehl einen ersten Quellenoperanden, einen zweiten Quellenoperanden und einen Destinationsoperanden umfasst, wobei das Verfahren Folgendes umfasst: Berechnen eines Quadrats eines Datenwerts eines ersten Quellenoperanden, Berechnen eines Quadrats eines Datenwerts eines zweiten Quellenoperanden, Berechnen einer Multiplikation der Daten des ersten und des zweiten Operanden, wobei die Berechnungen nur eine Multiplikationsoperation verwenden, und Speichern der Ergebnisse in dem Destinationsoperanden.
  9. Verfahren nach Anspruch 8, wobei der Destinationsoperand ein Allzweckregister ist.
  10. Verfahren nach Anspruch 8 oder 9, wobei das Quadrat eines Datenwerts eines ersten Quellenoperanden in niederwertigen Bits des Destinationsoperanden gespeichert wird, das Quadrat eines Datenwerts eines zweiten Quellenoperanden in höherwertigen Bits des Destinationsoperanden gespeichert wird, und die Multiplikation der Daten des ersten und des zweiten Operanden in mittelwertigen Bits des Destinationsoperanden gespeichert wird.
  11. Verfahren nach einem der Ansprüche 8 bis 10, wobei der Destinationsoperand ein Gepackte-Daten-Register ist und jede der drei Berechnungen in einem unterschiedlichen Datenelement des Gepackte-Daten-Registers gespeichert wird.
  12. Verfahren nach einem der Ansprüche 8 bis 11, wobei das Berechnen des Quadrats des Datenwerts des ersten Quellenoperanden Folgendes umfasst: Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen und Verschieben der temporären Variablen um 4N Bits nach rechts, wobei N = log2 (Basis des Datenwerts) ist.
  13. Verfahren nach einem der Ansprüche 8 bis 12, wobei das Berechnen der Multiplikation des ersten Quellen- und des zweiten Quellenoperanden Folgendes umfasst: Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen, UNDen der quadrierten temporären Variablen mit einem Wert von ((1 um 2N nach links verschoben) minus 1 und Verschieben um 2N plus 1 nach rechts, wobei N = log2 (Basis des Datenwert) ist.
  14. Verfahren nach einem der Ansprüche 8 bis 13, wobei das Berechnen des Quadrats des Datenwerts des zweiten Quellenoperanden Folgendes umfasst: Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen, UNDen der quadrierten temporären Variablen mit einem Einerkomplement eines Werts von ((2 um N nach links verschoben) minus 1), wobei N = log2 (Basis des Datenwerts) ist.
  15. Greifbares maschinenlesbares Medium, das Code enthält, der bei Ausführung durch einen Prozessor den Prozessor dazu bringt, ein Verfahren zur Durchführung eines Square-Multiply(SQRMUL)-Befehls auszuführen, wobei der SQRMUL-Befehl einen ersten Quellenoperanden, einen zweiten Quellenoperanden und einen Destinationsoperanden umfasst, wobei das Verfahren Folgendes umfasst: Berechnen eines Quadrats eines Datenwerts eines ersten Quellenoperanden, Berechnen eines Quadrats eines Datenwerts eines zweiten Quellenoperanden, Berechnen einer Multiplikation der Daten des ersten und des zweiten Operanden, wobei die Berechnungen nur eine Multiplikationsoperation verwenden, und Speichern der Ergebnisse in dem Destinationsoperanden.
  16. Maschinenlesbares Medium nach Anspruch 15, wobei der Destinationsoperand ein Allzweckregister ist.
  17. Maschinenlesbares Medium nach Anspruch 15 oder 16, wobei das Quadrat eines Datenwerts eines ersten Quellenoperanden in niederwertigen Bits des Destinationsoperanden gespeichert wird, das Quadrat eines Datenwerts eines zweiten Quellenoperanden in höherwertigen Bits des Destinationsoperanden gespeichert wird, und die Multiplikation der Daten des ersten und des zweiten Operanden in mittelwertigen Bits des Destinationsoperanden gespeichert wird.
  18. Maschinenlesbares Medium nach einem der Ansprüche 15 bis 17, wobei das Berechnen des Quadrats des Datenwerts des ersten Quellenoperanden Folgendes umfasst: Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen und Verschieben der temporären Variablen um 4N Bits nach rechts, wobei N = log2 (Basis des Datenwerts) ist.
  19. Maschinenlesbares Medium nach einem der Ansprüche 15 bis 18, wobei das Berechnen der Multiplikation des ersten Quellen- und des zweiten Quellenoperanden Folgendes umfasst: Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen, UNDen der quadrierten temporären Variablen mit einem Wert von ((1 um 2N nach links verschoben) minus 1 und Verschieben um 2N plus 1 nach rechts, wobei N = log2 (Basis des Datenwert) ist.
  20. Maschinenlesbares Medium nach einem der Ansprüche 15 bis 19, wobei das Berechnen des Quadrats des Datenwerts des zweiten Quellenoperanden Folgendes umfasst: Erzeugen einer temporären Variablen durch Verschieben des Datenwerts des ersten Quellenoperanden um 2N nach links und ODERn dieses verschobenen Werts durch den Datenwert des zweiten Quellenoperanden, Quadrieren der temporären Variablen, UNDen der quadrierten temporären Variablen mit einem Einerkomplement eines Werts von ((2 um N nach links verschoben) minus 1), wobei N = log2 (Basis des Datenwerts) ist.
DE102014003696.0A 2013-03-15 2014-03-13 Systeme, Vorrichtungen und Verfahren zur Verringerung der Anzahl von "Short-Integer"-Multiplikationen Pending DE102014003696A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/840,985 2013-03-15
US13/840,985 US9207941B2 (en) 2013-03-15 2013-03-15 Systems, apparatuses, and methods for reducing the number of short integer multiplications

Publications (1)

Publication Number Publication Date
DE102014003696A1 true DE102014003696A1 (de) 2014-09-18

Family

ID=50554842

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102014003696.0A Pending DE102014003696A1 (de) 2013-03-15 2014-03-13 Systeme, Vorrichtungen und Verfahren zur Verringerung der Anzahl von "Short-Integer"-Multiplikationen

Country Status (6)

Country Link
US (1) US9207941B2 (de)
JP (1) JP5798650B2 (de)
KR (1) KR101539173B1 (de)
CN (2) CN104049940B (de)
DE (1) DE102014003696A1 (de)
GB (1) GB2514225B (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9207941B2 (en) * 2013-03-15 2015-12-08 Intel Corporation Systems, apparatuses, and methods for reducing the number of short integer multiplications
WO2017177369A1 (zh) 2016-04-12 2017-10-19 深圳市浩瀚卓越科技有限公司 一种稳定器的跟踪拍摄控制方法及系统
US20190102199A1 (en) * 2017-09-30 2019-04-04 Intel Corporation Methods and systems for executing vectorized pythagorean tuple instructions

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5207132A (en) 1991-10-16 1993-05-04 Textron Inc. Elliptical lobed drive system
US5446912A (en) 1993-09-30 1995-08-29 Intel Corporation Partial width stalls within register alias table

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4700319A (en) * 1985-06-06 1987-10-13 The United States Of America As Represented By The Secretary Of The Air Force Arithmetic pipeline for image processing
JP3531402B2 (ja) * 1997-03-14 2004-05-31 三菱電機株式会社 2乗回路
US6490607B1 (en) * 1998-01-28 2002-12-03 Advanced Micro Devices, Inc. Shared FP and SIMD 3D multiplier
US6766346B2 (en) * 1999-11-30 2004-07-20 Mosaid Technologies Incorporation System and method for computing a square of a number
US7539714B2 (en) * 2003-06-30 2009-05-26 Intel Corporation Method, apparatus, and instruction for performing a sign operation that multiplies
US7689641B2 (en) * 2003-06-30 2010-03-30 Intel Corporation SIMD integer multiply high with round and shift
US7676535B2 (en) * 2005-09-28 2010-03-09 Intel Corporation Enhanced floating-point unit for extended functions
US8073892B2 (en) * 2005-12-30 2011-12-06 Intel Corporation Cryptographic system, method and multiplier
US9069547B2 (en) * 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
CN101082860A (zh) * 2007-07-03 2007-12-05 浙江大学 一种乘累加装置
US8504807B2 (en) * 2009-12-26 2013-08-06 Intel Corporation Rotate instructions that complete execution without reading carry flag
FR2972064B1 (fr) * 2011-02-25 2013-03-15 Inside Secure Procede de cryptographie comprenant une operation d'exponentiation
US20120254588A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US9207941B2 (en) * 2013-03-15 2015-12-08 Intel Corporation Systems, apparatuses, and methods for reducing the number of short integer multiplications

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5207132A (en) 1991-10-16 1993-05-04 Textron Inc. Elliptical lobed drive system
US5446912A (en) 1993-09-30 1995-08-29 Intel Corporation Partial width stalls within register alias table

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"Intel® 64 and IA-32 Intel Architectures Software Developers Manual", Oktober 2011
"Intel® Advanced Vector Extensions Programming Reference", Juni 2011

Also Published As

Publication number Publication date
GB201404236D0 (en) 2014-04-23
JP5798650B2 (ja) 2015-10-21
GB2514225B (en) 2017-10-04
JP2014182811A (ja) 2014-09-29
CN104049940A (zh) 2014-09-17
US9207941B2 (en) 2015-12-08
US20140281395A1 (en) 2014-09-18
CN104049940B (zh) 2018-08-10
GB2514225A (en) 2014-11-19
KR101539173B1 (ko) 2015-07-27
CN109144569A (zh) 2019-01-04
KR20140113537A (ko) 2014-09-24

Similar Documents

Publication Publication Date Title
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE102013021221A1 (de) Befehle und Logik zur Vektorisierung von bedingten Schleifen
DE102016006400A1 (de) Hardware-prozessoren und verfahren für eng-gekoppelte heterogene datenverarbeitung
DE112013003743T5 (de) Beschleunigte spurübergreifende Vektorreduzierungsbefehle
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE112013005428T5 (de) Befehle, Prozessoren, Verfahren und Systeme zum Verarbeiten sicherer Hash-Algorithmen
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE102018124919A1 (de) Skalierbare speicheroptimierte Hardware für Matrix-Solve
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102015002253A1 (de) Verfahren und Vorrichtung zum Ausführen mehrerer Multiplikationsoperationen
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
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
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE112013003735T5 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE102018005976A1 (de) Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten
DE102018128626A1 (de) Systeme, Verfahren und Vorrichtungen für Matrixoperationen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication