DE112017000983T5 - System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske - Google Patents

System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske Download PDF

Info

Publication number
DE112017000983T5
DE112017000983T5 DE112017000983.9T DE112017000983T DE112017000983T5 DE 112017000983 T5 DE112017000983 T5 DE 112017000983T5 DE 112017000983 T DE112017000983 T DE 112017000983T DE 112017000983 T5 DE112017000983 T5 DE 112017000983T5
Authority
DE
Germany
Prior art keywords
identifier
source operand
operand
data associated
destination
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
DE112017000983.9T
Other languages
English (en)
Inventor
Sara Baghsorkhi
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 DE112017000983T5 publication Critical patent/DE112017000983T5/de
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/30018Bit or string 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching

Landscapes

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

Abstract

Es wird ein Prozessor beschrieben, der eine Abrufschaltung zum Abrufen eines Befehls, einschließlich einer Kennung eines ersten Quelloperanden, einer Kennung eines zweiten Quelloperanden und einer Kennung eines Zieloperanden, eine Decodierungsschaltung zum Decodieren des Befehls, eine Datenabrufschaltung zum Abrufen von der Kennung eines ersten Quelloperanden und der Kennung eines zweiten Quelloperanden zugeordneten Daten und eine Ausführungsschaltung aufweist. In einigen Ausführungsformen ist die Ausführungsschaltung dazu ausgebildet, zu bestimmen, ob ein erstes Element der der Kennung eines ersten Quelloperanden zugeordneten Daten gesetzt ist, falls das erste Element gesetzt ist, einen Zielindex aus einem entsprechenden zweiten Element der der Kennung eines zweiten Quelloperanden zugeordneten Daten abzurufen und den Zielindex zum Auswählen und Setzen eines Zielelements von der Kennung eines Zieloperanden zugeordneten Daten zu verwenden.

