DE102014004564A1 - Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen - Google Patents

Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen Download PDF

Info

Publication number
DE102014004564A1
DE102014004564A1 DE102014004564.1A DE102014004564A DE102014004564A1 DE 102014004564 A1 DE102014004564 A1 DE 102014004564A1 DE 102014004564 A DE102014004564 A DE 102014004564A DE 102014004564 A1 DE102014004564 A1 DE 102014004564A1
Authority
DE
Germany
Prior art keywords
data
packed
narrower
packed data
operand
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102014004564.1A
Other languages
English (en)
Inventor
Buford Mason Guy
Edward T. Grochowski
Seyed Yahya Sotoudeh
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 DE102014004564A1 publication Critical patent/DE102014004564A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • 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/30149Instruction analysis, e.g. decoding, instruction word fields of variable length 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/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/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders

Abstract

Ein Verfahren umfasst das Empfangen eines gepackten Datenbefehls, der einen ersten schmaleren gepackten Quelldatenoperanden und einen schmaleren Zieloperanden anzeigt. Der Befehl wird auf eine maskierte gepackte Datenoperation gemappt, die einen ersten breiteren gepackten Quelldatenoperanden anzeigt, der breiter ist als der erste schmalere Quelloperand und der diesen einschließt, und die einen breiteren Zieloperanden anzeigt, der breiter ist als der schmalere Zieloperand und der diesen einschließt. Eine gepackte Datenoperationsmaske wird generiert, die ein Maskenelement für jedes entsprechende Ergebnisdatenelement eines gepackten Datenergebnisses umfasst, das von der maskierten gepackten Datenoperation gespeichert wird. Alle Maskenelemente, die Ergebnisdatenelementen entsprechen, die von der maskierten gepackten Datenoperation gespeichert werden, die durch den gepackten Datenbefehl nicht gespeichert würden, werden ausmaskiert. Die Maskieroperation wird unter Verwendung der gepackten Datenoperationsmaske ausgeführt. Das gepackte Datenergebnis wird im breiteren Zieloperanden gespeichert.