Description

  • Technisches Gebiet
  • Hier beschriebene Ausführungsformen betreffen allgemein Prozessoren. Insbesondere betreffen hier beschriebene Ausführungsformen allgemein Prozessoren, die dafür konfiguriert sind, einen Befehl zum Permutieren einer Maske auszuführen.
  • Hintergrundinformationen
  • Vektorisierter Code bezieht sich auf Operationen, die an mehreren Komponenten eines Vektors gleichzeitig ausgeführt werden. Vektor- oder SIMD-(Single Instruction Multiple Data)-Berechnung bietet im Allgemeinen verbesserte Ausführungsleistung gegenüber skalarer Berechnung, da es eine verstärkte Ausnutzung der durch Vektor- oder SIMD-Prozessoren angebotenen Parallelität ermöglicht. Jedoch können Leistungszuwächse bezüglich Vektorisierung von Schleifen in allgemeinen Anwendungen aufgrund komplexer dynamischer Kontrollflüsse begrenzt sein. Kompilierer versuchen möglicherweise nicht, zerstreute, verzweigte Schleifen zu vektorisieren, vor allem wenn aufwändige Befehle wie zum Beispiel „Gather“ und „Scatter“ für eine Vektorisierung erforderlich sind. Für bestimmte Arten von Code, wie zum Beispiel zerstreute und verzweigte Schleifen, ist es schwierig, Vektorisierung zum Erzielen von Leistungszuwächsen anzuwenden. Was somit erforderlich ist, ist ein Befehl zum Ermöglichen der Vektorisierung bestimmter Arten von Code.
  • Figurenliste
    • 1 ist ein Blockdiagramm 300, das Verarbeitungskomponenten zum Ausführen eines Befehls zum Permutieren einer Maske gemäß einer Ausführungsform veranschaulicht.
    • 2 veranschaulicht in einem Befehl zum Permutieren einer Maske enthaltene Felder gemäß einer Ausführungsform.
    • 3 ist ein Blockflussdiagramm, das die Ausführung eines Befehls zum Permutieren einer Maske gemäß einer Ausführungsform veranschaulicht.
    • 4 veranschaulicht eine Logikschaltung, die zum Setzen eines Elements eines Zieloperanden unter Verwendung eines ersten Quelloperanden und eines zweiten Quelloperanden gemäß einer Ausführungsform verwendet wird.
    • 5 veranschaulicht eine Logikschaltung, die zum Setzen eines Elements eines Zieloperanden unter Verwendung eines ersten Quelloperanden und eines zweiten Quelloperanden gemäß einer Ausführungsform verwendet wird.
    • 6 ist Pseudocode zum Veranschaulichen des Betriebs einer Ausführungsschaltung 106 (1) gemäß einer Ausführungsform.
    • 7 ist ein Blockflussdiagramm, das den Betrieb einer Ausführungsschaltung 106 (1) gemäß einer Ausführungsform veranschaulicht.
    • 8 ist ein Blockflussdiagramm, das den Betrieb von Ausführungsschaltung 106 (1) gemäß einer alternativen Ausführungsform veranschaulicht.
    • 9 ist ein Blockflussdiagramm, das den Betrieb von Ausführungsschaltung 106 (1) gemäß einer alternativen Ausführungsform veranschaulicht.
    • 10 ist ein Blockflussdiagramm, das den Betrieb von Ausführungsschaltung 106 (1) gemäß einer alternativen Ausführungsform veranschaulicht.
    • 11 ist ein Blockdiagramm, das ein allgemeines vektorfreundliches Befehlsformat und Klasse-A-Befehlstemplates davon gemäß Ausführungsformen veranschaulicht.
    • 12 ist ein Blockdiagramm, das das allgemeine vektorfreundliche Befehlsformat und Klasse-B-Befehlstemplates davon gemäß Ausführungsformen veranschaulicht.
    • 13 veranschaulicht in allgemeinem vektorfreundlichen Befehlsformat 1100 enthaltene Felder.
    • 14 ist ein Blockdiagramm, das die Felder des speziellen vektorfreundlichen Befehlsformats 1300, die das Voll-Opcode-Feld 1174 bilden, gemäß einer Ausführungsform veranschaulicht.
    • 15 ist ein Blockdiagramm, das die Felder des speziellen vektorfreundlichen Befehlsformats 1300, die das Registerindexfeld 1144 bilden, gemäß einer Ausführungsform veranschaulicht.
    • 16 ist ein Blockdiagramm, das die Felder des speziellen vektorfreundlichen Befehlsformats, die das Ergänzungsoperationsfeld 1650 bilden, gemäß einer Ausführungsform veranschaulicht.
    • 17 ist ein Blockdiagramm einer Registerarchitektur 1700 gemäß einer Ausfiihrungsform.
    • 18 ist ein Blockdiagramm, das sowohl eine beispielhafte In-Reihenfolge-Pipeline als auch eine beispielhafte Registerumbenennung-Außer-Reihenfolge-Ausgabe-/Ausführung-Pipeline gemäß Ausführungsformen veranschaulicht.
    • 19 zeigt den Prozessorkern 1890 eine mit einer Ausführungs-Engine-Einheit 1850 gekoppelte Frontend-Einheit 1830 umfassend, und wobei beide mit einer Speichereinheit 1870 gekoppelt sind.
    • 20 ist ein Blockdiagramm eines einzelnen Prozessorkerns zusammen mit seiner Verbindung zu dem On-Die-Verbindungsnetz 2002 und mit seinem lokalen Teilsatz des L2-(Level 2)-Cache 2004 gemäß Ausführungsformen.
    • 21 ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 20 gemäß Ausführungsformen.
    • 22 ist ein Blockdiagramm eines Prozessors 2200, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und integrierte Grafik aufweisen kann, gemäß Ausführungsformen.
    • 23 zeigt ein Blockdiagramm eines Systems 2300 gemäß einer Ausführungsform der vorliegenden Erfindung.
    • 24 zeigt ein Blockdiagramm eines ersten spezielleren beispielhaften Systems 2400 gemäß einer Ausfiihrungsform der vorliegenden Erfindung.
    • 25 zeigt ein Blockdiagramm eines zweiten spezielleren beispielhaften Systems 2500 gemäß einer Ausfiihrungsform der vorliegenden Erfindung.
    • 26 zeigt ein Blockdiagramm eines SoC 2600 gemäß einer Ausfiihrungsform der vorliegenden Erfindung.
    • 27 zeigt ein Blockdiagramm, das die Verwendung eines Softwarebefehlumwandlers zum Umwandeln binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß Ausführungsformen kontrastiert.
  • AUSFÜHRLICHE BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
  • Maskierte Lade- und Speichervorgänge können zum Verbessern der Leistung bestimmter Arten von Code und Codeschleifen verwendet werden. Ein Befehl zum Modifizieren einer Maske wird offenbart. Der offenbarte Befehl gestattet das Permutieren einer Maske zum Ermöglichen von Lesevorgängen aus korrekten Orten und von Schreibvorgängen in korrekte Orte. Der offenbarte Befehl kann zum Permutieren eines jeglichen Operanden verwendet werden, ungeachtet seiner Größe oder des Verwendungszwecks. Ausführungsformen von Systemen, Vorrichtungen und Verfahren für Maskenpermutation werden nachstehend erläutert.
  • 1 ist ein Blockdiagramm 100, das Verarbeitungskomponenten zum Ausführen eines Befehls zum Permutieren einer Maske gemäß einer Ausführungsform veranschaulicht. Speziell beinhaltet Blockdiagramm 100 Befehlsspeicher 102, Decodierungsschaltung 104, Ausführungsschaltung 106, Register 108, Speicher 110 und Zurückziehen-oder-Bestätigen-Schaltung 112. Ein Befehl wird von Befehlsspeicher 102, welcher einen Cache-Speicher, einen On-Chip-Speicher, einen Speicher auf dem gleichen Die wie der Prozessor, ein Befehlsregister, ein allgemeines Register oder Systemspeicher ohne Einschränkung umfasst, eingegeben. Decodierungsschaltung 104 decodiert den Befehl. In einer Ausführungsform umfasst der Befehl nachstehend mit Bezug auf 2 eingehender erörterte Felder. Der decodierte Befehl wird durch Ausführungsschaltung 106 ausgeführt. Ausführungsschaltung 106 ist dafür konfiguriert, Daten aus Registern 108 und aus Speicher 110 zu lesen und in diese zu schreiben. Register 108 umfassen ein beliebiges oder mehrere von einem Datenregister, einem Befehlsregister, einem allgemeinen Register, einem On-Chip-Speicher. Speicher 110 umfasst ein beliebiges von einem On-Chip-Speicher, einem Speicher auf dem gleichen Die wie der Prozessor, einem Speicher in dem gleichen Gehäuse wie der Prozessor, einem Cache-Speicher oder einen Systemspeicher. Einige beispielhafte Ausführungsformen für Ausführungsschaltung 106 werden mit Bezug auf 6-10 veranschaulicht und beschrieben. Zurückziehen-oder-Bestätigen-Schaltung 112 stellt sicher, dass Ausführungsergebnissen in ihre Ziele geschrieben werden oder geschrieben worden sind, und setzt oder gibt Ressourcen für eine spätere Verwendung frei.
  • 2 veranschaulicht in einem Befehl zum Permutieren einer Maske enthaltene Felder gemäß einer Ausführungsform. Speziell beinhaltet Befehl 200 Opcode 202, Kennung 204 eines ersten Quelloperanden, Kennung 206 eines zweiten Quelloperanden und Kennung 208 eines Zieloperanden. Opcode 202 identifiziert den Befehl und/oder die Operation, die auszuführen sind, sowie die Art von Operanden (z. B. Befehl zum Permutieren eines ersten Quelloperanden in einem dedizierten Maskenregister, Verwenden eines zweiten Quelloperanden in einem Vektorregister und zum Schreiben der Ergebnisse in ein anderes dediziertes Maskenregister). Die Kennung 204 eines ersten Quelloperanden enthält den ersten Quelloperanden (einen Unmittelbaren) oder identifiziert einen Register- oder Speicherort, woraus der erste Quelloperand abzurufen ist. Der erste Quelloperand umfasst mehrere Elemente, wovon jedes ein entsprechendes Element in einem zweiten Quelloperanden, spezifiziert durch die Kennung 206 eines zweiten Quelloperanden, und ein entsprechendes Element in einem Zieloperanden, spezifiziert durch die Kennung 208 eines Zieloperanden, aufweist. In einer Ausführungsform ist der erste Quelloperand ein setzbare Bits umfassendes Maskenregister und weist der zweite Quelloperand entsprechende Indizes auf, die jedes der Elemente des ersten Quelloperanden auf eines der Elemente des Zieloperanden abbilden. Da der zweite Quelloperand und der Zieloperand dem ersten Quelloperanden entsprechen, hängen ihre minimalen Größen von der Größe des ersten Quelloperanden ab. Wenn beispielsweise der erste Quelloperand 8 Elemente enthält, wird der Zieloperand mindestens 8 Elemente enthalten und wird der zweite Quelloperand mindestens 8 Indizes enthalten, jeder mindestens 3 Bit breit, zum Auswählen eines der 8 Elemente des Zieloperanden. Als ein weiteres Beispiel wird, wenn der erste Quelloperand 64 Elemente enthält, der Zieloperand mindestens 64 Elemente enthalten und wird der zweite Quelloperand mindestens 64 entsprechende Indizes enthalten, jeder mindestens 8 Bit breit, zum Auswählen eines der 64 Elemente des Zieloperanden.
  • Die durch Felder 104, 106 und 108 identifizierten ersten und zweiten Quelloperanden und die Zieloperanden werden in Registern eines Registersatzes oder im Speicher gespeichert. Der Registersatz ist Teil einer Registerdatei zusammen mit potenziellen anderen Registern wie beispielsweise Statusregistern, Flag-Registern, dedizierten Maskenregistern, Vektorregistern usw. In einer Ausführungsform sind die Register von außerhalb des Prozessors oder aus Sicht eines Programmierers sichtbar. In einer Ausführungsform spezifizieren Befehle in den Registern gespeicherte Operanden. Es sind verschiedene Arten von Registern geeignet, sofern sie fähig sind, Daten wie hier beschrieben zu speichern und bereitzustellen. Alternativ sind einer oder mehrere der Quell- und Zieloperanden in einem anderen Speicherort als einem Register gespeichert, wie zum Beispiel an einem Ort im Systemspeicher.
  • 3 ist ein Blockflussdiagramm, das die Ausführung eines Befehls zum Permutieren einer Maske gemäß einer Ausführungsform veranschaulicht. Speziell beinhaltet Blockflussdiagramm 300 das Starten bei Block 302, das Abrufen eines Befehls bei Block 304, das Decodieren des Befehls bei Block 306, das Abrufen von den Kennungen erster und zweiter Quelloperanden zugeordneter Daten bei Block 308 und das Ausführen des Befehls bei Block 310. Der bei Block 304 abgerufene Befehl weist ein Format mit einer Kennung eines ersten Quelloperanden, einer Kennung eines zweiten Quelloperanden und einer Kennung eines Zieloperanden auf. Das Abrufen eines Befehls bei Block 304 wird ausgeführt durch das Abrufen eines Befehls aus Befehlsspeicher 102 (1), welcher einen Cache-Speicher, ein Befehlsregister, ein allgemeines Register oder Systemspeicher umfasst. Das Decodieren des Befehls bei Block 306 beinhaltet das Decodieren der verschiedenen Felder des Befehls (siehe 2), einschließlich des Opcodes 202, der Kennung 204 eines ersten Quelloperanden, der Kennung 206 eines zweiten Quelloperanden und der Kennung 208 eines Zieloperanden. Das Decodieren beinhaltet auch das Bestimmen, von wo die Operanden abzurufen sind und wohin die Ergebnisse zu schreiben sind. Die Operanden sind in Registern eines Registersatzes oder im Speicher gespeichert. Der Registersatz ist Teil einer Registerdatei zusammen mit potenziellen anderen Registern wie beispielsweise Statusregistern, Flag-Registern, dedizierten Maskenregistern, Vektorregistern usw. In einer Ausführungsform sind die Register von außerhalb des Prozessors oder aus Sicht eines Programmierers sichtbar. Beispielsweise spezifizieren Befehle in den Registern gespeicherte Operanden. Es sind verschiedene Arten von Registern geeignet, sofern sie fähig sind, Daten wie hier beschrieben zu speichern und bereitzustellen. Alternativ sind einer oder mehrere der Quell- und Zieloperanden in einem anderen Speicherort als einem Register gespeichert wie zum Beispiel einem Ort im Systemspeicher. Das Ausführen des Befehls bei Block 310 beinhaltet das Bestimmen, ob ein erstes Element von der Kennung eines ersten Quelloperanden zugeordneten Daten gesetzt ist bei Block 312, und, falls es gesetzt ist, das Extrahieren eines Zielindex aus einem entsprechenden Element der der Kennung eines zweiten Quelloperanden zugeordneten Daten bei Block 314 und das Verwenden des Zielindex zum Setzen eines Zielelements von der Kennung eines Zieloperanden zugeordneten Daten bei Block 316. Ausfiihrungsblock 310 wird nachstehend mit Bezug auf 6 bis 10 weiter beschrieben. In einigen Ausführungsformen wird Blockflussdiagramm 300 von und/oder mit Verarbeitungskomponenten, wie in 1 dargestellt, ausgeführt.
  • 4 veranschaulicht ein beispielhaftes Ergebnis des Ausführens eines Befehls zum Permutieren einer Maske gemäß der Offenbarung. Hier zeigt die Kennung eines ersten Quelloperanden auf einen 8-Bit-Wert 402, der auf [k0:k7] = 8'b010001010 gesetzt ist, und zeigt die Kennung eines zweiten Quelloperanden auf einen 24-Bit-Wert 404, der 8 3-Bit-Indizes beinhaltet, wobei jedes Bit des ersten Quelloperanden auf eines der acht Bits des Zieloperanden abgebildet wird. Wie dargestellt, ist der zweite Quelloperand auf [i0:i7] = {x, 3, x, x, 3, x, 6, x} gesetzt, wobei die drei gesetzten (d. h. gleich ‚1‘) Bits des ersten Quelloperanden auf Bits 3, 3 und 6 des Zieloperanden abgebildet werden. Zu Veranschaulichungszwecken sind i0, i2, i3, i5 und i7 als ‚x‘ gesetzt, weil ihre Werte nicht die Ergebnisse beeinflussen werden, da die entsprechenden Bits des ersten Quelloperanden auf'0' gesetzt sind. Wie dargestellt, ist das Zieloperandenregister 406 in diesem Beispiel auf 8'b00010010 gesetzt. Es ist zu beachten, dass es, wie in 4 dargestellt, möglich ist, dass mehr als eines der Elemente des zweiten Quelloperanden i0 bis i7 den gleichen Wert haben, um somit mehrere Elemente des ersten Quelloperanden auf das gleiche Element des Zieloperanden abzubilden. Auf diese Weise können mehrere Elemente des ersten Quelloperanden k0 bis k7 auf das gleiche Element des Zieloperanden r0 bis r7 abgebildet werden. Wie in 4 dargestellt, ist Bit k1 des ersten Quelloperanden QD02 gesetzt und zeigt das entsprechende Element i1 des zweiten Quelloperanden 404 auf r3. Aber auch Bit k4 des ersten Quelloperanden QD02 ist gesetzt und das entsprechende Element i4 des zweiten Quelloperanden 404 zeigt auf r3. Daher sind zwei Eingänge von ODER-Gatter 408 gesetzt, wodurch Ziel-Bit r3 gesetzt wird. In dem dargestellten Beispiel enthält dann der erste Quelloperand mehr gesetzte Elemente als der Zieloperand.
  • 5 veranschaulicht eine Logikschaltung zum Setzen eines Elements eines Zieloperanden unter Verwendung eines ersten Quelloperanden und eines zweiten Quelloperanden gemäß einer Ausführungsform. Wie dargestellt, beinhaltet Logikschaltung 500 ein 8-Bit-Register 502 zum Halten eines ersten Quelloperanden, ein 24-Bit-Register 504 zum Halten eines zweiten Quelloperanden und ein 8-Bit-Register 512 zum Halten eines Zieloperanden. Wie dargestellt, beinhaltet Schaltnetz 501 Komparatoren 506a-h, UND-Gatter 508a-h und ODER-Gatter 510 mit acht Eingängen. Wie dargestellt, hält Register 504 Element i0 des zweiten Quelloperanden, welches Element k0 des ersten Quelloperanden entspricht. In Betrieb wird, wenn k0 gesetzt ist und i0 gleich 000 ist, der Ausgang von UND-Gatter 508a gesetzt, was bewirkt, dass die Ausgabe von ODER-Gatter 510 gesetzt wird, und zum Setzen von Element r0 von Register 512 führt. In ähnlicher Weise wird, wenn k1 gesetzt ist und i1 gleich 000 ist, der Ausgang von UND-Gatter 508b gesetzt, was bewirkt, dass ODER-Gatter 510 gesetzt wird, und zum Setzen von Element r0 von Register 512 führt. In ähnlicher Weise wird, wenn k2 gesetzt ist und i2 gleich 000 ist oder wenn k3 gesetzt ist und i3 gleich 000 ist oder wenn k4 gesetzt ist und i4 gleich 000 ist usw., der Ausgang von ODER-Gatter Q'10 gesetzt und wird Element r0 des in Register 512 gespeicherten Zieloperanden gesetzt.
  • Aus Gründen der Einfachheit ist Schaltung 500, wie in 5 dargestellt, lediglich als eines der acht Elemente des Zieloperandenregisters verarbeitend gezeigt. Es könnten mehr Schaltungsanordnungen zum parallelen Setzen mehrerer oder aller der Elemente verwendet werden. Alternativ könnte die dargestellte Logikschaltung zum Setzen eines Elements des Zieloperanden nach dem anderen seriell verwendet werden.
  • 6 ist Pseudocode zum Veranschaulichen des Betriebs von Ausführungsschaltung 106 (1) gemäß einer Ausführungsform. Wie dargestellt, veranschaulicht der Pseudocode, dass beispielhafte Ausführungsschaltung 106 (1) als Eingänge eine 16-Bit-Kennung eines ersten Quelloperanden, src1, eine 64-Bit-Kennung eines zweiten Quelloperanden, src2, und eine 16-Bit-Kennung eines Zieloperanden, dest, empfängt. Die beispielhafte Ausführungsschaltung 106 (1) löscht, wie durch den Pseudocode von 6 dargestellt, die der Zieloperandenkennung dest zugeordneten Daten. Die beispielhafte Ausführungsschaltung 106 (1) verarbeitet, wie durch den Pseudocode von 6 dargestellt, die sechzehn Bit von src1 und extrahiert für jedes Bit, das gesetzt ist, einen dem Element zugeordneten Zielindex aus einem entsprechenden Element der der Kennung eines zweiten Quelloperanden, src2, zugeordneten Daten und verwendet den Ziel index zum Setzen eines Elements der der Zieloperandenkennung dest zugeordneten Daten. Die beispielhafte Ausführungsschaltung 106 (1) kann die Bits eines nach dem anderen seriell verarbeiten oder kann mehrere Bits oder alle Bits gleichzeitig parallel verarbeiten.
  • 7 ist ein Blockflussdiagramm, das den Betrieb von Ausführungsschaltung 106 (1) gemäß einer Ausführungsform veranschaulicht. Speziell ruft die Ausführungsschaltung 106 den Kennungen von ersten und zweiten Quelloperanden zugeordnete Daten bei 702 ab, löscht einen Zieloperanden bei 704, prüft bei 706 für jedes Element des ersten Quelloperanden, ob das Element des ersten Quelloperanden gesetzt ist, bei 708 und geht, falls es nicht gesetzt ist, weiter zu 714 zum Testen, ob das letzte Element des ersten Quelloperanden verarbeitet wurde. Falls die Ausführungsschaltung 106 bei 708 aber bestimmt, dass das Element des ersten Quelloperanden gesetzt ist, fährt es bei 710 mit dem Extrahieren eines dem Element des ersten Quelloperanden entsprechenden Zielindex aus einem entsprechenden Element des zweiten Quelloperanden fort, setzt bei 712 das durch den Zielindex identifizierte Zielelement und bestimmt bei 714, ob das letzte Element des ersten Quelloperanden verarbeitet wurde. Falls bei 714 bestimmt wird, dass das letzte Element des ersten Quelloperanden verarbeitet wurde, fährt Ausführungsschaltung 106 bei 716 damit fort, den Befehl zu bestätigen oder zurückzuziehen. Ansonsten verarbeitet sie bei 706 das nächste Element des ersten Quelloperanden.
  • Das Ausführen des Befehls zum Permutieren einer Maske, wie in 7 dargestellt, geschieht im Wesentlichen seriell, wobei ein Element des ersten Quelloperanden nach dem anderen verarbeitet wird. In einigen Ausführungsformen wird der in 7 dargestellte Fluss von und/oder mit Verarbeitungskomponenten, wie in 1 dargestellt, ausgeführt.
  • 8 ist ein Blockflussdiagramm, das den Betrieb einer Ausführungsschaltung 106 (1) gemäß einer alternativen Ausführungsform veranschaulicht. Speziell ruft die Ausführungsschaltung 106 den Kennungen von ersten und zweiten Quelloperanden zugeordnete Daten bei 802 ab und löscht einen Zieloperanden bei 804. Bei 806, parallel für jedes Element des ersten Quelloperanden, prüft Ausführungsschaltung 106, ob das Element des ersten Quelloperanden gesetzt ist, bei 808 und, falls es nicht gesetzt ist, bestätigt oder zieht den Befehl bei 814 zurück, sobald das parallele Verarbeiten aller Elemente des ersten Quelloperanden abgeschlossen ist. Falls die Ausführungsschaltung 106 bei 808 aber bestimmt, dass das Element des ersten Quelloperanden gesetzt ist, extrahiert sie bei 810 einen Zielindex aus einem entsprechenden Element des zweiten Quelloperanden, setzt bei 812 das durch den Zielindex identifizierte Zielelement und bestätigt oder zieht den Befehl dann bei 814 zurück, sobald das parallele Verarbeiten aller Elemente des ersten Quelloperanden abgeschlossen ist.
  • Das Ausführen des Befehls zum Permutieren einer Maske, wie in 8 dargestellt, geschieht im Wesentlichen parallel, wobei jedes Element des ersten Quelloperanden zeitgleich verarbeitet wird. In einigen Ausführungsformen wird Flussdiagramm 800 von und/oder mit Verarbeitungskomponenten, wie in 1 dargestellt, ausgeführt.
  • 9 ist ein Flussdiagramm, das den Betrieb von Ausführungsschaltung 106 (1) gemäß einer alternativen Ausführungsform veranschaulicht. Speziell ruft die Ausführungsschaltung 106 den Kennungen von ersten und zweiten Quelloperanden zugeordnete Daten bei 902 ab, löscht einen Zieloperanden bei 904, orrdnet Logik zum Verarbeiten jedes Elements des Zieloperanden bei 906 zu, während sie Logik zum Verarbeiten jedes Elements des ersten Quelloperanden bei 908 zuweist, während sie prüft, ob das Element des ersten Quelloperanden gesetzt ist bei 910 und geht, sie falls es nicht gesetzt ist, weiter zu 916 zum Testen, ob das letzte Element des ersten Quelloperanden verarbeitet wurde. Falls die Ausführungsschaltung 106 bei 910 aber bestimmt, dass das Element gesetzt ist, extrahiert sie bei 912 einen dem Element des ersten Quelloperanden entsprechenden Zielindex aus einem entsprechenden Element des zweiten Quelloperanden und bestimmt, ob dieser Zielindex auf das zuvor gewählte Zielelement zeigt, bei Q'106. Falls der Zielindex nicht auf das gewählte Zielelement zeigt, bestimmt Ausführungsschaltung 106 bei 916, ob das letzte Element des ersten Quelloperanden verarbeitet wurde, ansonsten, wenn der Zielindex auf das bei 906 gewählte Zielelement zeigt, setzt Ausführungsschaltung 106 bei 914 das durch den Zielindex identifizierte Element des Zieloperanden und bestimmt, ob das letzte Element des ersten Quelloperanden verarbeitet wurde, bei 916. Falls Ausführungsschaltung 106 bei 916 bestimmt, dass das letzte Element des ersten Quelloperanden verarbeitet wurde, prüft sie bei 918, ob das letzte Element des Zieloperanden verarbeitet wurde und kehrt ansonsten zu Q'108 zurück zum Auswählen des nächsten Elements des ersten Quelloperanden. Bei 918, falls Ausführungsschaltung 106 bestimmt, dass das letzte Element des Zieloperanden nicht verarbeitet wurde, kehrt sie zurück zu 906 zum Auswählen des nächsten Elements des Zieloperanden. Falls Ausführungsschaltung 106 bei 918 bestimmt, dass das letzte Element des Zieloperanden verarbeitet wurde, bestätigt oder zieht sie bei 920 den Befehl zurück.
  • Das Ausführen des Befehls zum Permutieren einer Maske, wie in 9 dargestellt, geschieht im Wesentlichen seriell, wobei ein Element des Zieloperanden und des ersten Quelloperanden nach dem anderen verarbeitet wird. In einigen Ausführungsformen wird Flussdiagramm 900 von und/oder mit Verarbeitungskomponenten, wie in 1 dargestellt, ausgeführt.
  • 10 ist ein Flussdiagramm, das den Betrieb von Ausführungsschaltung 106 (1) gemäß einer alternativen Ausführungsform veranschaulicht. Speziell ruft Ausführungsschaltung 106 den Kennungen von ersten und zweiten Quelloperanden zugeordnete Daten bei 1002 ab, löscht einen Zieloperanden bei 1004, verwendet bei 1006 parallele Schaltungsanordnungen zum Verarbeiten jedes Elements des Zieloperanden und verwendet für jedes Element des Zieloperanden bei 1008 parallele Schaltungsanordnungen zum Verarbeiten jedes Elements des ersten Quelloperanden und für jedes Element des ersten Quelloperanden bestimmt Ausführungsschaltung 106 bei 1010, ob das Element des ersten Quelloperanden gesetzt ist, und, falls es nicht gesetzt ist, bestätigt oder zieht sie bei 1016 den Befehl zurück, sobald alle parallelen Prozesse abgeschlossen sind. Falls Ausführungsschaltung 106 bei 1010 aber bestimmt, dass das Element des ersten Quelloperanden gesetzt ist, extrahiert sie bei 1012 einen dem Element des ersten Quelloperanden entsprechenden Zielindex aus einem entsprechenden Element des zweiten Quelloperanden, setzt bei 1014 das durch diesen Index identifizierte Zielelement, wenn das identifizierte Zielelement mit dem Zielindex übereinstimmt, der durch die zugeordnete Schaltung bei 1006 verarbeitet wird, und bestätigt oder zieht bei 1016 den Befehl zurück, sobald alle parallelen Prozesse abgeschlossen sind.
  • Das Ausführen des Befehls zum Permutieren einer Maske, wie in 10 dargestellt, geschieht im Wesentlichen parallel, wobei jedes Element des Zieloperanden und des ersten Quelloperanden zeitgleich verarbeitet wird. In einigen Ausführungsformen wird Flussdiagramm 1000 von und/oder mit Verarbeitungskomponenten, wie in 1 dargestellt, ausgeführt.
  • Befehlssätze
  • Ein Befehlssatz kann ein oder mehrere Befehlsformate beinhalten. Ein gegebenes Befehlsformat kann verschiedene Felder (z. B. Anzahl an Bits, Ort von Bits) definieren, um unter anderem die auszuführende Operation (z. B. Opcode) und den/die Operand(en), an dem/denen die Operation durchzuführen ist, und/oder (ein) andere(s) Datenfeld(er) (z. B. Maske) zu spezifizieren. Manche Befehlsformate sind durch die Definition von Befehlstemplates (oder Teilformaten) weiter aufgeschlüsselt. Zum Beispiel können die Befehlstemplates eines gegebenen Befehlsformats so definiert sein, dass sie unterschiedliche Teilsätze der Felder des Befehlsformats aufweisen (die enthaltenen Felder sind typischerweise in der gleichen Reihenfolge, aber wenigstens manche weisen unterschiedliche Bitpositionen auf, weil dort weniger Felder enthalten sind), und/oder so definiert sein, dass sie ein gegebenes Feld aufweisen, das unterschiedlich interpretiert wird. Dementsprechend wird jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats (und, falls definiert, in einem gegebenen der Befehlstemplates jenes Befehlsformats) ausgedrückt und beinhaltet Felder zum Spezifizieren der Operation und der Operanden. Zum Beispiel weist ein beispielhafter ADD-Befehl einen speziellen Opcode und ein Befehlsformat auf, das ein Opcode-Feld zum Spezifizieren dieses Opcodes und Operandenfelder zum Auswählen von Operanden (Quelle1/Ziel und Quelle 2) beinhaltet; und ein Auftreten dieses ADD-Befehls in einem Befehlsstrom wird spezielle Inhalte in den Operandenfeldern aufweisen, die spezielle Operanden auswählen.
  • Beispielhafte Befehlsformate
  • Ausführungsformen des/der hier beschrieben Befehls/Befehle können in verschiedenen Formaten umgesetzt werden. Außerdem sind beispielhafte Systeme, Architekturen und Pipelines nachstehend ausführlich beschrieben. Ausführungsformen des/der Befehls/Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf jene ausführlich beschriebenen beschränkt.
  • Allgemeines vektorfreundliches Befehlsformat
  • Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (z. B. gibt es gewisse Felder, die für Vektoroperationen spezifisch sind). Obgleich Ausführungsformen beschrieben sind, bei denen sowohl Vektor- als auch Skalaroperationen durch das vektorfreundliche Befehlsformat unterstützt werden, verwenden alternative Ausführungsformen nur Vektoroperationen durch das vektorfreundliche Befehlsformat.
  • 11-12 sind Blockdiagramme, die ein allgemeines vektorfreundliches Befehlsformat und Befehlstemplates davon gemäß Ausführungsformen veranschaulichen. 11 ist ein Blockdiagramm, das ein allgemeines vektorfreundliches Befehlsformat und Klasse-A-Befehlstemplates davon gemäß Ausführungsformen der Erfindung veranschaulicht; während 12 ein Blockdiagramm ist, welches das allgemeine vektorfreundliche Befehlsformat und Klasse-B-Befehlstemplates davon gemäß Ausführungsformen veranschaulicht. Speziell ein allgemeines vektorfreundliches Befehlsformat 1100, für das Klasse-A- und Klasse-B-Befehlstemplates definiert sind, die beide Befehlstemplates ohne Speicherzugriff 1105 und Befehlstemplates mit Speicherzugriff 1120 beinhalten. Der Ausdruck allgemein in dem Zusammenhang des vektorfreundlichen Befehlsformats verweist darauf, dass das Befehlsformat nicht an irgendeinen speziellen Befehlssatz gebunden ist.
  • Obgleich Ausführungsformen der Erfindung beschrieben werden, in denen das vektorfreundliche Befehlsformat Folgendes unterstützt: eine 64-Byte-Vektoroperandenlänge (oder -größe) mit 32-Bit- (4-Byte-) oder 64-Bit- (8-Byte-) Datenelementbreiten (oder -größen) (und somit besteht ein 64-Byte-Vektor aus entweder 16 doppelwortgroßen Elementen oder alternativ 8 vierwortgroßen Elementen); eine 64-Byte-Vektoroperandenlänge (oder -größe) mit 16-Bit- (2-Byte-) oder 8-Bit- (1-Byte-) Datenelementbreiten (oder -größen); eine 32-Byte-Vektoroperandenlänge (oder -größe) mit 32-Bit- (4-Byte-), 64-Bit- (8-Byte-), 16-Bit- (2-Byte-) oder 8-Bit-(1-Byte-) Datenelementbreiten (oder -größen); und eine 16-Byte-Vektoroperandenlänge (oder -größe) mit 32-Bit- (4-Byte-), 64-Bit- (8-Byte-), 16-Bit- (2-Byte-) oder 8-Bit- (1-Byte-) Datenelementbreiten (oder -größen); können alternative Ausführungsformen mehr, weniger und/oder verschiedene Vektoroperandengrößen (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder verschiedenen Datenelementbreiten (z. B. 128-Bit- (16-Byte-) Datenelementbreiten) unterstützen.
  • Die Klasse-A-Befehlstemplates in 11 umfassen: 1) innerhalb der Befehlstemplates ohne Speicherzugriff 1105 ist ein Befehlstemplate für eine Vollrundungssteueroperation ohne Speicherzugriff 1110 und ein Befehlstemplate für eine Datentransformationsoperation ohne Speicherzugriff 1115 gezeigt; und 2) innerhalb der Befehlstemplates mit Speicherzugriff 1120 ist ein Befehlstemplate, temporal mit Speicherzugriff 1125, und ein Befehlstemplate, nicht temporal mit Speicherzugriff 1130, gezeigt. Die Klasse-B-Befehlstemplates in 12 umfassen: 1) innerhalb der Befehlstemplates ohne Speicherzugriff 1105 ist ein Befehlstemplate für eine Schreibmaskensteuer-Partialrundungssteueroperation ohne Speicherzugriff 1112 und ein Befehlstemplate für eine Schreibmaskensteuer-VSIZE-Operation ohne Speicherzugriff 1117 gezeigt; und 2) innerhalb der Befehlstemplates mit Speicherzugriff 1120 ist ein Befehlstemplate für eine Schreibmaskensteuerung mit Speicherzugriff 1127 gezeigt.
  • Das allgemeine vektorfreundliche Befehlsformat 1100 umfasst die folgenden Felder, die nachstehend in der in 11-12 dargestellten Reihenfolge aufgeführt sind.
  • Formatfeld 1140 - ein spezieller Wert (ein Befehlsformatkennungswert) in diesem Feld identifiziert das vektorfreundliche Befehlsformat eindeutig und dementsprechend Vorkommnisse von Befehlen in dem vektorfreundlichen Befehlsformat in Befehlsströmen. Daher ist dieses Feld in dem Sinne optional, dass es nicht für einen Befehlssatz benötigt wird, der nur das allgemeine vektorfreundliche Befehlsformat aufweist.
  • Basisoperationsfeld 1142 - sein Inhalt unterscheidet verschiedene Basisoperationen.
  • Registerindexfeld 1144 - sein Inhalt spezifiziert die Orte der Quell- und Zieloperanden, seien sie in Registern oder in einem Speicher, direkt oder durch Adressenerzeugung. Diese beinhalten eine ausreichende Anzahl an Bits zum Auswählen von N Registern aus einer PxQ-(z. B. 32×512, 16×128, 32×1024 und 64×1024)-Registerdatei. Während in einer Ausführungsform N bis zu drei Quellen- und ein Zielregister sein kann, können alternative Ausführungsformen mehr oder weniger Quellen und Zielregister unterstützen (können z. B. bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel wirkt, können bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel wirkt, können bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifiziererfeld 1146 - sein Inhalt unterscheidet das Auftreten von Befehlen im allgemeinen Vektorbefehlsformat, die den Speicherzugriff spezifizieren, von denen, die dies nicht tun; das heißt, zwischen Befehltemplates ohne Speicherzugriff 1105 und Befehlstemplates mit Speicherzugriff 1120. Speicherzugriffsoperationen lesen und/oder schreiben in die Speicherhierarchie (in manchen Fällen die Quellen- und/oder Zieladressen unter Verwendung von Werten in Registern spezifizierend), während Operationen ohne Speicherzugriff dies nicht tun (z. B. sind die Quelle und die Ziele Register). Während in einer Ausführungsform dieses Feld auch zwischen verschiedenen Arten des Durchführens von Speicheradressenberechnungen wählt, können alternative Ausführungsformen mehr, weniger oder verschiedene Arten zum Durchführen von Speicheradressenberechnungen unterstützen.
  • Ergänzungsoperationsfeld 1150 - sein Inhalt unterscheidet, welche einer Vielzahl verschiedener Operationen zusätzlich zu der Basisoperation durchzuführen ist. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Erfindung ist dieses Feld in ein Klassefeld 1168, ein Alphafeld 1152 und ein Betafeld 1154 unterteilt. Das Ergänzungsoperationsfeld 1150 ermöglicht, dass gemeinsame Gruppen von Operationen in einem einzelnen Befehl statt in 2, 3 oder 4 Befehlen durchgeführt werden.
  • Skalierungsfeld 1160 - sein Inhalt ermöglicht die Skalierung des Inhalts des Indexfelds für Speicheradressenerzeugung (z. B. für Adressenerzeugung, die 2Skalierung * Index + Basis verwendet).
  • Verschiebungsfeld 1162A- sein Inhalt wird als Teil von Speicheradressenerzeugung verwendet (z. B. für Adressenerzeugung, die 2Skalierung * Index + Basis + Verschiebung verwendet).
  • Verschiebungsfaktorfeld 1162B (man beachte, dass die Nebeneinanderstellung von Verschiebungsfeld 1162A direkt über Verschiebungsfaktorfeld 1162B anzeigt, dass das eine oder das andere verwendet wird) - sein Inhalt wird als Teil von Adressenerzeugung verwendet; es spezifiziert einen Verschiebungsfaktor, der durch die Größe eines Speicherzugriffs (N) zu skalieren ist - wobei N die Anzahl der Bytes im Speicherzugriff ist (z. B. für Adressenerzeugung, die 2Skalierung * Index + Basis + skalierte Verschiebung verwendet). Redundante Bits niedriger Ordnung werden ignoriert und daher wird der Inhalt des Verschiebungsfaktorfelds mit der Speicheroperandengesamtgröße (N) multipliziert, um die abschließende Verschiebung zu erzeugen, die beim Berechnen einer effektiven Adresse zu verwenden ist. Der Wert von N wird durch die Prozessorhardware zur Laufzeit basierend auf dem vollständigen Opcode-Feld 1174 (nachstehend hier beschrieben) und dem Datenmanipulationsfeld 1154C bestimmt. Das Verschiebungsfeld 1162A und das Verschiebungsfaktorfeld 1162B sind in dem Sinne optional, dass sie nicht für die Befehltemplates ohne Speicherzugriff 1105 verwendet werden und/oder unterschiedliche Ausführungsformen können nur eines oder keines der beiden implementieren.
  • Datenelementbreitenfeld 1164 - sein Inhalt unterscheidet, welche von einer Anzahl an Datenelementbreiten zu verwenden ist (in manchen Ausführungsformen für alle Befehle; in anderen Ausführungsformen für nur manche der Befehle). Dieses Feld ist in dem Sinne optional, dass es nicht benötigt wird, wenn nur eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unterstützt werden, die einen gewissen Aspekt der Opcodes verwenden.
  • Schreibmaskenfeld 1170 - sein Inhalt steuert auf einer Basis je Datenelementposition, ob die Datenelementposition in dem Zielvektoroperanden das Ergebnis der Basisoperation und der Ergänzungsoperation reflektiert. Klasse-A-Befehlstemplates unterstützen Zusammenlegungsschreibmaskierung, während Klasse-B-Befehlstemplates sowohl Zusammenlegungs- als auch Nullungsschreibmaskierung unterstützen. Beim Zusammenlegen ermöglichen Vektormasken, dass jeder Satz von Elementen im Ziel während der Ausführung einer Operation (spezifiziert durch die Basisoperation und die Ergänzungsoperation) vor Aktualisierungen geschützt wird; in einer anderen Ausführungsform, dass der alte Wert jedes Elements des Ziels bewahrt wird, wo das entsprechende Maskenbit eine 0 aufweist. Demgegenüber ermöglichen Nullungsvektormasken, dass jeder Satz von Elementen im Ziel während der Ausführung einer Operation (spezifiziert durch die Basisoperation und die Ergänzungsoperation) genullt wird; in einer Ausführungsform, dass ein Element des Ziels auf 0 gesetzt wird, wenn das entsprechende Maskenbit einen 0-Wert aufweist. Ein Teilsatz dieser Funktionalität ist die Fähigkeit, die Vektorlänge der ausgeführten Operation zu steuern (d. h. die Spanne von modifizierten Elementen vom ersten bis zum letzten); es ist jedoch nicht notwendig, dass die Elemente, die modifiziert werden, konsekutiv sind. Somit erlaubt das Schreibmaskenfeld 1170 Teilvektoroperationen, einschließlich Lade-, Speicher-, Arithmetik-, Logikoperationen usw. Während Ausführungsformen der Erfindung beschrieben werden, in denen der Inhalt des Schreibmaskenfelds 1170 eines aus einer Anzahl von Schreibmaskenregistern auswählt, welche die zu verwendende Schreibmaske enthält (und somit der Inhalt des Schreibmaskenfelds 1170 indirekt die auszuführende Maskierung identifiziert), ermöglichen alternative Ausführungsformen stattdessen oder zusätzlich, dass der Inhalt des Maskenschreibfelds 1170 direkt die auszuführende Maskierung spezifiziert.
  • Unmittelbarfeld 1172 - sein Inhalt ermöglicht die Spezifikation eines Unmittelbaren. Dieses Feld ist in dem Sinne optional, dass es in einer Implementierung des allgemeinen vektorfreundlichen Formats, das einen Unmittelbaren nicht unterstützt, nicht vorhanden ist und in Befehlen, die keinen Unmittelbaren verwenden, nicht vorhanden ist.
  • Klassenfeld 1168 - sein Inhalt unterscheidet zwischen verschiedenen Klassen von Befehlen. Mit Bezug auf 11-B wählen die Inhalte dieses Felds zwischen Klasse A- und Klasse B-Befehlen. In 11-B werden Vierecke mit gerundeten Ecken zum Anzeigen, dass ein spezifischer Wert in einem Feld vorhanden ist verwendet (z. B. Klasse A 1168A bzw. Klasse B 1168B für das Klassenfeld 1168 in 11-B).
  • Befehlstemplates der Klasse A
  • Im Fall der Klasse-A-Befehlstemplates ohne Speicherzugriff 1105 wird das Alphafeld 1152 als ein RS-Feld 1152A interpretiert, dessen Inhalt unterscheidet, welche der verschiedenen Ergänzungsoperationstypen auszuführen sind (z. B. sind Runden 1152A.1 und Datentransformation 1152A.2 jeweils für die Befehlstemplates für eine Rundungstypoperation ohne Speicherzugriff 1110 und die Befehlstemplates für Transformationstypoperation ohne Speicherzugriff 1115 spezifiziert), während das Betafeld 1154 unterscheidet, welche der Operationen des spezifizierten Typs durchzuführen sind. In den Befehlstemplates ohne Speicherzugriff 1105 sind das Skalierungsfeld 1160, das Verschiebungsfeld 1162A und das Verschiebungsskalierungsfeld 1162B nicht vorhanden.
  • Befehlstemplates ohne Speicherzugriff - Vollrundungssteuertypoperation
  • In dem Befehlstemplate für eine Vollrundungssteuertypoperation ohne Speicherzugriff 1110 wird das Betafeld 1154 als ein Rundungssteuerfeld 1154A interpretiert, dessen Inhalt(e) eine statische Rundung bereitstellt/bereitstellen. Während in den beschriebenen Ausführungsformen der Erfindung das Rundungssteuerfeld 1154A ein SAE-Feld 1156 (SAE: Suppress All floating point Exceptions - Unterdrücken aller Gleitkommaausnahmen) und ein Rundungsoperationssteuerfeld 1158 beinhaltet, können alternative Ausführungsformen diese beiden Konzepte in das gleiche Feld codieren oder nur das eine oder das andere dieser Konzepte/Felder aufweisen (können z. B. nur das Rundungsoperationssteuerfeld 1158 aufweisen).
  • SAE-Feld 1156 - sein Inhalt unterscheidet, ob das Ausnahmeereignisberichten deaktiviert wird oder nicht; wenn der Inhalt des SAE-Felds 1156 anzeigt, dass Unterdrückung aktiviert ist, gibt ein gegebener Befehl keine Art von Gleitkomma-Ausnahme-Flag an und löst keinen Gleitkomma-Ausnahme-Handler aus.
  • Rundungsoperationssteuerfeld 1158 - sein Inhalt unterscheidet, welche einer Gruppe von Rundungsoperationen durchzuführen ist (z. B. Aufrunden, Abrunden, Runden zu Null und Runden zum Nächsten). Dementsprechend ermöglicht das Rundungssteuerfeld 1158 das Ändern des Rundungsmodus auf einer Basis je Befehl. In einer Ausführungsform der Erfindung, bei der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi beinhaltet, überschreibt der Inhalt des Rundungsoperationssteuerfelds 1150 diesen Registerwert.
  • Befehlstemplates ohne Speicherzugriff - Datentransformationstypoperation
  • In dem Befehlstemplate für eine Datentransformationstypoperation ohne Speicherzugriff 1115 wird das Betafeld 1154 als ein Datentransformationsfeld 1154B interpretiert, dessen Inhalt unterscheidet, welche einer Anzahl von Datentransformationen auszuführen ist (z. B. keine Datentransformation, Swizzle, Broadcast).
  • Im Fall eines Klasse-A-Befehltemplates mit Speicherzugriff 1120 wird das Alphafeld 1152 als ein Räumungshinweisfeld 1152B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise zu verwenden ist (in 11, werden temporal 1152B.1 und nicht temporal 1152B.2 jeweils für das Befehlstemplate, temporal mit Speicherzugriff 1125, und das Befehlstemplate, nicht temporal mit Speicherzugriff 1130, spezifiziert), während das Betafeld 1154 als ein Datenmanipulationsfeld 1154C interpretiert wird, dessen Inhalt unterscheidet, welche einer Anzahl von Datenmanipulationsoperationen (auch als Primitive bekannt) auszuführen ist (z. B. keine Manipulation; Broadcast; Aufwärtsumwandlung einer Quelle und Abwärtsumwandlung eines Ziels). Die Befehlstemplates mit Speicherzugriff 1120 umfassen das Skalierungsfeld 1160 und optional das Verschiebungsfeld 1162A oder das Verschiebungsskalierungsfeld 1162B.
  • Vektorspeicherbefehle führen Vektorladen aus dem und Vektorspeichern in den Speicher mit Umwandlungsunterstützung durch. Wie bei regulären Vektorbefehlen übertragen Vektorspeicherbefehle Daten von dem/in den Speicher auf eine datenelementweise Art, wobei die Elemente, die tatsächlich übertragen werden, durch die Inhalte der Vektormaske, die als die Schreibmaske ausgewählt wird, diktiert werden.
  • Befehlstemplates mit Speicherzugriff - Temporal
  • Temporale Daten sind Daten, die wahrscheinlich zeitnah genug wiederverwendet werden, um von Caching zu profitieren. Dies ist jedoch ein Hinweis und verschiedene Prozessoren können ihn auf verschiedene Weisen, einschließlich vollständigen Ignorierens des Hinweises, implementieren.
  • Befehlstemplates mit Speicherzugriff - Nichttemporal
  • Nichttemporale Daten sind Daten, die wahrscheinlich nicht zeitnah genug wiederverwendet werden, um von Caching in dem Ist-Level-Cache zu profitieren, und sollten Priorität zum Räumen erhalten. Dies ist jedoch ein Hinweis und verschiedene Prozessoren können ihn auf verschiedene Weisen, einschließlich vollständigen Ignorierens des Hinweises, implementieren.
  • Befehlstemplates der Klasse B
  • Im Fall der Klasse-B-Befehlstemplates wird das Alphafeld 1152 als ein Schreibmaskensteuer-(Z)-Feld 1152C interpretiert, dessen Inhalt unterscheidet, ob die durch das Schreibmaskenfeld 1170 gesteuerte Schreibmaskierung eine Zusammenlegung oder eine Nullung sein sollte.
  • Im Fall der Klasse-B-Befehlstemplates ohne Speicherzugriff 1105 wird ein Teil des Betafelds 1154 als ein RL-Feld 1157A interpretiert, dessen Inhalt unterscheidet, welche der verschiedenen Ergänzungsoperationstypen auszuführen sind (z. B. sind Runden 1157A.1 und Vektorlänge (VSIZE) 1157A.2 jeweils für das Befehlstemplate für eine Schreibmaskensteuer-Partialrundungssteueroperation ohne Speicherzugriff 1112 und das Befehlstemplate für eine Schreibmaskensteuer-VSIZE-Typoperation ohne Speicherzugriff 1117 spezifiziert), während der Rest des Betafelds 1154 unterscheidet, welche der Operationen des spezifizierten Typs durchzuführen sind. In den Befehlstemplates ohne Speicherzugriff 1105 sind das Skalierungsfeld 1160, das Verschiebungsfeld 1162A und das Verschiebungsskalierungsfeld 1162B nicht vorhanden.
  • In dem Befehlstemplate für eine Schreibmaskensteuer-Partialrundungssteueroperation ohne Speicherzugriff 1110 wird der Rest des Betafelds 1154 als ein Rundungsoperationsfeld 1159A interpretiert und ist das Ausnahmeereignisberichten deaktiviert (ein gegebener Befehl meldet keine Art von Gleitkomma-Ausnahme-Flag und löst keinen Gleitkomma-Ausnahme-Handler aus).
  • Rundungsoperationssteuerfeld 1159A - ebenso wie das Rundungsoperationssteuerfeld 1158 unterscheidet sein Inhalt, welche einer Gruppe von Rundungsoperationen durchzuführen ist (z. B. Aufrunden, Abrunden, Runden zu Null und Runden zum Nächsten). Dementsprechend ermöglicht das Rundungsoperationssteuerfeld 1159A das Verändern des Rundungsmodus auf einer Basis je Befehl. In einer Ausführungsform der Erfindung, bei der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi beinhaltet, überschreibt der Inhalt des Rundungsoperationssteuerfelds 1150 diesen Registerwert.
  • In dem Befehlstemplate für eine Schreibmaskensteuer-VSIZE-Typoperation ohne Speicherzugriff 1117 wird der Rest des Betafelds 1154 als ein Vektorlängenfeld 1159B interpretiert, dessen Inhalt unterscheidet, an welcher einer Anzahl von Datenvektorlängen auszuführen ist (z. B. 128, 256 oder 512 Byte).
  • Im Fall eines Klasse-B-Befehlstemplates mit Speicherzugriff 1120 wird ein Teil des Betafelds 1154 als ein Broadcast-Feld 1157B interpretiert, dessen Inhalt unterscheidet, ob die Broadcast-Typ-Datenmanipulationsoperation durchzuführen ist oder nicht, während der Rest des Betafelds 1154 als das Vektorlängenfeld 1159B interpretiert wird. Die Befehlstemplates mit Speicherzugriff 1120 umfassen das Skalierungsfeld 1160 und optional das Verschiebungsfeld 1162A oder das Verschiebungsskalierungsfeld 1162B.
  • Mit Bezug auf das allgemeine vektorfreundliche Befehlsformat 1100 ist ein Voll-Opcode-Feld 1174 einschließlich des Formatfelds 1140, des Basisoperationsfelds 1142 und des Datenelementbreitenfelds 1164 gezeigt. Während eine Ausführungsform gezeigt ist, bei der das Voll-Opcode-Feld 1174 alle dieser Felder beinhaltet, beinhaltet das Voll-Opcode-Feld 1174 in Ausführungsformen, die nicht alle von ihnen unterstützen, weniger als alle dieser Felder. Das Voll-Opcode-Feld 1174 stellt den Operationscode (Opcode) bereit.
  • Das Ergänzungsoperationsfeld 1150, das Datenelementbreitenfeld 1164 und das Schreibmaskenfeld 1170 ermöglichen, dass diese Merkmale auf einer Basis je Befehl in dem allgemeinen vektorfreundlichen Befehlsformat spezifiziert werden.
  • Die Kombination aus Schreibmaskenfeld und Datenelementbreitenfeld erschafft insofern typisierte Befehle, als dass ermöglicht wird, dass die Maske basierend auf verschiedenen Datenelementbreiten angewandt wird.
  • Die verschiedenen Befehlstemplates, die innerhalb Klasse A und Klasse B gefunden werden, sind in verschiedenen Situationen vorteilhaft. In manchen Ausführungsformen der Erfindung können unterschiedliche Prozessoren oder unterschiedliche Kerne innerhalb eines Prozessors nur Klasse A, nur Klasse B oder beide Klassen unterstützen. Zum Beispiel kann ein Hochleistungs-Allzweck-Außer-Reihenfolge-Kern, der für Allzweckberechnung vorgesehen ist, nur Klasse B unterstützen, kann ein Kern, der primär für Grafik- und/oder wissenschaftliche (Durchsatz-)Berechnung gedacht ist, nur Klasse A unterstützen, und kann ein Kern, der für beides gedacht ist, beides unterstützen (natürlich liegt ein Kern, der eine Mischung aus Templates und Befehlen von beiden Klassen, aber nicht alle Templates und Befehle von beiden Klassen aufweist, innerhalb des Geltungsbereichs der Erfindung). Außerdem kann ein einzelner Prozessor mehrere Kerne beinhalten, von denen alle die gleiche Klasse unterstützen oder bei denen unterschiedliche Kerne eine unterschiedliche Klasse unterstützen. Beispielsweise kann in einem Prozessor mit separaten Grafik- und Allzweckkernen einer der Grafikkerne, der primär für Grafik- und/oder wissenschaftliche Berechnung gedacht ist, nur Klasse A unterstützen, während einer oder mehrere der Allzweckkerne für Allzweck-Berechnung gedachte Hochleistungs-Allzweckkerne mit Außer-Reihenfolge-Ausführung und Registerumbenennung sein können, die nur Klasse B unterstützen. Ein anderer Prozessor, der keinen separaten Grafikkern aufweist, kann einen oder mehrere Allzweck-In-Reihenfolge- oder -Außer-Reihenfolge-Kerne aufweisen, die sowohl Klasse A als auch Klasse B unterstützen. Natürlich können Merkmale aus einer Klasse auch in der anderen Klasse in unterschiedlichen Ausführungsformen implementiert sein. Programme, die in einer höheren Sprache geschrieben sind, würden in eine Vielzahl unterschiedlicher ausführbarer Formen gelegt werden (z. B. just-in-time-kompiliert oder statisch kompiliert), beinhaltend: 1) eine Form lediglich mit Befehlen der Klasse(n), die durch den Zielprozessor zur Ausführung unterstützt wird/werden; oder 2) eine Form mit alternativen Routinen, die unter Verwendung verschiedener Kombinationen der Befehle aller Klassen geschrieben sind und einen Steuerflusscode aufweisen, der die auszuführenden Routinen basierend auf den Befehlen, die von dem Prozessor, der gerade den Code ausführt, unterstützt werden, auswählt.
  • Beispielhaftes spezielles vektorfreundliches Befehlsformat
  • 13 ist ein Blockdiagramm, das ein beispielhaftes spezielles vektorfreundliches Befehlsformat gemäß Ausführungsformen veranschaulicht. 13 zeigt ein spezielles vektorfreundliches Befehlsformat 1300, das in dem Sinne speziell ist, dass es den Ort, die Größe, die Interpretation und Reihenfolge von Feldern sowie Werten für manche dieser Felder spezifiziert. Das spezielle vektorfreundliche Befehlsformat 1300 kann verwendet werden, um den x86-Befehlssatz zu erweitern, und dementsprechend sind manche der Felder jenen, die in dem existierenden x86-Befehlssatz und einer Erweiterung davon (z. B. AVX) verwendet werden, ähnlich oder die gleichen wie diese. Dieses Format bleibt konsistent mit dem Präfixcodierungsfeld, Real-Opcode-Byte-Feld, MOD-R/M-Feld, SIB-Feld, Verschiebungsfeld und den Unmittelbarfeldern des existierenden x86-Befehlssatzes mit Erweiterungen. Die Felder aus 11, in welche die Felder aus 13 abgebildet werden, sind dargestellt.
  • Es versteht sich, dass, obwohl Ausführungsformen der Erfindung zu Veranschaulichungszwecken unter Bezugnahme auf das spezielle vektorfreundliche Befehlsformat 1300 im Zusammenhang mit dem allgemeinen vektorfreundlichen Befehlsformat 1100 beschrieben sind, die Erfindung nicht auf das spezielle vektorfreundliche Befehlsformat 1300 beschränkt ist, außer wo dies beansprucht wird. Zum Beispiel beabsichtigt das allgemeine vektorfreundliche Befehlsformat 1100 eine Vielzahl möglicher Größen für die verschiedenen Felder, während das spezielle vektorfreundliche Befehlsformat 1300 als Felder spezieller Größen aufweisend gezeigt ist. Als ein spezielles Beispiel ist die Erfindung, obwohl das Datenelementbreitenfeld 1164 bei dem speziellen vektorfreundlichen Befehlsformat 1300 als ein Ein-Bit-Feld veranschaulicht ist, nicht derart beschränkt (das heißt, das allgemeine vektorfreundliche Befehlsformat 1100 beabsichtigt andere Größen des Datenelementbreitenfelds 1164).
  • Das allgemeine vektorfreundliche Befehlsformat 1100 umfasst die folgenden Felder, die nachstehend in der in Figure 13 dargestellten Reihenfolge aufgeführt sind.
  • EVEX-Präfix (Bytes 0-3) 1302 - ist in einer Vier-Bit-Form codiert.
  • Formatfeld 1140 (EVEX-Byte 0, Bits [7:0]) - das erste Byte (EVEX-Byte 0) ist das Formatfeld 1140 und es beinhaltet 0×62 (der eindeutige Wert, der in einer Ausführungsform der Erfindung zum Unterscheiden des vektorfreundlichen Befehlsformats verwendet wird).
  • Die zweiten bis vierten Bytes (EVEX-Bytes 1-3) beinhalten eine Anzahl an Bitfeldern, die eine spezielle Fähigkeit bereitstellen.
  • REX-Feld 1305 (EVEX-Byte 1, Bits [7-5]) - besteht aus einem EVEX.R-Bitfeld (EVEX-Byte 1, Bit [7] - R), EVEX.X-Bitfeld (EVEX-Byte 1, Bit [6] - X), und 1157BEX-Byte 1, Bit [5] - B). Die EVEX.R-, EVEX.X- und EVEX.B-Bitfelder stellen die gleiche Funktionalität wie die entsprechenden VEX-Bitfelder bereit und sind unter Verwendung einer 1s-Komplementform codiert, d. h. ZMM0 ist als 1111B codiert, ZMM15 ist als 0000B codiert. Andere Felder der Befehle codieren die unteren drei Bits der Registerindizes wie in der Technik bekannt (rrr, xxx und bbb), so dass Rrrr, Xxxx und Bbbb durch Hinzufügen von EVEX.R, EVEX.X und EVEX.B gebildet werden können.
  • REX'-Feld 1110 - dies ist der erste Teil des REX'-Felds 1110 und ist das EVEX.R'-Bitfeld (EVEX-Byte 1, Bit [4] - R'), das verwendet wird, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Register-Satzes zu codieren. In einer Ausführungsform der Erfindung wird dieses Bit zusammen mit anderen, wie nachstehend angegeben, in bitinvertiertem Format zum Unterscheiden (in dem bekannten x86-32-Bit-Modus) von dem BOUND-Befehl, dessen reales Opcode-Byte 62 ist, gespeichert, akzeptiert aber im MOD R/M-Feld (nachstehend beschrieben) nicht den Wert 11 im MOD-Feld; alternative Ausführungsformen der Erfindung speichern dieses und die anderen nachstehend angezeigten Bits nicht in dem invertierten Format. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten wird R'Rrrr durch Kombinieren von EVEX.R', EVEX.R und der anderen RRR von anderen Feldern gebildet.
  • Opcode-Map-Feld 1315 (EVEX-Byte 1, Bits [3:0] - mmmm) - sein Inhalt codiert ein impliziertes führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelementbreitenfeld 1164 (EVEX-Byte 2, Bit [7] - W) - wird durch die Notation EVEX.W repräsentiert. EVEX.W wird verwendet, um die Granularität (Größe) des Datentyps (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente) zu definieren.
  • EVEX.vvvv 1320 (EVEX-Byte 2, Bits [6:3]-vvvv) - die Rolle von EVEX.vvvv kann das Folgende beinhalten: 1) EVEX.vvvv codiert den ersten Quellenregisteroperanden, der in invertierter (1s-Komplement-)Form spezifiziert ist und für Befehle mit 2 oder mehr Quelloperanden gültig ist; 2) EVEX.vvvv codiert den Zielregisteroperanden, der für bestimmte Vektorverschiebungen in 1s-Komplementform spezifiziert ist; oder 3) EVEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Dementsprechend codiert das EVEX.vvvv-Feld 1320 die 4 Bits niedriger Ordnung des ersten Quellenregisterspezifikationssymbols, die in invertierter (ls-Komplement-)Form gespeichert werden. In Abhängigkeit von dem Befehl wird ein zusätzliches verschiedenes EVEX-Bitfeld verwendet, um die Spezifikationssymbolgröße auf 32 Register zu erweitern.
  • EVEX.U 1168 Klassenfeld (EVEX-Byte 2, Bit [2]-U) - falls EVEX.U = 0, gibt es Klasse A oder EVEX.U0 an; falls EVEX.U = 1, gibt es Klasse B oder EVEX.U1 an.
  • Präfixcodierungsfeld 1325 (EVEX-Byte 2, Bits [1:0]-pp) - stellt zusätzliche Bits für das Basisoperationsfeld bereit. Zusätzlich zu dem Bereitstellen einer Unterstützung für die veralteten SSE-Befehle in dem EVEX-Präfix-Format weist dies auch den Vorteil des Kompaktierens des SIMD-Präfixes auf (statt ein Byte zum Ausdrücken des SIMD-Präfixes zu benötigen, benötigt das EVEX-Präfix nur 2 Bit). In einer Ausführungsform werden zum Unterstützen veralteter SSE-Befehle, die ein SIMD-Präfix (66H, F2H, F3H) sowohl im veralteten Format als auch im EVEX-Präfixformat verwenden, diese veralteten SIMD-Präfixe in das SIMD-Präfix-Codierungsfeld codiert; und zur Laufzeit werden sie in das veraltete SIMD-Präfix expandiert, bevor sie dem PLA des Decodierers bereitgestellt werden (so kann der PLA sowohl das veraltete als auch das EVEX-Format dieser veralteten Befehle ohne Modifikation ausführen). Obwohl neuere Befehle den Inhalt des EVEX-Präfixcodierungsfelds direkt als eine Opcode-Erweiterung verwenden könnten, erweitern bestimmte Ausführungsformen auf eine ähnliche Weise für Konsistenz, erlauben aber, dass unterschiedliche Bedeutungen durch diese veralteten SIMD-Präfixe spezifiziert werden. Eine alternative Ausführungsform kann den PLA umgestalten, um die 2-Bit-SIMD-Präfixcodierungen zu unterstützen, und benötigt dementsprechend die Erweiterung nicht.
  • Alphafeld 1152 (EVEX-Byte 3, Bit [7] - EH; auch bekannt als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.-Schreibmaskensteuerung und EVEX.N; ebenfalls mit α veranschaulicht) - wie zuvor beschrieben, ist dieses Feld kontextspezifisch.
  • Betafeld 1154 (EVEX-Byte 3, Bits [6: 4]-SSS, auch bekannt als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB; auch mit βββ veranschaulicht) - wie zuvor beschrieben, ist dieses Feld kontextspezifisch.
  • REX'-Feld 1110 - dies ist der Rest des REX'-Felds und ist das EVEX.V'-Bitfeld (EVEX-Byte 3, Bit [3] - V'), das verwendet werden kann, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Register-Satzes zu codieren. Dieses Bit wird in bitinvertiertem Format gespeichert. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten wird V'VVVV durch Kombinieren von EVEX.V', EVEX.vvvv gebildet.
  • Schreibmaskenfeld 1170 (EVEX-Byte 3, Bits [2:0]-kkk) - sein Inhalt spezifiziert den Index eines Registers in den Schreibmaskenregistern, wie zuvor beschrieben. In einer Ausführungsform der Erfindung weist der spezielle Wert EVEX.kkk=000 ein spezielles Verhalten auf, das impliziert, dass keine Schreibmaske für den bestimmten Befehl verwendet wird (dies kann in einer Vielzahl von Arten implementiert werden, einschließlich der Verwendung einer Schreibmaske, die zu allen Einsen festverdrahtet ist, oder einer Hardware, die die Maskierungshardware umgeht).
  • Real-Opcode-Feld 1330 (Byte 4) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • MOD-R/M-Feld 1340 (Byte 5) beinhaltet MOD-Feld 1342, Reg-Feld 1344 und R/M-Feld 1346. Wie zuvor beschrieben, unterscheidet der Inhalt des MOD-Felds 1342 zwischen Operationen mit Speicherzugriff und Operationen ohne Speicherzugriff. Die Rolle des Reg-Felds 1344 kann auf zwei Situationen zusammengefasst werden: Codieren von entweder dem Zielregisteroperanden oder einem Quellenregisteroperanden oder als eine Opcode-Erweiterung behandelt werden und nicht zum Codieren irgendeines Befehlsoperanden verwendet werden. Die Rolle von R/M-Feld 1346 kann das Folgende beinhalten: Codieren des Befehlsoperanden, der eine Speicheradresse referenziert, oder Codieren von entweder dem Zielregisteroperanden oder einem Quellenregisteroperanden.
  • Byte für Skalierung, Index, Basis (SIB) (Byte 6) - Wie zuvor beschrieben, wird der Inhalt des Skalierungsfelds 1150 für eine Speicheradressenerzeugung verwendet. SIB.xxx 1354 und SIB.bbb 1356 - auf die Inhalte dieser Felder wurde zuvor mit Bezug auf die Registerindizes Xxxx und Bbbb Bezug genommen.
  • Verschiebungsfeld 1162A (Bytes 7-10) - wenn MOD-Feld 1342 10 enthält, sind Bytes 7-10 das Verschiebungsfeld 1162A, und es funktioniert genauso wie die veraltete 32-Bit-Verschiebung (disp32) und arbeitet bei Byte-Granularität.
  • Verschiebungsfaktorfeld 1162B (Byte 7) - wenn das MOD-Feld 1342 01 enthält, ist Byte 7 das Verschiebungsfaktorfeld 1162B. Der Ort dieses Felds ist der gleiche wie jener des veralteten x86-Befehlssatz-8-Bit-Verschiebung (disp8), die bei Byte-Granularität arbeitet. Da disp8 vorzeichenerweitert ist, kann es nur zwischen -128 und 127 Bytes Offsets adressieren; in Bezug auf 64-Byte-Cache-Zeilen verwendet disp8 8 Bit, die auf nur vier wirklich nützliche Werte eingestellt werden können -128, -64, 0 und 64; da oft ein größerer Bereich benötigt wird, wird disp32 verwendet; disp32 benötigt jedoch 4 Bytes. Im Gegensatz zu disp8 und disp32 ist das Verschiebungsfaktorfeld 1162B eine Neuinterpretation von disp8; bei Verwendung von Verschiebungsfaktorfeld 1162B wird die tatsächliche Verschiebung bestimmt durch den Inhalt des Verschiebungsfaktorfelds multipliziert mit der Größe des Speicheroperandenzugriffs (N). Diese Art von Verschiebung wird als disp8*N bezeichnet. Dies reduziert die durchschnittliche Befehlslänge (es wird ein einzelnes Byte für die Verschiebung verwendet, aber mit einem viel größeren Bereich). Eine solche komprimierte Verschiebung basiert auf der Annahme, dass die effektive Verschiebung ein Vielfaches der Granularität des Speicherzugriffs ist, und daher müssen die redundanten Bits niedriger Ordnung des Adressenversatzes nicht codiert zu werden. Mit anderen Worten ersetzt das Verschiebungsfaktorfeld 1162B die veraltete x86-Befehlssatz-8-Bit-Verschiebung. Somit ist das Verschiebungsfaktorfeld 1162B auf die gleiche Weise wie eine x86-Befehlssatz-8-Bit-Verschiebung codiert (also keine Änderungen in den ModRM/SIB-Codierungsregeln), mit der einzigen Ausnahme, dass disp8 zu disp8*N überladen wird. Mit anderen Worten gibt es keine Änderungen in den Codierungsregeln oder Codierungslängen, sondern nur in der Interpretation des Verschiebungswertes durch Hardware (die die Verschiebung mit der Größe des Speicheroperanden skalieren muss, um einen byteweisen Adressenversatz zu erhalten). Unmittelbarfeld 1172 arbeitet wie zuvor beschrieben.
  • Voll-Opcode-Feld
  • 14 ist ein Blockdiagramm, das die Felder des speziellen vektorfreundlichen Befehlsformats 1300, die das Voll-Opcode-Feld 1174 bilden, gemäß einer Ausführungsform veranschaulicht. Speziell beinhaltet das Voll-Opcode-Feld 1174 das Formatfeld 1140, das Basisoperationsfeld 1142 und das Datenelementbreiten-(W)-Feld 1164. Das Basisoperationsfeld 1142 beinhaltet das Präfixcodierungsfeld 1325, das Opcode-Map-Feld 1315 und das Real-Opcode-Feld 1330.
  • Registerindexfeld
  • 15 ist ein Blockdiagramm, das die Felder des speziellen vektorfreundlichen Befehlsformats 1300, die das Registerindexfeld 1144 bilden, gemäß einer Ausführungsform veranschaulicht. Speziell beinhaltet das Registerindexfeld 1144 das REX-Feld 1305. das REX'-Feld 1310, das M.DR/M.reg-Feld 1344, das MODR/M.r/m-Feld 1346, das VVVV-Feld 1320, das xxx-Feld 1354 und das bbb-Feld 1356.
  • Ergänzungsoperationsfeld
  • 16 ist ein Blockdiagramm, das die Felder des speziellen vektorfreundlichen Befehlsformats 1300, die das Ergänzungsoperationsfeld 1650 bilden, gemäß einer Ausführungsform veranschaulicht. Wenn das Klasse-(U)-Feld 1668 0 enthält, bedeutet es EVEX.U0 (Klasse A 1168A); wenn es 1 enthält, bedeutet es EVEX.U1 (Klasse B 1168B). Wenn U=0 ist und das MOD-Feld 1642 16 enthält (eine Operation ohne Speicherzugriff bedeutend), wird das Alphafeld 1652 (EVEX-Byte 3, Bit [7] - EH) als das RS-Feld 1652A interpretiert. Wenn das RS-Feld 1652A eine 1 enthält (Runden 1652A.1), wird das Betafeld 1654 (EVEX-Byte 3, Bits [6:4] - SSS) als das Rundungssteuerfeld 1654A interpretiert. Das Rundungssteuerfeld 1654A beinhaltet ein Ein-Bit-SAE-Feld 1656 und ein Zwei-Bit-Rundungsoperationsfeld 1658. Wenn das RS-Feld 1652A eine 0 enthält (Datentransformation 1652A.2), wird das Betafeld 1654 (EVEX-Byte 3, Bits [6:4]-SSS) als ein Drei-Bit-Datentransformationsfeld 1654B interpretiert. Wenn U=0 ist und das MOD-Feld 1342 00, 01 oder 10 enthält (eine Operation mit Speicherzugriff bedeutend), wird das Alphafeld 1652 (EVEX-Byte 3, Bit [7] - EH) als das Räumungshinweis-(EH, Eviction Hint)-Feld 1652B interpretiert und wird das Betafeld 1654 (EVEX-Byte 3, Bits [6:4]-SSS) als ein Drei-Bit-Datenmanipulationsfeld 1654C interpretiert.
  • Wenn U=1 ist, wird das Alphafeld 1652 (EVEX-Byte 3, Bit [7] - EH) als das Schreibmaskensteuer-(Z)-Feld 1652C interpretiert. Wenn U=1 ist und das MOD-Feld 1342 16 enthält (eine Operation ohne Speicherzugriff bedeutend), wird ein Teil des Betafelds 1654 (EVEX-Byte 3, bit [4]- So) als das RL-Feld 1657A interpretiert; wenn es eine 1 enthält (Runden 1657A.1), wird der Rest des Betafelds 1654 (EVEX-Byte 3, Bit [6-5]- S2-1) als das Rundungsoperationsfeld 1659A interpretiert, während, wenn das RL-Feld 1657A eine 0 enthält (VSIZE 1657.A2), der Rest des Betafelds 1654 (EVEX-Byte 3, Bit [6-5]- S2-1) als das Vektorlängenfeld 1659B (EVEX-Byte 3, Bit [6-5]- L1-0) interpretiert wird. Wenn U=1 ist und das MOD-Feld 1342 00, 01 oder 10 enthält (eine Operation mit Speicherzugriff bedeutend), wird das Beta-Feld 1654 (EVEX-Byte 3, Bits [6: 4] - SSS) als das Vektorlängenfeld 1659B (EVEX-Byte 3, Bit [6-5] - L1-0) und das Broadcast-Feld 1657B (EVEX-Byte 3, Bit [4] - B) interpretiert.
  • Beispielhafte Registerarchitektur
  • 17 ist ein Blockdiagramm einer Registerarchitektur 1700 gemäß einer Ausführungsform. In der veranschaulichten Ausführungsform gibt es 32 Vektorregister 1710, die 512 Bit breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die 256 Bit niedriger Ordnung der unteren 16 zmm-Register werden auf Register ymm0-16 überlagert. Die 128 Bit niedriger Ordnung der unteren 16 zmm-Register (die 128 Bit niedriger Ordnung der ymm-Register) werden auf Register xmm0-15 überlagert. Das spezielle vektorfreundliche Befehlsformat 1300 arbeitet auf diesen überlagerten Registerdateien, wie in den Tabellen unten veranschaulicht ist.
    Anpassbare Vektorlänge Klasse Operationen Register
    Befehlstemplates, die das Vektorlängenfeld 1159B nicht umfassen A 1110, 1115, 1125, 1130 zmm-Register (die Vektorlänge beträgt 64 Byte)
    (11; U=0)
    B 1112 zmm-Register (die Vektorlänge beträgt 64 Byte)
    (12; U=1)
    Befehlstemplates, die das Vektorlängenfeld 1159B umfassen B 1117, 1127 zmm-, ymm- oder xmm-Register (die Vektorlänge beträgt 64 Byte, 32 Byte oder 16 Byte) abhängig von dem Vektorlängenfeld 1159B
    (12; U=1)
  • Mit anderen Worten wählt das Vektorlängenfeld 1159B zwischen einer maximalen Länge und einer oder mehreren anderen kürzeren Längen, wobei jede solche kürzere Länge die Hälfte der Länge der vorhergehenden Länge ist, und Befehlstemplates ohne das Vektorlängenfeld 1159B arbeiten auf der maximalen Vektorlänge. Ferner arbeiten die Klasse-B-Befehlstemplates des speziellen vektorfreundlichen Befehlsformats 1300 in einer Ausführungsform an gepackten oder skalaren Gleitkommadaten mit einfacher/doppelter Genauigkeit und gepackten oder skalaren Ganzzahldaten. Skalare Operationen sind Operationen, die an der Datenelementposition niedrigster Ordnung in einem zmm-/ymm-/xmm-Register ausgeführt werden; die Datenelementpositionen höherer Ordnung bleiben entweder gleich wie vor dem Befehl oder werden auf Null gesetzt, abhängig von der Ausführungsform.
  • Schreibmaskenregister 1715 - in der veranschaulichten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7), jeweils mit einer Größe von 64 Bit. In einer alternativen Ausführungsform weisen die Schreibmaskenregister 1715 eine Größe von 16 Bit auf. Wie zuvor beschrieben, kann in einer Ausführungsform der Erfindung das Vektormaskenregister k0 nicht als eine Schreibmaske verwendet werden; wenn die Codierung, die normalerweise k0 angeben würde, für eine Schreibmaske verwendet wird, wählt sie eine festverdrahtete Schreibmaske von 0xFFFF, wobei Schreibmaskierung für diesen Befehl wirksam deaktiviert wird.
  • Mehrzweckregister 1725 - bei der veranschaulichten Ausführungsform gibt es sechzehn 64-Bit-Mehrzweckregister, die zusammen mit den existierenden x86-Adressierungsmodi zum Adressieren von Speicheroperanden verwendet werden. Diese Register werden durch die Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Die Skalare Gleitkommastapel-Registerdatei (x87-Stapel) 1745, auf der die MMX-gepackte Integer-Flat-Registerdatei 1750 aliasiert ist - in der dargestellten Ausführungsform ist der x87-Stapel ein Stapel mit acht Elementen, der zur Durchführung von skalaren Gleitkomma-Operationen auf 32-/64-/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung genutzt wird; während die MMX-Register dafür verwendet werden, Operationen an gepackten 64-Bit-Ganzzahldaten durchzuführen sowie Operanden für manche Operationen zu halten, die zwischen den MMX- und XMM-Registern durchgeführt werden.
  • Alternative Ausführungsformen der Erfindung können breitere oder schmalere Register verwenden. Außerdem können alternative Ausführungsformen der Erfindung mehr, weniger oder verschiedene Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf verschiedene Arten, für verschiedene Zwecke und in unterschiedlichen Prozessoren implementiert werden. Beispielsweise können Implementierungen solcher Kerne beinhalten: 1) einen Allzweck-In-Reihenfolge-Kern, der für Allzweckberechnung gedacht ist; 2) einen Hochleistungs-Allzweck-Außer-Reihenfolge-Kern, der für Allzweckberechnung gedacht ist; 3) einen Spezial-Kern, der primär für Grafik- und/oder wissenschaftliche (Durchsatz-)Berechnung gedacht ist. Implementierungen unterschiedlicher Prozessoren können beinhalten: 1) eine CPU, die einen oder mehrere für Allzweckberechnung gedachte Allzweck-In-Reihenfolge-Kerne und/oder einen oder mehrere für Allzweckberechnung gedachte Allzweck-Außer-Reihenfolge-Kerne umfasst; und 2) einen Koprozessor, der einen oder mehrere Spezial-Kerne aufweist, die primär für Grafik und/oder Wissenschaft (Durchsatz) gedacht sind. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die beinhalten können: 1) den Koprozessor auf einem von der CPU getrennten Chip; 2) den Koprozessor auf einem separaten Die in dem gleichen Gehäuse wie eine CPU; 3) den Koprozessor auf dem gleichen Die wie eine CPU (in diesem Fall wird ein solcher Koprozessor manchmal als Spezial-Logik, wie etwa als integrierte Grafik- und/oder wissenschaftliche (Durchsatz-)Logik, oder als Spezial-Kerne bezeichnet); und 4) ein System auf einem Chip, das auf dem gleichen Die die beschriebene CPU (manchmal als der bzw. die Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den vorstehend beschriebenen Koprozessor und zusätzliche Funktionalitäten umfassen kann. Als Nächstes werden beispielhafte Kernarchitekturen beschrieben, gefolgt von Beschreibungen beispielhafter Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen
  • In-Reihenfolge- und Außer-Reihenfolge-Kern-Blockdiagramm
  • 18 ist ein Blockdiagramm, das sowohl eine beispielhafte In-Reihenfolge-Pipeline als auch eine beispielhafte Registerumbenennung-Außer-Reihenfolge-Ausgabe-/Ausführung-Pipeline gemäß Ausführungsformen veranschaulicht. 19 ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines In-Reihenfolge-Architekturkerns als auch einen beispielhaften Registerumbenennung-Außer-Reihenfolge-Ausgabe-/Ausführungsarchitekturkern, in einen Prozessor aufzunehmend, gemäß Ausführungsformen veranschaulicht. Die Kästchen mit durchgezogener Linie in 18 und 19 stellen die In-Reihenfolge-Pipeline und den In-Reihenfolge-Kern dar, während die optionale Hinzunahme der gestrichelten Kästchen die Registerumbenennung-Außer-Reihenfolge-Ausgabe-/Ausführung-Pipeline und den -Kern darstellt. Unter der Annahme, dass der In-Reihenfolge-Aspekt ein Teilsatz des Außer-Reihenfolge-Aspekts ist, wird der Außer-Reihenfolge-Aspekt beschrieben.
  • In 18 umfasst eine Prozessorpipeline 1800 eine Abrufstufe 1802, eine Längendecodierstufe 1804, eine Decodierstufe 1806, eine Zuordnungsstufe 1808, eine Umbenennungsstufe 1810, eine Ablaufsteuerungs-(Scheduling-; auch bekannt als Verteilungs- oder Ausgabe-)Stufe 1812, eine Registerlese-/Speicherlesestufe 1814, eine Ausführungsstufe 1816, eine Zurückschreibe-/Speicherschreibestufe 1818, eine Ausnahmenbehandlungsstufe 1822 und eine Commit-Stufe 1824.
  • 19 zeigt den Prozessorkern 1890 eine mit einer Ausführungs-Engine-Einheit 1850 gekoppelte Frontend-Einheit 1830 umfassend, und wobei beide mit einer Speichereinheit 1870 gekoppelt sind. Der Kern 1890 kann ein RISC-Kern (RISC: Reduced Instruction Set Computing -Berechnung mit reduziertem Befehlssatz), ein CISC-Kern (CISC: Complex Instruction Set Computing - Berechnung mit komplexem Befehlssatz), ein VLIW-Kern (VLIW: Very Long Instruction Word - sehr langes Befehlswort) oder ein hybrider oder alternativer Kerntyp sein. Als noch eine andere Option kann der Kern 1890 ein Spezialkern, wie etwa beispielsweise ein Netz- oder Kommunikationskern, eine Kompressions-Engine, ein Koprozessorkern, ein GPGPU-Kern (GPGPU: General Purpose Computing Graphics Processing Unit - Allzweck-Berechnung-Grafikverarbeitung-Einheit), Grafikkern oder dergleichen sein.
  • Die Frontend-Einheit 1830 beinhaltet eine Zweigprädiktionseinheit 1832, die mit einer Befehls-Cacheeinheit 1834 gekoppelt ist, die mit einem Befehls-TLB (Translation Lookaside Buffer) 1836 gekoppelt ist, der mit einer Befehlsabrufeinheit 1838 gekoppelt ist, die mit einer Decodiereinheit 1840 gekoppelt ist. Die Decodiereinheit 1840 (oder der Decoder) kann Befehle decodieren und als eine Ausgabe erzeugen: eine(n) oder mehrere Mikrooperationen, Mikrocodeeintragspunkte, Mikrobefehle oder andere Befehle oder andere Steuersignale, die aus den ursprünglichen Befehlen decodiert wurden oder diese anderweitig reflektieren oder anderweitig davon abgeleitet sind. Die Decodiereinheit 1840 kann unter Verwendung zahlreicher verschiedener Mechanismen implementiert werden. Beispiele für geeignete Mechanismen umfassen, sind aber nicht beschränkt auf, Nachschlagetabellen, Hardwareumsetzungen, programmierbare Logikarrays (PLA, Programmable Logic Arrays), Mikrocode-Nur-Lese-Speicher (ROM, Read Only Memories) usw. In einer Ausführungsform umfasst der Kern 1890 einen Mikrocode-ROM oder ein anderes Medium, das Mikrocode für gewisse Makrobefehle speichert (z. B. in Decodiereinheit 1840 oder anderweitig innerhalb der Frontend-Einheit 1830). Die Decodiereinheit 1840 ist mit einer Umbenennungs-/Zuordnungseinheit 1852 in der Ausführungs-Engine-Einheit 1850 gekoppelt.
  • Die Ausführungs-Engine-Einheit 1850 beinhaltet die Umbenennungs-/Zuordnungseinheit 1852, die mit einer Zurückzieheinheit 1854 und einem Satz von einer oder mehreren Planereinheit(en) 1856 gekoppelt ist. Die Planereinheit(en) 1856 repräsentiert/en eine beliebige Anzahl unterschiedlicher Planer, einschließlich Reservierungsstationen, zentralen Instruktionsfensters usw. Die Planereinheit(en) 1856 ist (sind) mit der/den physischen Registerdatei(en) -Einheit(en) 1858 gekoppelt. Jede der physischen Registerdatei(en)-Einheiten 1858 repräsentiert eine oder mehrere physische Registerdateien, von denen verschiedene einen oder mehrere unterschiedliche Datentypen speichern, wie etwa skalare Ganzzahlen, skalare Gleitkommazahlen, gepackte Ganzzahlen, gepackte Gleitkommazahlen, Vektorganzzahlen, Vektorgleitkommazahlen, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. In einer Ausführungsform umfasst die physische Registerdatei(en)-Einheit 1858 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Mehrzweckregister bereitstellen. Die physische(n) Registerdatei(en)-Einheit(en) 1858 wird/werden von der Zurückzieheinheit 1854 überlappt, um verschiedene Wege zu veranschaulichen, wie Registerumbenennung und Außer-Reihenfolge-Ausführung implementiert werden können (z. B. unter Verwendung eines oder mehrerer Neuordnungspuffer und Rückzugregisterdatei(en); Verwendung einer zukünftigen Datei/zukünftiger Dateien, eines Verlaufspuffers/ mehrerer Verlaufspuffer und einer Rückzugregisterdatei/ mehrerer Rückzugregisterdateien; Verwendung einer Registerzuordnungen und eines Registerpools usw.). Die Zurückzieheinheit 1854 und die physische(n) Registerdatei(en)einheit(en) 1858 sind mit dem (den) Ausführungscluster(n) 1860 gekoppelt. Das/die Ausführungscluster 1860 beinhaltet/beinhalten einen Satz einer oder mehrerer Ausführungseinheiten 1862 und einen Satz einer oder mehrerer Speicherzugriffseinheiten 1864. Die Ausführungseinheiten 1862 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und an verschiedenen Typen von Daten (z. B. Skalargleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektorganzahl, Vektorgleitkomma) durchführen. Während manche Ausführungsformen eine Anzahl von Ausführungseinheiten beinhalten können, die für spezielle Funktionen oder Sätze von Funktionen dediziert sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten, die allesamt alle Funktionen durchführen, beinhalten. Die Planereinheit(en) 1856, die physische(n) Registerdatei(en)einheit(en) 1858 und Ausführungscluster 1860 sind als möglicherweise mehrere gezeigt, weil gewisse Ausführungsformen getrennte Pipelines für gewisse Typen von Daten/Operationen erschaffen (z. B. eine Skalarganzzahl-Pipeline, eine Skalargleitkomma-/gepackte Ganzzahl-/ gepackte Gleitkomma-/Vektorganzzahl-/Vektorgleitkomma-Pipeline und/oder eine Speicherzugriff-Pipeline, die jeweils ihre eigene/n Planereinheit, physische Registerdatei(en)einheit und/oder Ausführungscluster aufweisen - und im Fall einer getrennten Speicherzugriff-Pipeline sind gewisse Ausführungsformen implementiert, bei denen nur das Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 1864 aufweist). Es versteht sich auch, dass, wenn getrennte Pipelines verwendet werden, eine oder mehrere dieser Pipelines Außer-Reihenfolge-Ausgabe-/Ausführung und der Rest In-Reihenfolge sein können.
  • Der Satz von Speicherzugriffseinheiten 1864 ist mit der Speichereinheit 1870 gekoppelt, die eine Daten-TLB-Einheit 1872 beinhaltet, die mit einer Datencacheeinheit 1874 gekoppelt ist, die mit einer Level-2-(L2)-Cacheeinheit 1876 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 1864 eine Ladeeinheit, eine Adressenspeichereinheit und eine Datenspeichereinheit beinhalten, wovon jede mit der Daten-TLB-Einheit 1872 in der Speichereinheit 1870 gekoppelt ist. Die Befehlscacheeinheit 1834 ist ferner mit einer Level-2-(L2)-Cacheeinheit 1876 in der Speichereinheit 1870 gekoppelt. Die L2-Cacheeinheit 1876 ist mit einem oder mehreren anderen Leveln eines Caches und schlussendlich mit einem Hauptspeicher verbunden.
  • Beispielsweise kann die beispielhafte Registerumbenennung-Außer-Reihenfolge-Ausgabe-/Ausführung-Kern-Architektur die Pipeline 1800 wie folgt implementieren: 1) der Befehlsabruf 1838 führt die Abruf- und Längendecodierstufen 1802 und 1804 durch; 2) die Decodiereinheit 1840 führt die Decodierstufe 1806 durch; 3) die Umbenennungs-/Zuordnungseinheit 1852 führt die Zuordnungsstufe 1808 und die Umbenennungsstufe 1810 durch; 4) die Ablaufsteuereinheit(en) 1856 führt bzw. führen die Ablaufsteuerungsstufe 1812 durch; 5) die physische(n) Registerdatei(en)einheit(en) 1858 und die Speichereinheit 1870 führen die Registerlese-/Speicherlesestufe 1814 durch; das Ausführungscluster 1860 führt die Ausführungsstufe 1816 durch; 6) die Speichereinheit 1870 und die physische(n) Registerdatei(en)einheit(en) 1858 führen die Zurückschreibe-/Speicherschreibestufe 1818 durch; 7) verschiedene Einheiten können in der Ausnahmenbehandlungsstufe 1822 beteiligt sein und 8) die Zurückzieheinheit 1854 und die physische(n) Registerdatei(en)einheit(en) 1858 führen die Commit-Stufe 1824 durch.
  • Der Kern 1890 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies, Sunnyvale, CA; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) von ARM Holdings, Sunnyvale, CA), einschließlich der hierin beschriebenen Befehle. In einer Ausführungsform beinhaltet der Kern 1890 Logik zum Unterstützen einer Gepackte-Daten-Befehlssatzerweiterung (z. B. AVX1, AVX2), wodurch ermöglicht wird, dass die durch viele Multimediaanwendungen verwendeten Operationen unter Verwendung gepackter Daten durchgeführt werden.
  • Es versteht sich, dass der Kern Multithreading (Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies auf vielfältige Weisen vornehmen kann, einschließlich Zeitscheiben-Multithreading, Simultan-Multithreading (wobei ein einzelner physischer Kern einen logischen Kern für jeden der Threads bereitstellt, die der physische Kern simultan im Multithreading behandelt), oder eine Kombination davon (z. B. Zeitscheiben-Abruf und -Decodierung und simultanes Multithreading danach, wie etwa bei der Hyperthreading-Technologie von Intel®).
  • Während Registerumbenennung in dem Zusammenhang einer Außer-Reihenfolge-Ausführung beschrieben ist, versteht es sich, dass Registerumbenennung in einer In-Reihenfolge-Architektur verwendet werden kann. Während die veranschaulichte Ausführungsform des Prozessors auch getrennte Befehls- und Datencacheeinheiten 1834/1874 und eine geteilte L2-Cacheeinheit 1876 beinhaltet, können alternative Ausführungsformen einen einzelnen internen Cache für sowohl Befehle als auch Daten aufweisen, wie etwa beispielsweise einen internen Level-1-(L1)-Cache oder mehrere Level eines internen Cache. In manchen Ausführungsformen kann das System eine Kombination eines internen Cache und eines externen Cache, der extern bezüglich des Kerns und/oder des Prozessors ist, beinhalten. Alternativ kann der gesamte Cache extern bezüglich des Kerns und/oder des Prozessors sein.
  • Spezielle beispielhafte In-Reihenfolge-Kernarchitektur
  • 20 und 21 veranschaulichen ein Blockdiagramm einer spezifischeren beispielhaften In-Reihenfolge-Kernarchitektur, deren Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne des gleichen Typs und/oder unterschiedlichen Typs) in einem Chip sein würde. Die Logikblöcke kommunizieren durch ein Zwischenverbindungsnetz mit hoher Bandbreite (z. B. ein Ringnetz) mit, in Abhängigkeit von der Anwendung, einer festen Funktionslogik, Speicher-E/A-Schnittstellen und anderer notwendiger E/A-Logik.
  • 20 ist ein Blockdiagramm eines einzelnen Prozessorkerns zusammen mit seiner Verbindung zu dem On-Die-Verbindungsnetz 2002 und mit seinem lokalen Teilsatz des L2-(Level 2)-Cache 2004 gemäß Ausführungsformen. In einer Ausführungsform unterstützt ein Befehlsdecoder 2000 den x86-Befehlssatz mit einer Gepackte-Daten-Befehlssatzerweiterung. Ein L1-Cache 2006 ermöglicht Zugriffe mit geringer Latenz auf Cachespeicher in die Skalar- und Vektoreinheiten. Während in einer Ausführungsform (um die Gestaltung zu vereinfachen) eine Skalareinheit 2008 und eine Vektoreinheit 2010 getrennte Registersätze verwenden (Skalarregister 2012 bzw. Vektorregister 2014) und zwischen ihnen übertragene Daten in einen Speicher geschrieben und dann aus einem Level-1-(L1)-Cache 2006 zurück eingelesen werden, können alternative Ausführungsformen der Erfindung einen anderen Ansatz verwenden (z. B. einen einzelnen Registersatz verwenden oder einen Kommunikationspfad umfassen, der ermöglicht, dass Daten zwischen den zwei Registerdateien übertragen werden, ohne geschrieben und zurückgelesen zu werden).
  • Der lokale Teilsatz des L2-Cache 2004 ist Teil eines globalen L2-Cache, der in getrennte lokale Teilsätze, einer pro Prozessorkern, unterteilt ist. Jeder Prozessorkern weist einen direkten Zugriffspfad auf seinen eigenen lokalen Teilsatz des L2-Cache 2004 auf. Daten, die von einem Prozessorkern gelesen werden, werden in seinem L2-Cache-Teilsatz 2004 gespeichert und auf sie kann schnell parallel zu anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen, zugegriffen werden. Von einem Prozessorkern geschriebene Daten werden in dessen eigenem L2-Cacheteilsatz 2004 gespeichert und werden, wenn nötig, aus anderen Teilsätzen ausgeräumt. Das Ringnetz stellt eine Kohärenz für geteilte Daten sicher. Das Ringnetz ist bidirektional, um zu ermöglichen, dass Agenten wie etwa Prozessorkerne L2-Caches und andere Logikblöcke miteinander innerhalb des Chips kommunizieren. Jeder Ringdatenpfad ist pro Richtung 1012 Bit breit.
  • 21 ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 20 gemäß Ausführungsformen. Figur 21umfasst einen L1-Datencache 2006A als Teil des L1-Cache 2006 sowie mehr Details hinsichtlich der Vektoreinheit 2010 und des Vektorregisters 2014. Speziell ist die Vektoreinheit 2010 eine 16-breite Vektorverarbeitungseinheit (VPU: Vector Processing Unit) (siehe die 16-breite ALU 2028), die eines oder mehr als eines von Ganzzahlbefehlen, Gleitbefehlen mit einfacher Genauigkeit und Gleitbefehlen mit doppelter Genauigkeit ausführt. Die VPU unterstützt Swizzling der Registereingaben mit Swizzle-Einheit 2020, numerisches Umwandeln mit numerischen Umwandlungseinheiten 2022A-B und Replikation mit Replikationseinheit 2024 auf der Speichereingabe. Schreibmaskenregister 2026 ermöglichen eine Vorhersage resultierender Vektorschreibvorgänge.
  • 22 ist ein Blockdiagramm eines Prozessors 2200, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und integrierte Grafik aufweisen kann, gemäß Ausführungsformen. Die Kästchen mit durchgezogener Linie in 22 veranschaulichen einen Prozessor 2200 mit einem einzelnen Kern 2202A, einem Systemagenten 2210, einem Satz einer oder mehrerer Busssteuereinheiten 2216, während die optionale Hinzunahme der gestrichelten Kästchen einen alternativen Prozessor 2200 mit mehreren Kernen 2202A-N, einen Satz einer oder mehrerer integrierter Speichersteuereinheit(en) 2214 in der Systemagenteneinheit 2210 und eine Spezial-Logik 2208 veranschaulicht.
  • Dementsprechend können verschiedene Implementierungen des Prozessors 2200 beinhalten: 1) eine CPU, wobei die Spezial-Logik 2208 integrierte Grafik- und/oder wissenschaftliche (Durchsatz-)Logik ist (die einen oder mehrere Kerne umfassen kann), und wobei die Kerne 2202A-N ein oder mehrere Allzweckkerne sind (z. B. Allzweck-In-Reihenfolge-Kerne, Allzweck-Außer-Reihenfolge-Kerne, eine Kombination der beiden); 2) einen Koprozessor, wobei die Kerne 2202A-N eine große Anzahl von Allzweckkernen sind, primär gedacht für Grafik und/oder Wissenschaftliches (Durchsatz); und 3) einen Koprozessor, wobei die Kerne 2202A-N eine große Anzahl von Allzweck-In-Reihenfolge-Kernen sind. Dementsprechend kann der Prozessor 2200 ein Universalprozessor, ein Koprozessor oder Spezialprozessor sein, wie etwa beispielsweise ein Netz- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, GPGPU (General Purpose Graphics Processing Unit - Allzweck-Berechnung-Grafikverarbeitung-Einheit), ein MIC-Koprozessor (MIC: Many Integrated Core) mit hohem Durchsatz (30 oder mehr Kerne beinhaltend), ein eingebetteter Prozessor oder dergleichen. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 2200 kann ein Teil eines oder mehrerer Substrate, die eine beliebige einer Anzahl von Prozesstechnologien nutzen wie etwa beispielsweise BiCMOS, CMOS oder NMOS, sein und/oder auf solchen implementiert sein.
  • Die Speicherhierarchie beinhaltet ein oder mehrere Level eines Cache innerhalb der Kerne, einen Satz oder einen oder mehrere geteilte Cacheeinheiten 2206 und externen Speicher (nicht dargestellt), der mit dem Satz integrierter Speichersteuereinheiten 2214 gekoppelt ist. Der Satz geteilter Cacheeinheiten 2206 kann einen oder mehrere Mid-Level-Caches, wie etwa Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Level eines Cache, einen Last-Level-Cache (LLC) und/oder Kombinationen davon beinhalten. Während in einer Ausführungsform eine ringbasierte Zwischenverbindungseinheit 2212 die integrierte Grafiklogik 2208, den Satz geteilter Cacheeinheiten 2206 und die Systemagentenheinheit 2210/integrierte Speichersteuereinheit(en) 2214 miteinander verbindet, können alternative Ausführungsformen eine beliebige Anzahl wohlbekannter Techniken zum Zwischenverbinden solcher Einheiten verwenden. In einer Ausführungsform wird Kohärenz zwischen einer oder mehreren Cacheeinheiten 2206 und Kernen 2202-A-N beibehalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 2202A-N zu Multithreading fähig. Der Systemagent 2210 umfasst diejenigen Komponenten, die Kerne 2202A-N koordinieren und betreiben. Die Systemagenteneinheit 2210 kann beispielsweise eine Leistungssteuereinheit (PCU, Power Control Unit) und eine Anzeigeeinheit umfassen. Die PCU kann Logik und Komponenten, die zum Regulieren des Leistungszustands der Kerne 2202A-N und der integrierten Grafiklogik 2208 benötigt werden, sein oder aufweisen. Die Anzeigeeinheit dient dem Ansteuern einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 2202A-N können hinsichtlich eines Architekturbefehlssatzes homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 2202A-N können dazu fähig sein, den gleichen Befehlssatz auszuführen, während andere dazu fähig sein können, nur einen Teilsatz dieses Befehlssatzes oder einen verschiedenen Befehlssatz auszuführen.
  • Beispielhafte Computerarchitekturen
  • 23-26 sind Blockdiagramme beispielhafter Computerarchitekturen. Andere Systemgestaltungen und Konfigurationen, die in der Technik für Laptops, Desktops, Handheld-PC, persönliche digitale Assistenten, technische Workstations, Server, Netzwerkvorrichtungen, Netzwerk-Hubs, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSP), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, portable Medienabspieler, tragbare Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind ebenfalls geeignet. Allgemein ist eine große Vielzahl an Systemen oder elektronischen Vorrichtungen, die zum Einbinden eines Prozessors und/oder anderer Ausführungslogik, wie hier offenbart, fähig sind, allgemein geeignet.
  • Nun, bezugnehmend auf 23, ist ein Blockdiagramm eines Systems 2300 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 2300 kann einen oder mehrere Prozessoren 2310, 2315 beinhalten, die mit einem Steuer-Hub 2320 gekoppelt sind. In einer Ausführungsform umfasst der Steuer-Hub 2320 einen Grafikspeichersteuer-Hub (GMCH, Graphics Memory Controller Hub) 2390 und einen Eingabe-/Ausgabe-Hub (IOH, Input/Output Hub) 2350 (die sich auf separaten Chips befinden können); der GMCH 2390 umfasst Speicher- und Grafiksteuerungen, mit denen Speicher 2340 und ein Koprozessor 2345 gekoppelt sind; der IOH 2350 koppelt Eingabe-/Ausgabevorrichtungen (E/A) 2360 mit dem GMCH 2390. Alternativ sind eine oder beide der Speicher- und Grafiksteuerungen in dem Prozessor integriert (wie hier beschrieben), sind der Speicher 2340 und der Koprozessor 2345 direkt mit dem Prozessor 2310 gekoppelt und ist der Steuer-Hub 2320 in einem einzelnen Chip mit dem IOH 2350 integriert.
  • Die optionale Natur zusätzlicher Prozessoren 2315 ist in 23 mit gestrichelten Linien gekennzeichnet. Jeder Prozessor 2310, 2315 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne beinhalten und kann irgendeine Version des Prozessors 2200 sein.
  • Der Speicher 2340 kann zum Beispiel dynamischer Direktzugriffsspeicher (DRAM, Direct Random Access Memory), Phasenwechselspeicher (PCM, Phase Change Memory) oder eine Kombination der beiden sein. Für wenigstens eine Ausführungsform kommuniziert der Steuer-Hub 2320 mit dem(den) Prozessor(en) 2310, 2315 über einen Multi-Drop-Bus, wie etwa einen Front-Side-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie etwa QuickPath-Interconnect (QPI), oder eine ähnliche Verbindung 2395.
  • In einer Ausführungsform ist der Koprozessor 2345 ein Spezialprozessor wie etwa beispielsweise ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Steuer-Hub 2320 einen integrierten Grafikbeschleuniger beinhalten.
  • Es kann eine Vielzahl an Unterschieden hinsichtlich eines Spektrums an Leistungsmetriken, einschließlich Architektur-, Mikroarchitektur-, thermischen, Leistungsverbraucheigenschaften und dergleichen, zwischen den physischen Ressourcen 2310, 2315 geben.
  • In einer Ausführungsform führt der Prozessor 2310 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. Eingebettet in die Befehle können Koprozessorbefehle sein. Der Prozessor 2310 erkennt diese Koprozessorbefehle als von einem Typ, der durch den angehängten Koprozessor 2345 ausgeführt werden sollte. Entsprechend gibt der Prozessor 2310 diese Koprozessorbefehle (oder Steuersignale, die Koprozessorbefehle repräsentieren) auf einem Koprozessorbus oder einer anderen Zwischenverbindung an den Koprozessor 2345 aus. Koprozessor(en) 2345 nimmt/nehmen die empfangenen Koprozessorbefehle an und führt/führen diese aus.
  • Nun, bezugnehmend auf 24, ist ein Blockdiagramm eines ersten spezielleren beispielhaften Systems 2400 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 24 gezeigt, ist das Multiprozessorsystem 2400 ein Punkt-zu-Punkt-Zwischenverbindungssystem und beinhaltet einen ersten Prozessor 2470 und einen zweiten Prozessor 2480, die über eine Punkt-zu-Punkt-Zwischenverbindung 2450 gekoppelt sind. Jeder von Prozessoren 2470 und 2480 kann irgendeine Version des Prozessors 2200 sein. In einer Ausführungsform der Erfindung sind Prozessoren 2470 und 2480 die Prozessoren 2310 bzw. 2315, während Koprozessor 2438 der Koprozessor 2345 ist. In einer anderen Ausführungsform sind Prozessoren 2470 und 2480 der Prozessor 2310 bzw. der Koprozessor 2345.
  • Die Prozessoren 2470 und 2480 sind einschließlich IMC-Einheiten (IMC: Integrated Memory Controller - Integrierter-Speicher-Steuerung) 2472 bzw. 2482 gezeigt. Auch beinhaltet der Prozessor 2470 als Teil seiner Bussteuereinheiten Punkt-zu-Punkt-(P-P)-Schnittstellen 2476 und 2478; gleichermaßen beinhaltet der zweite Prozessor 2480 P-P-Schnittstellen 2486 und 2488. Die Prozessoren 2470 und 2480 können Informationen über eine Punkt-zu-Punkt-(P-P)-Schnittstelle 2450 unter Verwendung von P-P-Schnittstellenschaltungen 2478, 2488 austauschen. Wie in 24 gezeigt, koppeln IMC 2472 und 2482 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 2432 und einem Speicher 2434, die Teile eines Hauptspeichers sein können, die lokal an die jeweiligen Prozessoren angehängt sind.
  • Prozessoren 2470, 2480 können Informationen mit einem Chipsatz 2490 über individuelle P-P-Schnittstellen 2452, 2454 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 2476, 2494, 2486 und 2498 austauschen. Chipsatz 2490 kann optional Informationen mit dem Koprozessor 2438 über eine Hochleistungsschnittstelle 2492 austauschen. In einer Ausführungsform ist der Koprozessor 2438 ein Spezialprozessor wie etwa beispielsweise ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein geteilter Cache (nicht dargestellt) kann in beiden Prozessoren oder außerhalb beider Prozessoren enthalten sein, jedoch über eine P-P-Zwischenverbindung mit den Prozessoren verbunden sein, sodass lokale Cacheinformationen eines oder beider Prozessoren in dem geteilten Cache gespeichert werden können, falls ein Prozessor in einen Niederleistungsmodus gesetzt wird.
  • Der Chipsatz 2490 kann über eine Schnittstelle 2496 mit einem ersten Bus 2416 gekoppelt werden. In einer Ausführungsform kann der erste Bus 2416 ein PCI-Bus (PCI: Peripheral Component Interconnect) oder ein Bus, wie etwa ein PCI-Express-Bus oder ein anderer E/A-Zwischenverbindungsbus der dritten Generation, sein, obwohl der Schutzumfang der vorliegenden Erfindung nicht derart beschränkt ist.
  • Wie in 24 gezeigt, können verschiedene E/A-Vorrichtungen 2414 zusammen mit einer Busbrücke 2418, die den ersten Bus 2416 mit einem zweiten Bus 2420 koppelt, mit dem ersten Bus 2416 gekoppelt sein. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 2415, wie etwa Koprozessoren, Hochdurchsatz-MIC-Prozessoren, GPGPU, Beschleuniger (wie etwa z. B. Grafikbeschleuniger oder DSP-Einheiten (DSP: Digital Signal Processing - digitale Signalverarbeitung)), vor Ort programmierbare Gate-Arrays oder ein beliebiger anderer Prozessor, mit dem ersten Bus 2416 gekoppelt. In einer Ausführungsform kann der zweite Bus 2420 ein LPC-(Low Pin Count)-Bus sein. Verschiedene Vorrichtungen können mit einem zweiten Bus 2420 gekoppelt sein, der zum Beispiel eine Tastatur und/oder Maus 2422, Kommunikationsvorrichtungen 2427 und eine Speichereinheit 2428 wie ein Plattenlaufwerk oder eine andere Massenspeichervorrichtung, die Befehle/Code und Daten 2430 aufweisen können, in einer Ausführungsform umfasst. Ferner kann eine Audio-E/A 2424 mit dem zweiten Bus 2420 gekoppelt sein. Es sei angemerkt, dass andere Architekturen möglich sind. Zum Beispiel kann ein System statt der Punkt-zu-Punkt-Architektur aus 24 einen Multi-Drop-Bus oder eine andere solche Architektur implementieren.
  • Nun, bezugnehmend auf 25, ist ein Blockdiagramm eines zweiten spezielleren beispielhaften Systems 2500 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in 24 und 25 tragen gleiche Bezugsziffern und gewisse Aspekte von 24 wurden in 25 weggelassen, um ein Verschleiern anderer Aspekte von 25 zu vermeiden.
  • 25 veranschaulicht, dass die Prozessoren 2570, 2580 eine Integrierte Steuerlogik (CL, Control Logic) 2572 bzw. 2582 Speicher und E/A beinhalten können. Dementsprechend beinhaltet die CL 2572, 2582 integrierte Speichersteuereinheiten und beinhaltet E/A-Steuerlogik. 25 veranschaulicht ferner, dass nicht nur Speicher 2532, 2534 mit der CL 2572, 2582 gekoppelt sind, sondern auch, dass E/A-Vorrichtungen 2514 ebenfalls mit der Steuerlogik 2572, 2582 gekoppelt sind. Veraltete E/A-Vorrichtungen 2515 sind mit dem Chipsatz 2590 gekoppelt.
  • Nun, bezugnehmend auf 26, ist ein Blockdiagramm eines SoC 2600 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in 22 tragen gleiche Bezugsziffern. Außerdem sind Kästchen mit gestrichelten Linien optionale Merkmale auf fortschrittlicheren SoC. In 26 ist bzw. sind Verbindungseinheit(en) 2608 gekoppelt mit: einem Anwendungsprozessor 2610, der einen Satz eines oder mehrerer Kerne 2602A-N, entsprechende Cacheeinheiten 2604A-N und geteilte Cacheeinheit(en) 2606 umfasst; einer Systemagenteneinheit 2610; einer Bussteuereinheit/Bussteuereinheiten 2616; einer integrierten Speichersteuereinheit/Speichersteuereinheiten 2614; einem Satz eines oder mehrerer Koprozessoren 2620, der integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor umfassen kann; einer statischen Direktzugriffsspeicher-(SRAM, Static Random Access Memory)-Einheit 2630; einer Direktspeicherzugriff-(DMA, Direct Memory Access)-Einheit 2632; und einer Anzeigeeinheit 2640 zum Koppeln mit einer oder mehreren externen Anzeigeeinrichtungen. In einer Ausführungsform umfasst/umfassen der/die Koprozessor(en) 2620 einen Spezialprozessor wie zum Beispiel einen Netz- oder Kommunikationsprozessor, eine Kompressions-Engine, GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder dergleichen.
  • Ausführungsformen der hier offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsansätze implementiert werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert werden, die auf programmierbaren Systemen ausgeführt werden, die wenigstens einen Prozessor, ein Speichersystem (einschließlich flüchtigen und nichtflüchtigen Speichers und/oder Speicherelementen), wenigstens eine Eingabevorrichtung und wenigstens eine Ausgabevorrichtung umfassen.
  • Ein Programmcode, wie etwa der in 24 veranschaulichte Code 2430, kann auf Eingabebefehle angewandt werden, um die hier beschriebenen Funktionen durchzuführen und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können auf eine oder mehrere Ausgabevorrichtungen angewandt werden, in bekannter Weise oder für Zwecke dieser Anmeldung, ein Verarbeitungssystem umfasst ein beliebiges System, das einen Prozessor aufweist, wie zum Beispiel einen digitalen Signalprozessor (DSP), einen Mikrocontroller, eine anwenderspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren prozeduralen oder objektorientierten Programmiersprache implementiert werden, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann, falls gewünscht, auch in einer Assembler- oder Maschinensprache implementiert werden. Tatsächlich sind die hier beschriebenen Mechanismen in dem Schutzumfang nicht auf irgendeine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte von mindestens einer Ausführungsform können durch repräsentative Befehle, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik innerhalb des Prozessors repräsentiert, implementiert sein, welche, wenn sie durch eine Maschine gelesen werden, die Maschine veranlassen, Logik zum Durchführen der hier beschriebenen Techniken zu fabrizieren. Derartige Repräsentationen, bekannt als „IP-Kerne“, können auf einem greifbaren maschinenlesbaren Medium gespeichert sein und an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, um in die Fabrikationsmaschinen geladen zu werden, die tatsächlich die Logik oder den Prozessor herstellen.
  • Solche maschinenlesbaren Speichermedien können ohne Einschränkung nichtflüchtige greifbare Anordnungen von Artikeln, die durch eine Maschine oder ein Gerät hergestellt oder gebildet werden, umfassen, einschließlich Speichermedien wie Festplatten, jede andere Art von Laufwerken, einschließlich Disketten, optische Platten, CD-ROM, CD-RW und magnetooptische Platten, Halbleitervorrichtungen wie Nur-Lese-Speicher (ROM), Direktzugriffsspeicher (RAM) wie dynamische Direktzugriffsspeicher (DRAM), statische Direktzugriffsspeicher (SRAM), löschbare programmierbare Nur-Lese-Speicher (EPROM), Flash-Speicher, elektrisch löschbare programmierbare Nur-Lese-Speicher (EEPROM), Phasenwechselspeicher (PCM), magnetische oder optische Karten oder jede andere Art von Medien, die zum Speichern elektronischer Befehle geeignet sind.
  • Entsprechend beinhalten Ausführungsformen der Erfindung auch nichtflüchtige greifbare maschinenlesbare Medien, die Befehle enthalten oder Gestaltungsdaten enthalten, wie etwa HDL (Hardware Description Language), die Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale definiert, die hier beschrieben sind. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich Binärübersetzung, Codeumformung usw.)
  • In manchen Fällen kann ein Befehlsumwandler verwendet werden, um einen Befehl von einem Quellbefehlssatz in einen Zielbefehlssatz umzuwandeln. Beispielsweise kann der Befehlsumwandler einen Befehl in einen oder mehrere andere durch den Kern zu verarbeitende Befehle übersetzen (z. B. unter Verwendung statischer Binärübersetzung, dynamischer Binärübersetzung einschließlich dynamischer Kompilation), umformen, emulieren oder anderweitig umwandeln. Der Befehlsumwandler kann in Software, Hardware, Firmware oder einer Kombination davon implementiert sein. Der Befehlsumwandler kann auf dem Prozessor, außerhalb des Prozessors oder teilweise auf und teilweise außerhalb des Prozessors sein.
  • 27 ist ein Blockdiagramm, das die Verwendung eines Softwarebefehlsumwandlers zum Umwandeln binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß Ausführungsformen kontrastiert. In der veranschaulichten Ausführungsform ist der Befehlsumwandler ein Softwarebefehlsumwandler, obwohl alternativ dazu der Befehlsumwandler in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert werden kann. 27 zeigt ein Programm in einer höheren Sprache 2702, das unter Verwendung eines x86-Kompilierers 2704 kompiliert werden kann, um einen x86-Binärcode 2706 zu erzeugen, der von einem Prozessor mit wenigstens einem x86-Befehlsatz-Kern 2716 nativ ausgeführt werden kann. Der Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2716 repräsentiert einen beliebigen Prozessor, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern durch kompatibles Ausführen oder anderweitiges Verarbeiten (1) eines wesentlichen Teils des Befehlssatzes des Intel-x86-Befehlssatz-Kerns oder (2) von Objektcodeversionen von Anwendungen oder anderer Software, die auf einem Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern ablaufen soll, durchführen kann, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern zu erreichen. Der x86-Kompilierer 2704 repräsentiert einen Kompilierer, der dazu funktionsfähig ist, einen x86-Binärcode 2706 (z. B. Objektcode) zu erzeugen, der mit oder ohne zusätzliche Verknüpfungsverarbeitung auf dem Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2716 ausgeführt werden kann. Gleichermaßen zeigt 27, dass das Programm in der höheren Sprache 2702 unter Verwendung eines Alternativ-Befehlssatz-Kompilierers 2708 kompiliert werden kann, um Alternativ-Befehlssatz-Binärcode 2710 zu erzeugen, der von einem Prozessor ohne wenigstens einen x86-Befehlssatz-Kern 2714 (z. B. einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies, Sunnyvale, CA, USA ausführen und/oder den ARM-Befehlssatz von ARM Holdings, Sunnyvale, CA, USA ausführen) nativ ausgeführt werden kann. Der Befehlsumwandler 2712 wird verwendet, um den x86-Binärcode 2706 in einen Code umzuwandeln, der durch den Prozessor ohne einen x86-Befehlssatz-Kern 2714 nativ ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht der gleiche wie der Alternativ-Befehlssatz-Binärcode 2710, da ein Befehlsumwandler, der dies kann, schwierig herzustellen ist; der umgewandelte Code wird jedoch die allgemeine Operation ausführen und aus Befehlen aus dem alternativen Befehlssatz bestehen. Dementsprechend repräsentiert der Befehlsumwandler 2712 Software, Firmware, Hardware oder eine Kombination davon, die durch Emulation, Simulation oder einen beliebigen anderen Prozess ermöglicht, dass ein Prozessor oder eine andere elektronische Vorrichtung, der/die keinen x86-Befehlssatz-Prozessor oder -Kern aufweist, den x86-Binärcode 2706 ausführt.

Claims (25)

  1. Prozessor, der aufweist: eine Abrufschaltung zum Abrufen eines Befehls, wobei ein Format des Befehls eine Kennung eines ersten Quelloperanden, eine Kennung eines zweiten Quelloperanden und eine Kennung eines Zieloperanden umfasst; eine Decodierungsschaltung zum Decodieren des Befehls; eine Datenabrufschaltung zum Abrufen von der Kennung eines ersten Quelloperanden und der Kennung eines zweiten Quelloperanden zugeordneten Daten; eine Ausführungsschaltung zum Ausführen des decodierten Befehls zum Durchführen einer Prozedur, die umfasst: das Bestimmen, ob ein erstes Element der der Kennung eines ersten Quelloperanden zugeordneten Daten gesetzt ist, falls das erste Element gesetzt ist, das Extrahieren eines Zielindex aus einem entsprechenden zweiten Element der der Kennung eines zweiten Quelloperanden zugeordneten Daten und das Verwenden des Zielindex zum Setzen eines Zielelements von der Kennung eines Zieloperanden zugeordneten Daten.
  2. Prozessor, der aufweist: eine Abrufschaltung zum Abrufen eines Befehls, wobei ein Format des Befehls eine Kennung eines ersten Quelloperanden, eine Kennung eines zweiten Quelloperanden und eine Kennung eines Zieloperanden umfasst; eine Decodierungsschaltung zum Decodieren des Befehls; eine Datenabrufeinrichtung zum Abrufen von der Kennung eines ersten Quelloperanden und der Kennung eines zweiten Quelloperanden zugeordneten Daten; eine Ausführungsschaltung zum Ausführen des decodierten Befehls zum Durchführen einer Prozedur, die umfasst: das Bestimmen, ob ein erstes Element der der Kennung eines ersten Quelloperanden zugeordneten Daten gesetzt ist, falls das erste Element gesetzt ist, das Extrahieren eines Zielindex aus einem entsprechenden zweiten Element der der Kennung eines zweiten Quelloperanden zugeordneten Daten und das Verwenden des Zielindex zum Setzen eines Zielelements von der Kennung eines Zieloperanden zugeordneten Daten.
  3. Prozessor, der aufweist: eine Abrufschaltung zum Abrufen eines Befehls, wobei ein Format des Befehls eine Kennung eines ersten Quelloperanden, eine Kennung eines zweiten Quelloperanden und eine Kennung eines Zieloperanden umfasst; eine Decodierungsschaltung zum Decodieren des Befehls; eine Datenabrufschaltung zum Abrufen von der Kennung eines ersten Quelloperanden und der Kennung eines zweiten Quelloperanden zugeordneten Daten; eine Ausführungseinrichtung zum Setzen eines gewählten Elements des Zieloperanden für jedes gesetzte Element des ersten Quelloperanden, wobei die Auswahl durch den zweiten Quelloperanden spezifiziert ist.
  4. Prozessor, der aufweist: eine Abrufschaltung zum Abrufen eines Befehls, wobei ein Format des Befehls eine Kennung eines ersten Quelloperanden, eine Kennung eines zweiten Quelloperanden und eine Kennung eines Zieloperanden umfasst; eine Decodierungsschaltung zum Decodieren des Befehls; eine Datenabrufeinrichtung zum Abrufen von der Kennung eines ersten Quelloperanden und der Kennung eines zweiten Quelloperanden zugeordneten Daten; eine Ausführungseinrichtung zum Setzen eines gewählten Elements des Zieloperanden für jedes gesetzte Element des ersten Quelloperanden, wobei die Auswahl durch den zweiten Quelloperanden spezifiziert ist.
  5. Einer der Prozessoren nach Ansprüchen 3-4, wobei die Ausführungseinrichtung ferner dazu ausgebildet ist, die der Kennung eines Zieloperanden zugeordneten Daten zu löschen, bevor das Ausführen des decodierten Befehls erfolgt.
  6. Einer der Prozessoren nach Ansprüchen 1 bis 5, wobei die der Kennung eines zweiten Quelloperanden zugeordneten Daten eine Mehrzahl von Indizes umfassen, die dazu verwendbar sind, eine entsprechende Mehrzahl von Quellelementen der der Kennung eines ersten Quelloperanden zugeordneten Daten auf eine Mehrzahl von Zielelementen der der Kennung eines Zieloperanden zugeordneten Daten abzubilden.
  7. Einer der Prozessoren nach einem der Ansprüche 3-5, wobei die Ausführungseinrichtung ferner dazu ausgebildet ist: eine erste Anzahl gesetzter Elemente in den der Kennung eines ersten Quelloperanden zugeordneten Daten zu zählen; eine zweite Anzahl gesetzter Elemente in den der Kennung eines Zieloperanden zugeordneten Daten zu zählen; und falls die erste Anzahl größer oder gleich der zweiten Anzahl ist, ein Signal zu erzeugen, das anzeigt, dass die zweite Anzahl gesetzter Elemente geringer ist als die erste Anzahl gesetzter Elemente.
  8. Einer der Prozessoren nach Ansprüchen 1-2, wobei die Ausführungsschaltung ferner dazu ausgebildet ist, den decodierten Befehl seriell an einer Mehrzahl von Elementen der der Kennung eines ersten Quelloperanden zugeordneten Daten auszuführen.
  9. Einer der Prozessoren nach Ansprüchen 1-2, wobei die Ausführungsschaltung ferner dazu ausgebildet ist, den decodierten Befehl parallel an einer Mehrzahl von Elementen der der Kennung eines ersten Quelloperanden zugeordneten Daten auszuführen.
  10. Einer der Prozessoren nach Ansprüchen 1-2, wobei die Ausführungsschaltung ferner dazu ausgebildet ist, den Ausführungsschritt seriell an jedem Element der der Kennung eines ersten Quelloperanden zugeordneten Daten durchzuführen.
  11. Einer der Prozessoren nach Ansprüchen 1-2, wobei die Ausführungsschaltung ferner dazu ausgebildet ist, den decodierten Befehl parallel an jedem Element der der Kennung eines ersten Quelloperanden zugeordneten Daten auszuführen.
  12. Einer der Prozessoren nach Ansprüchen 1-6, wobei die dem ersten Quelloperanden zugeordneten Daten in ein erstes Schreibmaskenregister abgerufen werden, dem Zieloperanden zugeordnete Daten in einem zweiten Schreibmaskenregister vorgesehen sind und dem zweiten Quelloperanden zugeordnete Daten in einem Speicherort vorgesehen sind.
  13. Einer der Prozessoren nach Ansprüchen 1-6, wobei die dem ersten Quelloperanden zugeordneten Daten in ein erstes Schreibmaskenregister abgerufen werden, dem Zieloperanden zugeordnete Daten in einem zweiten Schreibmaskenregister vorgesehen sind und dem zweiten Quelloperanden zugeordnete Daten in einem Register vorgesehen sind.
  14. Verfahren, das umfasst: das Abrufen eines Befehls, wobei ein Format des Befehls eine Kennung eines ersten Quelloperanden, eine Kennung eines zweiten Quelloperanden und eine Kennung eines Zieloperanden umfasst; das Decodieren des Befehls; das Abrufen von der Kennung eines ersten Quelloperanden und der Kennung eines zweiten Quelloperanden zugeordneten Daten; das Ausführen des decodierten Befehls zum Durchführen einer Prozedur, die umfasst: das Bestimmen, ob ein erstes Element der der Kennung eines ersten Quelloperanden zugeordneten Daten gesetzt ist, falls das erste Element gesetzt ist, das Exzerpieren eines Zielindex aus einem entsprechenden zweiten Element der der Kennung eines zweiten Quelloperanden zugeordneten Daten und das Verwenden des Zielindex zum Setzen eines Zielelements von der Kennung eines Zieloperanden zugeordneten Daten.
  15. Verfahren, das umfasst: das Abrufen eines Befehls, wobei ein Format des Befehls eine Kennung eines ersten Quelloperanden, eine Kennung eines zweiten Quelloperanden und eine Kennung eines Zieloperanden umfasst; das Decodieren des Befehls; das Abrufen von der Kennung eines ersten Quelloperanden und der Kennung eines zweiten Quelloperanden zugeordneten Daten; das Durchführen von Schritten zum Setzen eines gewählten Elements des Zieloperanden für jedes gesetzte Element des ersten Quelloperanden, wobei die Auswahl durch den zweiten Quelloperanden spezifiziert ist.
  16. Eines der Verfahren nach Ansprüchen 14-15, ferner umfassend das Löschen der der Kennung eines Zieloperanden zugeordneten Daten, bevor das Ausführen des decodierten Befehls erfolgt.
  17. Eines der Verfahren nach Ansprüchen 14-16, wobei die der Kennung eines zweiten Quelloperanden zugeordneten Daten eine Mehrzahl von Indizes umfassen, die dazu verwendbar sind, eine entsprechende Mehrzahl von Quellelementen der der Kennung eines ersten Quelloperanden zugeordneten Daten auf eine Mehrzahl von Zielelementen der der Kennung eines Zieloperanden zugeordneten Daten abzubilden.
  18. Eines der Verfahren nach Ansprüchen 14-17, das ferner umfasst: das Zählen einer ersten Anzahl gesetzter Elemente in den der Kennung eines ersten Quelloperanden zugeordneten Daten; das Zählen einer zweiten Anzahl gesetzter Elemente in den der Kennung eines Zieloperanden zugeordneten Daten; und falls die erste Anzahl größer oder gleich der zweiten Anzahl ist, das Erzeugen eines Signals, das anzeigt, dass die zweite Anzahl gesetzter Elemente geringer ist als die erste Anzahl gesetzter Elemente.
  19. Eines der Verfahren nach Ansprüchen 14-17, ferner umfassend das Durchführen des Ausführungsschritts parallel an einer Mehrzahl von Elementen der der Kennung eines ersten Quelloperanden zugeordneten Daten.
  20. Eines der Verfahren nach Ansprüchen 14-17, wobei die dem ersten Quelloperanden zugeordneten Daten in ein Schreibmaskenregister abgerufen werden, dem Zieloperanden zugeordnete Daten in einem Schreibmaskenregister vorgesehen sind und dem zweiten Quelloperanden zugeordnete Daten in einem Speicherort vorgesehen sind.
  21. Eines der Verfahren nach Ansprüchen 14-17, wobei die dem ersten Quelloperanden zugeordneten Daten in ein Schreibmaskenregister abgerufen werden, dem Zieloperanden zugeordnete Daten in einem Schreibmaskenregister vorgesehen sind und dem zweiten Quelloperanden zugeordnete Daten in einem Register vorgesehen sind.
  22. Herstellungsgegenstand, der ein nicht flüchtiges maschinenlesbares Speichermedium aufweist, wobei das nicht flüchtige maschinenlesbare Speichermedium Befehle speichert, die von einem Prozessor zum Durchführen der folgenden Schritte ausführbar sind: des Abrufens eines Befehls, wobei ein Format des Befehls eine Kennung eines ersten Quelloperanden, eine Kennung eines zweiten Quelloperanden und eine Kennung eines Zieloperanden umfasst; des Decodierens des Befehls; des Abrufens von der Kennung eines ersten Quelloperanden und der Kennung eines zweiten Quelloperanden zugeordneten Daten; des Ausführens des decodierten Befehls zum Durchführen einer Prozedur, die umfasst: das Bestimmen, ob ein erstes Element der der Kennung eines ersten Quelloperanden zugeordneten Daten gesetzt ist, falls das erste Element gesetzt ist, das Exzerpieren eines Zielindex aus einem entsprechenden zweiten Element der der Kennung eines zweiten Quelloperanden zugeordneten Daten und das Verwenden des Zielindex zum Setzen eines Zielelements von der Kennung eines Zieloperanden zugeordneten Daten.
  23. Herstellungsgegenstand, der ein nicht flüchtiges maschinenlesbares Speichermedium aufweist, wobei das nicht flüchtige maschinenlesbare Speichermedium Befehle speichert, die von einem Prozessor zum Durchführen der folgenden Schritte ausführbar sind: des Abrufens eines Befehls, wobei ein Format des Befehls eine Kennung eines ersten Quelloperanden, eine Kennung eines zweiten Quelloperanden und eine Kennung eines Zieloperanden umfasst; des Decodierens des Befehls; des Abrufens von der Kennung eines ersten Quelloperanden und der Kennung eines zweiten Quelloperanden zugeordneten Daten; des Ausführens von Schritten zum Setzen eines gewählten Elements des Zieloperanden für jedes gesetzte Element des ersten Quelloperanden, wobei die Auswahl durch den zweiten Quelloperanden spezifiziert ist.
  24. Einer der Herstellungsgegenstände nach Ansprüchen 22-23, ferner umfassend das Löschen der der Kennung eines Zieloperanden zugeordneten Daten, bevor das Ausführen des Befehls erfolgt.
  25. Einer der Herstellungsgegenstände nach Ansprüchen 22-24, wobei die der Kennung eines zweiten Quelloperanden zugeordneten Daten eine Mehrzahl von Indizes umfassen, die dazu verwendbar sind, eine entsprechende Mehrzahl von Quellelementen der der Kennung eines ersten Quelloperanden zugeordneten Daten auf eine Mehrzahl von Zielelementen der der Kennung eines Zieloperanden zugeordneten Daten abzubilden.