Description

  • HINTERGRUND
  • Technisches Gebiet
  • Hier beschriebene Ausführungsformen beziehen sich allgemein auf Prozessoren. Insbesondere beziehen sich hier beschriebene Ausführungsformen allgemein auf das Zugreifen auf Register in Prozessoren.
  • Hintergrundinformationen
  • Viele Prozessoren weisen Single Instruction Multiple Data-(SIMD)-Architekturen auf. Bei SIMD-Architekturen kann ein gepackter Datenbefehl, Vektorbefehl oder SIMD-Befehl an mehreren Datenelementen oder mehreren Paaren von Datenelementen gleichzeitig oder parallel arbeiten. Der Prozessor kann parallel ausführende Hardware aufweisen, die auf den gepackten Datenbefehl anspricht, um die mehreren Operationen gleichzeitig oder parallel auszuführen.
  • Mehrere Datenelemente können innerhalb eines Registers oder einer Speicherstelle als gepackte Daten gepackt werden. Bei gepackten Daten können die Bits des Registers oder der anderen Speicherstelle logisch in eine Sequenz von Datenelementen eingeteilt sein. Beispielsweise kann ein 128 Bit breites gepacktes Datenregister zwei 64 Bit breite Datenelemente, vier 32-Bit-Datenelemente, acht 16-Bit-Datenelemente usw. aufweisen.
  • Bei einigen Prozessor-Architekturen gab es im Laufe der Jahre einen Anstieg in der Breite von gepackten Datenoperanden, die von Befehlen verwendet werden. Diese vergrößerten Breiten von gepackten Daten ermöglichen es generell, dass mehr Datenelemente gleichzeitig oder parallel verarbeitet werden können, was die Leistung tendenziell verbessert. Selbst wenn es Befehle gibt, welche die breiteren gepackten Datenoperanden verwenden, ist es immer noch generell wünschenswert, die älteren Befehle zu unterstützen, welche die schmaleren gepackten Datenoperanden verwenden, um beispielsweise Abwärtskompatibilität bereitzustellen. Des Weiteren können häufig schmalere Register, die verwendet werden, um die schmaleren gepackten Datenoperanden zu speichern, bei breiteren Registern, die verwendet werden, um die breiteren oder erweiterten gepackten Datenoperanden zu speichern, mit einem Alias versehen sein.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Am besten ist die Erfindung zu verstehen, wenn auf die folgende Beschreibung und die sie begleitenden Zeichnungen, welche die Ausführungsformen der Erfindung veranschaulichen, Bezug genommen wird, wobei:
  • 1 ein Blockdiagramm von einer Ausführungsform eines Prozessors zeigt.
  • 2 ein Blockdiagramm einer ersten Ausführungsform eines Satzes von geeigneten gepackten Datenregistern zeigt.
  • 3A ein Blockdiagramm eines vorhandenen Satzes von Registern bei einigen Prozessoren zeigt.
  • 3B ein Blockdiagramm einer zweiten Ausführungsform eines Satzes von geeigneten gepackten Datenregistern zeigt.
  • 4 ein Blockdiagramm einer Ausführungsform einer Befehlsverarbeitungsvorrichtung zeigt.
  • 5 ein Block-Flussdiagramm einer Ausführungsform eines Verfahrens in einem Prozessor zeigt.
  • 6 ein Blockdiagramm zeigt, das eine Operation eines Teilregisterzugriffs als Reaktion auf einen Teilregisterzugriff-Befehl veranschaulicht, die an schmaleren Operanden ausgeführt werden kann, die breiteren Operanden überlagert sind.
  • 7 ein Blockdiagramm eines Ausführungsbeispiels einer maskierten gepackten Gesamtregisterzugriff-Datenoperation an breiteren Operanden zeigt, die als Reaktion auf einen gepackten Teilregisterzugriff-Datenbefehl ausgeführt werden kann, der schmalere Operanden anzeigt.
  • 8 ein Blockdiagramm zeigt, das eine Operation eines Teilregisterzugriffs veranschaulicht, die als Reaktion auf einen Teilregisterzugriff-Befehl an schmaleren Operanden ausgeführt werden kann, die breiteren Operanden überlagert sind.
  • 9 ein Blockdiagramm eines Ausführungsbeispiels einer maskierten gepackten Gesamtregisterzugriff-Datenoperation an breiteren Operanden zeigt, die als Reaktion auf einen gepackten Teilregisterzugriff-Datenbefehl, der schmalere Operanden anzeigt, ausgeführt werden kann.
  • 10 ein Blockdiagramm zeigt, das eine Teilregisterzugriff-Operation veranschaulicht, die als Reaktion auf einen Teilregisterzugriff-Befehl an nicht entsprechenden Datenelementen von schmaleren Operanden, die breiteren Operanden überlagert sind, ausgeführt werden kann.
  • 11 ein Blockdiagramm eines Ausführungsbeispiels einer maskierten gepackten Gesamtregisterzugriff-Datenoperation zeigt, die an entsprechenden Datenelementen von breiteren Operanden ausgeführt werden kann, die als Reaktion auf einen gepackten Teilregisterzugriff-Datenbefehl, der Operationen an nicht entsprechenden Datenelementen von schmaleren Operanden anzeigt, ausgeführt werden kann.
  • 12 eine Tabelle zeigt, die veranschaulicht, dass die Anzahl an gepackten Datenoperationsmasken-Bits von der gepackten Datenbreite und der gepackten Datenelementbreite abhängt.
  • 13 ein Blockdiagramm eines Ausführungsbeispiels eines geeigneten Satzes von gepackten Datenoperationsmasken-Registern zeigt.
  • 14 ein Diagramm zeigt, das veranschaulicht, dass eine Anzahl von Bits, die als eine gepackte Datenoperationsmaske und/oder zum Maskieren verwendet werden, von der gepackten Datenbreite und der Datenelementbreite abhängen können.
  • 15A ein Blockdiagramm zeigt, das sowohl ein Beispiel einer In-Order-Pipeline als auch ein Beispiel einer Registerumbenennung, Out-of-Order-Issue-/Ausführungspipeline gemäß Ausführungsformen der Erfindung veranschaulicht.
  • 15B ein Blockdiagramm zeigt, das sowohl ein Ausführungsbeispiel eines In-Order-Architekturkerns als auch ein Beispiele einer Registerumbenennung, einen Out-of-Order-Issue-/Ausführungsarchitekturkern veranschaulicht, die in einen Prozessor gemäß Ausführungsformen der Erfindung einzuschließen sind.
  • 16A ein Blockdiagramm eines einzelnen Prozessorkerns zusammen mit seiner Verbindung zum Kopplungsstruktur-Netzwerk auf der Chiplage und mit seinem lokalen Teilsatz des Level-2-(L2)-Caches gemäß Ausführungsformen der Erfindung zeigt.
  • 16B eine erweiterte Ansicht eines Teils des Prozessorkerns in 16A gemäß Ausführungsformen der Erfindung zeigt.
  • 17 ein Blockdiagramm eines Prozessors zeigt, der mehr als einen Kern aufweisen kann, der einen integrierten Memory-Controller und integrierte Grafik gemäß Ausführungsformen der Erfindung aufweisen kann.
  • 18 ein Blockdiagramm eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung zeigt.
  • 19 ein Blockdiagramm eines ersten spezielleren Beispiels eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung zeigt.
  • 20 ein Blockdiagramm eines zweiten spezielleren Beispiels eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung zeigt.
  • 21 ein Blockdiagramm eines Systems auf einem Chip (SoC) gemäß einer Ausführungsform der vorliegenden Erfindung zeigt.
  • 22 ein Blockdiagramm zeigt, das die Verwendung eines Softwarebefehlswandlers zur Umwandlung von Binärbefehlen in einem Quellbefehlssatz zu Binärbefehlen in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt.
  • AUSFÜHRLICHE BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
  • Hier werden Teilregisterzugriff-Verfahren, Prozessoren und Systeme offenbart. In der folgenden Beschreibung werden zahlreiche spezielle Details angeführt (z. B. spezielle Register, Befehle, Masken, Arten der Ausführung von Teilregisterzugriffen, Logikimplementierungen, Prozessor-Konfigurationen, Mikroarchitekturdetails, Sequenzen von Operationen, Logikpartitionierungs-/Integrierungsdetails, Arten und gegenseitige Beziehungen von Systemkomponenten und dergleichen). Es ist jedoch offensichtlich, dass Ausführungsformen der Erfindung auch ohne diese spezifischen Details realisierbar sind. In anderen Fällen wurden allgemein bekannte Schaltungen, Anordnungen und Techniken nicht im Detail dargestellt, um das Verständnis der Beschreibung nicht zu erschweren.
  • 1 ist ein Blockdiagramm einer Ausführungsform eines Prozessors 100. Bei einigen Ausführungsformen kann der Prozessor ein Allzweckprozessor sein (z. B. ein Allzweckmikroprozessor der Art, die als ein Hauptprozessor in verschiedenen Arten von Computersystemen verwendet wird). Alternativ kann der Prozessor ein Spezialprozessor sein. Zu Beispielen von geeigneten Spezialprozessoren gehören unter anderem Netzwerkprozessoren, Kommunikationsprozessoren, Verschlüsselungsprozessoren, Grafikprozessoren, Coprozessoren, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs) und Controller (z. B. Mikrocontroller) um nur einige Beispiele zu nennen, wobei keine Beschränkung auf die genannten Beispiele vorliegt. Bei dem Prozessor kann es sich um einen beliebigen von verschiedenen Prozessoren mit umfangreichem Befehlssatz (CISC), mit eingeschränktem Befehlssatz (RISC), mit Very Long Instruction Word-(VLIW)-Architektur oder verschiedenen Mischformen davon sowie um gänzlich andere Prozessortypen handeln.
  • Der Prozessor weist einen Befehlssatz 102 auf. Die Befehle des Befehlssatzes stehen für Makrobefehle, Befehle in Assemblersprache oder Maschinenebenenbefehle, die dem Prozessor zur Ausführung bereitgestellt werden. Der Befehlssatz umfasst einen oder mehrere gepackte Teilregisterzugriff-Datenbefehle 103. Bei einigen Ausführungsformen können die gepackten Teilregisterzugriff-Datenbefehle Befehle repräsentieren, die auf einen oder mehrere Quell- und/oder Zieloperanden zugreifen, die nur einen Teil eines Registers und nicht die volle Breite des Registers darstellen. Als ein Beispiel können die gepackten Teilregisterzugriff-Datenbefehle Befehle darstellen, die auf in 512-Bit-Registern gespeicherte 128-Bit-Quell- und -Zieloperanden zugreifen. Der Befehlssatz umfasst auch optional einen oder mehrere maskierte gepackte Datenbefehle 104. Optional umfasst/umfassen der bzw. die maskierten gepackten Datenbefehle einen oder mehrere maskierte Gesamtregisterzugriff-Befehle 104B. Bei einigen Ausführungsformen kann ein maskierter Gesamtregisterzugriff-Befehl einen Befehl darstellen, der auf einen oder mehrere Quell- und/oder Zieloperanden zugreift, die eine volle Breite eines Registers darstellen oder belegen. Als Beispiel kann der maskierte Gesamtregisterzugriff-Befehl einen Befehl darstellen, der auf in 512-Bit-Registern gespeicherte 512-Bit-Quell- und Zieloperanden zugreift.
  • Der Prozessor umfasst architektonisch sichtbare Register (z. B. eine architektonischen Registerdatei) 105. Die Architekturregister können hier auch einfach als Register bezeichnet sein. Sofern nicht anders angegeben oder offensichtlich, werden die hier verwendeten Begriffe Architekturregister, Registerdatei und Register verwendet, um auf Register zu verweisen, die für die Software und/oder einen Programmierer sichtbar sind, und/oder auf die Register, die durch Makrobefehle spezifiziert sind, um Operanden zu identifizieren. Diese Register werden anderen nichtarchitektonischen oder nichtarchitektonisch sichtbaren Registern in einer gegebenen Mikroarchitektur (z. B. Zwischenregister, die von Befehlen verwendet werden, Umordnungspuffer, Rückordnungsregister usw.) gegenübergestellt. Die Register stellen allgemein On-Chip-Prozessorspeicherstellen dar. Die veranschaulichten Register umfassen Skalarallzweckregister 106, gepackte Datenregister 107 und optionale gepackte Datenoperationsmasken-Register 108.
  • Der Prozessor umfasst außerdem Ausführungslogik 109 (z. B. eine oder mehrere Ausführungseinheiten). Die Ausführungslogik ist betriebsfähig, um die Befehle des Befehlssatzes auszuführen oder zu verarbeiten. Beispielsweise kann die Ausführungslogik betriebsfähig sein, um den bzw. die gepackten Teilregisterzugriff-Datenbefehle 103 und den bzw. die maskierten gepackten Gesamtregisterzugriff-Datenbefehle 104B auszuführen oder zu verarbeiten.
  • 2 zeigt ein Blockdiagramm einer ersten Ausführungsform eines Satzes von geeigneten gepackten Datenregistern 207. Die veranschaulichten gepackten Datenregister umfassen zweiunddreißig 512 Bit breite gepackte oder Vektor-Register. Diese zweiunddreißig 512-Bit-Register werden als ZMM0 bis ZMM31 bezeichnet. Die niedrigeren sechzehn dieser 512-Bit-Register sind ZMM0 bis ZMM15. Bei einigen Ausführungsformen sind, wie dargestellt, die niederwertigen 256 Bit der Register ZMM0–ZMM15 bei den entsprechenden 256 Bit gepackten oder Vektor-Registern YMM0–YMM15 mit einem Alias versehen oder sie sind diesen überlagert, obwohl dies nicht erforderlich ist. Desgleichen sind bei einigen Ausführungsformen die niederwertigen 128 Bits der Register YMM0–YMM15 bei den entsprechenden 128 Bit gepackten oder Vektor-Registern XMMO–XMM15 mit einem Alias versehen oder sie sind diesen überlagert, obwohl auch dies nicht erforderlich ist.
  • Die 512-Bit-Register ZMM0–ZMM31 sind jeweils betriebsfähig, um gepackte 512-Bit-Daten, gepackte 256-Bit-Daten oder gepackte 128-Bit-Daten aufzunehmen. Die 256-Bit-Register YMM0–YMM15 sind jeweils betriebsfähig, um gepackte 256-Bit-Daten oder gepackte 128-Bit-Daten aufzunehmen. Die 128-Bit-Register XMM0–XMM1 sind jeweils betriebsfähig, um gepackte 128-Bit-Daten aufzunehmen. Es werden unterschiedliche Datenelementgrößen unterstützt, einschließlich wenigstens 8-Bit-Byte-Daten, 16-Bit-Wort-Daten, 32-Bit-Doppelwort-Daten, einfach genaue 32-Bit-Gleitkommadaten, 64-Bit-Quadwort-Daten und doppelt genaue 64-Bit-Gleitkommadaten. Alternative Ausführungsformen von gepackten Datenregistern können unterschiedliche Anzahlen an Registern, unterschiedliche Größen von Registern umfassen, und sie können größere Register bei kleineren Registern mit einem Alias versehen oder auch nicht.
  • Historisch enthielten Prozessoren ursprünglich nur die XMM-Register. Befehle im Befehlssatz operierten mit den XMM-Registern. Später wurden die YMM-Register hinzugefügt, um die gepackten oder Vektorbreiten zu erhöhen und es zu ermöglichen, dass mehr Datenelemente gleichzeitig oder parallel verarbeitet werden. Es wurden neue Befehle zum Befehlssatz hinzugefügt, um mit diesen breiteren YMM-Registern zu arbeiten. In jüngerer Zeit wurden die ZMM-Register hinzugefügt, um die gepackten oder Vektorbreiten noch weiter zu erhöhen, sodass noch mehr Datenelemente gleichzeitig oder parallel verarbeitet werden können. Zusätzliche neue Befehle wurden zum Befehlssatz hinzugefügt, um mit diesen noch breiteren ZMM-Registern zu arbeiten. Obwohl diese neueren Befehle und breiteren gepackten Datenbreiten verfügbar sind, ist es immer noch generell wünschenswert, eine Abwärtskompatibilität bereitzustellen und die älteren Befehle nach wie vor zu unterstützen. Beispielsweise ist es für den Prozessor generell wünschenswert, dass er die älteren Befehle, die mit den XMM- und YMM-Registern arbeiten, weiter unterstützt. Da jedoch die XMM- und die YMM-Register bei breiteren ZMM-Registern mit einem Alias versehen oder diesen überlagert sind, schließt die Verwendung dieser Befehle häufig Teilregisterzugriffe auf schmalere XMM- und/oder YMM-Operanden ein, die innerhalb der breiteren 512-Bit-Register gespeichert sind.
  • 3A zeigt ein Blockdiagramm eines vorhandenen Satzes von Architekturregistern 310 bei einigen Prozessoren. Die veranschaulichten Register umfassen vier gepackte 64-Bit-POP3-Datenregister, obwohl optional mehr enthalten sein können. Diese vier gepackten 64-Bit-Datenregister können in der Darstellung zwei auch logisch als halb so viele gepackte 128-Bit-Datenregister Q0–Q1 angesehen werden. Die niedrigstwertigen 64 Bit (d. h., die Bits 63:0) des 128-Bit-Registers Q0 entsprechen dem 64-Bit-Register P0, während die höchstwertigen 64 Bit (d. h., die Bits 127:64) des 128-Bit-Registers Q0 dem 64-Bit-Register P1 entsprechen. Ähnlich entsprechen die niedrigstwertigen 64 Bit (d. h., die Bits 63:0) des 128-Bit-Registers Q1 dem 64-Bit-Register P2, während die höchstwertigen 64 Bits (d. h., die Bits 127:64) des 128-Bit-Registers Q1 dem 64-Bit-Register P3 entsprechen.
  • Anstatt die Breiten der gepackten Datenregister unter Verwendung von Aliasing zu vergrößern, wie in der Herangehensweise von 2 dargestellt, besteht die für diese vorhandenen Register verwendete Herangehensweise darin, angrenzende Paare der schmaleren 64-Bit-Register P0–P3 logisch zusammenzugruppieren, um breitere 128-Bit-Register Q0–Q1 zu bilden. Ein möglicher Nachteil einer solchen Herangehensweise des logischen Gruppierens mehrerer schmaler gepackter Datenregister, um ein einzelnes breiteres gepacktes Datenregister zu bilden, ist jedoch eine Abnahme der Anzahl von breiteren gepackten Datenregistern. Es gibt nur halb so viele 128-Bit-Register, wie es 64-Bit-Register gibt. Des Weiteren kann dieses Problem verschärft werden, wenn gar noch breitere gepackte Datenbreiten als 128 Bit betrachtet werden, da dies das logische Gruppieren von drei oder mehr schmaleren Registern einschließen kann, um ein einzelnes breiteres Register zu bilden. Beispielsweise können vier 64-Bit-Register erforderlich sein, um jedes 256-Bit-Register zu bilden.
  • 3B zeigt ein Blockdiagramm einer zweiten Ausführungsform eines Satzes von geeigneten architektonischen gepackten Datenregistern 307. Bei einem Aspekt können die Register 307 eine verbreiterte/erweiterte und kompatible Version der vorhandenen Register 310 von 3A darstellen. Die Register 307 umfassen vier breitere gepackte 256-Bit-Datenregister R0–R3. Diese vier breiteren gepackten 256-Bit-Datenregister R0–R3 implementieren die vorhandenen Register P0–P3 und Q0–Q1. Wie dargestellt, überlappen bei einigen Ausführungsformen die niederwertigen 64 Bit der Register R0–R3 die entsprechenden 64-Bit-Register P0–P3 und die niederwertigen 128 Bits der Register R0–R3 überlappen die entsprechenden 128-Bit-Register Q0–Q3, obwohl dies nicht erforderlich ist. Bei verschiedenen Ausführungsformen kann es jede gewünschte Anzahl an solchen 256-Bit-Registern geben, wie z. B. sechzehn, zweiunddreißig, vierundsechzig oder eine andere Anzahl an Registern. Bei anderen Ausführungsformen können anstatt von 256-Bit-Registern, 512-Bit-Register, 1024-Bit-Register oder andere Breiten, die entweder breiter oder schmaler sind als 256 Bit, verwendet werden. Unterschiedliche Datenelementgrößen können unterstützt werden, einschließlich beispielsweise 8-Bit-Byte, 16-Bit-Wort, 32-Bit-Doppelwort, einfach genau 32-Bit-Gleitkomma, 64-Bit-Quadwort, doppelt genau 64-Bit-Gleitkomma oder verschiedene Kombinationen davon.
  • Da vorhandene Befehle/Legacy-Befehle noch die Register P0–P3 und/oder Q0–Q1 spezifizieren können und da das Überholen solcher vorhandener Befehle/Legacy-Befehle viele Jahre oder gar Jahrzehnte in Anspruch nehmen kann, kann es wichtig sein, die Abwärtskompatibilität bereitzustellen und es zu ermöglichen, dass die vorhandenen Befehle/Legacy-Befehle auch unterstützt werden. Beispielsweise kann es wichtig sein, den vorhandenen Befehlen/Legacy-Befehlen immer noch zu ermöglichen, mit den Registern P0–P3 und/oder Q0–Q1 zu arbeiten. Wenn jedoch die Register P0–P3 und/oder Q0–Q1 breiteren Registern überlagert werden (z. B. wie in 3B dargestellt), dann kann die Ausführung von solchen Befehlen Teilregisterzugriffe einschließen, um Daten von den Registern P0–P3 und/oder Q0–Q1, die den breiteren Registern überlagert sind, zu lesen und/oder Daten in diese zu schreiben.
  • 4 zeigt ein Blockdiagramm einer Ausführungsform einer Befehlsverarbeitungsvorrichtung 400. Bei einigen Ausführungsformen kann die Befehlsverarbeitungsvorrichtung ein Prozessor sein und/oder in einem Prozessor vorhanden sein. Beispielsweise kann bei einigen Ausführungsformen die Befehlsverarbeitungsvorrichtung der Prozessor von 1 sein oder sie kann in diesem vorhanden sein. Alternativ kann die Befehlsverarbeitungsvorrichtung in einem ähnlichen oder unterschiedlichen Prozessor aufgenommen sein. Des Weiteren kann der Prozessor von 1 entweder eine ähnliche oder eine unterschiedliche Vorrichtung einschließen.
  • Die Vorrichtung 400 umfasst architektonische Register 405. Jedes der Register kann eine On-Chip-Speicherstelle darstellen, die betriebsfähig ist, um Daten zu speichern. Die Register können auf verschiedene Weisen in unterschiedlichen Mikroarchitekturen unter Verwendung wohlbekannter Techniken implementiert werden und sind auf keine spezielle Art von Schaltung begrenzt. Verschiedene unterschiedliche Arten von Registern sind geeignet. Zu Beispielen von geeigneten Arten von Registern zählen dedizierte physische Register, dynamisch mit Registerumbenennung zugewiesene physische Register sowie deren Kombinationen, wobei sie nicht darauf beschränkt sind. Bei einigen Ausführungsformen können die gepackten Datenregister 207 von 2 oder die gepackten Datenregister 307 von 3 für die Register 405 verwendet werden. Alternativ können andere Register für die Register 405 verwendet werden.
  • Die Vorrichtung kann den Teilregisterzugriff-Befehl 403 empfangen, der einen oder mehrere relativ schmalere Operanden anzeigen kann. Beispielsweise kann der Befehl von einer Befehlsholeeinheit, einer Befehlswarteschlange oder dergleichen empfangen werden. Bei einigen Ausführungsformen kann der Teilregisterzugriff-Befehl einen ersten relativ schmaleren Quelloperanden (z. B. ein Register) 422 explizit (z. B. durch ein oder mehrere Felder oder einen Satz von Bits) spezifizieren oder anderweitig anzeigen (z. B. implizit anzeigen), und er kann einen relativ schmaleren Zieloperanden (z. B. ein Register) 424 spezifizieren oder anderweitig anzeigen. Bei einigen Ausführungsformen kann der erste schmalere Quelloperand 422 Teil eines ersten breiteren Quelloperanden 423 sein, und/oder der schmalere Zieloperand 424 kann Teil eines breiteren Zieloperanden 425 sein. Als Beispiel kann der erste schmalere Quelloperand 422 ein erstes 128-Bit-XMM-Register sein, der erste breitere Quelloperand 423 kann ein erstes 512-Bit-ZMM-Register sein, dem das erste 128-Bit-XMM-Register überlagert ist, der schmalere Zieloperand 424 kann ein zweites 128-Bit-XMM-Register sein und der breitere Zieloperand 425 kann ein zweites 512-Bit-ZMM-Register sein, dem das zweite 128-Bit-XMM-Register überlagert ist. Wie hier verwendet, sind die Begriffe „schmaler” und „breiter” relative Begriffe (d. h., keine absoluten Begriffe), die relativ zueinander sind (z. B. ist der schmalere Quelloperand schmaler als der breitere Quelloperand usw.). Bei anderen Ausführungsformen kann der Teilregisterzugriff-Befehl nur ein einzelnes relativ schmaleres Register anzeigen. Des Weiteren können bei anderen Ausführungsformen eine oder mehrere Speicherstellen verwendet werden, um ein oder mehrere der Register zu ersetzen, und/oder das Zielregister kann mit einem Quellregister identisch sein.
  • Die Vorrichtung 400 umfasst auch Decodierlogik 420. Die Decodierlogik kann auch als Decodiereinheit oder Decoder bezeichnet werden. Der Teilregisterzugriff-Befehl kann einen Maschinencodebefehl, einen Befehl in Assemblersprache, einen Makrobefehl oder einen Befehl und/oder ein Steuersignal eines Befehlssatzes der Vorrichtung darstellen. Der Decoder kann den Teilregisterzugriff-Befehl decodieren, übersetzen, interpretieren, wandeln oder anderweitig umwandeln. Beispielsweise kann der Decoder einen relativ übergeordneten Teilregisterzugriff-Befehl in einen oder mehrere entsprechende relativ untergeordnete Mikrobefehle, Mikrooperationen, Mikrocode-Einsprungstellen oder andere relativ untergeordnete Befehle oder Steuersignale decodieren, welche die übergeordneten Befehle reflektieren, darstellen und/oder von diesen abgeleitet sind. Der Decoder kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden, einschließlich, aber nicht beschränkt auf, Mikrocode-Read Only Memory (ROM), Nachschlagetabellen, Hardware-Implementierungen, programmierbaren logischen Anordnungen (PLAs) und anderen Mechanismen, die verwendet werden, um aus dem Stand der Technik bekannte Decoder zu implementieren.
  • Bei einigen Ausführungsformen kann die Decodierlogik 420 Logik 421 umfassen, um den gepackten Teilregisterzugriff-Datenbefehl (der den ersten schmaleren gepackten Quelldatenoperanden 422 und den schmaleren Zieloperanden 424 anzeigt) auf einen/eine maskierten gepackten Gesamtregisterzugriff-Datenbefehl/Operation zu mappen, der/die den ersten breiteren gepackten Quelldatenoperanden 423 und den breiteren Zieloperanden 425 anzeigt. Der erste breitere gepackte Quelldatenoperand 423 ist breiter als der erste schmalere gepackte Quelldatenoperand 422 und schließt diesen ein (z. B. kann der schmalere Operand 422 mit dem breiteren Operanden 423 aliasiert sein). Der breitere Zieloperand 425 ist breiter als der schmalere Zieloperand 424 und schließt diesen ein. Bei einigen Ausführungsformen können der Teilregisterzugriff-Befehl und der maskierte Gesamtregisterzugriff-Befehl eine gleiche oder nah verwandte arithmetische, eine logische oder eine andere Operation aufweisen (z. B. können beide Addieroperationen ausführen, beide können Schiebeoperationen ausführen usw.). Bei einigen Ausführungsformen kann der maskierte Gesamtzugriff-Befehl alle Operationen des Teilregisterzugriff-Befehls plus zusätzliche Operationen, die ausmaskiert sein können, ausführen. Der Begriff „maskiert” verweist auf Prädikation oder bedingte Ausführung, die nachstehend beschrieben wird. Vorteilhafterweise kann bei einigen Ausführungsformen der Gesamtregisterzugriff-Befehl einen Gesamtregisterzugriff anstatt eines Teilregisterzugriffs ausführen.
  • Unter weiterer Bezugnahme auf 4 ist die Ausführungslogik 409 mit der Decodierlogik 420 und den Registern 405 gekoppelt. Beispielsweise kann die Ausführungslogik eine Ausführungseinheit, eine Arithmetikeinheit, eine arithmetisch-logische Einheit, eine digitale Schaltung, um arithmetische und logische Operationen auszuführen, eine funktionale Einheit, eine Einheit, die integrierte Schaltungen oder Hardware umfasst, oder dergleichen aufweisen. Die Ausführungseinheit und/oder die Befehlsverarbeitungsvorrichtung kann spezielle oder besondere Logik einschließen (z. B. Schaltungen oder andere Hardware, die potenziell mit Firmware und/oder Software kombiniert ist), die betriebsfähig ist, um Operationen auszuführen, die auf den Teilregisterzugriff-Befehl 403 ansprechen (z. B. als Reaktion auf einen oder mehrere Befehle oder Steuersignale, die vom Teilregisterzugriff-Befehl 403 durch die Decodierlogik abgeleitet sind).
  • Bei einigen Ausführungsformen kann die Ausführungseinheit betriebsfähig sein, um den maskierten gepackten Gesamtregisterzugriff-Datenbefehl/Operation mit einer gepackten Datenoperationsmaske 408 auszuführen. Bei einigen Ausführungsformen kann die gepackte Datenoperationsmaske ein Maskenelement für jedes entsprechende Ergebnisdatenelement eines gepackten Datenergebnisses umfassen, das vom maskierten gepackten Gesamtregisterzugriff-Datenbefehl/Operation gespeichert wird. Bei einigen Ausführungsformen werden alle Maskenelemente, die Ergebnisdatenelementen entsprechen, welche vom maskierten gepackten Gesamtregisterzugriff-Datenbefehl/Operation gespeichert werden, die vom gepackten Teilregisterzugriff-Datenbefehl nicht gespeichert würden, ausmaskiert. Die Ausführungseinheit kann das gepackte Datenergebnis im breiteren Zieloperanden 425 speichern.
  • Bei einigen Ausführungsformen kann der Teilregisterzugriff-Befehl keine gepackte Datenoperationsmaske anzeigen, aber die gepackte Datenoperationsmaske 408 kann dessen ungeachtet verwendet werden, um die Ausführung des Teilregisterzugriff-Befehls zu implementieren. Bei anderen Ausführungsformen kann der Teilregisterzugriff-Befehl eine gepackte Datenoperationsmaske anzeigen, aber die gepackte Datenoperationsmaske 408 kann in Bits breiter sein als die gepackte Datenoperationsmaske, die durch den Teilregisterzugriff-Befehl angezeigt wird (z. B. kann sie zusätzliche Maskenbits aufweisen, die alle absichtlich ausmaskiert sind).
  • Gepackte Datenoperationsmasken können Prädikat-Operanden oder bedingte Steuerungsoperanden darstellen. Die gepackten Datenoperationsmasken können hier auch einfach als Masken bezeichnet sein. Jede Maske kann prädizieren, bedingt steuern oder maskieren, ob mit einem Befehl verbundene Operationen an Quelldatenelementen auszuführen sind oder nicht und/oder ob Ergebnisse der Operationen in einem gepackten Datenergebnis zu speichern sind oder nicht. Jede Maske kann jeweils mehrere Maskenelemente, Prädikat-Elemente oder bedingte Steuerelemente umfassen.
  • Bei einigen Ausführungsformen kann jede Maske betriebsfähig sein, um die Operationen anhand einer Pro-Ergebnisdatenelement-Granularität zu maskieren. Bei einem Aspekt können die Maskenelemente in einer Eins-zu-Eins-Entsprechung mit Ergebnisdatenelementen enthalten sein (z. B. kann es vier Ergebnisdatenelemente und vier entsprechende Maskenelemente geben). Jedes unterschiedliche Maskenelement kann betriebsfähig sein, um eine unterschiedliche entsprechende gepackte Datenoperation und/oder Maskenspeicherung eines unterschiedlichen entsprechenden Ergebnisdatenelementes separat und/oder unabhängig von anderen zu maskieren. Beispielsweise kann ein Maskenelement betriebsfähig sein, um zu maskieren, ob eine gepackte Datenoperation an einem entsprechenden Datenelement eines gepackten Quelldatums (oder an einem Paar von entsprechenden Datenelementen von zwei gepackten Quelldaten) ausgeführt wird oder nicht und/oder ob das Ergebnis der gepackten Datenoperation in einem entsprechenden Ergebnisdatenelement gespeichert wird.
  • Allgemein kann jedes Maskenelement ein einzelnes Bit sein. Das einzelne Bit kann es ermöglichen, jede von zwei unterschiedlichen Möglichkeiten zu spezifizieren. Als Beispiel kann jedes Bit spezifizieren, ob die Operation ausgeführt wird oder ob die Operation nicht ausgeführt wird. Als ein weiteres Beispiel kann jedes Bit spezifizieren, ob ein Ergebnis der Operation gespeichert wird oder ob ein Ergebnis der Operation nicht gespeichert wird. Gemäß einer möglichen Konvention kann jedes Maskenbit einen ersten Wert aufweisen (z. B. auf binär 1 gesetzt sein), um es zu ermöglichen, dass ein Ergebnis einer gepackten Operation in einem entsprechenden Ergebnisdatenelement gespeichert wird, oder es kann einen zweiten Wert aufweisen (z. B. zurückgesetzt auf binär 0), um zu verhindern, dass ein Ergebnis einer gepackten Operation in einem entsprechenden Ergebnisdatenelement gespeichert wird. Die entgegengesetzte Konvention ist auch möglich.
  • Bei einigen Ausführungsformen kann die Operation optional unabhängig vom entsprechenden Maskenbit oder -element ausgeführt werden, aber die entsprechenden Ergebnisse der Operation können abhängig vom Wert des entsprechenden Maskenbits oder -elements in den gepackten Ergebnisdaten gespeichert werden oder nicht. Alternativ kann bei anderen Ausführungsformen die Operation optional ausgelassen (d. h. nicht ausgeführt) werden, wenn das entsprechende Maskenbit oder -element ausmaskiert ist. Bei einigen Ausführungsformen können Ausnahmen und/oder Verletzungen optional für eine Operation an einem maskierten Element unterdrückt oder von der Operation nicht erhoben werden. Bei einigen Ausführungsformen können maskierten Datenelementen entsprechende Speicherfehler optional unterdrückt oder nicht erhoben werden.
  • Um die Beschreibung nicht zu unübersichtlich werden zu lassen, wird eine relativ einfache Befehlsverarbeitungsvorrichtung 400 gezeigt und beschrieben. Bei anderen Ausführungsformen kann die Vorrichtung optional andere allgemein bekannte Komponenten, die bei Prozessoren anzutreffen sind, umfassen. Beispiele von solchen Komponenten umfassen, sind aber nicht beschränkt auf, eine Sprungvorhersageeinheit, eine Befehlsholeeinheit, Befehls- und Daten-Caches, Befehls- und Datenübersetzungspuffer (Translation Lookaside Buffers), Voreinholungspuffer (Prefetch Buffer), Mikrobefehl-Warteschlangen, Mikrobefehl-Sequenzer, eine Registerumbenennungseinheit, eine Befehlsscheduling-Einheit, Busschnittstelle-Einheiten, L2-Caches oder Caches höheren Levels, eine Rückholungseinheit (Retirement Unit) und andere Komponenten, die in Prozessoren und verschiedenen Kombinationen davon vorhanden sind. Es gibt buchstäblich zahlreiche unterschiedliche Kombinationen und Konfigurationen von Komponenten in Prozessoren und Ausführungsformen sind auf keine spezielle Kombination oder Konfiguration begrenzt. Ausführungsformen können in Prozessoren enthalten sein, die mehrere Kerne, logische Prozessoren oder Ausführungsengines aufweisen, von denen wenigstens eines eine Ausführungslogik aufweist, die betriebsfähig ist, um eine Ausführungsform eines hier offenbarten Befehls auszuführen.
  • 5 zeigt ein Block-Flussdiagramm einer Ausführungsform eines Verfahrens 530 in einem Prozessor. Bei einigen Ausführungsformen können die Operationen und/oder Verfahren von 5 vom und/oder innerhalb des Prozessors von 1 und/oder der Vorrichtung von 4 ausgeführt werden. Die Komponenten, Merkmale und speziellen optionalen Details, die für den Prozessor von 1 und die Vorrichtung von 4 beschrieben sind, finden auch optional auf die Operationen und/oder Verfahren von 5 Anwendung. Alternativ können die Operationen und/oder Verfahren von 5 von und/oder innerhalb eines ähnlichen oder vollständig unterschiedlichen Prozessors oder einer Vorrichtung ausgeführt werden. Des Weiteren kann der Prozessor von 1 und die Vorrichtung von 4 ähnliche oder unterschiedliche Operationen und/oder Verfahren ausführen wie diejenigen von 5.
  • Das Verfahren umfasst das Empfangen eines gepackten Datenbefehls bei Block 531. Bei verschiedenen Aspekten kann der erste Befehl von einer Quelle außerhalb der Chiplage (z. B. vom Systemspeicher, einer Platte oder einem System-Interconnect) oder von einer Quelle auf der Chiplage (z. B. von einem Befehlscache oder einer Befehlsholeeinheit) empfangen werden. Bei einigen Ausführungsformen kann der gepackte Datenbefehl einen ersten schmaleren gepackten Quelldatenoperanden, optional einen zweiten schmaleren gepackten Quelldatenoperanden und einen schmaleren Zieloperanden anzeigen.
  • Das Verfahren umfasst das Mappen des gepackten Datenbefehls auf eine maskierte gepackte Datenoperation bei Block 532. Bei einigen Ausführungsformen kann die maskierte gepackte Datenoperation einen ersten breiteren gepackten Quelldatenoperanden, der breiter ist als der erste schmalere gepackte Quelldatenoperand und der diesen einschließt, optional einen zweiten breiteren gepackten Quelldatenoperanden, der breiter ist als der zweite schmalere gepackte Quelldatenoperand und der diesen einschließt, und einen breiteren Zieloperanden, der breiter ist als der schmalere Zieloperand und der diesen einschließt, anzeigen. Bei einigen Ausführungsformen kann die maskierte gepackte Datenoperation einer gepackten Datenoperationsmaske anzeigen, ob der empfangene gepackte Datenbefehl ein maskierter Befehl ist oder nicht und/oder eine gepackte Datenoperationsmaske anzeigt. Bei einigen Ausführungsformen kann die Decodierlogik (z. B. eine Decodiereinheit) das Mappen ausführen.
  • Das Verfahren umfasst das Generieren einer gepackten Datenoperationsmaske bei Block 533. Bei einigen Ausführungsformen kann die gepackte Datenoperationsmaske ein Maskenelement für jedes entsprechende Ergebnisdatenelement eines gepackten Datenergebnisses umfassen, das von der maskierten gepackten Datenoperation gespeichert werden soll. Bei einigen Ausführungsformen können alle Maskenelemente, die von der maskierten gepackten Datenoperation zu speichernden Ergebnisdatenelementen entsprechen, welche vom gepackten Datenbefehl nicht gespeichert würden, ausmaskiert werden.
  • Das Verfahren umfasst das Ausführen der maskierten gepackten Datenoperation unter Verwendung der gepackten Datenoperationsmaske bei Block 534. Das Verfahren umfasst das Speichern des gepackten Datenergebnisses im breiteren Zieloperanden bei Block 535. Bei einigen Ausführungsformen kann das Speichern des gepackten Datenergebnisses im breiteren Zieloperanden das Ausführen eines Gesamtregisterschreibvorgangs anstatt eines Teilregisterschreibvorgangs umfassen. Bei einigen Ausführungsformen kann der breitere Zieloperand das Zielregister vollständig füllen, während der schmalere Zieloperand das Zielregister nur teilweise gefüllt hätte, sodass ein Teilregisterschreibvorgang erforderlich gewesen wäre, wenn das Mapping nicht ausgeführt worden wäre.
  • 6 zeigt ein Blockdiagramm, das eine Teilregisterzugriff-Operation 603 veranschaulicht, die als Reaktion auf einen Teilregisterzugriff-Befehl an schmaleren Operanden ausgeführt werden kann, welche breiteren Operanden überlagert sind. Der Teilregisterzugriff-Befehl kann erste schmalere gepackte Quelldaten 622-1 spezifizieren oder anderweitig anzeigen, kann zweite schmalere gepackte Quelldaten 622-2 spezifizieren oder anderweitig anzeigen und kann einen schmaleren Zieloperanden 624 (z. B. eine Speicherstelle) spezifizieren oder anderweitig anzeigen, wo gepackte Ergebnisdaten gespeichert werden können. Im veranschaulichten Beispiel ist jeder des ersten schmaleren Quelloperanden, des zweiten schmaleren Quelloperanden und des schmaleren Zieloperanden 128 Bit breit und umfasst vier 32-Bit-Datenelemente. In der Darstellung weisen die ersten schmaleren gepackten Quelldaten von der niedrigstwertigen Stelle (rechts) zur höchstwertigen Stelle (links) die Werte A1, A2, A3 und A4 auf. Ähnlich weisen die zweiten schmaleren gepackten Quelldaten von der niedrigstwertigen Stelle (rechts) zur höchstwertigen Stelle (links) die Werte B1, B2, B3 und B4 auf. Andere Beispiele können andere gepackte Datenbreiten (z. B. 64 Bit, 256 Bit, 512 Bit usw.) mit entweder schmaleren (z. B. 8 Bit, 16 Bit usw.) oder breiteren (z. B. 64 Bit) Datenelementen verwenden.
  • Die schmaleren 128-Bit-Operanden werden in breiteren Registern gespeichert. In der Darstellung sind die breiteren Register 512-Bit-Register. Insbesondere werden die ersten schmaleren gepackten Quelldaten 622-1 in einem ersten 512-Bit-Register 607-1 gespeichert, die zweiten schmaleren gepackten Quelldaten 622-2 in einem zweiten 512-Bit-Register 607-2 gespeichert und der schmalere Zieloperand 624 in einem dritten 512-Bit-Register 607-3 gespeichert. Bei anderen Ausführungsformen können andere Registerbreiten, wie z. B. 256-Bit-Register oder 1024-Bit-Register, verwendet werden. Die Bits 511:128 des ersten 512-Bit-Registers speichern die Werte A5 bis A16. Ähnlich speichern die Bits 511:128 des zweiten 512-Bit-Registers die Werte B5 bis B16.
  • Gepackte Ergebnisdaten werden generiert und im schmaleren Zieloperanden 624 als Reaktion auf den Befehl/die Operation gespeichert. Die gepackten Ergebnisdaten umfassen eine Vielzahl von gepackten Ergebnisdatenelementen. Im veranschaulichten Beispiel sind die gepackten Ergebnisdaten 128 Bits breit und umfassen vier 32-Bit-Ergebnisdatenelemente. Jedes der Ergebnisdatenelemente umfasst ein Ergebnis einer Operation, in diesem Fall einer Additionsoperation oder Summe, die an einem entsprechenden Paar von Quelldatenelementen von den ersten und zweiten schmaleren gepackten Quelldaten in entsprechenden relativen Bitpositionen ausgeführt wird. Beispielsweise weisen in der Darstellung die gepackten Ergebnisdaten von der niedrigstwertigen Stelle (rechts) zur höchstwertigen Stelle (links) die Werte A1 + B1, A2 + B2, A3 + B3 und A4 + B4 auf. Es ist jedoch offensichtlich, dass die Additionsoperation einfach ein erläuterndes Beispiel ist, und dass andere arithmetische (z. B. Multiplikation, Subtraktion usw.) und/oder logische Operationen (z. B. Schieben, Rotieren, logisches UND, logisches XOR usw.) ebenfalls geeignet sind.
  • Da die schmaleren ersten und zweiten gepackten 128-Bit-Quelldaten 622-1, 622-2 nur Teil der breiteren ersten und zweiten 512-Bit-Register 607-1, 607-2 sind, kann das Zugreifen auf die schmaleren Quelloperanden einen Teilregisterlesevorgang des ersten und zweiten 512-Bit-Registers umfassen. Beispielsweise können die Werte A1 bis A4 gelesen werden, ohne die Werte A5 bis A16 zu lesen. Des Weiteren kann das Speichern des Ergebnisses einen Teilregisterschreibvorgang in das dritte 512-Bit-Register umfassen, da die schmaleren gepackten 128-Bit-Ergebnisdaten und/oder der schmalere 128-Bit-Zieloperand nur Teil des breiteren dritten 512-Bit-Registers 607-3 sind. Beispielsweise können die Werte A1 + B1, A2 + B2, A3 + B3 und A4 + B4 im dritten 512-Bit-Register gespeichert werden, ohne den vorhandenen Inhalt in den Bits 511:128 des dritten 512-Bit-Registers zu zerstören (z. B. ohne die Werte von entweder A5 bis A16 oder von B5 bis B16 zu zerstören). Bei einigen Ausführungsformen kann es wünschenswert sein, die Anzahl an solchen Teilregisterzugriffen zu vermeiden oder wenigstens zu reduzieren.
  • 7 zeigt ein Blockdiagramm eines Ausführungssbeispiels einer maskierten gepackten Gesamtregisterzugriff-Datenoperation 740 an breiteren Operanden, die als Reaktion auf einen gepackten Teilregisterzugriff-Datenbefehl, der schmalere Operanden anzeigt, ausgeführt werden kann. Bei einigen Ausführungsformen kann ein Prozessor oder ein Teil davon (z. B. eine Decodiereinheit) den gepackten Teilregisterzugriff-Datenbefehl auf die maskierte gepackte Gesamtregisterzugriff-Datenoperation mappen, um einen oder mehrere Teilregisterzugriffe, die vom gepackten Teilregisterzugriff-Datenbefehl ausgeführt würden, durch einen oder mehrere entsprechende Gesamtregisterzugriffe, die von der maskierten gepackten Gesamtregisterzugriff-Datenoperation ausgeführt werden, zu ersetzen. Bei einigen Ausführungsformen, kann die maskierte gepackte Gesamtregisterzugriff-Datenoperation von 7 verwendet werden, um den Teilregisterzugriff-Befehl und/oder -Operation von 6 zu implementieren.
  • Die maskierte gepackte Gesamtregisterzugriff-Datenoperation kann erste breitere gepackte Quelldaten 723-1 mit ersten schmaleren gepackten Quelldaten 722-1, welche durch den Teilregisterzugriff-Befehl angezeigt werden, und zweite breitere gepackte Quelldaten 723-2 mit zweiten schmaleren gepackten Quelldaten 722-2, welche durch den Teilregisterzugriff-Befehl angezeigt werden, verwenden. In der veranschaulichten Ausführungsform sind die ersten und zweiten breiteren gepackten Quelldaten jeweils 512 Bit breit und weisen sechzehn 32-Bit-Datenelemente auf, und die ersten und zweiten schmaleren gepackten Quelldaten sind jeweils 128 Bit breit und weisen vier 32-Bit-Datenelemente auf, obwohl der Umfang der Erfindung in dieser Hinsicht nicht eingeschränkt ist. In der Darstellung weisen die ersten breiteren gepackten Quelldaten von der niedrigstwertigen Stelle (rechts) zur höchstwertigen Stelle (links) die Werte A1, A2, A3, A4, A5, A6 ... A16 auf. In der Darstellung weisen die zweiten breiteren gepackten Quelldaten von der niedrigstwertigen Stelle (rechts) zur höchstwertigen Stelle (links) die Werte B1, B2, B3, B4, B5, B6 ... B16 auf. Quelldatenelemente in den gleichen relativen Bitpositionen innerhalb der zwei gepackten Quelldaten (z. B. in den gleichen senkrechten Positionen, wie veranschaulicht) stellen Paare von entsprechenden Datenelementen dar. Bei anderen Ausführungsformen können stattdessen beliebige andere geeignete breitere und schmalere gepackte Quelldatenbreiten verwendet werden (z. B. 128 Bit, 256 Bit oder 1024 Bit breitere Breiten mit 32-Bit, 64 Bit, 128 Bit oder 256 Bit schmaleren Breiten). Des Weiteren können bei anderen Ausführungsformen, abgesehen von 32 Bit, andere Datenelementbreiten optional verwendet werden, wie z. B. 8-Bit-Byte, 16-Bit-Wort oder 64-Bit-Doppelwort oder doppelt genau Gleitkomma, um einige Beispiele zu nennen.
  • Die maskierte gepackte Gesamtregisterzugriff-Datenoperation kann auch eine gepackte Quelldatenoperationsmaske 708 verwenden. Wie in der Darstellung gezeigt, kann allgemein jedes Maskenelement ein einzelnes Bit sein. Wenn die Auswahl zwischen mehr als zwei unterschiedlichen Optionen gewünscht ist, können alternativ zwei oder mehr Bits für jedes Maskenelement verwendet werden. Wie auch gezeigt, kann es ein Maskenelement, in diesem Fall ein einzelnes Bit, für jedes Paar von entsprechenden Quelldatenelementen und/oder für jedes Ergebnisdatenelement geben. In der veranschaulichten Ausführungsform umfasst die gepackte Datenoperationsmaske sechzehn Maskenelemente oder Bits, da es sechzehn Paare von entsprechenden Datenelementen in den ersten und zweiten gepackten Quelldaten gibt. Jedes der sechzehn Maskenbits kann einem unterschiedlichen Ergebnisdatenelement eines gepackten Datenergebnisses im breiteren Zieloperanden 725 entsprechen. In der Darstellung sind die entsprechenden Datenelemente und ihre entsprechenden Maskenbits relativ zueinander vertikal ausgerichtet. Jedes der Maskenbits ist entweder auf binär Eins (d. h. 1) gesetzt oder auf binär Null (d. h. 0) zurückgesetzt. Die auf binär Eins (d. h. 1) gesetzten Maskenbits stellen unmaskierte Bits dar, während die Maskenbits, die auf binär Null (d. h. 0) zurückgesetzt sind, maskierte Bits darstellen.
  • Gepackte 512-Bit-Ergebnisdaten werden im breiteren Zieloperanden 725 als Reaktion auf die maskierte gepackte Gesamtregisterzugriff-Datenoperation gespeichert. Bei einigen Ausführungsformen werden die gepackten 512-Bit-Ergebnisdaten im breiteren Zieloperanden (z. B. einem 512-Bit-Register) durch einen Gesamtregisterschreibvorgang oder eine -speicherung gespeichert. Bei einigen Ausführungsformen umfassen die gepackten 512-Bit-Ergebnisdaten und/oder der breitere Zieloperand 725 einen schmaleren 128-Bit-Zieloperanden 724, der durch den entsprechenden Teilregisterzugriff-Befehl angezeigt wird. In diesem speziellen Beispiel ist die maskierte gepackte Gesamtregisterzugriff-Datenoperation eine maskierte gepackte Datenadditionsoperation, die bedingt Summen von entsprechenden Paaren von Datenelementen von den ersten und zweiten breiteren gepackten Quelldaten als gepackte Ergebnisdaten basierend auf der Prädikation von den entsprechenden Maskenbits der gepackten Datenoperationsmaske 708 im breiteren Zieloperanden 725 speichert. Wenn ein gegebenes Maskenbit gesetzt ist (d. h. 1), dann wird ermöglicht, dass eine Summe eines Paares von entsprechenden Quelldatenelementen im entsprechenden Ergebnisdatenelement gespeichert wird. Im umgekehrten Fall, wenn ein gegebenes Maskenbit zurückgesetzt ist (d. h. 0), dann wird einer Summe eines Paares von entsprechenden Quelldatenelementen nicht ermöglicht, im entsprechenden Ergebnisdatenelement gespeichert zu werden. Vielmehr kann bei einigen Ausführungsformen der ursprüngliche/Ausgangswert in diesem Ergebnisdatenelement beibehalten oder unverändert bewahrt werden.
  • Bei einigen Ausführungsformen können alle Maskenelemente, die Ergebnisdatenelementen im breiteren Zieloperanden, aber nicht im schmaleren Zieloperanden, entsprechen, absichtlich ausmaskiert werden. Bei einigen Ausführungsformen können alle Maskenelemente, die Ergebnisdatenelementen im schmaleren Zieloperanden, aber nicht im breiteren Zieloperanden, entsprechen, unmaskiert sein (z. B., es sei denn, dass der Teilregisterzugriff-Befehl selbst Prädikation verwendet, um einige dieser Ergebnisdatenelemente auszumaskieren). Beispielsweise kann eine gleiche Anzahl an niedrigstwertigen (geringste Signifikation) Maskenbits als Ergebnisdatenelemente im schmaleren Zieloperanden auf binär Eins gesetzt werden, während eine gleiche Anzahl an höchstwertigen oder signifikantesten Maskenbits als Ergebnisdatenelemente im breiteren Zieloperanden, aber nicht im schmaleren Zieloperanden, auf binär Null zurückgesetzt werden kann. Unter weiterer Bezugnahme auf die veranschaulichte Ausführungsform weist die gepackte Quelldatenoperationsmaske von der niedrigstwertigen Stelle (rechts) zur höchstwertigen Stelle (links) die Werte 1, 1, 1, 1, 0, 0 ... 0 auf. Das heißt, dass die vier niedrigstwertigen Maskenbits gesetzt sind, während die zwölf höchstwertigen Maskenbits zurückgesetzt sind. Die Maskenbits können während der Ausführungszeit dynamisch bestimmt werden, während die Teilregisterzugriffe generell während des Kompilierens statisch fixiert sind. Für jedes der Maskenbits, das gesetzt ist, kann eine Summe in einem entsprechenden Ergebnisdatenelement gespeichert werden. Beispielsweise speichern die niedrigstwertigen vier Ergebnisdatenelemente die Werte A1 + B1, A2 + B2, A3 + B3 und A4 + B4, wie dargestellt. Bei dieser Ausführungsform sind alle Datenelemente innerhalb des niederwertigen 128-Bit-Abschnitts der 512-Bit-Operanden, die zum ursprünglichen Teilregisterzugriff-Befehl/Operation gehören (z. B. der Befehl/die Operation von 6), unmaskiert.
  • Im umgekehrten Fall sind alle höherwertigen Datenelemente in den Bits 511:128 ausmaskiert, da sie nicht zum ursprünglichen Teilregisterzugriff-Befehl/Operation gehören, der/die nur 128-Bit-Operanden verwendete. Für jedes der Maskenbits, die zurückgesetzt sind, kann außer einer Summe ein anderer Wert im entsprechenden Ergebnisdatenelement gespeichert werden. Beispielsweise kann bei einigen Ausführungsformen, in denen eine Quelle als ein Ziel erneut benutzt wird, zusammenführendes Maskieren (merging-masking) ausgeführt werden, bei dem ein entsprechender Wert eines Datenelements von breiteren gepackten Quelldaten in einem gegebenen ausmaskierten Ergebnisdatenelement gespeichert werden kann. Beispielsweise können, wie in der Darstellung gezeigt, die Werte A5 bis A16 der Bits 511:128 der ersten breiteren gepackten Quelldaten in den Bits 511:128 des breiteren Zieloperanden gespeichert werden. Alternativ können bei einer weiteren Ausführungsform die Werte B5 bis B16 in den Bits 511:128 des breiteren Zieloperanden gespeichert werden. Bei anderen Ausführungsformen können die ursprünglichen Inhalte in den ausmaskierten Ergebnisdatenelementen des Ziels beibehalten oder unverändert gelassen werden, wenn das Ziel ein anderes Register ist als die Quellregister. Vorteilhafterweise können diese gelöschten höchstwertigen Maskenbits verwendet werden, um diesen Abschnitt des breiteren 512-Bit-Registers auszumaskieren, der für den ursprünglichen Teilregisterzugriff-Befehl nicht erforderlich ist (z. B. der Befehl/die Operation von 6), der nur 128-Bit-Operanden verwendete.
  • Die Maskenbits können auf verschiedene Weisen implementiert werden. Als ein Beispiel kann bei einigen Ausführungsformen eine Auswahloperation ausgeführt werden, bei der entweder das Ergebnis der Operation ausgewählt wird, um in das entsprechende Ergebnisdatenelement geschrieben zu werden, oder der ursprüngliche Wert des entsprechenden Ergebnisdatenelements im Ziel (d. h., die ursprünglichen Inhalte/beginnenden Inhalte) ausgewählt werden kann, um in das entsprechende Ergebnisdatenelement zurückgeschrieben zu werden. Als ein weiteres Beispiel kann bei anderen Ausführungsformen ein bedingter Schreibvorgang ausgeführt werden, bei dem ein Maskenbit bedingt, ob ein Ergebnis der Operation in das entsprechende Ergebnisdatenelement geschrieben wird oder ob kein Schreibvorgang ausgeführt wird und dadurch das Ergebnisdatenelement mit seinen ursprünglichen Inhalten/beginnenden Inhalten belassen wird.
  • Es ist jedoch offensichtlich, dass dies nur ein erläuterndes Beispiel einer geeigneten maskierten gepackten Gesamtregisterzugriff-Datenoperation an breiteren Operanden ist, die verwendet werden kann, um einen gepackten Teilregisterzugriff-Datenbefehl, der schmalere Operanden anzeigt, zu implementieren. Andere Operationen an zwei gepackten Quelldaten, wie z. B. Subtraktion, Multiplikation, Division, gepackte Vergleiche und dergleichen, sind auch geeignet. Noch weitere geeignete Operationen umfassen einzelne gepackte Quelldatenoperanden. Beispiele umfassen gepacktes Schieben, gepacktes Rotieren, gepackte Größenordnungsskalierung, gepackte reziproke Quadratwurzel und dergleichen, sind aber nicht beschränkt darauf. Noch weitere geeignete Operationen umfassen Operationen an mehr als zwei gepackten Quelldaten, gepackte Quelldaten von unterschiedlichen Größen, gepackte Quelldaten unterschiedlicher Anzahl an Datenelementen, Operationen, die in einer horizontalen oder nicht vertikal ausgerichteten Art und Weise ausgeführt werden, teilweise skalare und teilweise gepackte Operationen und noch weitere im Stand der Technik bekannte Operationen.
  • Bei anderen Ausführungsformen können Teilregisterzugriffbefehle/-operationen und/oder die entsprechenden maskierten gepackten Gesamtregisterzugriff-Datenoperationen, die zur deren Implementierung verwendet werden, anhand von Zwischenbits (intermediate bits) in einem Register arbeiten. Beispielsweise können die Zwischenbits einen angrenzenden Bereich von Bits (z. B. ein oder mehrere gepackte Datenelemente) zwischen einem niedrigstwertigen Bereich von Bits (z. B. ein oder mehrere gepackte Datenelemente) und einem höchstwertigen Bereich von Bits (z. B. ein oder mehrere gepackte Datenelemente) darstellen.
  • 8 zeigt ein Blockdiagramm, das eine Teilregisterzugriff-Operation 803 veranschaulicht, die als Reaktion auf einen Teilregisterzugriff-Befehl an schmaleren Operanden, die breiteren Operanden überlagert sind, ausgeführt werden kann. Der Teilregisterzugriff-Befehl kann erste schmalere gepackte Quell-Daten 822-1 spezifizieren oder anderweitig anzeigen, kann zweite schmalere gepackte Quelldaten 822-2 spezifizieren oder anderweitig anzeigen und kann einen schmaleren Zieloperanden 824 (z. B. eine Speicherstelle) spezifizieren oder anderweitig anzeigen, wo gepackte Ergebnisdaten gespeichert werden können. Im veranschaulichten Beispiel ist jeder des ersten schmaleren Quelloperanden, des zweiten schmaleren Quelloperanden und des schmaleren Zieloperanden 128 Bits breit und umfasst zwei 64-Bit-Datenelemente, obwohl der Umfang der Erfindung in dieser Hinsicht nicht eingeschränkt ist. In der Darstellung weisen die ersten schmaleren gepackten Quelldaten von der niedrigstwertigen Stelle (rechts) zur höchstwertigen Stelle (links) die Werte A1 und A2 auf. Ähnlich weisen die zweiten schmaleren gepackten Quelldaten von der niedrigstwertigen Stelle (rechts) zur höchstwertigen Stelle (links) die Werte B1 und B2 auf. Andere Beispiele können andere gepackte Datenbreiten (z. B. 64 Bit, 256 Bit, 512 Bit usw.) mit entweder schmaleren (z. B. 8 Bit, 16 Bit usw.) oder breiteren (z. B. 64 Bit) Datenelementen verwenden.
  • Die schmaleren 128-Bit-Operanden werden in breiteren Registern gespeichert. In der Darstellung sind die breiteren Register 256-Bit-Register. Insbesondere sind die ersten schmaleren gepackten Quelldaten 822-1 in einem ersten 256-Bit-Register 807-1 gespeichert, die zweiten schmaleren gepackten Quelldaten 822-2 sind in einem zweiten 256-Bit-Register 807-2 gespeichert und der schmalere Zieloperand 824 wird in einem dritten 256-Bit-Register 807-3 gespeichert. Bei anderen Ausführungsformen können andere Registerbreiten, wie z. B. 512-Bit-Register oder 1024-Bit-Register verwendet werden. Die Bits 255:128 des ersten 256-Bit-Registers speichern die Werte A3 und A4. Ähnlich speichern die Bits 255:128 des zweiten 256-Bit-Registers die Werte B3 und B4.
  • Gepackte Ergebnisdaten werden generiert und im schmaleren Zieloperanden 824 als Reaktion auf den Befehl/die Operation gespeichert. Im veranschaulichten Beispiel sind die gepackten Ergebnisdaten 128 Bit breit und umfassen zwei Datenelemente. Ein niedrigstwertiges Datenelement in den Bits 63:0 umfasst den Wert A1 des entsprechenden Datenelements von den ersten gepackten Quelldaten. In diesem Fall wurde keine Additionsoperation ausgeführt, um dieses Datenelement zu generieren. Ein höherwertiges Datenelement in den Bits 127:64 umfasst eine Summe A2 + B2, welche die Summe des Paares von entsprechenden Datenelementen der ersten und zweiten gepackten Quelldaten darstellt. Da die schmaleren ersten und zweiten gepackten 128-Bit-Quelldaten 822-1, 822-2 nur Teil der breiteren ersten und zweiten 256-Bit-Register 807-1, 807-2 sind, kann das Zugreifen auf die schmaleren Quelloperanden Teilregisterlesevorgänge umfassen. Des Weiteren kann das Speichern des Ergebnisses einen Teilregisterschreibvorgang umfassen, da die schmaleren gepackten 128-Bit-Ergebnisdaten und/oder der schmalere 128-Bit-Zieloperand nur Teil des breiteren dritten 256-Bit-Registers 807-3 sind. Beispielsweise kann bei einigen Ausführungsformen das erste 256-Bit-Register als der Zieloperand erneut benutzt werden und die Summe A2 + B2 kann in den Bits 127:64 dieses 256-Bit-Registers gespeichert werden, ohne andere vorher existierende Inhalte dieses Registers zu überschreiben (z. B. ohne A1, A3 und A4 zu überschreiben). Dies kann einen Teilregisterschreibvorgang einbeziehen. Bei einigen Ausführungsformen kann es wünschenswert sein, die Anzahl an solchen Teilregisterzugriffen zu vermeiden oder wenigstens zu reduzieren.
  • 9 zeigt ein Blockdiagramm eines Ausführungsbeispiels einer maskierten gepackten Gesamtregisterzugriff-Datenoperation 940 an breiteren Operanden, die als Reaktion auf einen gepackten Teilregisterzugriff-Datenbefehl ausgeführt werden kann, der schmalere Operanden anzeigt. Bei einigen Ausführungsformen kann ein Prozessor oder ein Abschnitt davon (z. B. eine Decodiereinheit) den gepackten Teilregisterzugriff-Datenbefehl auf die maskierte gepackte Gesamtregisterzugriff-Datenoperation mappen, um einen oder mehrere Teilregisterzugriffe, die vom gepackten Teilregisterzugriff-Datenbefehl ausgeführt würden, durch einen oder mehrere entsprechende Gesamtregisterzugriffe, die von der maskierten gepackten Gesamtregisterzugriff-Datenoperation ausgeführt werden, zu ersetzen. Bei einigen Ausführungsformen kann die maskierte gepackte Gesamtregisterzugriff-Datenoperation von 9 verwendet werden, um den Teilregisterzugriff-Befehl und/oder -Operation von 8 zu implementieren.
  • Die maskierte gepackte Gesamtregisterzugriff-Datenoperation kann erste breitere gepackte Quelldaten 923-1 mit ersten schmaleren gepackten Quelldaten 922-1, die durch den Teilregisterzugriff-Befehl angezeigt werden, und zweite breitere gepackte Quelldaten 923-2 mit zweiten schmaleren gepackten Quelldaten 922-2, die durch den Teilregisterzugriff-Befehl angezeigt werden, verwenden. Bei der veranschaulichten Ausführungsform sind die ersten und zweiten breiteren gepackten Quelldaten jeweils 256 Bit breit und weisen vier 64-Bit-Datenelemente auf, und die ersten und zweiten schmaleren gepackten Quelldaten sind jeweils 128 Bits breit und weisen zwei 64-Bit-Datenelemente, obwohl der Umfang der Erfindung in dieser Hinsicht nicht eingeschränkt ist auf. In der Darstellung weisen die ersten breiteren gepackten Quelldaten von der niedrigstwertigen Stelle (rechts) zur höchstwertigen Stelle (links) die Werte A1, A2, A3 und A4 auf. In der Darstellung weisen die zweiten breiteren gepackten Quelldaten von der niedrigstwertigen Stelle (rechts) zur höchstwertigen Stelle (links) die Werte B1, B2, B3 und B4 auf. Bei anderen Ausführungsformen können stattdessen beliebige andere geeignete breitere und schmalere gepackte Quelldatenbreiten verwendet werden. Des Weiteren können bei anderen Ausführungsformen andere Datenelementbreiten optional verwendet werden.
  • Die maskierte gepackte Gesamtregisterzugriff-Datenoperation kann auch eine gepackte Quelldatenoperationsmaske 908 verwenden. Bei der veranschaulichten Ausführungsform gibt es vier entsprechende Maskenbits, da es vier Datenelemente im Zieloperanden gibt. Bei diesem Beispiel weist die gepackte Quelldatenoperationsmaske von der niedrigstwertigen Stelle (rechts) zur höchstwertigen Stelle (links) die Werte 0, 1, 0, 0 auf.
  • Gepackte 256-Bit-Ergebnisdaten werden im breiteren Zieloperanden 925 als Reaktion auf die maskierte gepackte Gesamtregisterzugriff-Datenoperation gespeichert. Bei einigen Ausführungsformen werden die gepackten 256-Bit-Ergebnisdaten im breiteren Zieloperanden (z. B. einem 256-Bit-Register) durch einen Gesamtregisterschreib- oder -speichervorgang gespeichert. Bei einigen Ausführungsformen umfassen die gepackten 256-Bit-Ergebnisdaten und/oder der breitere Zieloperand 925 einen schmaleren 128-Bit-Zieloperanden 924, der durch den entsprechenden Teilregisterzugriff-Befehl angezeigt wird. Wie gezeigt, kann nur eine einzelne Summe in den gepackten 256-Bit-Ergebnisdaten gespeichert werden. Das heißt, dass eine Summe A2 + B2 in den Bits 127:64 des Zieloperanden 925 gespeichert werden kann. Nur das einzelne Maskenbit, das den Bits 127:64 des Zieloperanden 925 entspricht, wo die Summe A2 + B2 gespeichert wird, ist gesetzt. Alle anderen Maskenbits sind zurückgesetzt. Für jedes der gelöschten Maskenbits wird ein Wert eines entsprechenden Datenelements von den ersten breiteren gepackten Quelldaten 923-1 im Zieloperanden 925 gespeichert. Insbesondere wird der Wert A1 in den Bits 63:0 des Zieloperanden gespeichert, der Wert A3 wird in den Bits 191:128 des Zieloperanden gespeichert und der Wert A4 wird in den Bits 255:192 des Zieloperanden gespeichert. Diese anderen Maskenbits werden ausmaskiert, da sie gemäß dem/der ursprünglichen Teilregisterzugriff-Befehl/-Operation nicht zur einzelnen Summe A2 + B2 gehören. Vorteilhafterweise können diese gelöschten höchstwertigen Maskenbits verwendet werden, um diesen Abschnitt des breiteren 256-Bit-Registers auszumaskieren, der für den ursprünglichen Teilregisterzugriff-Befehl (z. B. der Befehl/die Operation von 8) nicht erforderlich ist, und die Ausführung eines Gesamtregisterzugriffs anstatt eines Teilregisterzugriffs zu ermöglichen. Wie zuvor sind viele andere arithmetische und/oder logische Operationen ebenfalls geeignet.
  • 67 zeigen eine Ausführungsform, bei der die schmaleren Operanden die niedrigstwertigen Bits der breiteren Operanden belegen. 89 zeigen eine Ausführungsform, bei der die schmaleren Operanden oder wenigstens die Abschnitte der schmaleren Operanden von Interesse, Zwischenabschnitte zwischen den niedrigstwertigen und höchstwertigen Enden der breiteren Operanden belegen. Bei noch weiteren Ausführungsformen können die schmaleren Operanden die höchstwertigen Abschnitte der breiteren Operanden belegen. Bei noch weiteren Ausführungsformen kann eine Kombination von solchen Positionen optional verwendet werden.
  • Bei den vorstehend beschriebenen Beispielen arbeiteten die Teilregisterzugriffbefehle/-operationen an entsprechenden Paaren von Datenelementen (d. h. jenen in entsprechenden relativen Bitpositionen innerhalb des ersten und des zweiten Quelloperanden). In den Darstellungen waren diese entsprechenden Paare von Datenelementen vertikal ausgerichtet. Bei anderen Ausführungsformen können Teilregisterzugriffbefehle/-operationen an wenigstens einigen nicht-korrespondierenden Datenelementen arbeiten (d. h. jenen, die sich nicht in entsprechenden relativen Bitpositionen innerhalb des ersten und des zweiten Quelloperanden befinden). Diese nicht entsprechenden Datenelemente können als nicht ausgerichtet bezeichnet werden. Bei einigen Ausführungsformen kann eine Schiebe-, Tausch-, Permutations- oder eine andere Datenumordnungsoperation ausgeführt werden, um das Ausrichten von nicht-korrespondierenden Datenelementen zu unterstützen, sodass sie sich in ausgerichteten/entsprechenden relativen Bitpositionen in dem ersten und dem zweiten Quelloperanden befinden, sodass vertikale SIMD-Operationen an den ausgerichteten/entsprechenden Datenelementen in dem ersten und dem zweiten Quelloperanden durch eine maskierte gepackte Gesamtregisterzugriff-Datenoperation, die verwendet wird, um den Teilregisterzugriff-Befehl/die -Operation zu implementieren, ausgeführt werden können. Bei einigen Ausführungsformen kann die Datenumordnungsoperation verwendet werden, um einen ersten Operanden oder ein oder mehrere Datenelemente des ersten Operanden mit einem zweiten Operanden oder einem oder mehreren Datenelementen des zweiten Operanden und/oder mit einem Zieloperanden oder einem oder mehreren Datenelementen des Zieloperanden auszurichten. Bei einigen Ausführungsformen kann die Datenumordnungsoperation nach dem Decodieren des gepackten Teilregisterzugriff-Datenbefehls und dem Beschluss, den gepackten Teilregisterzugriff-Datenbefehl durch die Datenumordnungsoperation und die maskierte gepackte Gesamtregisterzugriff-Datenoperation zu implementieren, durch einen Decoder bestimmt werden.
  • Die nachfolgend beschriebenen 10 und 11 weisen bestimmte Ähnlichkeiten mit den zuvor beschriebenen 8 und 9 auf. Um die Beschreibung nicht zu unübersichtlich werden zu lassen, tendiert die nachfolgende Erörterung dazu, die neuen oder unterschiedlichen Merkmale und/oder Aspekte der 10 und 11 zu betonen, ohne alle Merkmale und/oder Aspekte zu wiederholen, die optional gleich oder ähnlich sein können. Es ist jedoch offensichtlich, dass die optionalen Funktionen und/oder Aspekte und Abwandlungen die zuvor für 8 und 9 beschrieben wurden, generell auch auf 10 und 11 anwendbar sind, sofern nicht anderweitig angegeben oder klar ersichtlich.
  • 10 zeigt ein Blockdiagramm, das eine Teilregisterzugriff-Operation 1003 veranschaulicht, die als Reaktion auf einen Teilregisterzugriff-Befehl an nicht entsprechenden und/oder nicht ausgerichteten Datenelementen von schmaleren Operanden, die breiteren Operanden überlagert sind, ausgeführt werden kann. Der Teilregisterzugriff-Befehl kann erste schmalere gepackte Quelldaten 1022-1, zweite schmalere gepackte Quelldaten 1022-2 und einen schmaleren Zieloperanden 1024 spezifizieren oder anderweitig anzeigen. Im veranschaulichten Beispiel ist jeder des ersten schmaleren Quelloperanden, des zweiten schmaleren Quelloperanden und des schmaleren Zieloperanden 128 Bits breit und umfasst zwei 64-Bit-Datenelemente, obwohl der Umfang der Erfindung in dieser Hinsicht nicht eingeschränkt ist. In der Darstellung weisen die ersten schmaleren gepackten Quelldaten die Werte A1 und A2 auf. Ähnlich weisen die zweiten schmaleren gepackten Quelldaten die Werte B1 und B2 auf. Die ersten schmaleren gepackten Quelldaten 1022-1 werden in einem ersten breiteren 256-Bit-Register 1007-1 gespeichert, die zweiten schmaleren gepackten Quelldaten 1022-2 werden in einem zweiten breiteren 256-Bit-Register 1007-2 gespeichert und der schmalere Zieloperand 1024 wird in einem dritten breiteren 256-Bit-Register 1007-3 gespeichert. Die Bits 255:128 des ersten breiteren 256-Bit-Registers speichern die Werte A3 und A4. Ähnlich speichern die Bits 255:128 des zweiten breiteren 256-Bit-Registers die Werte B3 und B4.
  • Gepackte Ergebnisdaten werden generiert und im schmaleren Zieloperanden 1024 als Reaktion auf den Befehl/die Operation gespeichert. Im veranschaulichten Beispiel sind die gepackten Ergebnisdaten 128 Bits breit und umfassen zwei Datenelemente. Ein niedrigstwertiges Datenelement in den Bits 63:0 umfasst den Wert A1 des entsprechenden Datenelements von den ersten gepackten Quelldaten. In diesem Fall wurde keine Additionsoperation ausgeführt, um dieses Datenelement zu generieren. Ein höherwertiges Datenelement in den Bits 127:64 umfasst eine Summe A2 + B1. Es ist zu beachten, dass dies eine Summe von nicht entsprechenden Datenelementen in den ersten und zweiten schmaleren gepackten Quelldaten ist. Insbesondere wird das Datenelement A2 in den Bits 127:64 der ersten schmaleren gepackten Quelldaten zum Datenelement B1 in den Bits 63:0 von den zweiten schmaleren gepackten Quelldaten addiert. Die Datenelemente A2 und B1 belegen nicht entsprechende oder nicht ausgerichtete Bitpositionen in dem ersten und dem zweiten gepackten Quelldaten.
  • 11 zeigt ein Blockdiagramm eines Beispiels einer Ausführungsform einer maskierten gepackten Gesamtregisterzugriff-Datenoperation 1140, die an entsprechenden und/oder ausgerichteten Datenelementen von breiteren Operanden ausgeführt werden kann, die als Reaktion auf einen gepackten Teilregisterzugriff-Datenbefehl, der Operationen an nicht entsprechenden und/oder nicht ausgerichteten Datenelementen von schmaleren Operanden anzeigt, ausgeführt werden kann. Bei einigen Ausführungsformen kann ein Prozessor oder ein Abschnitt davon (z. B. eine Decodiereinheit) den gepackten Teilregisterzugriff-Datenbefehl auf die maskierte gepackte Gesamtregisterzugriff-Datenoperation mappen, um einen oder mehrere Teilregisterzugriffe, die vom gepackten Teilregisterzugriff-Datenbefehl ausgeführt würden, durch einen oder mehrere entsprechende Gesamtregisterzugriffe, die von der maskierten gepackten Gesamtregisterzugriff-Datenoperation ausgeführt werden, zu ersetzen. Bei einigen Ausführungsformen kann die maskierte gepackte Gesamtregisterzugriff-Datenoperation, welche die entsprechenden und/oder ausgerichteten Datenelemente von 11 einbezieht, verwendet werden, um den Teilregisterzugriff-Befehl und/oder die Teilregisterzugriff-Operation zu implementieren, welche die nicht entsprechenden und/oder nicht ausgerichteten Datenelemente von 10 einbezieht.
  • Die maskierte gepackte Gesamtregisterzugriff-Datenoperation kann erste breitere gepackte Quelldaten 1123-1 mit ersten schmaleren gepackten Quelldaten 1122-1, die durch den Teilregisterzugriff-Befehl angezeigt werden, und zweite breitere gepackte Quelldaten 1123-2 mit zweiten schmaleren gepackten Quelldaten 1122-2, die durch den Teilregisterzugriff-Befehl angezeigt werden, verwenden. In der veranschaulichten Ausführungsform sind die ersten und zweiten breiteren gepackten Quelldaten jeweils 256 Bits breit und weisen vier 64-Bit-Datenelemente auf und die ersten und zweiten schmaleren gepackten Quelldaten sind jeweils 128 Bits breit und weisen zwei 64-Bit-Datenelemente auf, obwohl der Umfang der Erfindung in dieser Hinsicht nicht eingeschränkt ist. In der Darstellung weisen die ersten breiteren gepackten Quelldaten die Werte A1, A2, A3 und A4 auf. Die zweiten breiteren gepackten Quelldaten weisen die Werte B1, B2, B3 und B4 auf. Bei anderen Ausführungsformen können stattdessen beliebige andere geeignete breitere und schmalere gepackte Quelldatenbreiten und/oder beliebige andere geeignete Datenelementbreiten optional verwendet werden.
  • Bei einigen Ausführungsformen kann eine Schiebe-, Tausch-, Permutation- oder eine andere Datenumordnungsoperation ausgeführt werden, um das Ausrichten von nicht entsprechenden und/oder nicht ausgerichteten Datenelementen, die angezeigt werden, um durch einen Teilregisterzugriff-Befehl verarbeitet zu werden, zu unterstützen, sodass sie in einer ausgerichteten Art und Weise durch eine maskierte gepackte Gesamtregisterzugriff-Datenoperation an breiteren Operanden verarbeitet werden können. Beispielsweise kann eine Schiebe-, Tausch-, Permutation- oder eine andere Datenumordnungsoperation ausgeführt werden, um vor der maskierten gepackten Gesamtregisterzugriff-Datenoperation von 11 das Ausrichten der nicht entsprechenden und/oder nicht ausgerichteten Datenelemente A2 und B1 des/der gepackten Teilregisterzugriff-Datenbefehls/-Operation von 10 zu unterstützen. Wie gezeigt, können in der veranschaulichten Ausführungsform die zweiten breiteren gepackten Quelldaten 1123-2 um 64 Bits verschoben werden, sodass das Datenelement, das den Wert B1 aufweist, sich in den Bits 127:64 der zweiten breiteren gepackten Quelldaten anstatt in den Bits 63:0 der zweiten breiteren gepackten Quelldaten befindet. Die Werte A2 und B1 sind in entsprechenden Datenelementen in entsprechenden Bitpositionen und/oder relativ zueinander ausgerichtet. Vorteilhafterweise kann dies ermöglichen, dass eine vertikale SIMD-Operation (z. B. eine gepackte Addition) ausgeführt wird. Bei anderen Ausführungsformen können anstatt eines Schiebens andere Datenumordnungsoperationen, wie z. B. ein Drehen, ein Tauschen, ein Permutieren oder verschiedene andere Datenumordnungsoperationen ausgeführt werden, die aus dem Stand Technik bekannt sind und die für die spezielle erforderliche Umordnung geeignet sind, um eine Ausrichtung zu erreichen.
  • Für einige Teilregisterzugriffbefehle/Operationen (z. B. jene, die in 6 und 8 gezeigt sind) kann keine Ausrichtung oder Datenneuordnungsoperation erforderlich sein.
  • Bei einigen Ausführungsformen kann die Ausrichtungs- oder Datenumordnungsoperation annulliert werden, wenn sie nicht erforderlich ist, wenn der Prozessor eine derartige Ausrichtungs- oder Datenumordnungsoperation verwendet. Beispielsweise kann anstatt eines tatsächlichen Schiebens ein Schieben um null Bits ausgeführt werden. Als weiteres Beispiel kann eine Tausch- oder Permutationsoperation Datenelemente auf ihre ursprüngliche Ausgangsposition durch Tauschen oder Permutieren bringen.
  • Die maskierte gepackte Gesamtregisterzugriff-Datenoperation kann auch eine gepackte Quelldatenoperationsmaske 1108 verwenden. In der veranschaulichten Ausführungsform gibt es vier entsprechende Maskenbits, da es vier Datenelemente im Zieloperanden gibt. Bei diesem Beispiel weist die gepackte Quelldatenoperationsmaske von der niedrigstwertigen Stelle (rechts) zur höchstwertigen Stelle (links) die Werte 0, 1, 0, 0 auf.
  • Gepackte 256-Bit-Ergebnisdaten werden im breiteren 256-Bit-Zieloperanden 1125 als Reaktion auf die maskierte gepackte Gesamtregisterzugriff-Datenoperation gespeichert. Bei einigen Ausführungsformen werden die gepackten 256-Bit-Ergebnisdaten im breiteren Zieloperanden (z. B. einem 256-Bit-Register) durch einen Gesamtregisterschreib- oder -speichervorgang gespeichert. Bei einigen Ausführungsformen umfassen die gepackten 256-Bit-Ergebnisdaten und/oder der breitere Zieloperand 1125 einen schmaleren 128-Bit-Zieloperanden 1124, der durch den entsprechenden Teilregisterzugriff-Befehl angezeigt wird. Wie gezeigt, kann nur eine einzelne Summe in den gepackten 256-Bit-Ergebnisdaten gespeichert werden. Das heißt, dass eine Summe A2 + B1 in den Bits 127:64 des Zieloperanden 1125 gespeichert werden kann. Nur das einzelne Maskenbit, das den Bits 127:64 des Zieloperanden 1125 entspricht, wo die Summe A2 + B1 gespeichert wird, ist gesetzt. Alle anderen Maskenbits sind zurückgesetzt. Für jedes der zurückgesetzten Maskenbits wird ein Wert eines entsprechenden Datenelementes von den ersten breiteren gepackten Quelldaten 1123-1 im Zieloperanden 1125 gespeichert. Insbesondere wird der Wert A1 in den Bits 63:0 des Zieloperanden gespeichert, der Wert A3 wird in den Bits 191:128 des Zieloperanden gespeichert und der Wert A4 wird in den Bits 255:192 des Zieloperanden gespeichert. Diese anderen Maskenbits werden ausmaskiert, da sie gemäß dem/der ursprünglichen Teilregisterzugriff-Befehl/-Operation nicht zur einzelnen Summe A2 + B1 gehören. Vorteilhafterweise können diese zurückgesetzten höchstwertigen Maskenbits verwendet werden, um diesen Abschnitt des breiteren 256-Bit-Registers auszumaskieren, der für den ursprünglichen Teilregisterzugriff-Befehl (z. B. den Befehl/die Operation von 10) nicht erforderlich ist, und die Ausführung eines Gesamtregisterzugriffs anstatt eines Teilregisterzugriffs zu ermöglichen. Wie zuvor sind viele andere arithmetische und/oder logische Operationen außer der Addition ebenfalls/alternativ geeignet.
  • 12 ist eine Tabelle 1250, die veranschaulicht, dass die Anzahl an gepackten Datenoperationsmasken-Bits von der gepackten Datenbreite und der gepackten Datenelementbreite abhängt. Gepackte Datenbreiten von 128 Bit, 256 Bit und 512 Bit werden gezeigt, obwohl andere Breiten ebenfalls möglich sind. Gepackte Datenelementbreiten von 8-Bit-Bytes, 16-Bit-Worten, 32-Bit-Doppelwörter (DWords) oder einfach genau Gleitkomma und 64-Bit-Quadwörter (QWords) oder Doppelt-genau-Gleitkomma werden betrachtet, obwohl andere Breiten ebenfalls möglich sind. Wenn die gepackte Datenbreite 128 Bits beträgt, können, wie dargestellt, 16 Bits zum Maskieren verwendet werden, wenn die gepackte Datenelementbreite 8 Bits beträgt, 8 Bits können zum Maskieren verwendet werden, wenn die gepackte Datenelementbreite 16 Bits beträgt, 4 Bits können zum Maskieren verwendet werden, wenn die gepackte Datenelementbreite 32 Bits beträgt, und 2 Bits können zum Maskieren verwendet werden, wenn die gepackte Datenelementbreite 64 Bits beträgt. Wenn die gepackte Datenbreite 256 Bits beträgt, können 32 Bits zum Maskieren verwendet werden, wenn die gepackte Datenelementbreite 8 Bits beträgt, 16 Bits können zum Maskieren verwendet werden, wenn die gepackte Datenelementbreite 16 Bits beträgt, 8 Bits können zum Maskieren verwendet werden, wenn die gepackte Datenelementbreite 32 Bits beträgt, und 4 Bits können zum Maskieren verwendet werden, wenn die gepackte Datenelementbreite 64 Bits beträgt. Wenn die gepackte Datenbreite 512 Bits beträgt, können 64 Bits zum Maskieren verwendet werden, wenn die gepackte Datenelementbreite 8 Bits beträgt, 32 Bits können zum Maskieren verwendet werden, wenn die gepackte Datenelementbreite 16 Bits beträgt, 16 Bits können zum Maskieren verwendet werden, wenn die gepackte Datenelementbreite 32 Bits beträgt, und 8 Bits können zum Maskieren verwendet werden, wenn die gepackte Datenelementbreite 64 Bitsbeträgt.
  • 13 zeigt ein Blockdiagramm eines Ausführungsbeispiels eines geeigneten Satzes von gepackten Datenoperationsmasken-Registern 1308. Jedes der gepackten Datenoperationsmasken-Register kann verwendet werden, um eine gepackte Datenoperationsmaske zu speichern. Bei der veranschaulichten Ausführungsform umfasst der Satz acht gepackte Datenoperationsmasken-Register mit der Bezeichnung k0 bis k7. Alternative Ausführungsformen können entweder weniger als acht (z. B. zwei, vier, sieben usw.) oder mehr als acht (z. B. zehn, sechzehn, zweiunddreißig usw.) gepackte Datenoperationsmasken-Register umfassen. Bei der veranschaulichten Ausführungsform ist jedes der gepackten Datenoperationsmasken-Register 64 Bit. Bei alternativen Ausführungsformen können die Breiten der gepackten Datenoperationsmasken-Register entweder breiter als 64 Bit (z. B. 128 Bit usw.) oder schmaler als 64 Bits (z. B. 8 Bits, 16 Bits, 32 Bits usw.) sein. Die gepackten Datenoperationsmasken-Register können auf verschiedene Weisen unter Verwendung weithin bekannter Verfahren und Techniken implementiert werden und sind auf keine bekannte spezielle Art von Schaltung begrenzt. Bei einigen Ausführungsformen können die gepackten Datenoperationsmasken-Register ein separater dedizierter Satz von Architekturregistern sein. Bei einigen Ausführungsformen können die Befehle die gepackten Datenoperationsmasken-Register in Bits oder einem Feld codieren oder spezifizieren. Beispielsweise kann ein prädizierter (predicated) Befehl drei Bits (z. B. ein 3-Bit-Feld) verwenden, um irgendeines der acht gepackten Datenoperationsmasken-Register zu codieren oder zu spezifizieren. Bei alternativen Ausführungsformen können entweder weniger oder mehr Bits verwendet werden, wenn es entsprechend weniger oder mehr gepackte Datenoperationsmasken-Register gibt.
  • 14 zeigt ein Diagramm, das ein Ausführungsbeispiel eines gepackten Datenoperationsmasken-Registers 1408 veranschaulicht und zeigt, dass die Anzahl an Bits, die als eine gepackte Datenoperationsmaske und/oder für die Maskierung verwendet wird, von der gepackten Datenbreite und der Datenelementbreite abhängen kann. Das veranschaulichte Maskenregister ist 64 Bits breit, obwohl dies nicht erforderlich ist. Abhängig von den gepackten Daten- und Datenelementbreiten können entweder alle 64 Bit oder nur ein Teilsatz der 64 Bit zum Maskieren verwendet werden. Wenn ein einzelnes Pro-Element-Maskenbit verwendet wird, ist im Allgemeinen die Anzahl an zum Maskieren verwendeten Maskenbits gleich der gepackten Datenbreite geteilt durch die gepackte Datenelementbreite. Mehrere veranschaulichende Beispiele sind für gepackte 512 Bits breite Daten gezeigt. Das heißt, dass nur 8 Bits (z. B. die niedrigstwertigen 8 Bits) des Registers zum Maskieren verwendet werden, wenn die gepackte Datenbreite 512 Bits beträgt und die Datenelementbreite 64 Bits beträgt. Wenn die gepackte Datenbreite 512 Bits und die Datenelementbreite 32 Bits beträgt, werden nur 16 Bits zum Maskieren verwendet. Wenn die gepackte Datenbreite 512 Bits und die Datenelementbreite 16 Bits beträgt, werden nur 32 Bits zum Maskieren verwendet. Wenn die gepackte Datenbreite 512 Bits und die Datenelementbreite 8 Bits beträgt, werden alle 64 Bits zum Maskieren verwendet. Ein prädizierter Befehl kann nur auf den Teilsatz von Bits (z. B. den niedrigstwertigen Teilsatz von Bits) zugreifen und/oder diesen verwenden, der basierend auf den mit den Befehlen verbundenen gepackten Daten- und Datenelementbreiten zum Maskieren erforderlich ist. In der veranschaulichten Ausführungsform wird der niedrigstwertige Teilsatz oder Abschnitt des Registers zum Maskieren verwendet, obwohl dies nicht erforderlich ist. Bei alternativen Ausführungsformen kann ein höchstwertiger Teilsatz oder ein anderer Teilsatz optional verwendet werden. Des Weiteren wird in der veranschaulichten Ausführungsform nur eine gepackte 512-Bit-Datenbreite betrachtet, das gleiche Prinzip findet jedoch auf andere gepackte Datenbreiten, wie z. B. 256-Bit- und 128-Bit-Breiten Anwendung.
  • Beispiele von Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf verschiedene Weisen für unterschiedliche Zwecke und in unterschiedlichen Prozessoren implementiert werden. Zum Beispiel können Implementierungen von solchen Kernen umfassen: 1) einen Allzweck-In-Order-Kern, der für Allzweckcomputing gedacht ist, 2) einen Hochleistungsallzweck-Out-of-Order-Kern, der für Allzweckcomputing gedacht ist, 3) einen Spezialkern, der hauptsächlich für Grafik und/oder wissenschaftliches (Durchsatz) Computing gedacht ist. Implementierungen von unterschiedlichen Prozessoren können umfassen: 1) eine CPU, die einen oder mehrere Allzweck-In-Order-Kerne, die für Allzweckcomputing gedacht sind, und/oder einen oder mehrere Allzweck-Out-of-Order-Kerne, die für Allzweckcomputing gedacht sind, enthält, und 2) einen Coprozessor, der einen oder mehrere Spezialkerne, die hauptsächlich für Grafik und/oder Wissenschaft (Durchsatz) gedacht sind, enthält. Diese unterschiedlichen Prozessoren (ihren zu unterschiedlichen Computersystem-Architekturen, die umfassen können: 1) den Coprozessor auf einem von der CPU separaten Chip, 2) den Coprozessor auf einer separaten Chiplage (die) im gleichen Gehäuse wie eine CPU, 3) den Coprozessor auf der gleichen Chiplage wie eine CPU (in welchem Fall ein derartiger Coprozessor manchmal als Speziallogik wie integrierte Grafik und/oder wissenschaftliche (Durchsatz) Logik oder als Spezialkern bezeichnet wird), und 4) ein System auf einem Chip, das auf der gleichen Chiplage die beschriebene CPU (manchmal als Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den vorstehend beschriebenen Coprozessor und die Zusatzfunktionalität umfassen kann. Beispiele von Kernarchitekturen werden als Nächstes beschrieben, gefolgt von Beschreibungen von Beispielen für Prozessoren und Computerarchitekturen.
  • Beispiele von Kernarchitekturen
  • In-Order- und Out-Of-Order-Kern-Blockdiagramm
  • 15A zeigt ein Blockdiagramm, das sowohl ein Beispiel einer In-Order-Pipeline als auch ein Beispiel einer Registerumbenennung, einer Out-of-Order-Issue/Ausführungspipeline gemäß Ausführungsformen der Erfindung veranschaulicht. 15B zeigt ein Blockdiagramm, das sowohl ein Ausführungsbeispiel eines In-Order-Architektur-Kerns als auch ein Beispiel einer Registerumbenennung, eines Out-of-Order-Issue-/Ausführungsarchitekturkerns, die in einem Prozessor gemäß Ausführungsformen der Erfindung einzuschließen sind, veranschaulicht. Die Kästen mit durchgezogenen Linien in 15A–B veranschaulichen die In-Order-Pipeline und den In-Order-Kern, während die optionale Hinzufügung der gestrichelten Kästen die Registerumbenennung, Out-of-Order-Issue-/-Ausführungspipeline und den Kern veranschaulicht. Da der In-Order-Aspekt ein Teilsatz des Out-of-Order-Aspektes ist, wird der Out-of-Order-Aspekt beschrieben.
  • In 15A umfasst eine Prozessor-Pipeline 1500 eine Befehlsholstufe 1502, eine Längendecodierstufe 1504, eine Decodierstufe 1506, eine Allokierungsstufe 1508, eine Umbenennungsstufe 1510, eine Scheduling- (auch bekannt als eine Dispatch- oder Issue-)-Stufe 1512, eine Registerlese-/Speicherlesestufe 1514, eine Ausführungsstufe 1516, eine Rückschreib-/Speicherschreibstufe 1518, eine Ausnahmebehandlungsstufe 1522 und eine Festschreibbestufe (commit) 1524 ein.
  • 15B zeigt Prozessorkern 1590 einschließlich einer Frontend-Einheit 1530, die mit einer Ausführungsengine-Einheit 1550 gekoppelt ist, und beide sind mit einer Speichereinheit 1570 gekoppelt. Der Kern 1590 kann ein Kern mit eingeschränktem Befehlssatz (RISC), ein Kern mit komplexem Befehlssatz (CISC), ein Very Long Instruction Word-(VLIW)-Kern oder ein Hybridkern oder alternativer Kerntyp sein. Als eine weitere Option kann der Kern 1590 ein Spezialkern, wie z. B. ein Netzwerk- oder Kommunikationskern, eine Komprimierungsengine, ein Coprozessor-Kern, Allzweck-Computing-Grafikprozessor-(GPGPU)-Kern, Grafikkern oder dergleichen sein.
  • Die Frontend-Einheit 1530 umfasst eine Sprungvorhersageeinheit 1532, die mit einer Befehlscacheeinheit 1534 gekoppelt ist, die mit einem Befehlsübersetzungspuffer (TLB) 1536 gekoppelt ist, der mit einer Befehlsholeinheit 1538 gekoppelt ist, die mit einer Decodiereinheit 1540 gekoppelt ist. Die Decodiereinheit 1540 (oder Decoder) kann Befehle dekodieren und eine oder mehrere Mikrooperationen, Mikrocode-Einsprungstellen, Mikrobefehle, weitere Befehle oder weitere Steuersignale generieren und ausgeben, welche aus den ursprünglichen Befehle dekodiert, diese widerspiegeln oder davon abgeleitet sind. Die Decodiereinheit 1540 kann unter Verwendung mehrerer unterschiedlicher Mechanismen implementiert werden. Beispiele von geeigneten Mechanismen umfassen Nachschlagetabellen, Hardware-Implementierungen, programmierbare logische Anordnungen (PLAs), Mikrocode-Read Only Memory (ROM) usw., sind aber nicht beschränkt darauf. Bei einer Ausführungsform umfasst der Kern 1590 ein Mikrocode-ROM oder ein anderes Medium, das Mikrocode für bestimmte Makrobefehle (z. B. in der Decodiereinheit 1540 oder anderweitig innerhalb der Frontend-Einheit 1530) speichert. Die Decodiereinheit 1540 ist mit einer Umbenenn-/Allokierungseinheit 1552 in der Ausführungsengine-Einheit 1550 gekoppelt.
  • Die Ausführungsengine-Einheit 1550 umfasst die Umbenenn-/Allokierungseinheit 1552, die mit einer Rückwandlungseinheit (Retirement) 1554 und einer Reihe von einer oder mehreren Scheduler-Einheiten 1556 gekoppelt ist. Die Scheduler-Einheit bzw. -Einheiten 1556 stellen jegliche Anzahl von unterschiedlichen Schedulern dar, einschließlich Reservierungsstationen, zentralem Befehlsfenster usw. Die Scheduler-Einheit bzw. Einheiten 1556 sind mit der bzw. den physischen Registerspeicher-Einheiten 1558 gekoppelt. Jede der physischen Registerspeicher-Einheiten 1558 stellt einen oder mehrere physische Registerspeicher dar, von denen unterschiedliche eine oder mehrere unterschiedliche Datenarten, wie ganze Skalarzahl, Skalargleitkommazahl, gepackte ganze Zahl, gepackte Gleitkommazahl, ganze Vektor-Zahl, Vektor-Gleitkommazahl, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. darstellen. Bei einer Ausführungsform umfasst die physische Registerspeicher-Einheit 1558 eine Vektor-Register-Einheit, eine Schreib-Maskenregister-Einheit und eine Skalar-Register-Einheit. Diese Registereinheiten können architektonische Vektor-Register, Vektor-Maskenregister und Allzweckregister bereitstellen. Die physische bzw. physischen Registerspeicher-Einheiten 1558 werden von der Rückwandlungseinheit (Retirement) 1554 überlappt, um verschiedene Arten zu veranschaulichen, mit denen Registerumbenennung und Out-of-Order-Ausführung implementiert werden können (z. B. unter Verwendung von Umordnungspuffern und Rückwandlungsregisterdateien, unter Verwendung von einer zukünftigen bzw. von zukünftigen Dateien, eines bzw. von Historie-Puffern und einem bzw. von Rückwandlungsregisterspeichern, unter Verwendung von Register-Maps und eines Pools von Registern usw.). Die Rückwandlungseinheit 1554 und die physischen Registerspeicher-Einheit(en) 1558 sind mit dem bzw. den Ausführungs-Cluster 1560 gekoppelt. Die Ausführungs-Cluster 1560 umfassen einen Satz von einer oder mehreren Ausführungseinheiten 1562 und einen Satz von einer oder mehreren Speicherzugriffeinheiten 1564. Die Ausführungseinheiten 1562 können verschiedene Operationen (z. B. Schieben, Addition, Subtraktion, Multiplikation) und an verschiedenen Typen von Daten (z. B. Skalargleitkomma, gepackte ganze Zahl, gepackte Gleitkommazahl, ganze Vektor-Zahl, Vektor-Gleitkommazahl) ausführen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten umfassen können, die spezifischen Funktionen oder Sätzen von Funktionen gewidmet sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten umfassen, die jeweils alle Funktionen ausführen. Die Scheduler-Einheit(en) 1556, physischen Registerspeicher-Einheit(en) 1558 und Ausführungs-Cluster 1560 sind als mögliche Vielzahl gezeigt, da bestimmte Ausführungsformen separate Pipelines für bestimmte Arten von Daten/Operationen erzeugen (z. B. eine ganzzahlige Skalarpipeline, eine Skalargleitkomma-/gepackte ganzzahlige/gepackte Gleitkomma-/Vektor-Ganzzahl-/Vektor-Gleitkomma-Pipeline und/oder eine Speicherzugriff-Pipeline, die jeweils ihre eigene Scheduler-Einheit, physische Registerspeicher-Einheit und/oder Ausführungs-Cluster aufweisen – und im Fall von einer separaten Speicherzugriff-Pipeline werden bestimmte Ausführungsformen implementiert, bei denen nur der Ausführungs-Cluster dieser Pipeline die Speicherzugriff-Einheit(en) 1564 aufweist. Es sollte auch verstanden werden, dass eine oder mehrere dieser Pipelines Out-of-Order-Issue-/-Ausführungs- und der Rest In-Order-Pipelines sein können, wo separate Pipelines verwendet werden.
  • Der Satz von Speicherzugriff-Einheiten 1564 ist mit der Speichereinheit 1570 gekoppelt, welche eine Daten-TLB-Einheit 1572 umfasst, die mit einer Daten-Cache-Einheit 1574 gekoppelt ist, welche mit einer Level-2-(L2)-Cache-Einheit 1576 gekoppelt ist. Bei einem Ausführungsbeispiel können die Speicherzugriff-Einheiten 1564 eine Ladeeinheit, eine Adressspeicherungseinheit und eine Speicherdateneinheit umfassen, von denen jede mit der Daten-TLB-Einheit 1572 in der Speichereinheit 1570 gekoppelt ist. Die Befehlscacheeinheit 1534 ist weiter mit einer L2-Cache-Einheit 1576 in der Speichereinheit 1570 gekoppelt. Die L2-Cache-Einheit 1576 ist mit einem oder mehreren anderen Cache-Levels und schließlich mit einem Hauptspeicher gekoppelt.
  • Beispielsweise kann das Beispiel für Registerumbenennung, Out-of-Order-Issue-/Ausführungs-Kernarchitektur die Pipeline 1500 wie folgt implementieren: 1) die Befehlsholeinheit 1538 führt die Befehlshol- und Längendecodierungsstufen 1502 und 1504 aus, 2) die Decodiereinheit 1540 führt die Decodierstufe 1506 aus, 3) die Umbenenn-/Allokierungseinheit 1552 führt die Allokierungsstufe 1508 und die Umbenennungsstufe 1510 aus, 4) die Scheduler-Einheit(en) 1556 führt bzw. führen die Planungsstufe 1512 aus, 5) die physische bzw. physischen Registerspeicher-Einheit(en) 1558 und die Speichereinheit 1570 führen die Registerlese-/Speicherlesestufe 1514 aus, der Ausführungs-Cluster 1560 führt die Ausführungsstufe 1516 aus, 6) die Speichereinheit 1570 und die physische bzw. physischen Registerspeicher-Einheit(en) 1558 führen die Rückschreib-/Speicherschreibstufe 1518 aus, 7) verschiedene Einheiten können an der Ausnahmebehandlungsstufe 1522 beteiligt sein, und 8) die Rückwandlungseinheit 1554 und die physische bzw. physischen Registerspeicher-Einheit(en) 1558 führen die Festschreibestufe (Commit) 1524 aus.
  • Der Kern 1590 kann einen oder mehrere Befehlssätze (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden), den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, Kalifornien, den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) von ARM Holdings aus Sunnyvale, Kalifornien) einschließlich der bzw. den hier beschriebenen Befehlen unterstützen. Bei einer Ausführungsform umfasst der Kern 1590 Logik, um eine gepackte Datenbefehlssatz-Erweiterung (z. B. AVX1, AVX2) zu unterstützen, wodurch ermöglicht wird, dass die von vielen Multimedia-Anwendungen verwendeten Operationen unter Verwendung von gepackten Daten ausgeführt werden können.
  • Es sollte selbstverständlich sein, dass der Kern Multithreading (das Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen und dies auf vielerlei Arten tun kann, einschließlich Zeitanteil-Multithreading (time sliced multithreading), simultanes Multithreading (wo ein einzelner physischer Kern einen logischen Kern für jeden der Threads bereitstellt, die dieser physische Kern gleichzeitig ausführt) oder eine Kombination davon (z. B. Zeitanteil-Befehlsholen und -Decodieren und nachfolgendes simultanes Multithreading wie bei der Intel® Hyperthreading-Technologie).
  • Während Registerumbenennung im Zusammenhang mit Out-of-Order-Ausführung beschrieben wird, sollte es selbstverständlich sein, dass Registerumbenennung in einer In-Order-Architektur verwendet werden kann. Während die veranschaulichte Ausführungsform des Prozessors auch die separaten Befehls- und Daten-Cache-Einheiten 1534/1574 und eine gemeinsam benutzte L2-Cache-Einheit 1576 umfasst, können alternative Ausführungsformen einen einzelnen internen Cachespeicher sowohl für Befehle als auch Daten, wie z. B. einen internen Level-1-(L1)-Cache oder mehrere Levels von internem Cache aufweisen. Bei einigen Ausführungsformen kann das System eine Kombination eines internen Cachespeichers und eines externen Cache-Speichers umfassen, die sich außerhalb des Kerns und/oder des Prozessors befinden. Alternativ kann sich der gesamte Cache außerhalb des Kerns und/oder des Prozessors befinden.
  • Spezielle Beispiele von In-Order-Kernarchitektur
  • 16A–B veranschaulichen ein Blockdiagramm eines spezielleren Beispiels einer In-oder-Kernarchitektur, deren Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne der gleichen Art und/oder unterschiedlicher Arten) in einem Chip wäre. Die Logikblöcke kommunizieren durch ein Kopplungsstruktur-Netzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit fester Funktionslogik, Speicher-I/O-Schnittstellen und anderer erforderlicher I/O-Logik, abhängig von der Anwendung.
  • 16A ist ein Blockdiagramm eines einzelnen Prozessorkerns zusammen mit seiner Verbindung zum Kopplungsstruktur-Netzwerk auf der Chiplage 1602 und mit seinem lokalen Teilsatz des L2-Caches 1604 gemäß Ausführungsformen der Erfindung. Bei einer Ausführungsform unterstützt ein Befehlsdecoder 1600 den x86-Befehlssatz mit einer gepackten Datenbefehlsatz-Erweiterung. Ein L1-Cache 1606 ermöglicht Zugriffe mit niedriger Latenzzeit auf Cache-Speicher in Skalar- und Vektor-Einheiten. Während bei einer Ausführungsform (um das Design zu vereinfachen) eine Skalar-Einheit 1608 und eine Vektor-Einheit 1610 separate Registersätze verwenden (die Skalarregister 1612 bzw. Vektorregister 1614) und dazwischen übertragene Daten in Speicher geschrieben und dann von einem L1-Cache 1606 zurückgelesen werden, können alternative Ausführungsformen der Erfindung eine unterschiedliche Herangehensweise verwenden (z. B. einen einzelnen Registersatz verwenden oder einen Kommunikationspfad umfassen, der ermöglicht, dass Daten zwischen den zwei Registerspeichern übertragen werden, ohne geschrieben und zurückgelesen zu werden).
  • Der lokale Teilsatz des L2-Caches 1604 ist Teil eines globalen L2-Caches, der in separate lokale Teilsätze, einen pro Prozessorkern, unterteilt ist. Jeder Prozessorkern weist einen Direktzugriff-Pfad zu seinem eigenen lokalen Teilsatz des L2-Caches 1604 auf. Von einem Prozessorkern gelesene Daten werden in dessem L2-Cache-Teilsatz 1604 gespeichert und ein Zugriff darauf kann parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen, schnell erfolgen. Von einem Prozessorkern geschriebene Daten werden in dessen eigenen L2-Cache-Teilsatz 1604 gespeichert und von anderen Teilsätzen gegebenenfalls geräumt. Das Ringnetzwerk stellt Kohärenz für gemeinsame Daten sicher. Das Ringnetzwerk ist bidirektional, um Agenten, wie Prozessorkernen, L2-Caches und anderen Logikblöcken, zu ermöglichen, miteinander innerhalb des Chips zu kommunizieren. Jeder Ring-Datenpfad ist 1012 Bit breit pro Richtung.
  • 16B zeigt eine erweiterte Ansicht eines Teils des Prozessorkerns in 16A gemäß Ausführungsformen der Erfindung. 16B umfasst einen Teil des L1-Daten-Caches 1606A von L1-Cache 1604 sowie mehr Details bezüglich der Vektor-Einheit 1610 und des Vektor-Registers 1614. Insbesondere ist die Vektor-Einheit 1610 eine 16 breite Vektorverarbeitungseinheit (VPU) (siehe die 16 breite ALU 1628), die ein oder mehr aus ganzer Zahl, einfach genauer Gleitkommazahl und doppelt genauer Gleitkommazahl ausführt. Die VPU unterstützt Swizzling der Registereingänge mit der Swizzle-Einheit 1620, numerische Umwandlung mit den numerischen Umwandlungseinheiten 1622A-B und Replikation mit der Replikationseinheit 1624 bei der Speichereingabe. Die Schreib-Maskenregister 1626 ermöglichen es, resultierende Vektorschreibvorgänge zu prädizieren.
  • Prozessor mit integriertem Memory-Controller und Grafik
  • 17 zeigt ein Blockdiagramm eines Prozessors 1700, der mehr als einen Kern, einen integrierten Memory-Controller und integrierte Grafik gemäß Ausführungsformen der Erfindung aufweisen kann. Die Kästen mit durchgezogenen Linien in 17 veranschaulichen einen Prozessor 1700 mit einem Einzelkern 1702A, einem Systemagenten 1710, einem Satz von einer oder mehreren Bus-Steuerungseinheiten 1716, während die optionale Hinzufügung der gestrichelten Kästen einen alternativen Prozessor 1700 mit mehreren Kernen 1702A–N, einen Satz von einer oder mehreren integrierten Memory-Controller-Einheiten 1714 in der Systemagent-Einheit 1710 und Speziallogik 1708 veranschaulicht.
  • Deshalb können unterschiedliche Implementierungen des Prozessors 1700 Folgendes umfassen: 1) eine CPU mit der Speziallogik 1708, die integrierte Grafik und/oder wissenschaftliche (scientific) (Durchsatz) Logik ist (die einen oder mehrere Kerne umfassen kann) und die Kerne 1702A–N, die ein oder mehrere Allzweck-Kerne sind (z. B. Allzweck-In-Order-Kerne, Allzweck-Out-of-Order-Kerne, eine Kombination der beiden), 2) einen Coprozessor mit den Kernen 1702A-N, die eine große Anzahl von Spezialkernen sind, welche hauptsächlich für Grafik und/oder Wissenschaft (scientific) (Durchsatz) gedacht sind, und 3) einen Coprozessor mit den Kernen 1702A-N, die eine große Anzahl von Allzweck-In-Order-Kernen sind. Somit kann der Prozessor 1700 ein Allzweckprozessor, Coprozessor oder Spezialprozessor sein, wie z. B. ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsengine, ein Grafikprozessor, GPGPU (Allzweck-Grafikprozessor), ein Many Integrated Core-(MIC)-Coprozessor mit hohem Durchsatz (einschließlich 30 oder mehr Kernen), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 1700 kann ein Teil von und/oder auf einem oder mehreren Substraten unter Verwendung von einer beliebigen aus einer Anzahl von Verfahrenstechniken, wie z. B. BiCMOS, CMOS oder NMOS, implementiert werden.
  • Die Speicherhierarchie umfasst einen oder mehrere Cache-Levels innerhalb der Kerne, einen Satz oder eine oder mehrere gemeinsam benutzte Cache-Einheiten 1706 und externen Speicher (nicht dargestellt), der mit dem Satz von integrierten Memory-Controller-Einheiten 1714 gekoppelt ist. Der Satz von gemeinsam benutzten Cache-Einheiten 1706 kann einen oder mehrere Mid-Level-Caches, wie Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Levels, einen Last-Level-Cache (LLC) und/oder Kombinationen davon umfassen. Während bei einer Ausführungsform eine ringbasierte Kopplungsstruktur-Einheit 1712 die integrierte Grafiklogik 1708, den Satz von gemeinsam benutzten Cache-Einheiten 1706 und die Systemagent-Einheit 1710/integrierten Memory-Controller-Einheit(en) 1714 verbindet, können alternative Ausführungsformen eine beliebige Anzahl von allgemein bekannten Techniken verwenden, um solche Einheiten miteinander zu verbinden. Bei einer Ausführungsform wird Kohärenz zwischen einer oder mehreren Cache-Einheiten 1706 und den Kernen 1702-A-N aufrechterhalten.
  • Bei einigen Ausführungsformen sind einer oder mehrere der Kerne 1702A-N zu Multithreading fähig. Der Systemagent 1710 umfasst jene Komponenten, welche die Kerne 1702A-N koordinieren und betreiben. Die Systemagent-Einheit 1710 kann beispielsweise eine Power Control Unit (PCU) und eine Anzeigeeinheit umfassen. Die PCU kann Logik und Komponenten sein oder umfassen, die für das Regulieren des Energiezustands der Kerne 1702A-N und der integrierten Grafiklogik 1708 erforderlich sind. Die Anzeigeeinheit dient zum Betreiben einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 1702A-N können in Bezug auf den Architektur-Befehlssatz homogen oder heterogen sein, d. h., zwei oder mehr der Kerne 1702A-N können in der Lage sein, den gleichen Befehlssatz auszuführen, während andere in der Lage sein können, nur einen Teilsatz dieses Befehlssatzes oder eines unterschiedlichen Befehlssatzes auszuführen.
  • Beispiele von Computerarchitekturen
  • 1821 sind Blockdiagramme von Beispielen für Computerarchitekturen. Andere Systemdesigns und Konfigurationen, die aus dem Stand der Technik bekannt sind für Laptops, Desktops, Handheld-PCs, Personal Digital Assistant, Engineering Workstations, Server, Netzwerkgeräte, Netzwerk-Hubs, Switches, eingebettete Prozessoren, Digitalsignal-Prozessoren (DSPs), Grafikbaugruppen, Videospiel-Geräte, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Media-Player, Handgeräte und verschiedene andere elektronische Geräte, sind ebenfalls geeignet. Im Allgemeinen ist eine sehr große Vielfalt von Systemen oder elektronischen Geräten, die fähig sind, einen Prozessor und/oder andere Ausführungslogik, wie sie hier offenbart sind, einzubinden, generell geeignet.
  • Bezugnehmend auf 18 wird ein Blockdiagramm eines Systems 1800 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 1800 kann einen oder mehrere Prozessoren 1810, 1815 umfassen, die mit einem Controller-Hub 1820 gekoppelt sind. Bei einer Ausführungsform umfasst der Controller-Hub 1820 einen Grafikspeicher-Controller-Hub (GMCH) 1890 und einen Eingabe/Ausgabe-Hub (IOH) 1850 (die sich auf separaten Chips befinden können); der GMCH 1890 umfasst Speicher- und Grafikcontroller, mit denen Speicher 1840 und ein Coprozessor 1845 gekoppelt sind; der IOH 1850 koppelt die Eingabe/Ausgabe-(I/O)-Geräte 1860 mit GMCH 1890. Alternativ ist der Speicher- oder der Grafikcontroller oder beide innerhalb des Prozessors integriert (wie hiernach beschrieben), der Speicher 1840 und der Coprozessor 1845 sind direkt mit dem Prozessor 1810 und dem Controller-Hub 1820 in einem Einzelchip mit IOH 1850 gekoppelt.
  • Die optionale Natur der zusätzlichen Prozessoren 1815 ist in 18 mit gestrichelten Linien gekennzeichnet. Jeder Prozessor 1810, 1815 kann einen oder mehrere von den hier beschriebenen Prozessorkernen umfassen und kann eine Version des Prozessors 1700 sein.
  • Der Speicher 1840 kann beispielsweise dynamisches Random Access Memory (DRAM), Phasenwechselspeicher (PCM) oder eine Kombination der beiden sein. Für mindestens eine Ausführungsform kommuniziert der Controller Hub 1820 mit dem bzw. den Prozessoren 1810, 1815 über einen Mehrpunktverbindungsbus, wie einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie QuickPath-Kopplungsstruktur (QPI), oder eine ähnliche Verbindung 1895.
  • Bei einer Ausführungsform ist der Coprozessor 1845 ein Spezialprozessor, wie z. B. ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsengine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. Bei einer Ausführungsform kann der Controller-Hub 1820 einen integrierten Grafikbeschleuniger umfassen.
  • Es kann eine Vielzahl von Differenzen zwischen den physischen Ressourcen 1810, 1815 hinsichtlich eines Spektrums von Leistungsmetriken geben, einschließlich architektonischer, mikroarchitektonischer, thermischer, Energieverbrauchseigenschaften und dergleichen.
  • Bei einer Ausführungsform führt der Prozessor 1810 Befehle aus, die Datenverarbeitungsoperationen von einer allgemeinen Art steuern. Coprozessor-Befehle können innerhalb der Befehle eingebettet sein. Der Prozessor 1810 erkennt diese Coprozessor-Befehle als von einer Art, die durch den angeschlossenen Coprozessor 1845 ausgeführt werden sollte. Demgemäß gibt der Prozessor 1810 diese Coprozessor-Befehle (oder Steuersignale, die Coprozessor-Befehle darstellen) auf einem Coprozessor-Bus oder einer anderen Kopplungsstruktur an den Coprozessor 1845 aus. Der bzw. die Coprozessoren 1845 akzeptieren die empfangenen Coprozessor-Befehle und führen diese aus.
  • Bezugnehmend auf 19 ist ein Blockdiagramm eines ersten spezielleren Beispiels eines Systems 1900 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 19 gezeigt, ist das Mehrprozessorsystem 1900 ein Punkt-zu-Punkt-Kopplungsstruktur-System und umfasst einen ersten Prozessor 1970 und einen zweiten Prozessor 1980, die über eine Punkt-zu-Punkt-Kopplungsstruktur 1950 gekoppelt sind. Jeder der Prozessoren 1970 und 1980 kann eine Version des Prozessors 1700 sein. Bei einer Ausführungsform der Erfindung sind die Prozessoren 1970 und 1980 jeweils die Prozessoren 1810 und 1815, während Coprozessor 1938 Coprozessor 1845 ist. Bei einer weiteren Ausführungsform sind die Prozessoren 1970 und 1980 entsprechend Prozessor 1810 und Coprozessor 1845.
  • Die Prozessoren 1970 und 1980 sind als die integrierten Memory-Controller-(IMC)-Einheiten 1972 bzw. 1982 einschließend gezeigt. Prozessor 1970 umfasst auch als Teil seiner Bus-Steuerungseinheiten die Punkt-zu-Punkt-(P-P)-Schnittstellen 1976 und 1978, ähnlich umfasst der zweite Prozessor 1980 die P-P-Schnittstellen 1986 und 1988. Die Prozessoren 1970, 1980 können Informationen über eine P-P-Schnittstelle 1950 unter Verwendung der P-P-Schnittstellenschaltungen 1978, 1988 austauschen. Wie in 19 gezeigt, koppeln die IMCs 1972 und 1982 die Prozessoren mit entsprechenden Speichern, das heißt, einem Speicher 1932 und einem Speicher 1934, die Teile des Hauptspeichers sein können, die lokal an den entsprechenden Prozessoren angebracht sind.
  • Die Prozessoren 1970, 1980 können jeweils Informationen mit einem Chipsatz 1990 über individuelle P-P-Schnittstellen 1952, 1954 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 1976, 1994, 1986, 1998 austauschen. Der Chipsatz 1990 kann optional Informationen mit dem Coprozessor 1938 über eine hochleistungsfähige Schnittstelle 1939 austauschen. Bei einer Ausführungsform ist der Coprozessor 1938 ein Spezialprozessor, wie z. B. ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsengine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • In jedem Prozessor kann ein gemeinsam genutzter Cache (nicht dargestellt) in einem der Prozessoren oder außerhalb von den beiden Prozessoren enthalten sein, jedoch mit den Prozessoren über die P-P-Kopplungsstruktur derart verbunden, dass eine (oder beide) der lokalen Cache-Informationen der Prozessoren im gemeinsam benutzten Cache gespeichert werden können, wenn ein Prozessor in einen Energiesparmodus versetzt wird.
  • Der Chipsatz 1990 kann mit einem ersten Bus 1916 über eine Schnittstelle 1996 gekoppelt sein. Bei einer Ausführungsform kann der erste Bus 1916 ein Peripheral Component Interconnect-(PCI)-Bus oder ein Bus wie ein PCI Express-Bus oder ein anderer I/O-Kopplungsstruktur-Bus der 3. Generation sein, obwohl der Umfang der vorliegenden Erfindung in dieser Hinsicht nicht eingeschränkt ist.
  • Wie in 19 dargestellt, können verschiedene I/O-Geräte 1914 zusammen mit einer Bus-Brücke 1918, die den ersten Bus 1916 mit einem zweiten Bus 1920 koppelt, mit dem ersten Bus 1916 gekoppelt sein. Bei einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 1915, wie Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie beispielsweise Grafikbeschleuniger oder Digital signalverarbeitungs-(DSP)-Einheiten), feldprogrammierbare Gate-Arrays oder irgendein anderer Prozessor mit dem ersten Bus 1916 gekoppelt. Bei einer Ausführungsform kann der zweite Bus 1920 ein Bus mit niedriger Pinzahl (LPC) sein. Bei einer Ausführungsform können verschiedene Geräte mit einem zweiten Bus 1920 gekoppelt sein, darunter zum Beispiel eine Tastatur/Maus 1922, die Kommunikationsgeräte 1927 und eine Datenspeichereinheit 1928 wie ein Festplattenlaufwerk oder ein anderes Massenspeichergerät, das Befehle/Code und Daten 1930 enthalten kann. Weiter kann Audio-I/O 1024 mit dem zweiten Bus 1020 gekoppelt sein. Zu beachten ist, dass andere Architekturen möglich sind. Beispielsweise kann ein System anstatt der Punkt-zu-Punkt-Architektur von 19 einen Mehrpunktverbindungsbus oder eine andere solche Architektur implementieren.
  • Bezugnehmend auf 20 ist ein Blockdiagramm eines zweiten spezielleren Beispiels eines Systems 2000 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in 19 und 20 tragen gleiche Bezugszahlen und bestimmte Aspekte von 19 sind bei 20 ausgelassen worden, um das Verschleiern von anderen Aspekten von 20 zu vermeiden.
  • 20 veranschaulicht, dass die Prozessoren 1970, 1980 integrierten Speicher und I/O-Steuerlogik („CL”) 1972 bzw. 1982 entsprechend umfassen können. Somit umfasst CL 1972, 1982 integrierte Memory-Controller-Einheiten und I/O-Steuerlogik. 20 veranschaulicht, dass nicht nur die Speicher 1932, 1934 mit der CL 1972, 1982 gekoppelt sind, sondern dass auch die I/O-Geräte 2014 mit der Steuerlogik 1972, 1982 gekoppelt sind. Die Legacy-I/O-Geräte 2015 sind mit dem Chipsatz 1990 gekoppelt.
  • Bezugnehmend auf 21 wird ein Blockdiagramm eines SoC 2100 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in 17 tragen gleiche Bezugszahlen. Außerdem sind gestrichelte Kästen optionale Funktionen bei fortgeschritteneren SoCs. In 21 sind die Kopplungsstruktur-Einheit(en) 2102 gekoppelt mit: einem Anwendungsprozessor 2110, der einen Satz von einem oder mehreren Kernen 202A-N und gemeinsam benutzte Cache-Einheiten 1706 umfasst; eine Systemagent-Einheit 1710, Bus-Steuerungseinheit(en) 1716, integrierte Memory-Controller-Einheit(en) 1714, ein Satz oder ein oder mehrere Coprozessoren 2120, die integrierte Grafiklogik umfassen können, ein Bildprozessor, ein Audioprozessor und ein Videoprozessor, eine Static Random Access Memory-(SRAM)-Einheit 2130; eine Direct Memory Access-(DMA)-Einheit 2132, und eine Anzeigeeinheit 2140, um mit einem oder mehreren externen Displays zu koppeln. Bei einer Ausführungsform umfassen der bzw. die Coprozessoren 2120 einen Spezialprozessor, wie z. B. einen Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsengine, 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 von solchen Implementierungsansätzen implementiert sein. Ausführungsformen der Erfindung können als Computerprogramme oder als Programmcode implementiert werden, die/der auf programmierbaren Systemen ausführen/ausführt und wenigstens einen Prozessor, ein Speichersystem (einschließlich flüchtigem und nichtflüchtigem Speicher und/oder Speicherelementen), wenigstens ein Eingabegerät und wenigstens ein Ausgabegerät umfassen/umfasst.
  • Programmcode, wie der in 19 dargestellte Code 1930, kann auf Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen auszuführen und Ausgabeinformationen zu generieren. Die Ausgabeinformationen können auf ein oder mehrere Ausgabegeräte in bekannter Art und Weise angewendet werden. Zum Zwecke dieser Anmeldung umfasst ein Verarbeitungssystem jedes System, das einen Prozessor aufweist, wie z. B. einen Digitalsignal-Prozessor (DSP), einen Mikrocontroller, einen Application Specific Integrated Circuit (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren verfahrensorientierten oder objektorientierten Programmiersprache implementiert sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann ebenfalls, wenn gewünscht, in Assemblersprache oder Maschinensprache implementiert sein. Tatsächlich sind die hier beschriebenen Mechanismen im Umfang auf keine spezielle Programmiersprache begrenzt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Einer oder mehrere Aspekte von wenigstens einer Ausführungsform können durch repräsentative Befehle implementiert werden, die auf einem maschinenlesbaren Medium, das verschiedene Logik innerhalb des Prozessors darstellt, gespeichert sind, und die beim Lesen durch eine Maschine die Maschine dazu veranlassen, Logik für das Ausführen der hier beschriebenen Techniken herzustellen. Solche Repräsentationen, die als „IP-Kerne” bekannt sind, können auf einem konkreten, maschinenlesbaren Medium gespeichert und an verschiedene Kunden oder Fertigungsanlagen geliefert werden, wo sie in Herstellungsmaschinen geladen werden, welche die Logik oder den Prozessor herstellen.
  • Solche maschinenlesbaren Speichermedien können, ohne Einschränkung, nichtflüchtige materielle Anordnungen von Artikeln umfassen, die von einer Maschine oder einem Gerät hergestellt oder gebildet werden, einschließlich Speichermedien wie Festplatten, jede andere Art von Platten, einschließend Disketten, optische Platten, Compact Disk Read-Only Memories (CD-ROMs), Compact-Disc-Rewritables (CD-RWs) und magnetooptische Platten, Halbleiterbauelemente wie Read-Only Memories (ROM), Random Access Memories (RAM) wie dynamische Random Access Memories (DRAM), statische Random Access Memories (SRAM), lösch- und programmierbare ROMs (EPROMs), Flash-Speicher, elektrisch lösch- und programmierbare ROMs (EEPROMs), Phasenwechselspeicher (PCM), magnetische oder optische Karten oder jede andere Art von Medium, das geeignet ist, elektronische Befehle zu speichern.
  • Dementsprechend umfassen Ausführungsformen der Erfindung auch nichtflüchtige, materielle maschinenlesbare Medien, die Befehle oder Auslegungsdaten enthalten, wie Hardware-Beschreibungssprache (HDL), die Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder hier beschriebene Systemmerkmale definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich binärer Übersetzung, Code-Wandlung usw.)
  • In einigen Fällen kann ein Befehlswandler verwendet werden, um einen Befehl von einem Quellbefehlssatz in einen Zielbefehlssatz umzuwandeln. Beispielsweise kann der Befehlswandler (z. B. unter Verwendung statischer binärer Übersetzung, dynamischer binärer Übersetzung einschließlich dynamischer Kompilierung) übersetzen, wandeln, emulieren oder anderweitig einen Befehl in einen oder mehrere andere Befehle umwandeln, die vom Kern zu verarbeiten sind. Der Befehlswandler kann in Software, Hardware, Firmware oder einer Kombination davon implementiert sein. Der Befehlswandler kann sich auf dem Prozessor, außerhalb des Prozessors oder teilweise auf und teilweise außerhalb des Prozessors befinden.
  • 22 zeigt ein Blockdiagramm, das die Verwendung eines Softwarebefehlswandlers zur Umwandlung von Binärbefehlen in einem Quellbefehlssatz zu Binärbefehlen in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt. In der veranschaulichten Ausführungsform ist der Befehlswandler ein Softwarebefehlswandler, obwohl der Befehlswandler alternativ in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert sein kann. 22 zeigt ein Programm in einer höheren Sprache 2202, das unter Verwendung eines x86-Compilers 2204 kompiliert werden kann, um x86-Binärcode 2206 zu generieren, der nativ durch einen Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2216 ausgeführt werden kann. Der Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2216 stellt jeden Prozessor dar, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern ausführen kann, indem er Folgendes kompatibel oder anderweitig verarbeitet: (1) einen beträchtlichen Abschnitt des Befehlssatzes des Intel x86-Befehlssatz-Kerns oder (2) Maschinencode-Versionen von Anwendungen oder anderer Software, die darauf abzielt, auf einem Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern zu laufen, um im Wesentlichen das gleiche Resultat wie mit einem Intel-Prozessor mit wenigstens einem x86-Befehlssatz-Kern zu erzielen. Der x86-Compiler 2204 stellt einen Compiler dar, der betriebsfähig ist, um x86-Binärcode 2206 zu generieren (z. B. Maschinencode), der mit oder ohne zusätzliche Anbindungsverarbeitung auf dem Prozessor mit wenigstens einem x86-Befehlssatz-Kern 2216 ausgeführt werden kann. Ähnlich zeigt 22, dass das Programm in der höheren Sprache 2202 unter Verwendung eines alternativen Befehlssatz-Compilers 2208 kompiliert werden kann, um den alternativen Befehlssatz-Binärcode 2210 zu generieren, der nativ durch einen Prozessor ohne wenigstens einen x86-Befehlssatz-Kern 2214 ausgeführt werden kann (z. B. ein Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, Kalifornien, und/oder die den ARM-Befehlssatz von ARM Holdings aus Sunnyvale, Kalifornien, ausführen). Der Befehlswandler 2212 wird verwendet, um den x86-Binärcode 2206 in Code umzuwandeln, der nativ vom Prozessor ohne einen x86-Befehlssatz-Kern 2214 ausgeführt werden kann. Dieser umgewandelte Code wird wahrscheinlich nicht mit dem alternativen Befehlssatz-Binärcode 2210 identisch sein, da ein dazu fähiger Befehlswandler schwierig herzustellen ist; jedoch erzielt der umgewandelte Code die allgemeine Operation und ist aus Befehlen des alternativen Befehlssatzes gestaltet. Deshalb stellt der Befehlswandler 2212 Software, Firmware, Hardware oder eine Kombination davon dar, die es durch Emulation, Simulation oder jedes andere Verfahren einem Prozessor oder einem anderen elektronischen Gerät, das keinen x86-Befehlssatz-Prozessor oder -Kern aufweist, ermöglicht, den x86-Binärcode 2206 auszuführen.
  • Komponenten, Merkmale und Details, die für irgendeine der 2, 3A, 3B und 614 beschrieben sind, können auch optional in 45 verwendet sein. Des Weiteren können Komponenten, Merkmale und Details, die hier für irgendeine Vorrichtung beschrieben sind, optional auch in einigen der hier beschriebenen Verfahren verwendet sein, welche in Ausführungsformen durch eine solche Vorrichtung und/oder mit einer solchen Vorrichtung ausgeführt werden kann.
  • Ausführungsbeispiele
  • Die folgenden Beispiele betreffen weitere Ausführungsformen. Details in den Beispielen können überall bei einer oder mehreren Ausführungsformen verwendet werden.
  • Beispiel 1 ist ein Prozessor, der eine Decodiereinheit umfasst, um einen gepackten Datenbefehl, der wenigstens einen ersten schmaleren gepackten Quelldatenoperanden und einen schmaleren Zieloperanden anzuzeigen hat, auf eine maskierte gepackte Datenoperation mappt. Die maskierte gepackte Datenoperation zeigt wenigstens einen ersten breiteren gepackten Quelldatenoperanden an, der breiter als der erste schmalere gepackte Quelldatenoperand sein und der diesen einschliessen soll, und sie zeigt einen breiteren Zieloperanden an, der breiter als der schmalere Zieloperand sein und der diesen einschliessen soll. Der Prozessor umfasst auch eine mit der Decodiereinheit gekoppelte Ausführungseinheit. Die Ausführungseinheit führt die maskierte gepackte Datenoperation mit einer gepackten Datenoperationsmaske aus. Die gepackte Datenoperationsmaske umfasst ein Maskenelement für jedes entsprechende Ergebnisdatenelement eines gepackten Datenergebnisses, das von der maskierten gepackten Datenoperation gespeichert werden soll. Alle Maskenelemente, die Ergebnisdatenelementen entsprechen, welche von der maskierten gepackten Datenoperation zu speichern sind, die durch den gepackten Datenbefehl nicht gespeichert würden, werden ausmaskiert. Die Ausführungseinheit speichert das gepackte Datenergebnis im breiteren Zieloperanden.
  • Beispiel 2 umfasst den Prozessor von einem der vorhergehenden Beispiele und wobei optional die Ausführungseinheit eine gesamte Breite eines Registers schreibt, das dem breiteren Zieloperanden entspricht, und wobei optional der schmalere Zieloperand nur einem Abschnitt der Breite des Registers entspricht.
  • Beispiel 3 umfasst den Prozessor eines der vorhergehenden Beispiele und wobei optional die Ausführungseinheit das gepackte Datenergebnis speichert, in dem Ergebnisdatenelemente, die durch eine mit dem gepackten Datenbefehl verbundene Operation zu aktualisieren sind, nur einen Zwischenabschnitt eines Registers zwischen einem niedrigstwertigen Abschnitt des Registers und einem höchstwertigen Abschnitt des Registers belegen.
  • Beispiel 4 umfasst den Prozessor eines der vorhergehenden Beispiele und wobei optional die Decodiereinheit den gepackten Datenbefehl empfängt, der auch einen zweiten schmaleren gepackten Quelldatenoperanden anzeigt, und wobei optional die Decodiereinheit den gepackten Datenbefehl auf die maskierte gepackte Datenoperation mappt, die auch einen zweiten breiteren gepackten Quelldatenoperanden anzeigt, der breiter ist als der zweite schmalere gepackte Quelldatenoperand und der diesen einschließt.
  • Beispiel 5 umfasst den Prozessor eines der vorhergehenden Beispiele und wobei optional die Decodiereinheit den gepackten Datenbefehl empfängt, der eine Operation an wenigstens einem Paar von nicht entsprechenden Datenelementen, die sich nicht in entsprechenden Bitpositionen befinden, in den ersten und zweiten schmaleren gepackten Quelldatenoperanden anzeigt, und wobei optional der Prozessor ferner eine Operation ausführt, um das Paar von nicht entsprechenden Datenelementen in entsprechenden Bitpositionen zu platzieren, die von der Ausführungseinheit beim Ausführen der maskierten gepackten Datenoperation zu verarbeiten sind.
  • Beispiel 6 umfasst den Prozessor eines der vorhergehenden Beispiele und wobei der Prozessor optional die Operation ausführt, um das Paar von nicht entsprechenden Datenelementen in den entsprechenden Bitpositionen durch das Ausführen einer aus einer Schiebeoperation, einer Tauschoperation und einer Permutationsoperation zu platzieren.
  • Beispiel 7 umfasst den Prozessor eines der vorhergehenden Beispiele und wobei optional der gepackte Datenbefehl keine gepackte Datenoperationsmaske anzeigt.
  • Beispiel 8 umfasst den Prozessor eines der vorhergehenden Beispiele und wobei optional der gepackte Datenbefehl eine gepackte Datenoperationsmaske anzeigt, die weniger Maskenelemente aufweist als die gepackte Datenoperationsmaske, die von der Ausführungseinheit zum Ausführen der maskierten gepackten Datenoperation verwendet wird.
  • Beispiel 9 umfasst den Prozessor eines der vorhergehenden Beispiele und wobei optional die Ausführungseinheit das gepackte Datenergebnis speichert, wobei ein Wert jedes Ergebnisdatenelements, das einem ausmaskierten Maskenelement entspricht, unverändert bleibt, und wobei optional ein Wert jedes Ergebnisdatenelements, das einem unmaskierten Maskenelement entspricht, durch eine mit dem gepackten Datenbefehl verbundene Operation aktualisiert wird.
  • Beispiel 10 ist ein Verfahren in einem Prozessor, das das Empfangen eines gepackten Datenbefehls umfasst, der wenigstens einen ersten schmaleren gepackten Quelldatenoperanden und einen schmaleren Zieloperanden anzeigt. Das Verfahren umfasst außerdem das Mappen des gepackten Datenbefehls auf eine maskierte gepackte Datenoperation, der wenigstens einen ersten breiteren gepackten Quelldatenoperanden anzeigt, der breiter ist als der erste schmalere gepackte Quelldatenoperand und der diesen einschließt, und einen breiteren Zieloperanden, der breiter ist als der schmalere Zieloperand und der diesen einschließt, anzeigt. Das Verfahren umfasst außerdem das Generieren einer gepackten Datenoperationsmaske, die ein Maskenelement für jedes entsprechende Ergebnisdatenelement eines von der maskierten gepackten Datenoperation zu speichernden gepackten Datenergebnisses umfasst. Alle Maskenelemente, die Ergebnisdatenelementen entsprechen, die von der maskierten gepackten Datenoperation zu speichern sind, die durch den gepackten Datenbefehl nicht gespeichert würden, werden ausmaskiert. Das Verfahren umfasst außerdem das Ausführen der maskierten gepackten Datenoperation unter Verwendung der gepackten Datenoperationsmaske. Das Verfahren umfasst außerdem das Speichern des gepackten Datenergebnisses im breiteren Zieloperanden.
  • Beispiel 11 umfasst das Verfahren eines der vorhergehenden Beispiele und wobei optional das Speichern des gepackten Datenergebnisses das Schreiben einer gesamten Breite eines Registers umfasst, das dem breiteren Zieloperanden entspricht, und wobei optional der schmalere Zieloperand nur einem Abschnitt der Breite des Registers entspricht.
  • Beispiel 12 umfasst das Verfahren eines der vorhergehenden Beispiele und wobei optional das Speichern das Speichern des gepackten Datenergebnisses umfasst, wobei Ergebnisdatenelemente, die durch eine mit dem gepackten Datenbefehl verbundene Operation aktualisiert werden, nur einen Zwischenabschnitt eines Registers zwischen einem niedrigstwertigen Abschnitt des Registers und einem höchstwertigen Abschnitt des Registers belegen.
  • Beispiel 13 umfasst das Verfahren eines der vorhergehenden Beispiele und wobei optional das Empfangen das Empfangen des gepackten Datenbefehls umfasst, der auch einen zweiten schmaleren gepackten Quelldatenoperanden anzeigt, und wobei optional das Mappen das Mappen des gepackten Datenbefehls auf eine maskierte gepackte Datenoperation umfasst, die auch einen zweiten breiteren gepackten Quelldatenoperanden anzeigt, der breiter ist als der zweite schmalere gepackte Quelldatenoperand und der diesen einschließt.
  • Beispiel 14 umfasst das Verfahren eines der vorhergehenden Beispiele und wobei optional das Empfangen das Empfangen des gepackten Datenbefehls umfasst, der eine Operation an wenigstens einem Paar von nicht entsprechenden Datenelementen, die sich nicht in entsprechenden Bitpositionen befinden, in den ersten und zweiten schmaleren gepackten Quelldatenoperanden anzeigt, und optional ferner das Ausführen einer Operation umfasst, um das Paar von nicht entsprechenden Datenelementen in entsprechenden Bitpositionen zu platzieren, die von der maskierten gepackten Datenoperation zu verarbeiten sind.
  • Beispiel 15 umfasst das Verfahren eines der vorhergehenden Beispiele und wobei optional das Ausführen der Operation, um das Paar von nicht entsprechenden Datenelementen in entsprechenden Bitpositionen zu platzieren, das Ausführen einer aus einer Schiebeoperation, einer Tauschoperation und einer Permutationsoperation umfasst.
  • Beispiel 16 umfasst das Verfahren eines der vorhergehenden Beispiele und wobei optional das Empfangen das Empfangen des gepackten Datenbefehls umfasst, der keine gepackte Datenoperationsmaske anzeigt.
  • Beispiel 17 umfasst das Verfahren eines der vorhergehenden Beispiele und wobei optional das Empfangen das Empfangen des gepackten Datenbefehls umfasst, der eine zweite gepackte Datenoperationsmaske anzeigt, die eine geringere Anzahl an Maskenelementen aufweist als die generierte gepackte Datenoperationsmaske.
  • Beispiel 18 umfasst das Verfahren eines der vorhergehenden Beispiele und wobei optional der erste schmalere gepackte Quelldatenoperand mit dem ersten breiteren gepackten Quelldatenoperanden in einem Register aliasiert ist.
  • Beispiel 19 umfasst das Verfahren eines der vorhergehenden Beispiele und wobei optional das Speichern das Speichern des gepackten Datenergebnisses umfasst, wobei ein Wert jedes Ergebnisdatenelements, das einem ausmaskierten Maskenelement entspricht, unverändert ist, und wobei optional ein Wert jedes Ergebnisdatenelements, das einem unmaskierten Maskenelement entspricht, durch eine mit dem gepackten Datenbefehl assoziierte Operation aktualisiert wird.
  • Beispiel 20 ist ein System zum Verarbeiten von Befehlen, das eine Kopplungsstruktur (interconnect) und einen mit der Kopplungsstruktur gekoppelten Prozessor umfasst. Der Prozessor umfasst eine erste Einheit, um einen gepackten Datenbefehl, der wenigstens einen ersten schmaleren gepackten Quelldatenoperanden und einen schmaleren Zieloperanden anzeigt, auf eine maskierte gepackte Datenoperation zu mappen, die wenigstens einen ersten breiteren gepackten Quelldatenoperanden anzeigt, der den ersten schmaleren gepackten Quelldatenoperanden umfasst, und einen breiteren Zieloperanden anzeigt, der den schmaleren Zieloperanden einschließt. Der Prozessor umfasst außerdem mit der ersten Einheit gekoppelte integrierte Schaltung. Die integrierte Schaltung führt die maskierte gepackte Datenoperation mit einer Maske aus, die ein Maskenbit für jedes entsprechende Datenelement eines gepackten Datenergebnisses umfasst, das von der maskierten gepackten Datenoperation gespeichert wird. Nur Maskenbits, die Datenelementen, die von dem gepackten Datenbefehl zu speichern sind, entsprechen, wird ermöglicht, nicht ausmaskiert zu werden. Das System umfasst außerdem ein dynamisches Random Access Memory (DRAM), das mit der Kopplungsstruktur gekoppelt ist.
  • Beispiel 21 umfasst das System von Beispiel 20 und wobei optional die integrierte Schaltung ferner eine Datenumordnungsoperation ausführt, um ein Datenelement des ersten schmaleren gepackten Quelldatenoperanden mit einem Datenelement des gepackten Datenergebnisses auszurichten.
  • Beispiel 22 umfasst einen Prozessor, der ein Mittel zum Empfangen eines gepackten Datenbefehls umfasst, der wenigstens einen ersten schmaleren gepackten Quelldatenoperanden und einen schmaleren Zieloperanden anzeigt. Der Prozessor umfassz außerdem ein Mittel zum Mappen des gepackten Datenbefehls auf eine maskierte gepackte Datenoperation, die wenigstens einen ersten breiteren gepackten Quelldatenoperanden anzeigt, der breiter ist als der erste schmalere gepackte Quelldatenoperand und der diesen einschließt, und die einen breiteren Zieloperanden anzeigt, der breiter ist als der schmalere Zieloperand und der diesen einschließt. Der Prozessor umfasst außerdem ein Mittel zum Generieren einer gepackten Datenoperationsmaske ein, die ein Maskenelement für jedes entsprechende Ergebnisdatenelement eines von der maskierten gepackten Datenoperation zu speichernden gepackten Datenergebnisses umfasst. Alle Maskenelemente, die Ergebnisdatenelementen entsprechen, die von der maskierten gepackten Datenoperation zu speichern sind, die durch den gepackten Datenbefehl nicht gespeichert würden, werden ausmaskiert.
  • Beispiel 23 umfasst das System von Beispiel 22 und ferner optional ein Mittel zum Ausrichten eines Datenelements des ersten schmaleren gepackten Quelldatenoperanden mit einem Datenelement des gepackten Datenergebnisses.
  • Beispiel 24 umfasst eine Vorrichtung zum Ausführen des Verfahrens von irgendeinem der Beispiele 10–19.
  • Beispiel 25 umfasst eine Vorrichtung, die ein Mittel zum Ausführen des Verfahrens von irgendeinem der Beispiele 10–19 umfasst.
  • Beispiel 26 umfasst einen Prozessor, der ein Mittel zum Ausführen des Verfahrens von irgendeinem der Beispiele 10–19 umfasst.
  • Beispiel 27 umfasst ein Computersystem, das ein dynamisches Random Access Memory (DRAM) und einen Prozessor umfasst, der mit dem DRAM gekoppelt ist und ein Mittel zum Ausführen des Verfahrens von irgendeinem der Beispiele 10–19 umfasst.
  • Beispiel 28 umfasst eine Vorrichtung zum Ausführen eines Verfahrens, wie im Wesentlichen hier beschrieben.
  • Beispiel 29 umfasst eine Vorrichtung, die ein Mittel zum Ausführen eines Verfahren, wie im Wesentlichen hier beschrieben, umfasst.
  • In der Beschreibung und den Ansprüchen können die Begriffe „gekoppelt” und „verbunden” gemeinsam mit ihren Ableitungen verwendet worden sein. Diese Begriffe sind jedoch nicht als Synonyme füreinander zu verstehen. Vielmehr kann bei bestimmten Ausführungsformen „verbunden” verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente in direktem physischem oder elektrischem Kontakt miteinander stehen. „Gekoppelt” kann bedeuten, dass zwei oder mehr Elemente in direktem physischem oder elektrischem Kontakt stehen. Jedoch kann „gekoppelt” auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander stehen, trotzdem aber miteinander arbeiten oder interagieren. In den Figuren werden Pfeile verwendet, um Verbindungen und Kopplungen zu zeigen.
  • In der Beschreibung und den Ansprüchen kann der Begriff „Logik” verwendet worden sein. Wie hier verwendet, kann Logik Hardware, Firmware, Software oder eine Kombination davon umfassen. Beispiele von Logik umfassen integrierte Schaltung, anwendungsspezifische integrierte Schaltkreise, Analogschaltungen, digitale Schaltungen, programmierte Logikbaugruppen, Speichergeräte, die Befehle umfassen, usw. Bei einigen Ausführungsformen kann die Hardware-Logik Transistoren und/oder Gatter potenziell zusammen mit anderen Schaltungskomponenten umfassen.
  • Der Begriff „und/oder” kann verwendet worden sein. Wie hier verwendet, bedeutet der Begriff „und/oder” das eine oder das andere oder beide (z. B. A und/oder B bedeutet A oder B oder A und B).
  • In der vorstehenden Beschreibung werden zum Zweck der Erläuterung zahlreiche spezifische Details behandelt, um ein gründliches Verständnis der Ausführungsformen der Erfindung zu ermöglichen. Für den Fachmann ist es jedoch offensichtlich, dass eine oder mehrere andere Ausführungsformen auch ohne manche dieser spezifischen Details realisierbar sind. Die speziellen beschriebenen Ausführungsformen werden nicht bereitgestellt, um die Erfindung zu begrenzen, sondern um sie anhand von Ausführungsbeispielen zu veranschaulichen. Der Umfang der Erfindung wird nicht durch die speziellen Beispiele, sondern nur durch die Ansprüche bestimmt. In anderen Fällen wurden allgemein bekannte Schaltungen, Strukturen, Geräte und Operationen in Blockdiagrammform oder ohne Details dargestellt, um das Verständnis der Beschreibung nicht zu erschweren.
  • Wo es zweckmäßig erschien, wurden, sofern nicht anders angegeben oder sonst klar ersichtlich, Bezugszahlen oder die Endteile von Bezugszahlen in den Figuren wiederholt, um entsprechende oder ähnliche Elemente zu kennzeichnen, die optional gleiche Eigenschaften aufweisen können. In einigen Fällen, wo mehrere Komponenten beschrieben wurden, können diese in eine einzige Komponente eingebunden sein. In anderen Fällen, wo eine einzelne Komponente beschrieben wurde, kann diese in mehrere Komponenten aufgeteilt sein.
  • Verschiedene Operationen und Verfahren sind beschrieben worden. Einige der Verfahren sind in einer relativ einfachen Form in den Flussdiagrammen beschrieben worden, aber Operationen können optional hinzugefügt und/oder von den Verfahren entfernt werden. Während die Flussdiagramme eine spezielle Reihenfolge der Operationen gemäß Ausführungsbeispielen zeigen, dient diese spezielle Reihenfolge nur als Beispiel. Alternative Ausführungsformen können optional die Operationen in unterschiedlicher Reihenfolge ausführen, bestimmte Operationen kombinieren, bestimmte Operationen überlappen usw.
  • Einige Ausführungsformen umfassen einen Herstellungsgegenstand (z. B. ein Computerprogramm-Produkt), das ein maschinenlesbares Medium aufweist. Das Medium kann einen Mechanismus aufweisen, der Informationen in einer Form bereitstellt (beispielsweise speichert), die von der Maschine lesbar ist. Das maschinenlesbare Medium kann einen oder mehrere Befehle bereitstellen oder darauf gespeichert haben, die, wenn sie durch eine Maschine ausgeführt werden, betriebsfähig sind, um die Maschine zu veranlassen und/oder die darin resultieren, dass die Maschine eine oder mehrere hier offenbarte Operationen, Verfahren oder Techniken ausführt.
  • Bei einigen Ausführungsformen kann das maschinenlesbare Medium ein materielles und/oder nichtflüchtiges maschinenlesbares Speichermedium umfassen. Beispielsweise kann das materielle und/oder nicht transitorische maschinenlesbare Speichermedium eine Diskette, ein optisches Speichermedium, eine optische Platte, ein optisches Datenspeichergerät, eine CD-ROM, eine Magnetplatte, eine magnetooptische Platte, ein Read Only Memory (ROM), ein programmierbares ROM (PROM), ein lösch- und programmierbares ROM (EPROM), ein elektrisch lösch- und programmierbares ROM (EEPROM), ein Random Access Memory (RAM), ein statisches RAM (SRAM), ein dynamisches RAM (DRAM), einen Flash-Speicher, einen Phasenwechselspeicher, ein Phasenwechsel-Datenspeichermaterial, einen nichtflüchtigen Speicher, ein nicht flüchtiges Datenspeichergerät, einen nicht transitorischen Speicher, ein nicht transitorisches Datenspeichergerät oder dergleichen umfassen. Das nicht transitorische maschinenlesbare Speichermedium besteht nicht aus einem transitorischen propagierten Signal. Bei einer weiteren Ausführungsform kann das maschinenlesbare Medium ein transitorisches maschinenlesbares Kommunikationsmedium, wie beispielsweise die elektrischen, optischen, akustischen oder anderen Formen von propagierten Signalen wie Trägerwellen, Infrarotsignalen, digitalen Signalen oder dergleichen umfassen.
  • Beispiele von geeigneten Maschinen umfassen Allzweckprozessoren, Spezialprozessoren, Befehlsverarbeitungsvorrichtungen, digitale Logikschaltungen, integrierte Schaltungen und dergleichen, sind aber nicht darauf beschränkt. Noch weitere Beispiele von geeigneten Maschinen umdassen Computergeräte und andere elektronische Geräte, die solche Prozessoren, Befehlsverarbeitungsvorrichtungen, digitale Logikschaltungen oder integrierte Schaltungen einbinden. Beispiele von solchen Computergeräten und elektronischen Geräten schließen Desktop-Computer, Laptops, Notebooks, Tablet-Computer, Netbooks, Smartphones, Mobiltelefone, Server, Netzwerkgeräte (z. B. Router und Switches), mobile Internetgeräte (MIDs), Media-Player, Smart-TVs, Nettops, Set-Top-Boxen und Videospiel-Controller ein, sind aber nicht darauf beschränkt.
  • Es sollte auch offensichtlich sein, dass der Bezug durchgehend in dieser Spezifikation auf „eine (1) Ausführungsform” oder „eine oder mehrere Ausführungsformen” zum Beispiel bedeutet, dass ein bestimmtes Merkmal bei der Realisierung von Ausführungsformen vorliegen kann. Gleichermaßen sollte es offensichtlich sein, dass in der Beschreibung verschiedene Merkmale manchmal bei einer einzelnen Ausführungsform, Figur oder Beschreibung davon zum Zweck der Vereinfachung der Offenbarung und zum Erreichen eines besseren Verständnisses verschiedener erfinderischer Aspekte in Gruppen zusammengefasst sind. Diese Methode der Offenbarung soll jedoch nicht als eine Absicht ausgelegt werden, dass die Erfindung mehr Merkmale erfordert als in jedem Anspruch ausdrücklich zitiert sind. Wie die folgenden Ansprüche widerspiegeln, können die erfinderischen Aspekte vielmehr auch aus weniger als allen Merkmalen einer einzelnen offenbarten Ausführungsform bestehen. Somit sind die Ansprüche, die der ausführlichen Beschreibung folgen, ausdrücklich ein fester Bestandteil dieser Beschreibung, wobei jeder Anspruch selbstständig als separate Ausführungsform dieser Erfindung steht.

Claims (21)

  1. Prozessor, umfassend: eine Decodiereinheit zum Mappen eines gepackten Datenbefehls, der wenigstens einen ersten schmaleren gepackten Quelldatenoperanden und einen schmaleren Zieloperanden anzeigt, auf eine maskierte gepackte Datenoperation, die wenigstens einen ersten breiteren gepackten Quelldatenoperanden, der breiter ist als der erste schmalere gepackte Quelldatenoperand und der diesen einschließt, und die einen breiteren Zieloperanden anzeigt, der breiter ist als der schmalere Zieloperand und der diesen einschließt, und eine mit der Decodiereinheit gekoppelte Ausführungseinheit zum Ausführen der maskierten gepackten Datenoperation mit einer gepackten Datenoperationsmaske, die ein Maskenelement für jedes entsprechende Ergebnisdatenelement eines gepackten Datenergebnisses umfasst, das von der maskierten gepackten Datenoperation zu speichern ist, wobei alle Maskenelemente, die Ergebnisdatenelementen entsprechen, die von maskierten gepackten Datenoperation zu speichern sind, die durch den gepackten Datenbefehl nicht gespeichert würden, ausmaskiert werden, und wobei die Ausführungseinheit das gepackte Datenergebnis im breiteren Zieloperanden speichert.
  2. Prozessor nach Anspruch 1, wobei die Ausführungseinheit eine gesamte Breite eines Registers schreibt, die dem breiteren Zieloperanden entspricht, und wobei der schmalere Zieloperand nur einem Abschnitt der Breite des Registers entspricht.
  3. Prozessor nach Anspruch 1 oder 2, wobei die Ausführungseinheit das gepackte Datenergebnis, in dem die gepackten Ergebnisdatenelemente, die von einer mit dem gepackten Datenbefehl assoziierten Operation zu aktualisieren sind, nur einen Zwischenabschnitt eines Registers zwischen einem niedrigstwertigen Abschnitt des Registers und einem höchstwertigen Abschnitt des Registers belegen, speichert.
  4. Prozessor nach einem der vorhergehenden Ansprüche, wobei die Decodiereinheit den gepackten Datenbefehl empfängt, der auch einen zweiten schmaleren gepackten Quelldatenoperanden anzeigt, und wobei die Decodiereinheit den gepackten Datenbefehl auf die maskierte gepackte Datenoperation mappt, die auch einen zweiten breiteren gepackten Quelldatenoperanden anzeigt, der breiter ist als der zweite schmalere gepackte Quelldatenoperand und der diesen einschließt.
  5. Prozessor nach Anspruch 4, wobei die Decodiereinheit den gepackten Datenbefehl empfängt, der eine Operation an wenigstens einem Paar von nicht entsprechenden Datenelementen, die sich nicht in entsprechenden Bitpositionen befinden, in den ersten und zweiten schmaleren gepackten Quelldatenoperanden anzeigt, und wobei der Prozessor ferner eine Operation ausführt, um das Paar von nicht entsprechenden Datenelementen in entsprechenden Bitpositionen zu platzieren, die von der Ausführungseinheit beim Ausführen der maskierten gepackten Datenoperation verarbeitet werden.
  6. Prozessor nach Anspruch 5, wobei der Prozessor die Operation ausführt, um das Paar von nicht entsprechenden Datenelementen in den entsprechenden Bitpositionen durch das Ausführen einer aus einer Schiebeoperation, einer Tauschoperation und einer Permutationsoperation zu platzieren.
  7. Prozessor nach einem der vorhergehenden Ansprüche, wobei der gepackte Datenbefehl keine gepackte Datenoperationsmaske anzeigt.
  8. Prozessor nach einem der Ansprüche 1 bis 6, wobei der gepackte Datenbefehl eine gepackte Datenoperationsmaske anzeigt, die weniger Maskenelemente aufweist als die gepackte Datenoperationsmaske, die von der Ausführungseinheit verwendet wird, um die maskierte gepackte Datenoperation auszuführen.
  9. Prozessor nach einem der vorhergehenden Ansprüche, wobei die Ausführungseinheit das gepackte Datenergebnis speichert, wobei ein Wert jedes Ergebnisdatenelements, das einem ausmaskierten Maskenelement entspricht, unverändert bleibt, und wobei ein Wert jedes Ergebnisdatenelements, das einem unmaskierten Maskenelement entspricht, durch eine mit dem gepackten Datenbefehl assoziierte Operation aktualisiert wird.
  10. Verfahren in einem Prozessor, umfassend: Empfangen eines gepackten Datenbefehls, der wenigstens einen ersten schmaleren gepackten Quelldatenoperanden und einen schmaleren Zieloperanden anzeigt, Mappen des gepackten Datenbefehls auf eine maskierte gepackte Datenoperation, die wenigstens einen ersten breiteren gepackten Quelldatenoperanden anzeigt, der breiter ist als der erste schmalere gepackte Quelldatenoperand und der diesen einschließt, und die einen breiteren Zieloperanden anzeigt, der breiter ist als der schmalere Zieloperand und der diesen einschließt, Generieren einer gepackten Datenoperationsmaske, die ein Maskenelement für jedes entsprechende Ergebnisdatenelement eines von der maskierten gepackten Datenoperation zu speichernden gepackten Datenergebnisses umfasst, wobei alle Maskenelemente, die Ergebnisdatenelementen entsprechen, die von der maskierten gepackten Datenoperation gespeichert werden, die durch den gepackten Datenbefehl nicht gespeichert würden, ausmaskiert werden, Ausführen der maskierten gepackten Datenoperation unter Verwendung der gepackten Datenoperationsmaske, und Speichern des gepackten Datenergebnisses im breiteren Zieloperanden.
  11. Verfahren nach Anspruch 10, wobei das Speichern des gepackten Datenergebnisses das Schreiben einer gesamten Breite eines Registers umfasst, die dem breiteren Zieloperanden entspricht, und wobei der schmalere Zieloperand nur einem Abschnitt der Breite des Registers entspricht.
  12. Verfahren nach Anspruch 10 oder 11, wobei das Speichern das Speichern des gepackten Datenergebnisses umfasst, in dem Ergebnisdatenelemente, die durch eine mit dem gepackten Datenbefehl assoziierte Operation aktualisiert werden, nur einen Zwischenabschnitt eines Registers zwischen einem niedrigstwertigen Abschnitt des Registers und einem höchstwertigen Abschnitt des Registers belegen.
  13. Verfahren nach einem der Ansprüche 10 bis 12, wobei das Empfangen das Empfangen des gepackten Datenbefehls umfasst, der auch einen zweiten schmaleren gepackten Quelldatenoperanden anzeigt, und wobei das Mappen das Mappen des gepackten Datenbefehls auf die maskierte gepackte Datenoperation umfasst, die auch einen zweiten breiteren gepackten Quelldatenoperanden anzeigt, der breiter ist als der zweite schmalere gepackte Quelldatenoperand und der diesen einschließt.
  14. Verfahren nach Anspruch 13, wobei das Empfangen das Empfangen des gepackten Datenbefehls umfasst, der eine Operation an wenigstens einem Paar von nicht entsprechenden Datenelementen, die sich nicht in entsprechenden Bitpositionen befinden, in den ersten und zweiten schmaleren gepackten Quelldatenoperanden anzeigt, und ferner umfassend das Ausführen einer Operation, um das Paar von nicht entsprechenden Datenelementen in entsprechenden Bitpositionen zu platzieren, die von der maskierten gepackten Datenoperation verarbeitet werden.
  15. Verfahren nach Anspruch 14, wobei das Ausführen der Operation, um das Paar von nicht entsprechenden Datenelementen in entsprechenden Bitpositionen zu platzieren, das Ausführen von einer aus einer Schiebeoperation, einer Tauschoperation und einer Permutationsoperation umfasst.
  16. Verfahren nach einem der Ansprüche 10 bis 15, wobei das Empfangen das Empfangen des gepackten Datenbefehls umfasst, der keine gepackte Datenoperationsmaske anzeigt.
  17. Verfahren nach einem der Ansprüche 10 bis 15, wobei das Empfangen das Empfangen des gepackten Datenbefehls umfasst, der eine zweite gepackte Datenoperationsmaske anzeigt, die eine geringere Anzahl an Maskenelementen aufweist als die generierte gepackte Datenoperationsmaske.
  18. Verfahren nach einem der Ansprüche 10 bis 17, wobei der erste schmalere gepackte Quelldatenoperand mit dem ersten breiteren gepackten Quelldatenoperanden in einem Register aliasiert ist.
  19. Verfahren nach einem der Ansprüche 10 bis 18, wobei das Speichern das Speichern des gepackten Datenergebnisses umfasst, in dem ein Wert jedes Ergebnisdatenelements, das einem ausmaskierten Maskenelement entspricht, unverändert bleibt, und in dem ein Wert jedes Ergebnisdatenelements, das einem unmaskierten Maskenelement entspricht, durch eine mit dem gepackten Datenbefehl assoziierte Operation aktualisiert wird.
  20. System zum Verarbeiten von Befehlen, umfassend: eine Kopplungsstruktur, einen Prozessor, der mit der Kopplungsstruktur gekoppelt ist, wobei der Prozessor umfasst: eine erste Einheit zum Mappen eines gepackten Datenbefehls, der wenigstens einen ersten schmaleren gepackten Quelldatenoperanden und einen schmaleren Zieloperanden anzeigt, auf eine maskierte gepackte Datenoperation, die wenigstens einen ersten breiteren gepackten Quelldatenoperanden anzeigt, der den ersten schmaleren gepackten Quelldatenoperanden einschließt, und die einen breiteren Zieloperanden anzeigt, der den schmaleren Zieloperanden einschließt, und eine integrierte Schaltung, die mit der ersten Einheit gekoppelt ist, wobei die integrierte Schaltung die maskierte gepackte Datenoperation mit einer Maske ausführt, die ein Maskenbit für jedes entsprechende Datenelement eines gepackten Datenergebnisses umfasst, das von der maskierten gepackten Datenoperation gespeichert wird, wobei nur Maskenbits, die Datenelementen entsprechen, die vom gepackten Datenbefehl gespeichert werden, ermöglicht wird, nicht ausmaskiert zu werden, und einen dynamischen Direktzugriffspeicher (dynamisches Random Access Memory, DRAM) gekoppelt mit der Kopplungsstruktur.
  21. System nach Anspruch 20, wobei die integrierten Schaltungen ferner eine Datenumordnungsoperation ausführen, um ein Datenelement des ersten schmaleren gepackten Quelldatenoperanden mit einem Datenelement des gepackten Datenergebnisses auszurichten.