DE112017000983.9T 2016-02-24 2017-01-25 System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske Withdrawn DE112017000983T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/052,801 US9921841B2 (en) 2016-02-24 2016-02-24 System and method for executing an instruction to permute a mask
US15/052,801 2016-02-24
PCT/US2017/014975 WO2017146855A1 (en) 2016-02-24 2017-01-25 System and method for executing an instruction to permute a mask

Publications (1)

Publication Number Publication Date
DE112017000983T5 true DE112017000983T5 (de) 2018-12-06

Family

ID=59629992

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112017000983.9T Withdrawn DE112017000983T5 (de) 2016-02-24 2017-01-25 System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske

Country Status (5)

Country Link
US (1) US9921841B2 (de)
CN (1) CN108701028A (de)
DE (1) DE112017000983T5 (de)
TW (1) TW201738733A (de)
WO (1) WO2017146855A1 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
EP3757813A3 (de) 2019-06-18 2021-01-20 Tenstorrent Inc. Prozessorkerne mit paketkennungen für routing und berechnung
US11700135B2 (en) * 2020-12-26 2023-07-11 Intel Corporation ISA accessible physical unclonable function
US11570010B2 (en) * 2020-12-26 2023-01-31 Intel Corporation ISA accessible physical unclonable function
US11706039B2 (en) * 2020-12-26 2023-07-18 Intel Corporation ISA accessible physical unclonable function

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69031232T2 (de) * 1989-02-03 1998-03-12 Digital Equipment Corp Verfahren und Vorrichtung zur Vorverarbeitung mehrerer Befehle in einem Pipeline-Prozessor
US6763034B1 (en) * 1999-10-01 2004-07-13 Stmicroelectronics, Ltd. Connection ports for interconnecting modules in an integrated circuit
US7783860B2 (en) * 2007-07-31 2010-08-24 International Business Machines Corporation Load misaligned vector with permute and mask insert
US8909901B2 (en) 2007-12-28 2014-12-09 Intel Corporation Permute operations with flexible zero control
US8051226B2 (en) 2008-06-13 2011-11-01 Freescale Semiconductor, Inc. Circular buffer support in a single instruction multiple data (SIMD) data processor
CN106371804B (zh) 2011-12-22 2019-07-12 英特尔公司 用于执行置换操作的设备和方法
WO2013095669A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Multi-register scatter instruction
CN107092465B (zh) 2011-12-23 2021-06-29 英特尔公司 用于提供向量混合和置换功能的指令和逻辑
EP2798465B1 (de) * 2011-12-30 2018-11-14 Intel Corporation Prozessoren zur identifizierung von einzelnen verpackten datenelementen, verfahren, systeme, und anweisungen
US8959275B2 (en) 2012-10-08 2015-02-17 International Business Machines Corporation Byte selection and steering logic for combined byte shift and byte permute vector unit
US9372692B2 (en) * 2012-12-29 2016-06-21 Intel Corporation Methods, apparatus, instructions, and logic to provide permute controls with leading zero count functionality
US20150186136A1 (en) * 2013-12-27 2015-07-02 Tal Uliel Systems, apparatuses, and methods for expand and compress