DE102014004564.1A 2013-03-30 2014-03-28 Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen Pending DE102014004564A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/854,089 2013-03-30
US13/854,089 US9477467B2 (en) 2013-03-30 2013-03-30 Processors, methods, and systems to implement partial register accesses with masked full register accesses

Publications (1)

Publication Number Publication Date
DE102014004564A1 true DE102014004564A1 (de) 2014-10-02

Family

ID=50686951

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102014004564.1A Pending DE102014004564A1 (de) 2013-03-30 2014-03-28 Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen

Country Status (6)

Country Link
US (2) US9477467B2 (de)
JP (1) JP5829714B2 (de)
KR (1) KR101597774B1 (de)
CN (2) CN104077107B (de)
DE (1) DE102014004564A1 (de)
GB (1) GB2515862B (de)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI681300B (zh) 2014-11-14 2020-01-01 美商凱為有限責任公司 在64位元資料路徑上實行128位元simd操作之方法、系統及電腦可讀取媒體
US20160179548A1 (en) * 2014-12-22 2016-06-23 Intel Corporation Instruction and logic to perform an inverse centrifuge operation
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
US9916164B2 (en) * 2015-06-11 2018-03-13 Intel Corporation Methods and apparatus to optimize instructions for execution by a processor
US9779469B2 (en) 2015-08-17 2017-10-03 Qualcomm Incorporated Register spill management for general purpose registers (GPRs)
US11681531B2 (en) * 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US20170192789A1 (en) * 2015-12-30 2017-07-06 Rama Kishnan V. Malladi Systems, Methods, and Apparatuses for Improving Vector Throughput
US11204764B2 (en) * 2016-03-31 2021-12-21 Intel Corporation Processors, methods, systems, and instructions to Partition a source packed data into lanes
US10210323B2 (en) * 2016-05-06 2019-02-19 The Boeing Company Information assurance system for secure program execution
GB2564853B (en) * 2017-07-20 2021-09-08 Advanced Risc Mach Ltd Vector interleaving in a data processing apparatus
GB2568230B (en) * 2017-10-20 2020-06-03 Graphcore Ltd Processing in neural networks
JPWO2020066375A1 (ja) * 2018-09-25 2021-08-30 日本電気株式会社 情報処理装置、情報処理方法、プログラム
CN111443948B (zh) * 2020-03-30 2022-09-09 龙芯中科技术股份有限公司 指令执行方法、处理器和电子设备
US11494190B2 (en) 2021-03-31 2022-11-08 Arm Limited Circuitry and method for controlling a generated association of a physical register with a predicated processing operation based on predicate data state

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0795153A4 (de) 1994-12-02 2001-11-14 Intel Corp Mikroprozessor mit packfunktion für zusammengesetzte operanden
US6092094A (en) * 1996-04-17 2000-07-18 Advanced Micro Devices, Inc. Execute unit configured to selectably interpret an operand as multiple operands or as a single operand
US6334183B1 (en) 1997-11-18 2001-12-25 Intrinsity, Inc. Method and apparatus for handling partial register accesses
US6122725A (en) 1998-03-31 2000-09-19 Intel Corporation Executing partial-width packed data instructions
US6230253B1 (en) * 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
US6442676B1 (en) * 1999-06-30 2002-08-27 Bull Hn Information Systems Inc. Processor with different width functional units ignoring extra bits of bus wider than instruction width
US7818356B2 (en) 2001-10-29 2010-10-19 Intel Corporation Bitstream buffer manipulation with a SIMD merge instruction
WO2003098431A2 (en) 2002-05-22 2003-11-27 Koninklijke Philips Electronics N.V. Method and apparatus for decoding instruction sequences
JP3857614B2 (ja) 2002-06-03 2006-12-13 松下電器産業株式会社 プロセッサ
US7251722B2 (en) * 2004-05-11 2007-07-31 Mistletoe Technologies, Inc. Semantic processor storage server architecture
US8447962B2 (en) * 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
US8549264B2 (en) * 2009-12-22 2013-10-01 Intel Corporation Add instructions to add three source operands
US20120216011A1 (en) 2011-02-18 2012-08-23 Darryl Gove Apparatus and method of single-instruction, multiple-data vector operation masking
US20120254589A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian System, apparatus, and method for aligning registers
US20120254588A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US20120254592A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
WO2012119428A1 (zh) * 2011-08-31 2012-09-13 华为技术有限公司 在共享网络中实现组播的方法、系统及装置
WO2013095521A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Instructions processors, methods, and systems to process blake secure hashing algorithm
WO2013095578A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Systems, apparatuses, and methods for mapping a source operand to a different range
WO2013095513A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Packed data operation mask shift processors, methods, systems, and instructions
US9632777B2 (en) * 2012-08-03 2017-04-25 International Business Machines Corporation Gather/scatter of multiple data elements with packed loading/storing into/from a register file entry
US9588766B2 (en) * 2012-09-28 2017-03-07 Intel Corporation Accelerated interlane vector reduction instructions
US9665368B2 (en) * 2012-09-28 2017-05-30 Intel Corporation Systems, apparatuses, and methods for performing conflict detection and broadcasting contents of a register to data element positions of another register
US9189398B2 (en) * 2012-12-28 2015-11-17 Intel Corporation Apparatus and method for memory-mapped register caching
US9244684B2 (en) * 2013-03-15 2016-01-26 Intel Corporation Limited range vector memory access instructions, processors, methods, and systems
US9990202B2 (en) * 2013-06-28 2018-06-05 Intel Corporation Packed data element predication processors, methods, systems, and instructions
US10228941B2 (en) * 2013-06-28 2019-03-12 Intel Corporation Processors, methods, and systems to access a set of registers as either a plurality of smaller registers or a combined larger register
US9442731B2 (en) * 2014-03-13 2016-09-13 Intel Corporation Packed two source inter-element shift merge processors, methods, systems, and instructions

Also Published As

Publication number Publication date
US9477467B2 (en) 2016-10-25
KR101597774B1 (ko) 2016-02-26
JP2014199663A (ja) 2014-10-23
CN107918546B (zh) 2022-02-22
CN104077107A (zh) 2014-10-01
KR20140118924A (ko) 2014-10-08
US20140297994A1 (en) 2014-10-02
GB201405413D0 (en) 2014-05-07
US20170109164A1 (en) 2017-04-20
GB2515862B (en) 2016-11-02
JP5829714B2 (ja) 2015-12-09
US9934032B2 (en) 2018-04-03
CN107918546A (zh) 2018-04-17
GB2515862A (en) 2015-01-07
CN104077107B (zh) 2017-12-22

Similar Documents

Publication Publication Date Title
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE102015007571B4 (de) Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren, -verfahren, -systeme und -befehle
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE112013003743T5 (de) Beschleunigte spurübergreifende Vektorreduzierungsbefehle
DE112012007088B4 (de) Vorrichtung, verfahren und system mit einem befehl zum reduzieren von elementen in einem vektorregister mit einem schrittweisem zugriffsmuster
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
DE112013004783T5 (de) Durch Lese- und Schreibmasken gesteuerter Vektor-Verschiebebefehl
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE112016004348T5 (de) Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE112013003735T5 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE102018128626A1 (de) Systeme, Verfahren und Vorrichtungen für Matrixoperationen
DE102018005976A1 (de) Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten
DE112017003345T5 (de) Bit-prüfprozessoren, verfahren, systeme und anweisungen zum prüfen eines bits mit einem angegebenen prüfbitwert
DE102018131484A1 (de) Einrichtung und verfahren zum vektormultiplizieren und zur subtraktion von vorzeichenbehafteten doppelwörtern
DE102018129273A1 (de) Einrichtung und verfahren zum vektor-multiplizieren; und -akkumulieren von unsignierten doppelwörtern

Legal Events

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