Also Published As

Publication number Publication date
TW201738733A (zh) 2017-11-01
CN108701028A (zh) 2018-10-23
WO2017146855A1 (en) 2017-08-31
US9921841B2 (en) 2018-03-20
US20170242697A1 (en) 2017-08-24

Similar Documents

Publication Publication Date Title
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE112011105122T5 (de) Systeme, Vorrichtungen und Verfahren zum Vermischen zweier Quelloperanden in einem einzigen Ziel unter Verwendung einer Schreibmaske
DE112011105121T5 (de) Systeme, Vorrichtungen und Verfahren zum Schrittmustersammeln von Datenelementen und Schrittmusterstreuen von Datenelementen
DE112013005236T5 (de) Verfahren und Vorrichtung für Integralbild-Berechnungsbefehle
DE112013005372T5 (de) Befehl zum Bestimmen von Histogrammen
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE102019100009A1 (de) Vereinheitlichter Hardwarebeschleuniger für Verschlüsselungssysteme mit symmetrischen Schlüsseln
DE102018125232A1 (de) Einrichtung und Verfahren für komplexe Multiplikation und Akkumulation
DE112013005343T5 (de) Befehle für Codierungsalgorithemen mit gleitendem Fenster
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
DE102018003612A1 (de) Befehle für Dualzieltyp-Umwandlung-, Akkumulation- mit gemischter Präzision und atomare Speicheroperationen mit gemischter Präzision
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE112011105123T5 (de) Systeme, Vorrichtungen und Verfahren für Sprünge unter Verwendung eines Maskenregisters
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102018126036A1 (de) Systeme und verfahren zum setzen eines kachelregisterpaars auf null

Legal Events

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