DE102014003706A1 - BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME - Google Patents

BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME Download PDF

Info

Publication number
DE102014003706A1
DE102014003706A1 DE102014003706.1A DE102014003706A DE102014003706A1 DE 102014003706 A1 DE102014003706 A1 DE 102014003706A1 DE 102014003706 A DE102014003706 A DE 102014003706A DE 102014003706 A1 DE102014003706 A1 DE 102014003706A1
Authority
DE
Germany
Prior art keywords
memory
instruction
bit
data
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
DE102014003706.1A
Other languages
English (en)
Inventor
Elmoustapha Ould-Ahmed-Vall
Robert Valentine
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 DE102014003706A1 publication Critical patent/DE102014003706A1/de
Ceased legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • 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/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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement

Landscapes

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

Abstract

Ein Prozessor eines Aspekts enthält mehrere Packdatenregister. Der Prozessor enthält außerdem eine Einheit, die mit den Packdatenregistern gekoppelt ist. Die Einheit ist betriebsfähig, in Reaktion auf eine bereichsbegrenzte Vektorspeicherzugriffsinstruktion. Die Instruktion soll einen quellengepackten Speicherindex anzeigen, der mehrere gepackte Speicherindizes aufweisen soll, die aus 8-Bit-Speicherindizes und 16-Bit-Speicherindizes ausgewählt werden sollen. Die Einheit ist dafür geeignet, auf Speicherorte in nur einem begrenzten Bereich eines Speichers in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion zuzugreifen. Es werden noch andere Prozessoren offenbart, wie auch Verfahren, Systeme und Instruktionen.

Description

  • HINTERGRUND
  • Technisches Gebiet
  • Ausführungsformen betreffen Prozessoren. Insbesondere betreffen Ausführungsformen Prozessoren zum Ausführen von Speicherzugriffsinstruktionen.
  • Allgemeiner Stand der Technik
  • Prozessoren sind gemeinhin befähigt, Instruktionen zum Zugreifen auf Speicher auszuführen. Beispielsweise können Prozessoren Ladeinstruktionen ausführen, um Daten aus einem Speicher zu laden oder zu lesen und/oder Instruktionen zu speichern, um Daten in einen Speicher zu speichern oder zu schreiben.
  • Bestimmte Prozessoren sind befähigt, Vektorladeinstruktionen auszuführen. Diese Vektorladeinstruktionen werden vom Fachmann auch als Vektorholinstruktionen (Vector Gather Instructions) oder einfach Holinstruktionen (Gather Instructions) bezeichnet. Intel® Advanced Vector Extensions Programming Reference, Dokumentenreferenznummer 319433-011, veröffentlicht im Juni 2011, beschreibt verschiedene Vektorhol(VGATHER)-Instruktionen. Zu Beispielen gehören VGATHERDPD, VGATHERQPD, VGATHERDPS, VGATHERQPS, VPGATHERDD, VPGATHERQD, VPGATHERDQ und VPGATHERQQ. Diese Vektorholinstruktionen können dafür verwendet werden, mehrere Datenelemente unter Verwendung mehrerer entsprechender Speicherindizes aus einem Speicher zu holen, zu lesen oder zu laden.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Die Erfindung lasst sich am besten anhand der folgenden Beschreibung und der begleitenden Zeichnungen, die der Veranschaulichung von Ausführungsformen dienen, verstehen. In den Zeichnungen ist Folgendes dargestellt:
  • 1 ist ein Blockschaubild einer Ausführungsform eines Prozessors zum Ausführen einer oder mehrerer bereichsbegrenzter Vektorspeicherzugriffsinstruktionen.
  • 2 ist ein Blockschaubild einer Ausführungsform einer Instruktionsverarbeitungsvorrichtung zum Verarbeiten einer oder mehrerer bereichsbegrenzter Vektorspeicherzugriffsinstruktionen.
  • 3 ist ein Blockflussdiagramm einer Ausführungsform eines Verfahrens zum Zugreifen auf einen begrenzten Bereich eines Speichers in Reaktion auf eine bereichsbegrenzte Vektorspeicherzugriffsinstruktion.
  • 4 ist ein Blockschaubild, das eine Ausführungsform einer bereichsbegrenzten Vektorhol-Operation veranschaulicht.
  • 5 ist ein Blockschaubild, das eine Ausführungsform eines maskierten bereichsbegrenzter Vektorhol-Operation veranschaulicht.
  • 6 ist ein Blockschaubild, das eine Ausführungsform einer bereichsbegrenzten Vektorstreuungsoperation veranschaulicht.
  • 7 ist ein Blockschaubild, das eine Ausführungsform einer maskierten bereichsbegrenzten Vektorstreuungsoperation veranschaulicht.
  • 8 ist ein Blockschaubild einer beispielhaften Implementierungsausführungsform einer bereichsbegrenzten Vektorhol-Operation.
  • 9 ist ein Blockschaubild eines Ausführungsbeispiels eines geeigneten Satzes Packdatenregister.
  • 10 ist ein Blockschaubild eines Ausführungsbeispiels eines geeigneten Satzes Packdatenoperationsmaskenregister.
  • 11 ist ein Schaubild, das ein Ausführungsbeispiel eines 64-Bit-Packdatenoperationsmaskenregisters veranschaulicht, bei der die Anzahl der Maskenbits von der Packdatenbreite und der Datenelementbreite abhängt.
  • 12A veranschaulicht ein beispielhaftes AVX-Instruktionsformat, das einen VEX-Präfix, ein reales Opcode-Feld, ein Mod-R7M-Byte, ein SIB-Byte, ein Verschiebungsfeld und IMM8 enthält.
  • 12B veranschaulicht, aus welchen Feldern von 12A ein komplettes Opcode-Feld und ein Basisoperationsfeld besteht.
  • 12C veranschaulicht, aus welchen Feldern von 12A ein Registerindexfeld besteht.
  • 13A ist ein Blockschaubild, das ein generisches Vektor-freundliches Instruktionsformat und Klasse-A-Instruktionsmatrizen davon gemäß Ausführungsformen der Erfindung veranschaulicht.
  • 13B ist ein Blockschaubild, welches das generische Vektor-freundliche Instruktionsformat und Klasse-B-Instruktionsmatrizen davon gemäß Ausführungsformen der Erfindung veranschaulicht.
  • 14A–D sind Blockschaubilder, die ein beispielhaftes spezifischer Vektor-freundliches Instruktionsformat gemäß Ausführungsformen der Erfindung veranschaulichen.
  • 15 ist ein Blockschaubild einer Registerarchitektur gemäß einer Ausführungsform der Erfindung.
  • 16A ist ein Blockschaubild, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungs-Pipeline gemäß Ausführungsformen der Erfindung veranschaulicht.
  • 16B ist ein Blockschaubild gemäß Ausführungsformen der Erfindung, das sowohl eine beispielhafte Ausführungsform eines In-Order-Architekturkerns als auch eines beispielhaften Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungsarchitekturkerns veranschaulicht, die in einen Prozessor zu integrieren sind.
  • 17A ist ein Blockschaubild eines einzelnen Prozessorkerns, zusammen mit seiner Verbindung zu dem On-Chip-Interconnect-Netzwerk und mit seiner lokalen Teilmenge des Level 2 (L2)-Caches gemäß Ausführungsformen der Erfindung.
  • 17B ist eine auseinandergezogene Ansicht eines Teils des Prozessorkerns in 17A gemäß Ausführungsformen der Erfindung.
  • 18 ist ein Blockschaubild eines Prozessors gemäß Ausführungsformen der Erfindung, der mehr als einen Kern haben kann, einen integrierten Speicher-Controller haben kann und eine integrierte Grafik haben kann.
  • 19 zeigt ein Blockschaubild eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 20 zeigt ein Blockschaubild eines ersten konkreteren beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 21 zeigt ein Blockschaubild eines zweiten konkreteren beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 22 zeigt ein Blockschaubild eines SoC gemäß einer Ausführungsform der vorliegenden Erfindung.
  • 23 ist ein Blockschaubild, das als Gegensatz die Verwendung eines Software-Instruktionskonverters zum Konvertieren binärer Instruktionen in einem Quelleninstruktionssatz in binäre Instruktionen in einem Zielinstruktionssatz gemäß Ausführungsformen der Erfindung zeigt.
  • DETAILLIERTE BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
  • Im vorliegenden Text werden bereichsbegrenzte Vektorspeicherzugriffsinstruktionen, Prozessoren zum Ausführen der Instruktionen, Verfahren, die durch die Prozessoren ausgeführt werden, wenn die Instruktionen verarbeitet oder ausgeführt werden, und Systeme, die einen oder mehrere Prozessoren zum Verarbeiten oder Ausführen der Instruktionen offenbart. In der folgenden Beschreibung werden zahlreiche konkrete Details dargelegt (zum Beispiel konkrete Instruktionen, Instruktionsformate, Packdatenformate, Prozessorkonfigurationen, Mikroarchitekturdetails, Operationsreihenfolgen usw.). Jedoch können Ausführungsformen auch ohne diese konkreten Details praktiziert werden. In anderen Fällen sind allgemein bekannte Schaltkreise, Strukturen und Techniken nicht im Detail gezeigt worden, um nicht das Verständnis der Beschreibung zu erschweren.
  • 1 ist ein Blockschaubild einer Ausführungsform eines Prozessors 100, der dafür geeignet ist, eine oder mehrere bereichsbegrenzte Vektorspeicherzugriffsinstruktionen 103 auszuführen. In einigen Ausführungsformen kann der Prozessor ein Allzweckprozessor sein (zum Beispiel des Typs, wie er in Desktop-Computern, Laptop-Computern, Tablet-Computern, handgehaltenen Geräten, Mobiltelefonen und ähnlichen Computergeräten verwendet wird). Alternativ kann der Prozessor ein Spezialprozessor sein. Zu Beispielen von geeigneten Spezialprozessoren gehören Grafikprozessoren, Netzwerkprozessoren, Kommunikationsprozessoren, kryptografische Prozessoren, Koprozessoren und digitale Signalprozessoren (DSPs), um nur einige wenige Beispiele zu nennen. Der Prozessor kann einer von verschiedenen Complex Instruction Set Computin(CISC)-Prozessoren, verschiedenen Reduced Instruction Set Computin(RISC)-Prozessoren, verschiedenen Very Long Instruction Word(VLIW)-Prozessoren, verschiedenen Hybriden davon oder gänzlich anderen Arten von Prozessoren sein.
  • Der Prozessor hat eine Instruktionssatzarchitektur (ISA) 101. Die ISA stellt einen Teil der Architektur des Prozessors dar, der mit der Programmierung zu tun hat, und enthält die nativen Instruktionen, Architekturregister, Datentypen, Adressiermodi, die Speicherarchitektur, die Interrupt- und Ausnahme-Handhabung und den externen Eingang und Ausgang (E/A) des Prozessors. Die ISA unterscheidet sich von der Mikroarchitektur, die die konkreten Designtechniken darstellt, die zum Implementieren der ISA verwendet werden.
  • Die ISA enthält architekturell-sichtbare Register 106 (zum Beispiel eine Architekturregisterdatei). Die Architekturregister stellen allgemein On-Chip-Prozessorspeicherorte dar. Die Architekturregister werden im vorliegenden Text auch einfach als Register bezeichnet. Sofern nicht anders angegeben oder offenkundig, werden die Phrasen Architekturregister, Registerdatei und Register im vorliegenden Text zum Verweisen auf Register verwendet, die für die Software und/oder den Programmierer und/oder die Register sichtbar sind, die durch Makroinstruktionen oder Assemblerspracheninstruktionen zum Identifizieren von Operanden spezifiziert werden. Diese Register stehen im Gegensatz zu anderen nicht-architekturellen oder nicht-architekturell sichtbaren Registern in einer bestimmten Mikroarchitektur (zum Beispiel temporären Registern, die durch Mikroinstruktionen, Umordnungspuffer, Retirement-Register usw. verwendet werden). Die veranschaulichten Register enthalten Packdatenregister 107. Jedes der Packdatenregister ist dafür geeignet, Packdaten, Vektordaten oder SIMD-Daten zu speichern. In einigen Ausführungsformen können die Register außerdem optional Packdatenoperationsmaskenregister 108 enthalten, obgleich dies nicht erforderlich ist.
  • Die ISA enthält einen Instruktionssatz 101, der durch den Prozessor unterstützt wird. Die Instruktionen des Instruktionssatzes stellen Assemblerspracheninstruktionen, Maschinenebeneninstruktionen oder Makroinstruktionen dar (zum Beispiel Instruktionen, die an den Prozessor zur Ausführung übermittelt werden), im Gegensatz zu Mikroinstruktionen oder Mikro-ops (zum Beispiel jenen, die aus einem Decoder kommen, der Makroinstruktionen decodiert). Der Instruktionssatz enthält die eine oder die mehreren bereichsbegrenzten Vektorspeicherzugriffsinstruktionen 103, die jeweils dafür geeignet sind, den Prozessor zu veranlassen, auf einen begrenzten Bereich 120 eines externen Speichers 110 zuzugreifen. In einigen Ausführungsformen braucht der begrenzte Bereich 120 nur einen Abschnitt oder eine Teilmenge (zum Beispiel einen aneinandergrenzend indexierbaren Abschnitt oder eine aneinandergrenzend indexierbare Teilmenge) des externen Speichers 110 darzustellen. In einigen Ausführungsformen können die Instruktion(en) 103 optional eine oder mehrere bereichsbegrenzte Vektorholinstruktionen 104 enthalten, die dafür geeignet sind, den Prozessor zu veranlassen, Datenelemente von potenziell nicht-aneinandergrenzenden Orten in dem begrenzten Bereich 120 des externen Speichers 110 zu lesen, zu laden oder zu holen. In einigen Ausführungsformen können die Instruktion(en) 103 optional eine oder mehrere bereichsbegrenzte Vektorstreuungsinstruktion(en) 105 enthalten, die dafür geeignet sind, den Prozessor zu veranlassen, Datenelemente zu potenziell nicht-aneinandergrenzenden Orten in dem begrenzten Bereich 120 des externen Speichers 110 zu schreiben, zu speichern oder zu streuen. In verschiedenen Ausführungsformen können jegliche von einer einzelnen bereichsbegrenzten Vektorspeicherzugriffsinstruktion bis zu mehreren oder vielen solcher Instruktionen vorhanden sein.
  • Der Prozessor enthält außerdem eine Ausführungslogik 109. Die Ausführungslogik ist dafür geeignet, die bereichsbegrenzten Vektorspeicherzugriffsinstruktion(en) 103 auszuführen oder zu verarbeiten und auf den begrenzten Bereich in Reaktion auf die Instruktionen zuzugreifen (zum Beispiel um Elemente aus dem begrenzten Bereich zu holen oder Elemente in den begrenzten Bereich zu streuen). Zu Beispielen geeigneter Ausführungslogik gehören Ausführungseinheiten, Funktionseinheiten, Speicherzugriffseinheiten, Speicherausführungseinheiten, Holeinheiten, Streueinheiten und dergleichen.
  • 2 ist ein Blockschaubild einer Ausführungsform einer Instruktionsverarbeitungsvorrichtung 200. In einigen Ausführungsformen kann die Instruktionsverarbeitungsvorrichtung 200 der Prozessor von 1 oder etwas ähnliches sein oder kann in dem Prozessor von 1 oder etwas ähnlichem enthalten sein. Alternativ kann die Instruktionsverarbeitungsvorrichtung 200 ein anderer Prozessor sein oder kann in einem anderen Prozessor enthalten sein. Darüber hinaus kann der Prozessor von 1 eine andere Instruktionsverarbeitungsvorrichtung als die von 2 enthalten.
  • Die Instruktionsverarbeitungsvorrichtung 200 kann die bereichsbegrenzte Vektorspeicherzugriffsinstruktion 203 empfangen. Beispielsweise kann die Instruktion von einer Instruktionsholeinheit, einer Instruktionswarteschlange, einem Speicher usw. empfangen werden. In einigen Ausführungsformen kann die Instruktion eine bereichsbegrenzte Vektorholinstruktion oder eine bereichsbegrenzte Vektorstreuungsinstruktion darstellen.
  • Die Vorrichtung enthält einen Satz Packdatenregister 207. In einigen Ausführungsformen kann die Vorrichtung optional einen Satz Packdatenoperationsmaskenregister 208 enthalten, obgleich dies nicht erforderlich ist. Die Register können architekturelle On-Processor (zum Beispiel On-Chip)-Prozessorspeicherorte darstellen. Die Register können auf verschiedene Weise in verschiedenen Mikroarchitekturen unter Verwendung vertrauter Techniken implementiert sein und sind nicht auf irgendeine bestimmte Art von Schaltkreis beschränkt. Zu Beispielen geeigneter Arten von Registern gehören dedizierte physische Register, dynamisch zugeordnete physische Register, die mit Registerumbenennung arbeiten, und Kombinationen davon.
  • Die bereichsbegrenzte Vektorspeicherzugriffsinstruktion kann einen quellengepackten Speicherindex 213, der mehrere gepackte Speicherindizes aufweist ausdrücklich spezifizieren (zum Beispiel durch ein oder mehrere Bits oder ein Feld) oder auf sonstige Weise anzeigen (zum Beispiel implizit anzeigen). In einigen Ausführungsformen können die gepackten Speicherindizes gepackte 8-Bit-Byte-Speicherindizes oder gepackte 16-Bit-Wortspeicherindizes sein. Herkömmlicherweise implementieren Vektorholinstruktionen in der Regel signifikant größere 32-Bit- oder 64-Bit-Speicherindizes, da von ihnen erwartet wird, in der Lage zu sein, von jedem Ort im Speicher 210 etwas zu holen, anstatt nur von innerhalb des begrenzten Bereichs 220 innerhalb des Speichers 210. Im Fall einer Vektorholinstruktion oder -operation oder einer Vektorspeicherladeinstruktion oder -operation kann die Instruktion einen Zielspeicherort 215 anzeigen, wo Ergebnispackdaten, einschließlich Datenelementen, die aus dem begrenzten Bereich 220 des Speichers 210 geladen oder geholt wurden, gespeichert werden sollen. Im Fall einer Vektorstreuungsinstruktion oder -operation oder einer Vektorspeicher-Speicherungsinstruktion oder -operation kann die Instruktion Quellenpackdaten 214 anzeigen, einschließlich mehrerer Datenelemente, die in den begrenzten Bereich 220 des Speichers 210 zu schreiben oder zu streuen sind. Wie gezeigt, können in einigen Ausführungsformen die quellengepackten Speicherindizes 213, die Quellenpackdaten 214 und der Zielspeicherort 215 Packdatenregister des Satzes Packdatenregister 207 sein. Alternativ können optional auch andere Speicherorte für eines oder mehrere von diesen verwendet werden.
  • In einigen Ausführungsformen kann die bereichsbegrenzte Vektorspeicherzugriffsinstruktion 203 optional eine Quellenpackdatenoperationsmaske 216 spezifizieren oder auf sonstige Weise anzeigen, obgleich dies nicht erforderlich ist. Packdatenoperationsmasken und ihre Verwendung zur Prädiktion oder bedingten Steuerung werden weiter unten noch besprochen. Andere Ausführungsformen können optional ohne Maskierung oder Prädiktion ausgeführt werden.
  • Wenden wir uns wieder 2 zu. Die veranschaulichte Instruktionsverarbeitungsvorrichtung enthält eine Decodierlogik 213 (zum Beispiel eine Decodiereinheit oder einen Decoder). Die Instruktionsdecodierlogik kann Maschineninstruktionen oder Makroinstruktionen einer höheren Ebene (zum Beispiel die Instruktion 203) empfangen und decodieren und eine oder mehrere Mikrooperationen, Mikrocode-Eintrittspunkte oder Mikroinstruktionen einer niedrigeren Ebene oder andere Instruktionen oder Steuersignale einer niedrigeren Ebene ausgeben, die die ursprüngliche Instruktion der höheren Ebene widerspiegeln und/oder davon abgeleitet sind. Die eine oder die mehreren Instruktionen oder Steuersignale einer niedrigeren Ebene können die Operation der Instruktion einer höheren Ebene durch eine oder mehrere Operationen einer niedrigeren Ebene (zum Beispiel Schaltkreis-Ebene oder Hardware-Ebene) implementieren. Die Decodierlogik kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden, wie zum Beispiel Mikrocode-Nurlesespeicher (ROMs), Nachschlagetabellen, Hardware-Implementierungen, programmierbarer Logik-Arrays (PLAs) und anderer dem Fachmann bekannter Mechanismen. In anderen Ausführungsformen kann anstelle der Decodierlogik 211 ein Instruktionsemulator, ein Übersetzer, ein Morpher, ein Interpretierer oder eine sonstige Instruktionskonvertierungslogik (zum Beispiel in Software, Hardware, Firmware oder einer Kombination davon implementiert) verwendet werden. In weiteren Ausführungsformen kann eine Kombination aus Instruktionskonvertierungslogik und einer Decodierlogik verwendet werden. Ein Teil der, oder die gesamte, Instruktionskonvertierungslogik kann möglicherweise außerhalb des Chips und von der übrigen Instruktionsverarbeitungsvorrichtung getrennt angeordnet sein, wie zum Beispiel auf einem separaten Chip oder in einem Speicher.
  • Wenden wir uns wieder 2 zu. Die Ausführungslogik 209 ist mit der Decodierlogik 211 gekoppelt. Die Ausführungslogik ist außerdem mit dem Packdatenregister 207 gekoppelt, und in einigen Ausführungsformen optional mit dem Packdatenoperationsmaskenregister 208. Zu Beispielen geeigneter Ausführungslogik gehören eine Ausführungseinheit, eine Funktionseinheit, eine Speicherzugriffseinheit, eine Speicherausführungseinheit, eine Holeinheit, eine Streueinheit und dergleichen. Die Ausführungslogik und/oder die Vorrichtung können spezielle oder besondere Logik enthalten (zum Beispiel Schaltungen, Transistoren oder andere Hardware, die möglicherweise mit Software und/oder Firmware kombiniert ist), die dafür geeignet ist, die Instruktion 203 auszuführen und/oder zu verarbeiten und in Reaktion auf die Instruktion auf den begrenzten Bereich des Speichers zuzugreifen. In einigen Ausführungsformen enthält die Ausführungseinheit mindestens einige integrierte Schaltungen, Transistoren oder andere Schaltungen oder Hardware eines Halbleiterchips.
  • Die Ausführungslogik ist dafür geeignet, in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion 203, und/oder im Ergebnis der bereichsbegrenzten Vektorspeicherzugriffsinstruktion 203 (zum Beispiel in Reaktion auf ein oder mehrere Steuersignale, die aus der Instruktion 203 decodiert oder auf sonstige Weise abgeleitet wurden), auf den begrenzten Bereich 220 des Speichers 210 zuzugreifen. Beispielsweise kann in einer Ausführungsform einer bereichsbegrenzten Vektorholinstruktion die Ausführungseinheit die quellengepackten Speicherindizes 213 dafür verwenden, Datenelemente von potenziell nicht-aneinandergrenzenden Orten in dem begrenzten Bereich 220 des Speichers 210 zu holen oder zu laden und die geholten oder geladenen Datenelemente an dem Zielspeicherort 215 zu speichern. In einer Ausführungsform einer bereichsbegrenzten Vektorstreuungsinstruktion kann die Ausführungseinheit die quellengepackten Speicherindizes 213 zum Streuen oder Schreiben von Datenelementen aus Quellenpackdaten 214 an potenziell nicht-aneinandergrenzende Orte in dem begrenzten Bereich 220 des Speichers 210 verwenden.
  • In einigen Ausführungsformen kann die bereichsbegrenzte Vektorspeicherzugriffsinstruktion 203 dafür verwendet werden, nur auf den begrenzten Bereich 220 des Speichers 210 zuzugreifen. In einigen Ausführungsformen zeigen die Instruktionen nur 8-Bit-Byte- oder 16-Bit-Wortspeicherindizes an. Herkömmliche Vektorholinstruktionen erlauben es in der Regel, die Datenelemente von jedem Ort im Speicher zu holen. Infolge dessen werden in der Regel entweder 32-Bit- oder 64-Bit-Speicherindizes verwendet. Diese 32-Bit- oder 64-Bit-Speicherindizes haben genug Bits, um es zu erlauben, Datenelemente möglicherweise von im Wesentlichen liberall im Speicher oder zumindest aus einem relativ großen Teil des Speichers zu holen (zum Beispiel dem, auf den durch entweder 32 Bits oder 64 Bits zugegriffen werden kann).
  • Jedoch besteht ein potenzieller Nachteil der Verwendung von 32-Bit- oder 64-Bit-Speicherindizes darin, dass ihre relativ hohe Größe dazu neigen kann, die Anzahl jener Speicherindizes zu begrenzen, die in einem einzelnen Packdatenregister gespeichert werden können, das als ein Quellenoperand der Vektorholinstruktionen bezeichnet ist. Beispielsweise könnten nur vier 64-Bit-Speicherindizes oder nur acht 32-Bit-Speicherindizes in ein 256-Bit-Register passen. Darüber hinaus kann es in einigen Fällen erwünscht sein, relativ kleinere Datenelemente zu holen, wie zum Beispiel 8-Bit-Byte-Datenelemente oder 16-Bit-Wortelemente. Jedoch neigt die relativ hohe Größe der Speicherindizes dazu, die Anzahl jener 8-Bit-Byte- oder 16-Bit-Wortelemente zu begrenzen, die geholt werden können. Beispielsweise kann oft nur die gleiche Anzahl von Datenelementen geholt werden wie die Anzahl von 32-Bit- oder 64-Bit-Speicherindizes, die in ein Packdatenregister passen. Infolge dessen ist es oft nicht möglich, so viele dieser Elemente zu holen, wie man möchte, was zum Teil an der hohen Größe der 32-Bit- oder 64-Bit-Speicherindizes liegt.
  • In einigen Ausführungsformen können anstelle solcher relativ großen 32-Bit- oder 64-Bit-Speicherindizes relativ kleinere Speicherindizes, wie zum Beispiel 8-Bit-Byte- oder 16-Bit-Wortspeicherindizes, durch Ausführungsformen von bereichsbegrenzten Vektorspeicherzugriffsinstruktionen oder -operationen verwendet werden. Vorteilhafterweise kann dies helfen, die Anzahl solcher Speicherindizes zu erhöhen, die in einem einzelnen Packdatenregister als quellengepackte Speicherindizes gespeichert werden können. Beispielsweise können zweiunddreißig 8-Bit-Speicherindizes oder sechzehn 16-Bit-Speicherindizes in ein 256-Bit-Register passen, anstatt nur vier 64-Bit-Speicherindizes oder acht 32-Bit-Speicherindizes. Als ein weiteres Beispiel können vierundsechzig 8-Bit-Speicherindizes oder zweiunddreißig 16-Bit-Speicherindizes in ein 512-Bit-Register passen. Dementsprechend kann dies helfen, die Anzahl von Datenelementen zu erhöhen, die durch eine Ausführungsform einer einzelnen bereichsbegrenzten Vektorhol- oder -streuungsinstruktion oder -operation geholt oder gestreut werden können.
  • In einigen Ausführungsformen reichen diese relativ kleineren 8-Bit-Byte- oder 16-Bit-Wortspeicherindizes möglicherweise nicht aus, um auf Datenelemente von überall im Speicher zuzugreifen. Vielmehr können diese kleineren 8-Bit- oder 16-Bit-Speicherindizes auf Datenelemente in nur einem begrenzten Bereich (zum Beispiel einer aneinandergrenzenden Teilmenge, die durch die 8-Bit- oder 16-Bit-Speicherindizes indexiert werden kann) eines größeren Gesamtspeichers zugreifen (zum Beispiel einem, der durch 32-Bit- oder 64-Bit-Speicherindizes adressiert werden müsste). In einigen Ausführungsformen kann die durch den Prozessor unterstützte ISA eine oder mehrere weitere Speicherzugriffsinstruktionen (zum Beispiel eine Vektorholinstruktion) enthalten, die 32-Bit- oder 64-Bit-Speicherindizes zum Zugreifen auf Datenelemente von überall in dem Gesamtspeicher anzeigen und verwenden. Beispielsweise braucht in einigen Ausführungsformen der begrenzte Bereich, der den 8-Bit-Speicherindizes entspricht, aus nicht mehr als 256 Datenelementen oder 256 Speicherorten zu bestehen, die eindeutig durch einen 8-Bit-Byte-Speicherindex indexiert werden können. Als ein weiteres Beispiel braucht in einigen Ausführungsformen der begrenzte Bereich aus nicht mehr als 65536 Datenelementen oder 65536 Speicherorten, zu bestehen, die eindeutig durch einen 16-Bit-Byte-Speicherindex indexiert werden können. In anderen Ausführungsformen braucht nur ein Abschnitt oder eine Teilmenge dieser Datenelemente oder Speicherorte, die indexiert werden können, als der begrenzte Bereich verwendet zu werden (zum Beispiel braucht anstelle des vollen Bereichs eines 16-Bit-Index nur ein Abschnitt jenes Bereichs verwendet zu werden).
  • Obgleich die bereichsbegrenzten Vektorspeicherzugriffsinstruktionen oder -operationen nicht in der Lage sind, an irgend einer Stelle im Speicher auf Datenelemente zuzugreifen, gibt es verschiedene Gründe, warum es vorteilhaft sein kann, von innerhalb nur des begrenzten Bereichs eines viel größeren Speichers auf Datenelemente zuzugreifen. Beispielsweise kann das der Fall sein, wenn eine Tabelle, ein Array, eine Datenstruktur oder sonstige Anordnung oder Zusammenstellung von Daten in dem begrenzten Bereich gespeichert werden kann. Oft muss ein Algorithmus möglicherweise auf mehrere oder viele Datenelemente von innerhalb der Tabelle, des Array, der Datenstruktur oder sonstigen Anordnung oder Zusannnenstellung von Daten gleichzeitig zugreifen. Als ein Beispiel kann der Algorithmus eine Matrix transponieren oder auf sonstige Weise die Daten umordnen oder umstrukturieren; in einem solchen Fall muss er möglicherweise auf viele Datenelemente zugreifen. Als ein weiteres Beispiel kann der Algorithmus auf Datenelemente zugreifen, die durch eine konstante Schrittweite getrennt sind, beispielsweise jedes zweite, dritte, vierte oder N-te Datenelement. Allgemeiner ausgedrückt, gibt es viele Fälle, wo ein Algorithmus dafür verwendet werden kann, auf mehrere oder viele Datenelemente von innerhalb einer Anordnung oder Zusammenstellung von Daten zuzugreifen, die in einem begrenzten Bereich eines Speichers gespeichert sein können, der durch 8-Bit-Byte- oder 16-Bit-Wortspeicherindizes indexiert werden kann.
  • Vorteilhafterweise können im vorliegenden Text offenbarte Ausführungsformen der bereichsbegrenzten Vektorspeicherzugriffsinstruktionen oder -operationen, wenn sie in solchen Fällen verwendet werden, teilweise aufgrund der kleineren 8-Bit- oder 16-Bit-Speicherindizes in der Lage sein, auf relativ mehr Datenelemente innerhalb einer einzelnen Instruktion oder Operation zuzugreifen (zum Beispiel zu holen oder zu streuen). Größere Indizes, die dazu tendieren, die Anzahl solcher zugegriffenen Datenelemente zu begrenzen, sind nicht nötig, da die Datenelemente nur von innerhalb des begrenzten Bereichs anstatt von irgend einer Stelle im Speicher geholt werden. Darüber hinaus, wie weiter unten noch besprochen wird, lassen sich in einigen Ausführungsformen die bereichsbegrenzten Vektorspeicherzugriffsinstruktionen oder -operationen möglicherweise effizienter implementieren und/oder können schneller sein als herkömmliche Vektorholinstruktionen oder -operationen, die sequenzielle Zugriffe für jedes der zugegriffenen Datenelemente verwenden (zum Beispiel, weil weniger Speicherzugriffe, die jeweils mehrere Datenelemente beinhalten, ausgeführt werden können).
  • Um zu vermeiden, dass wesentliche Aspekte der Beschreibung in den Hintergrund treten, ist eine einfache Instruktionsverarbeitungsvorrichtung 200 beschrieben worden, obgleich die Instruktionsverarbeitungsvorrichtung optional auch eine oder mehrere andere herkömmliche Komponenten enthalten kann. Zu Beispielen solcher herkömmlicher Komponenten gehören eine Instruktionsholeinheit, eine Instruktionsdisponierungseinheit, eine Abzweigprädiktionseinheit, Instruktions- und Daten-Caches, Instruktions- und Datenübersetzungspuffer (TLB), Vorgriffspuffer, Mikroinstruktionswarteschlangen, Mikroinstruktionssequenzierer, Bussschnittstelleneinheiten, eine Retirement/Commit-Einheit, eine Registerumbenennungseinheit und weitere Komponenten, die herkömmlicherweise in Prozessoren verwendet werden. Darüber hinaus können Ausführungsformen mehrere Kerne, Logikprozessoren oder Ausführungs-Engines mit entweder dem gleichen oder einem anderen Instruktionssatz und/oder der gleichen oder einer anderen ISA aufweisen. Es gibt buchstäblich zahlreiche verschiedene Kombinationen und Konfigurationen solcher Komponenten in Prozessoren, und die Ausführungsformen sind nicht auf eine bestimmte derartige Kombination oder Konfiguration beschränkt.
  • 3 ist ein Blockflussdiagramm einer Ausführungsform eines Verfahrens 330 zur Verarbeitung einer Ausführungsform einer Instruktion. In verschiedenen Ausführungsformen kann das Verfahren durch einen Allzweckprozessor, einen Spezialprozessor oder eine andere Instruktionsverarbeitungsvorrichtung oder digitale Logikvorrichtung ausgeführt werden. In einigen Ausführungsformen können die Operationen und/oder Verfahren von 3 durch den Prozessor von 1 und/oder die Vorrichtung von 2 und/oder innerhalb des Prozessors von 1 und/oder der Vorrichtung von 2 ausgeführt werden. Die im vorliegenden Text beschriebenen Komponenten, Merkmale und konkreten optionalen Details für den Prozessor und die Vorrichtung der 12 finden optional auch Anwendung auf die Operationen und/oder das Verfahren von 3. Alternativ können die Operationen und/oder das Verfahren von 3 durch einen ähnlichen oder gänzlich anderen Prozessor oder eine ähnliche oder gänzlich andere Vorrichtung und/oder in einem ähnlichen oder gänzlich anderen Prozessor oder einer ähnlichen oder gänzlich anderen Vorrichtung ausgeführt werden. Darüber hinaus können der Prozessor von 1 und/oder die Vorrichtung von 2 die gleichen oder ähnliche Operationen und/oder Verfahren wie, oder gänzlich andere Operationen und/oder Verfahren als, die von 3 ausführen.
  • Das Verfahren enthält das Empfangen der bereichsbegrenzten Vektorspeicherzugriffsinstruktion bei Block 331. In verschiedenen Aspekten kann die Instruktion in einem Prozessor, einer Instruktionsverarbeitungsvorrichtung oder einem Abschnitt davon (zum Beispiel einer Instruktionsholeinheit, einem Decoder, einem Instruktionskonverter usw.) empfangen werden. In verschiedenen Aspekten kann die Instruktion von einer außerhalb des Chips liegenden Quelle (zum Beispiel einem DRAM-Speicher, einer Disk, einem Interconnect usw.) oder einer auf dem Chip befindlichen Quelle (zum Beispiel einem Instruktions-Cache) empfangen werden. Die bereichsbegrenzte Vektorspeicherzugriffsinstruktion kann einen quellengepackten Speicherindex, der mehrere gepackte Speicherindizes aufweist anzeigen. In einigen Ausführungsformen können die Speicherindizes 8-Bit-Speicherindizes oder 16-Bit-Speicherindizes sein. In einigen Ausführungsformen können die Speicherindizes 8-Bit-Speicherindizes sein. In einigen Ausführungsformen können die quellengepackten Speicherindizes mindestens 32 Speicherindizes enthalten.
  • Bei Block 332 ist es möglich, in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion auf Speicherorte in nur einem begrenzten Bereich eines Speichers zuzugreifen. In einigen Ausführungsformen kann mit einer oder mehreren Speicheradressen von jeweils 32 Bit oder 64 Bit auf den begrenzten Bereich zugegriffen werden. In einigen Ausführungsformen braucht der begrenzte Bereich nur 256 Bytes zu enthalten. In einigen Ausführungsformen, wie weiteren unten noch erläutert wird, kann der Zugriff durch mehrere Datenelement-Ladevorgänge ausgeführt werden, die jeweils mehrere Datenelemente laden können, die sowohl benötigte als auch nicht-benötigte Datenelemente enthalten. In einigen Ausführungsformen können solche Mehrelement-Ladevorgänge helfen, Geschwindigkeit oder Effizienz zu verbessern. In einigen Ausführungsformen kann der gesamte begrenzte Bereich aus dem Speicher zu Speicherorten des Prozessors (zum Beispiel in On-Chip-Register) geladen werden.
  • Das veranschaulichte Verfahren beinhaltet architekturell sichtbare Operationen (zum Beispiel solche, die aus einer Software-Perspektive sichtbar sind). In anderen Ausführungsformen kann das Verfahren optional eine oder mehrere Mikroarchitektur-Operationen enthalten. Beispielsweise kann die Instruktion geholt, decodiert oder außer der Reihenfolge (out of Order) disponiert werden, auf Quellenoperanden kann zugegriffen werden, eine Ausführungslogik kann aktiviert werden, um mikroarchitekturelle Operationen auszuführen und die Operationen der Instruktion zu implementieren, die Ausführungslogik kann die mikroarchitekturellen Operationen ausführen, Ergebnisse können zurück in die Programmreihenfolge gebracht werden, usw.
  • 4 ist ein Blockschaubild, das eine Ausführungsform einer bereichsbeschränkten Hol-Operation 403 veranschaulicht, die in Reaktion auf eine Ausführungsform einer bereichsbegrenzten Holinstruktion ausgeführt werden kann. Die bereichsbegrenzte Holinstruktion kann einen quellengepackten Speicherindex 413, der mehrere gepackte Speicherindizes aufweist spezifizieren oder auf sonstige Weise anzeigen. Wie gezeigt, können in einigen Ausführungsformen die Speicherindizes 8-Bit-Byte-Speicherindizes sein, und die quellengepackten Speicherindizes können 512 Bits breit sein und können vierundsechzig 8-Bit-Byte-Speicherindizes enthalten. Alternativ können in anderen Ausführungsformen optional 16-Bit-Wortspeicherindizes oder andere Speicherindizes mit weniger als 32 Bits verwendet werden. Darüber hinaus können in anderen Ausführungsformen optional auch andere Packdatenbreiten neben 512 Bits verwendet werden, wie zum Beispiel Packdatenbreiten von 64 Bits, 128 Bits, 256 Bits oder 1024 Bits. Beispielsweise können die 64-Bit-, 128-Bit- und 256-Bit-Breiten jeweils in der Lage sein, acht, sechzehn und zweiunddreißig 8-Bit-Byte-Speicherindizes oder halb so viele eines jeden der 16-Bit-Wortspeicherindizes zu speichern. In dem veranschaulichten Beispiel haben die Speicherindizes – von der geringstwertigen Position (auf der linken Seite) zur höchstwertigen Position rechts (auf der rechten Seite), die Werte 134, 231, 20, 135, 5, 21, 30, ..., 186. Diese Werte sind nur Beispiele.
  • Eine Ausführungsform einer bereichsbegrenzten Vektorhol-Operation kann in Reaktion auf die, und/oder im Ergebnis der, Ausführungsform der bereichsbegrenzten Holinstruktion ausgeführt werden. Die bereichsbegrenzte Vektorhol-Operation kann Datenelemente aus einem begrenzten Bereich 420 eines Speichers 410 laden oder holen. Wie zuvor besprochen, braucht der begrenzte Bereich nur eine kleine Teilmenge (zum Beispiel eine aneinandergrenzende Teilmenge, die durch die 8-Bit- oder 16-Bit-Speicherindizes indexiert werden kann) des allgemein viel größeren Gesamtspeichers darzustellen (der zum Beispiel durch andere Instruktionen unter Verwendung von 32-Bit- oder 64-Bit-Speicherindizes indexiert werden kann). Der Umfang oder die Größe des begrenzten Bereichs kann auf der Breite der Speicherindizes (in Bits) basieren. Beispielsweise könnte jeder 8-Bit-Byte-Speicherindex dafür geeignet sein, jeden von 256 verschiedenen Orten oder jedes von 256 verschiedenen Datenelementen eindeutig zu indexieren oder zu adressieren, und in einigen Ausführungsformen braucht der begrenzte Bereich nur jene 256 Orte oder Datenelemente (zum Beispiel 256 Bytes oder Wörter) zu enthalten. Die geholten Datenelemente können durch die entsprechenden Speicherindizes der quellengepackten Speicherindizes 413 angezeigt werden. Jeder Speicherindex kann auf einen entsprechenden Speicherort und/oder ein entsprechendes darin gespeichertes Datenelement weisen. Beispielsweise weist in der veranschaulichten Ausführungsform der Speicherindex 134 auf den Speicherort in dem begrenzten Bereich, der das Datenelement B1 speichert, der Speicherindex 231 weist auf den Speicherort in dem begrenzten Bereich, der das Datenelement B2 speichert, und so weiter.
  • Ein Packdatenergebnis 415 kann an einem Zielspeicherort in Reaktion auf die, und/oder im Ergebnis der, bereichsbegrenzten Vektorholinstruktion oder -operation gespeichert werden. In einem Aspekt kann die Instruktion den Zielspeicherort spezifizieren oder auf sonstige Weise anzeigen. In einigen Ausführungsformen kann das Packdatenergebnis Datenelemente enthalten, die von potenziell nicht-aneinandergrenzenden Regionen von innerhalb nur des begrenzten Bereichs 420, aber nicht von innerhalb anderer Abschnitte des Speichers 410 geholt wurden. Wie gezeigt, kann in einigen Ausführungsformen das Packdatenergebnis 512 Bits breit sein und kann vierundsechzig 8-Bit-Byte-Datenelemente enthalten. Alternativ können 16-Bit-Wort- oder 32-Bit-Doppelwort-Datenelemente geholt werden und können entweder in breiteren oder schmaleren Ergebnispackdaten gespeichert werden. In dem veranschaulichten Beispiel speichert das Packdatenergebnis in dem Ziel, von der geringstwertigen Position (auf der linken Seite) zur höchstwertigen Position rechts (auf der rechten Seite), die Datenelemente B1, B2, B3, B4, B5, B6, B7, ..., B64. Dies ist nur ein Beispiel.
  • 5 ist ein Blockschaubild, das eine Ausführungsform einer maskierten bereichsbeschränkten Hol-Operation 503 veranschaulicht, die in Reaktion auf eine Ausführungsform einer maskierten bereichsbegrenzten Holinstruktion ausgeführt werden kann. Die maskierte Operation von 5 besitzt gewisse Ähnlichkeiten mit der unmaskierten Operation von 4. Um zu vermeiden, dass wesentliche Aspekte der Beschreibung in den Hintergrund treten, werden die verschiedenen und/oder zusätzlichen Charakteristika für die maskierte Operation von 5 vor allem beschrieben, ohne all die ähnlichen oder gemeinsamen Charakteristika in Bezug auf die unmaskierte Operation von 4 zu wiederholen. Es ist jedoch zu beachten, dass diese zuvor beschriebenen Charakteristika der unmaskierten Operation optional auch für 5 gelten, sofern nicht unmissverständlich etwas anderes zu erkennen ist.
  • Die maskierte bereichsbegrenzte Holinstruktion kann einen quellengepackten Speicherindex 513 spezifizieren oder auf sonstige Weise anzeigen, der mehrere gepackte Speicherindizes hat. Wie gezeigt, können in einigen Ausführungsformen die Speicherindizes 8-Bit-Byte-Speicherindizes sein, und die quellengepackten Speicherindizes können 512 Bits breit sein und können vierundsechzig 8-Bit-Byte-Speicherindizes enthalten. Alternativ können optional in anderen Ausführungsformen 16-Bit-Wortspeicherindizes oder andere Speicherindizes von weniger als 32-Bit verwendet werden. Darüber hinaus können in anderen Ausführungsformen optional andere Packdatenbreiten neben 512 Bits verwendet werden, wie zum Beispiel Packdatenbreiten von 64 Bits, 128 Bits, 256 Bits oder 1024 Bits.
  • In einigen Ausführungsformen kann die maskierte bereichsbegrenzte Holinstruktion optional eine Quellenpackdatenoperationsmaske 516 spezifizieren oder auf sonstige Weise anzeigen. Die Packdatenoperationsmaske kann im vorliegenden Text auch einfach als eine Operationsmaske, Prädiktionsmaske oder Maske bezeichnet werden. Die Maske kann einen Prädiktionsoperanden oder einen bedingten Steueroperanden darstellen, der dafür verwendet wird, zu maskieren, zu prädizieren oder bedingt zu steuern, ob Operationen (zum Beispiel Hol-Operationen) ausgeführt werden sollen oder nicht. In einigen Ausführungsformen kann die Maskierung oder Prädiktion auf der Basis der Auflösung je Datenelement erfolgen, dergestalt, dass Operationen an verschiedenen Datenelementen separat und/oder unabhängig von anderen prädiziert oder bedingt gesteuert können. Die Operationsmaske kann mehrere Maskenelemente, Prädiktionselemente oder bedingte Steuerelemente enthalten. In einem Aspekt können die Elemente in einer 1:1-Entsprechung mit entsprechenden Quellendatenelementen und/oder Ergebnisdatenelementen enthalten sein. Wie gezeigt, kann in einigen Ausführungsformen jedes Maskenelement ein einzelnes Maskenbit sein. Ein Wert jedes Maskenbits kann steuern, ob eine Operation (zum Beispiel eine Hol-Operation) ausgeführt werden soll oder nicht. Gemäß einer möglichen Konvention kann jedes Maskenbit einen ersten Wert haben (der zum Beispiel auf eine binäre 1 gesetzt wird), um das Ausführen der Hol-Operation und das Speichern des Ergebnisdatenelements an dem Zielspeicherort zu erlauben, oder kann einen zweiten Wert haben (der zum Beispiel auf eine binäre 0 gelöscht wird), der verhindert, dass die Hol-Operation ausgeführt wird und/oder ein geholtes Datenelement am Zielspeicherort gespeichert wird.
  • Wie gezeigt, kann im Fall der quellengepackten Speicherindizes 513, die 512 Bits breit sind und vierundsechzig 8-Bit-Speicherindizes haben, die Quellenpackdatenoperationsmaske 516 64 Bit breit sein, wobei jedes Bit ein Prädiktions- oder Maskenbit darstellt. Alternativ kann die Quellenpackdatenoperationsmaske auch andere Breiten haben, beispielsweise eine Breite (in Bits) gleich der Anzahl von Speicherindizes in den quellengepackten Speicherindizes 513 (zum Beispiel acht, sechzehn, zweiunddreißig usw.). In dem veranschaulichten Beispiel sind die Maskenbits, von geringstwertigen (auf der linken Seite) zum höchstwertigen (auf der rechten Seite), 1, 1, 0, 1, 1, 1, 0 ..., 1. Dies ist nur ein Beispiel. Gemäß der veranschaulichten Konvention stellt ein Maskenbitwert einer binären 0 ein herausmaskiertes Element dar, während ein Maskenbitwert einer binären 1 ein unmaskiertes Element bezeichnet. Für jedes unmaskierte Element ist die zugehörige Hol-Operation auszuführen, und das geholte Datenelement ist in dem entsprechenden Datenelement des Packdatenergebnisses 515 zu speichern. Jedes Maskenbit entspricht einem Speicherindex und einem Ergebnisdatenelement in einer entsprechenden Position. Beispielsweise befinden sich in der Illustration die entsprechenden Positionen in vertikaler Ausrichtung übereinander.
  • Eine Ausführungsform einer maskierten bereichsbegrenzten Vektorhol-Operation 503 kann in Reaktion auf die, und/oder im Ergebnis der, Ausführungsform der maskierten bereichsbegrenzten Holinstruktion ausgeführt werden. Die Operation kann – vorbehaltlich der bedingten Steuerung der Quellenpackdatenoperationsmaske 516 – Datenelemente aus einem begrenzten Bereich 520 eines Speichers 510 laden oder holen. Ein Packdatenergebnis 515 kann an einem Zielspeicherort in Reaktion auf die, und/oder im Ergebnis der, maskierten bereichsbegrenzten Vektorholinstruktion oder -operation gespeichert werden. In einigen Ausführungsformen brauchen Daten nur geholt zu werden, wenn das entsprechende Maskenbit in der Packdatenoperationsmaske auf eins gesetzt wird. Sternchen (*) sind in Positionen der Ergebnispackdaten gezeigt, wo die entsprechenden Maskenbits herausmaskiert sind (zum Beispiel in dem veranschaulichten Beispiel auf eine binäre 0 gelöscht). Wie gezeigt, kann das Packdatenergebnis in einigen Ausführungsformen 512 Bits breit sein und kann vierundsechzig 8-Bit-Byte-Datenelemente enthalten. Alternativ können 16-Bit-Wort- oder 32-Bit-Doppelwort-Datenelemente geholt werden und können entweder in breiteren oder schmaleren Ergebnispackdaten gespeichert werden. In dem veranschaulichten Beispiel speichert das Packdatenergebnis in dem Ziel, von der geringstwertigen Position (auf der linken Seite) zur höchstwertigen Position rechts (auf der rechten Seite), die Datenelemente B1, B2, *, B4, B5, B6, *, ..., B64.
  • In einigen Ausführungsformen kann eine Fusionierungsmaskierung ausgeführt werden. Bei der Fusionierungsmaskierung kann, wenn ein bestimmtes Zieldatenelement herausmaskiert wird, der anfängliche oder bereits vorhandene Wert des Datenelements an dem Zielspeicherort als unverändert beibehalten werden (d. h. er wird nicht mit einem Ergebnis der Operation aktualisiert). In anderen Ausführungsformen kann eine Nullungsmaskierung ausgeführt werden. Bei der Nullungsmaskierung kann, wenn ein bestimmtes Zieldatenelement herausmaskiert wird, das entsprechende bestimmte Zieldatenelement herausgenullt werden, oder ein Wert von Null kann in dem entsprechenden bestimmten Zieldatenelement gespeichert werden. Alternativ können auch andere zuvor festgelegte Werte in den herausmaskierten Zieldatenelementen gespeichert werden. Dementsprechend können in verschiedenen Ausführungsformen die durch die Sternchen (*) angedeuteten Datenelement-Positionen herausgenullte Werte haben, oder können die Werte von Datenelementen haben, die sich anfangs vor der Hol-Operation an dem Zielspeicherort befanden.
  • 6 ist ein Blockschaubild, das eine Ausführungsform einer bereichsbegrenzten Streu-Operation 605 veranschaulicht, die in Reaktion auf eine Ausführungsform einer bereichsbegrenzten Streu-Instruktion ausgeführt werden kann. Die bereichsbegrenzte Streu-Instruktion kann einen quellengepackten Speicherindex 613 spezifizieren oder auf sonstige Weise anzeigen, der mehrere gepackte Speicherindizes aufweist. Wie gezeigt, können in einigen Ausführungsformen die Speicherindizes 8-Bit-Byte-Speicherindizes sein, und die quellengepackten Speicherindizes können 512 Bits breit sein und können vierundsechzig 8-Bit-Byte-Speicherindizes enthalten. Alternativ können in anderen Ausführungsformen optional 16-Bit-Wortspeicherindizes oder andere Speicherindizes von weniger als 32 Bit verwendet werden. Darüber hinaus können in anderen Ausführungsformen optional andere Packdatenbreiten neben 512 Bits verwendet werden, wie zum Beispiel Packdatenbreiten von 64 Bits, 128 Bits, 256 Bits oder 1024 Bits.
  • Die bereichsbegrenzte Streu-Instruktion kann außerdem Quellenpackdaten 614 spezifizieren oder auf sonstige Weise anzeigen, die mehrere Packdatenelemente aufweisen, die gestreut werden sollen. Wie gezeigt, können in einigen Ausführungsformen die Packdatenelemente 8-Bit-Byte-Datenelemente sein, und die Quellenpackdaten 614 können 512 Bits breit sein und können vierundsechzig solcher 8-Bit-Byte-Datenelemente enthalten. Alternativ können in anderen Ausführungsformen optional 16-Bit-Wort-Datenelemente oder 32-Bit-Doppelwort-Datenelemente verwendet werden. Darüber hinaus können in anderen Ausführungsformen optional andere Breiten für die Quellenpackdaten neben 512 Bits verwendet werden, wie zum Beispiel Packdatenbreiten von 64 Bits, 128 Bits, 256 Bits oder 1024 Bits. In einigen Ausführungsformen können die Breiten der Speicherindizes ma die gleichen sein wie die Breite der Datenelemente, obgleich dies nicht erforderlich ist (zum Beispiel kann für die Datenelemente ein zweimal so breites Register wie für die Speicherindizes verwendet werden).
  • Eine Ausführungsform einer bereichsbegrenzten Vektorstreuungsoperation kann in Reaktion auf die, und/oder im Ergebnis der, Ausführungsform der bereichsbegrenzten Streu-Instruktion ausgeführt werden. Die bereichsbegrenzte Vektorstreuungsoperation kann Datenelemente in einen begrenzten Bereich 620 eines Speichers 610 speichern, schreiben oder streuen. Wie an anderer Stelle im vorliegenden Text besprochen, braucht der begrenzte Bereich nur eine kleine Teilmenge (zum Beispiel eine aneinandergrenzende Teilmenge, die durch die 8-Bit- oder 16-Bit-Speicherindizes indexiert werden kann) des allgemein viel größeren Gesamtspeichers 610 darzustellen (der zum Beispiel durch andere Instruktionen unter Verwendung von 32-Bit- oder 64-Bit-Speicherindizes indexiert werden kann). Der begrenzte Bereich 620 kann beliebige der optionalen Charakteristika oder Attribute der begrenzten Bereiche haben, die an anderer Stelle im vorliegenden Text beschrieben sind. Die Quellenpackdatenelemente 614 können an Orte gestreut werden, die durch die quellengepackten Speicherindizes 613 angezeigt und/oder von diesen abgeleitet werden. Jeder Speicherindex kann auf einen entsprechenden Speicherort weisen. In einigen Ausführungsformen brauchen die Datenelemente zu optional oder potenziell nicht-aneinandergrenzenden Speicherorten nur innerhalb des begrenzten Bereichs 620, nicht aber von innerhalb anderer Abschnitte des größeren Speichers 610 gestreut zu werden. Beispielsweise weist in der veranschaulichten Ausführungsform der Speicherindex 134 auf den Speicherort in dem begrenzten Bereich, wo das Datenelement B1 geschrieben werden soll, der Speicherindex 231 weist auf den Speicherort in dem begrenzten Bereich, wo das Datenelement B2 geschrieben werden soll, und so weiter.
  • 7 ist ein Blockschaubild, das eine Ausführungsform einer maskierten bereichsbegrenzten Streu-Operation 705 veranschaulicht, die in Reaktion auf eine Ausführungsform einer maskierten bereichsbegrenzten Streu-Instruktion ausgeführt werden kann. Die maskierte Operation von 7 hat gewisse Ähnlichkeiten mit der unmaskierten Operation von 6. Um zu vermeiden, dass wesentliche Aspekte der Beschreibung in den Hintergrund treten, werden die verschiedenen und/oder zusätzlichen Charakteristika für die maskierte Operation von 7 vor allem ohne Wiederholung aller ähnlichen oder gemeinsamen Charakteristika in Bezug auf die unmaskierte Operation von 6 beschrieben. Es ist jedoch zu beachten, dass die zuvor beschriebenen Charakteristika der unmaskierten Operation auch optional für 7 gelten, sofern nicht unmissverständlich etwas anderes zu erkennen ist.
  • Die maskierte bereichsbegrenzte Streu-Instruktion kann einen quellengepackten Speicherindex 713 spezifizieren oder auf sonstige Weise anzeigen, der mehrere gepackte Speicherindizes aufweist. Wie gezeigt, können in einigen Ausführungsformen die Speicherindizes 8-Bit-Byte-Speicherindizes sein, und die quellengepackten Speicherindizes können 512 Bits breit sein und können vierundsechzig 8-Bit-Byte-Speicherindizes enthalten. Alternativ können in anderen Ausführungsformen optional auch 16-Bit-Wortspeicherindizes oder andere Speicherindizes von weniger als 32 Bits verwendet werden. Darüber hinaus können in anderen Ausführungsformen optional auch andere Packdatenbreiten neben 512 Bits verwendet werden, wie zum Beispiel Packdatenbreiten von 64 Bits, 128 Bits, 256 Bits oder 1024 Bits.
  • Die bereichsbegrenzte Streu-Instruktion kann außerdem Quellenpackdaten 714 spezifizieren oder auf sonstige Weise anzeigen, die mehrere Packdatenelemente aufweisen, die gestreut werden sollen. Wie gezeigt, können in einigen Ausführungsformen die Packdatenelemente 8-Bit-Byte-Datenelemente sein, und die Quellenpackdaten 614 können 512 Bits breit sein und können vierundsechzig solcher 8-Bit-Byte-Datenelemente enthalten. Alternativ können in anderen Ausführungsformen optional auch 16-Bit-Wort-Datenelemente oder 32-Bit-Doppelwort-Datenelemente verwendet werden. Darüber hinaus können in anderen Ausführungsformen optional auch andere Breiten für die Quellenpackdaten neben 512 Bits verwendet werden, wie zum Beispiel Packdatenbreiten von 64 Bits, 128 Bits, 256 Bits oder 1024 Bits.
  • In einigen Ausführungsformen kann die maskierte bereichsbegrenzte Streu-Instruktion optional eine Quellenpackdatenoperationsmaske 716 spezifizieren oder auf sonstige Weise anzeigen. Die Maske 716 kann optional jegliche der Charakteristika oder Attribute der anderen Packdatenoperationsmasken, Prädiktionsmasken oder bedingten Steueroperanden haben, die an anderer Stelle im vorliegenden Text beschrieben sind. Wie gezeigt, können im Fall der quellengepackten Speicherindizes mit vierundsechzig Speicherindizes und/oder der Quellenpackdaten mit vierundsechzig Datenelementen die Quellenpackdatenoperationsmaske 716 64 Bit breit sein, wobei jedes Bit ein Prädiktions- oder Maskenbit für ein entsprechendes Datenelement und/oder einen entsprechenden Speicherindex in einer entsprechenden relativen Position darstellen kann. Alternativ kann die Quellenpackdatenoperationsmaske auch andere Breiten haben, beispielsweise eine Breite (in Bits) gleich der Anzahl von Speicherindizes und/oder der Anzahl von Datenelementen. Gemäß der veranschaulichten Konvention stellt ein Maskenbitwert einer binären 0 ein herausmaskiertes Element dar, während ein Maskenbitwert einer binären 1 ein unmaskiertes Element bezeichnet.
  • Eine Ausführungsform einer bereichsbegrenzten Vektorstreuungsoperation kann in Reaktion auf die, und/oder im Ergebnis der, Ausführungsform der bereichsbegrenzten Streu- Instruktion ausgeführt werden. Die bereichsbegrenzte Vektorstreuungsoperation kann Datenelemente in einen begrenzten Bereich 720 eines größeren Speichers 710 speichern, schreiben oder streuen. Wie an anderer Stelle im vorliegenden Text besprochen, braucht der begrenzte Bereiche nur eine kleine Teilmenge (zum Beispiel eine aneinandergrenzende Teilmenge, die durch die 8-Bit- oder 16-Bit-Speicherindizes indexiert werden kann) des allgemein viel größeren Gesamtspeichers darzustellen (der zum Beispiel durch andere Instruktionen unter Verwendung von 32-Bit- oder 64-Bit-Speicherindizes indexiert werden kann). Der begrenzte Bereich 720 kann beliebige der optionalen Charakteristika oder Attribute der begrenzten Bereiche haben, die an anderer Stelle im vorliegenden Text beschrieben sind. Die Quellenpackdatenelemente 714 können an Orte gestreut werden, die durch die quellengepackten Speicherindizes 713 unter der prädizierten oder bedingten Steuerung der Quellenpackdatenoperationsmaske 716 angezeigt werden und/oder davon abgeleitet werden können. In einigen Ausführungsformen brauchen die Datenelemente zu optional oder potenziell nicht-aneinandergrenzenden Speicherorten innerhalb nur des begrenzten Bereichs 720 gestreut zu werden, nicht aber von innerhalb anderer Abschnitte des größeren Speichers 710. Beispielsweise kann in der veranschaulichten Ausführungsform das Datenelement B1 an den Ort in dem begrenzten Bereich geschrieben werden, der durch den Speicherindexwert 134 angedeutet wird, das Datenelement B2 kann an den Ort in dem begrenzten Bereich geschrieben werden, der durch den Speicherindexwert 231 angedeutet wird, und so weiter. In dem veranschaulichten Beispiel werden das Datenelement B3 für den Speicherindexwert 20 und das Datenelement B7 für den Speicherindexwert 30 dergestalt herausmaskiert, dass keine Streuung ausgeführt zu werden braucht. Dies ist in der Illustration durch Sternchen (*) an den Orten angedeutet, die dem Speicherindexwert 20 und dem Speicherindexwert 30 entsprechen. In einigen Fällen können diese Speicherorte ihre bereits existierenden Werte vor der Streu-Operation haben (sie werden zum Beispiel nicht durch die Streu-Operation geändert).
  • Der folgende Pseudocode stellt ein Ausführungsbeispiel einer bereichsbegrenzten Vektorholinstruktion oder -operation VXLAT dar:
    Figure DE102014003706A1_0002
    Figure DE102014003706A1_0003
  • Der folgende Pseudocode stellt ein Ausführungsbeispiel einer bereichsbegrenzten Vektorholinstruktion oder -operation VBTALXB dar:
    Figure DE102014003706A1_0004
  • In dem oben beschriebenen Pseudocode stellt zmm1 ein 512-Bit-Packdatenregister dar. Das Register zmm1 wird als ein Ziel (DEST) für VXLATB und als eine Quelle (SRC) für VBTALXB verwendet. Das k1 stellt ein 64-Bit-Maskenregister dar. KL stellt eine Maskenlänge dar, und VL stellt eine Vektorlänge dar, und diese werden aus einem von (16, 128), (32, 256) und (64, 512) für jede Instruktion ausgewählt. Das vm8z stellt ein Vektor-Array von Speicheroperanden dar, die unter Verwendung von Vektor-Scale/Index/Base-Speicheradressierung spezifiziert werden. Das Array von Speicheradressen wird unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters mit individuellen Elementen eines 8-Bit-Indexwertes in einem 512-Bit-ZMM-Register spezifiziert. VINDEX stellt den Vektor von Speicherindizes dar. Das SignExtend stellt eine Vorzeichenerweiterungsoperation an dem Speicherindex VINDEX dar. BASE_ADDR stellt eine Basisadresse dar, und SCALE stellt eine Skalierung dar, wie sie gemeinhin beim Speicherzugriff verwendet wird. Das Symbol ← stellt Speichern dar. Das i und das j sind Schleifenzähler.
  • 8 ist ein Blockschaubild einer beispielhaften Implementierung einer Ausführungsform einer bereichsbegrenzten Vektorhol-Operation 803, die in Reaktion auf eine Ausführungsform einer bereichsbegrenzten Holinstruktion ausgeführt werden kann. In einigen Ausführungsformen kann die Operation 803 durch den und/oder innerhalb des Prozessors von 1 und/oder durch die oder innerhalb der Vorrichtung 2 ausgeführt werden. Alternativ kann die Operation 803 durch einen ähnlichen oder gänzlich anderen Prozessor oder eine ähnliche oder gänzlich andere Vorrichtung und/oder in einem ähnlichen oder gänzlich anderen Prozessor oder einer ähnlichen oder gänzlich anderen Vorrichtung ausgeführt werden. Darüber hinaus können der Prozessor von 1 und/oder die Vorrichtung von 2 Operationen ähnlich denen von 8 oder gänzlich verschieden von denen von 8 ausführen. Darüber hinaus können in einigen Ausführungsformen Aspekte der Operation 803 optional in das Verfahren von 3 integriert werden, das in Ausführungsformen durch den und/oder innerhalb des Prozessors von 1 und/oder durch die und/oder innerhalb der Vorrichtung 2 ausgeführt werden kann.
  • Die bereichsbegrenzte Holinstruktion kann einen quellengepackten Speicherindex 813 und einen Zielspeicherort 815 spezifizieren oder auf sonstige Weise anzeigen. Wie gezeigt, können in einigen Ausführungsformen die Speicherindizes 8-Bit-Byte-Speicherindizes sein, obgleich dies nicht erforderlich ist. In dem veranschaulichten Beispiel haben die Speicherindizes die Werte, von der geringstwertigen Position (auf der linken Seite) zur höchstwertigen Position rechts (auf der rechten Seite), 0, 50, 100, 150, 200. Diese Werte sind nur Beispiele, obgleich anzumerken ist, dass alle Werte, die innerhalb des Bereichs von 0 bis 255 liegen, durch Byte-Indizes indexiert werden können.
  • Eine Ausführungsform der Ausführungslogik 809 kann die bereichsbegrenzte Vektorhol-Operation 803 ausführen. Ähnlich den zuvor besprochenen Ausführungsformen braucht die Operation Datenelemente, die durch die Speicherindizes angezeigt werden, nur von innerhalb eines begrenzten Bereichs 820 eines Speichers 810 zu holen und kann die geholten Datenelemente in entsprechenden Ergebnisdatenelementen am Zielspeicherort 815 speichern. Wie in dem veranschaulichten Beispiel gezeigt, können die Speicherindizes 0, 50, 100, 150, 200 Datenelemente mit Werten A, B, C, D, E in dem begrenzten Bereich anzeigen, und diese Werte A, B, C, D, E können in den entsprechenden Ergebnisdatenelementen des Zielspeicherorts gespeichert werden. Der begrenzte Bereich kann beliebige der optionalen Attribute haben, die an anderer Stelle im vorliegenden Text erwähnt wurden.
  • Eine Möglichkeit zum Implementieren einer Vektorholinstruktion besteht darin, jedes Datenelement separat oder einzeln durch eine separate Ladeoperation (zum Beispiel eine Mikrooperation) zu laden oder zu holen. Beispielsweise können acht Ladeoperationen sequenziell, d. h. nacheinander, ausgeführt werden, um acht Datenelemente zu holen. Solche sequenziellen Ladeoperationen erfordern allgemein eine erhebliche Menge Zeit zum Vollenden. Außerdem können während dieser sequenziellen Ladeoperationen möglicherweise Seitenfehler auftreten. Folglich muss der Prozessor allgemein in der Lage sein, alle Ladeoperationen zu verfolgen und die Vollendung der Holinstruktionen zu überwachen, falls es zufällig zu solchen Seitenfehlern kommen sollte.
  • Jedoch können in einigen Ausführungsformen – anstatt einzelne Datenelemente zu laden oder zu holen – mehrere Datenelemente pro Ladeoperation aus dem begrenzten Bereich des Speichers in den Prozessor geladen oder auf sonstige Weise abgerufen werden. Das heißt, in einigen Ausführungsformen kann die bereichsbegrenzte Vektorhol-Operation unter Verwendung eines oder mehrerer Mehrdatenelement-Ladevorgänge implementiert werden. Wie in dem veranschaulichten Ausführungsbeispiel gezeigt, kann die Ausführungslogik 809 eine 512 Bit breite Speicherladelogik 840 enthalten, die mit dem begrenzten Bereich gekoppelt ist. Die 512 Bit breite Speicherladelogik kann 512-Bit-Ladevorgänge ausführen, um so viele Datenelemente, wie in die 512 Bits passen, in einer einzigen Ladeoperation zu laden. Beispielsweise kann eine einzelne 512-Bit-Ladeoperation vierundsechzig 8-Bit-Byte-Datenelemente laden. In einigen Ausführungsformen kann ein gesamter 256 Byte großer begrenzter Bereich 820 unter Verwendung von vier 512-Bit-Ladevorgängen in den Prozessor geladen werden, um jeweils vier nicht-überlappende 512-Bit-Abschnitte des begrenzten 256-Byte-Bereichs zu laden. Wie gezeigt, kann in einigen Ausführungsformen der gesamte geladene begrenzte 256-Byte-Bereich in vier 512-Bit-Registern gespeichert werden, oder könnte alternativ in acht 256-Bit-Registern oder zwei 1024-Bit-Registern gespeichert werden. Alle On-Processor-Speicherorte sind potenziell geeignet, einschließlich dedizierter oder vorhandener Register, ob architekturell oder nicht-architekturell. Als eine weitere Option können anstelle der 512-Bit-Ladevorgänge auch schmalere (zum Beispiel 128-Bit-, 256-Bit- usw.) oder breitere (zum Beispiel 1024-Bit) Ladevorgänge verwendet werden. Darüber hinaus kann – falls sich keine benötigten Datenelemente in einem bestimmten Abschnitt des begrenzten Bereichs befinden – optional auf einen oder mehrere dieser Ladevorgänge verzichtet werden.
  • Jeder Ladevorgang kann potenziell – je nach den Werten der Speicherindizes – sowohl benötigte/gewünschte als auch nicht-benötigte/nicht-gewünschte Datenelemente laden. Beispielsweise kann jeder Ladevorgang mindestens ein Datenelement an einer Speicheradresse laden, die durch einen Speicherindex der Mehrzahl anzuzeigen ist, und mindestens ein Datenelement an einer Speicheradresse, die nicht durch einen Speicherindex der Mehrzahl anzuzeigen ist. Beispielsweise können, wie in der Illustration gezeigt, die benötigten/gewünschten Datenelemente A, B, C, D und E, die den Indizes 0, 50, 100, 150 und 200 entsprechen, jeweils geladen werden. Außerdem können nicht-benötigte/nicht-gewünschte Datenelemente, wie zum Beispiel Datenelemente F und G, geladen werden. Anderen nicht-benötigte/nicht-gewünschte Datenelemente (der Einfachheit halber nicht gezeigt) können ebenfalls geladen werden. Die Datenelemente F und G brauchen nicht durch die quellengepackten Byte-Speicherindizes 813 indexiert oder adressiert zu werden. Vorteilhafterweise können es solche Mehrdatenelement-Ladevorgänge erlauben, dass eine bestimmte Anzahl von Datenelementen in weniger als dieser bestimmten Anzahl von Ladevorgängen geholt wird. Beispielsweise können in der Regel mehr als vier gewünschte Datenelemente in dem geladenen begrenzten Bereich enthalten sein, selbst wenn nur vier Ladeoperationen ausgeführt wurden. Beispielsweise können in einer Ausführungsform vierundsechzig 8-Bit-Byte-Datenelemente in nur vier Ladevorgängen geholt werden. In anderen Ausführungsformen können zweiunddreißig, sechzehn oder acht gewünschte relativ kleinere Datenelemente mit einer geringeren Anzahl (zum Beispiel vier) größerer Mehrdatenelement-Ladevorgänge aus dem Speicher geladen werden. Dies wiederum kann helfen, die Geschwindigkeit der Operation zu erhöhen.
  • Wenden wir uns wieder der Illustration zu. Die Ausführungslogik 809 enthält außerdem eine Speicherindex-basierte Datenumordnungslogik 842. Die Speicherindex-basierte Datenumordnungslogik kann dafür geeignet sein, die gewünschten/benötigten Datenelemente aus dem geladenen begrenzten Bereich und/oder den geladenen Datenelementen umzuordnen und sie an den richtigen Positionen am Zielspeicherort zu speichern, so wie es durch die entsprechenden Speicherindizes angegeben ist. In einigen Ausführungsformen kann eine Teilmenge von Datenelementen des gesamten begrenzten Bereichs selektiv anhand der Speicherindizes an einen Zielspeicherort bewegt werden. Es werden verschiedene Möglichkeiten des Ausführens der Umordnungen in Betracht gezogen. In einigen Ausführungsformen können eine oder mehrere Vertauschungen, Verschiebungen, Extrahierungen oder andere Datenumordnungsoperationen verwendet werden.
  • Verschiedene unterschiedliche Packdatenbreiten und Datenelementbreiten sind geeignet. In einigen Ausführungsformen können 128 Bit breite Packdaten sechzehn 8-Bit-Byte-Datenelemente oder acht 16-Bit-Wort-Datenelemente enthalten. In anderen Ausführungsformen können 256-Bit-Packdaten zweiunddreißig 8-Bit-Byte-Datenelemente oder sechzehn 16-Bit-Wort-Datenelemente enthalten. In weiteren Ausführungsformen können 512-Bit-Packdaten vierundsechzig 8-Bit-Byte-Datenelemente oder zweiunddreißig 16-Bit-Wort-Datenelemente enthalten. In weiteren Ausführungsformen sind auch Packdatenformate von entweder größer als 512 Bits oder kleiner als 128 Bits geeignet. Beispielsweise sind 1012-Bit-Packdaten und 64-Bit-Packdaten für entweder 8-Bit-Bytes oder 16-Bit-Wörter geeignet. Allgemein ist die Anzahl von Datenelementen gleich der Größe (in Bits) des Packdatenoperanden, geteilt durch die Größe (in Bits) der Datenelemente.
  • 9 ist ein Blockschaubild eines Ausführungsbeispiels eines geeigneten Satzes Packdatenregister 907. Die veranschaulichten Packdatenregister enthalten zweiunddreißig 512-Bit-Packdaten oder -Vektorregister. Diese zweiunddreißig 512-Bit-Register werden als ZMM0 bis ZMM31 bezeichnet. In der veranschaulichten Ausführungsform werden die 256 Bits niedrigerer Ordnung der niedrigeren sechzehn dieser Register, und zwar ZMM0–ZMM15, auf jeweilige 256-Bit-Packdaten oder -Vektorregister mit der Bezeichnung YMM0–YMM15 aliasiert oder überlagert, obgleich dies nicht erforderlich ist. Gleichermaßen werden in der veranschaulichten Ausführungsform die 128 Bits niedrigerer Ordnung von YMM0–YMM15 auf jeweilige 128-Bit-Packdaten oder -Vektorregister mit der Bezeichnung XMM0–XMM1 aliasiert oder überlagert, obgleich dies ebenfalls nicht erforderlich ist. Die 512-Bit-Register ZMM0 bis ZMM31 sind befähigt, 512-Bit-Packdaten, 256-Bit-Packdaten oder 128-Bit-Packdaten zu speichern. Die 256-Bit-Register YMM0–YMM15 sind befähigt, 256-Bit-Packdaten oder 128-Bit-Packdaten zu speichern. Die 128-Bit-Register XMM0–XMM1 sind befähigt, 128-Bit-Packdaten zu speichern. Jedes der Register kann dafür verwendet werden, entweder gepackte Gleitkommadaten oder gepackte ganzzahlige Daten zu speichern. Es werden verschiedene Datenelementgrößen unterstützt, darunter mindestens 8-Bit-Byte-Daten, 16-Bit-Wort-Daten, 32-Bit-Doppelwort oder Einzelpräzisions-Gleitkommadaten und 64-Bit-Quadwort- oder Doppelpräzisions-Gleitkommadaten. Alternative Ausführungsformen von Packdatenregistern können verschiedene Anzahlen von Registern oder verschiedene Größen von Registern enthalten und können gegebenenfalls größere Register auf kleinere Register aliasieren.
  • 10 ist ein Blockschaubild eines Ausführungsbeispiels eines geeigneten Satzes Packdatenoperationsmaskenregister 1008. Jedes der Packdatenoperationsmaskenregister kann dafür verwendet werden, eine Packdatenoperationsmaske zu speichern. In der veranschaulichten Ausführungsform enthält der Satz acht Packdatenoperationsmaskenregister mit der Bezeichnung k0 bis k7. Alternative Ausführungsformen können entweder weniger als acht (zum Beispiel zwei, vier, sechs usw.) oder mehr als acht (zum Beispiel sechzehn, zwanzig, zweiunddreißig usw.) Packdatenoperationsmaskenregister enthalten. In der veranschaulichten Ausführungsform ist jedes der Packdatenoperationsmaskenregister 64 Bits groß. In alternativen Ausführungsformen können die Breiten der Packdatenoperationsmaskenregister entweder breiter als 64 Bits (zum Beispiel 80 Bits, 128 Bits usw.) oder schmaler als 64 Bits (zum Beispiel 8 Bits, 16 Bits, 32 Bits usw.) sein. Beispielsweise kann eine maskierte bereichsbegrenzte Vektorspeicherzugriffsinstruktion drei Bits (zum Beispiel ein 3-Bit-Feld) zum Codieren oder Spezifizieren eines jeden der acht Packdatenoperationsmaskenregister k0 bis k7 verwenden. In alternativen Ausführungsformen können entweder weniger oder mehr Bits verwendet werden, wenn es weniger bzw. mehr Packdatenoperationsmaskenregister gibt.
  • 11 ist ein Schaubild, das ein Ausführungsbeispiel eines 64-Bit-Packdatenoperationsmaskenregisters 1108 veranschaulicht und zeigt, dass die Anzahl von Bits, die als eine Packdatenoperationsmaske und/oder zur Maskierung verwendet werden, von der Packdatenbreite und der Datenelementbreite abhängig ist. Das veranschaulichte Maskenregister ist 64 Bit breit, obgleich dies nicht erforderlich ist. Allgemein ist, wenn ein einzelnes Maskierungssteuerbit pro Element verwendet wird, die Anzahl von Bits, die zur Maskierung verwendet werden, gleich der Packdatenbreite (in Bits), geteilt durch die Packdatenelementbreite (in Bits). Zur weiteren Veranschaulichung betrachten wir ein paar mögliche Ausführungsbeispiele. Nur 8 Bits, beispielsweise nur die niedrigeren 8 Bits, brauchen für 128-Bit-Packdaten mit 16-Bit-Datenelementen verwendet zu werden. Nur 16 Bits, beispielsweise nur die niedrigeren 16 Bits, brauchen entweder für 128-Bit-Packdaten mit 8-Bit-Datenelementen oder für 256-Bit-Packdaten mit 16-Bit-Datenelementen verwendet zu werden. Nur 32 Bits, beispielsweise nur die niedrigeren 32 Bits, brauchen entweder für 256-Bit-Packdaten mit 8-Bit-Datenelementen oder für 512-Bit-Packdaten mit 16-Bit-Datenelementen verwendet zu werden. Alle 64-Bit-Bits können für 512-Bit-Packdaten mit 8-Bit-Datenelementen verwendet werden.
  • Ein Instruktionssatz enthält ein oder mehrere Instruktionsformate. Ein bestimmtes Instruktionsformat definiert verschiedene Felder (Anzahl von Bits, Ort der Bits), um unter anderem die Operation zu spezifizieren, die ausgeführt werden soll (Opcode), sowie den oder die Operanden, an dem bzw. denen diese Operation ausgeführt werden soll. Einige Instruktionsformate werden durch die Definition von Instruktionsmatrizen (oder Teilformaten) weiter aufgeschlüsselt. Beispielsweise können die Instruktionsmatrizen eines bestimmten Instruktionsformats so definiert werden, dass sie verschiedene Teilmengen der Felder des Instruktionsformats haben (die enthaltenen Felder sind in der Regel von der gleichen Ordnung, aber wenigstens einige haben verschiedene Bit-Positionen, weil weniger Felder enthalten sind), und/oder sind so definiert, dass ein bestimmtes Feld anders interpretiert wird. Somit wird jede Instruktion einer ISA unter Verwendung eines bestimmten Instruktionsformats ausgedrückt (und, falls definiert, in einer bestimmten der Instruktionsmatrizen jenes Instruktionsformats) und enthält Felder zum Spezifizieren der Operation und der Operanden. Beispielsweise hat eine beispielhafte ADD-Instruktion einen bestimmten Opcode und ein Instruktionsformat, das ein Opcode-Feld enthält, um jenen Opcode zu spezifizieren, und Operanden-Felder enthält, um Operanden auszuwählen (Quellel/Ziel und Quelle2); und ein Auftreten dieser ADD-Instruktion in einem Instruktionsstream hat spezielle Inhalte in den Operanden-Feldern, die spezifische Operanden auswählen. Ein Satz SIMD-Erweiterungen, die als Advanced Vector Extensions (AVX) (AVX1 und AVX2) bezeichnet werden und das Vector Extensions(VBX)-Codierregime verwenden, ist herausgebracht und/oder veröffentlicht worden (zum Beispiel siehe Intel® 64 und IA-32 Architectures Software Developers Manual, Oktober 2011; und siehe Intel® Advanced Vector Extensions Programming Reference, Juni 2011).
  • Beispielhafte Instruktionsformate
  • Ausführungsformen der im vorliegenden Text beschriebenen Instruktion(en) können in verschiedenen Formaten verkörpert sein. Außerdem werden im Folgenden beispielhafte Systeme, Architekturen und Pipelines detailliert beschrieben. Ausführungsformen der Instruktionen) können an solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf die hier beschriebenen beschränkt.
  • VEX-Instruktionsformat
  • VEX-Codierung erlaubt es Instruktionen, mehr als zwei Operanden zu haben, und erlaubt es SIMD-Vektorregistern, länger als 128 Bits zu sein. Die Verwendung eines VEX-Präfix erzeugt eine Drei-Operanden-(oder mehr)Syntax. Beispielsweise haben frühere Zwei-peranden-Instruktionen Operationen wie zum Beispiel A = A + B ausgeführt, wodurch ein Quellenoperand überschrieben wird. Die Verwendung eines VEX-Präfix ermöglicht es Operanden, zerstörungsfreie Operationen auszuführen, wie zum Beispiel A = B + C.
  • 12A veranschaulicht ein beispielhaftes AVX-Instruktionsformat, das ein VEX-Präfix 1202, ein reales Opcode-Feld 1230, ein Mod R/M-Byte 1240, ein SIB-Byte 1250, ein Verschiebungsfeld 1262 und ein IMM8 1272 enthält. 12B veranschaulicht, aus welchen Feldern von 12A ein komplettes Opcode-Feld 1274 und ein Basisoperationsfeld 1242 besteht. 12C veranschaulicht, aus welchen Feldern von 12A ein Registerindexfeld 1244 besteht.
  • Das VEX-Präfix (Bytes 0–2) 1202 ist in einer Drei-Byte-Form codiert. Das erste Byte ist das Formatfeld 1240 (VEX-Byte 0, Bits [7:0]), das einen expliziten C4-Byte-Wert enthält (der eindeutige Wert, der zum Unterscheiden des C4-Instruktionsformats verwendet wird). Die zweiten bis dritten Bytes (VEX-Bytes 1–2) enthalten eine Anzahl von Bit-Feldern, die eine spezielle Fähigkeit bereitstellen. Genauer gesagt, besteht das REX-Feld 1205 (VEX-Byte 1, Bits [7–5]) aus einem VEX.R-Bit-Feld (VEX-Byte 1, Bits [7]-R), einem VEX.X-Bit-Feld (VEX-Byte 1, Bit [6]-X) und einem VEX.B-Bit-Feld (VEX-Byte 1, Bit[5]-B). Andere Felder der Instruktionen codieren die niedrigeren drei Bits der Registerindizes, wie dem Fachmann bekannt ist (rrr, xxx und bbb), so dass Rrrr, Xxxx und Bbbb durch Hinzufügen von VEX.R, VEX.X und VEX.B gebildet werden können. Das Opcode-Abbildungsfeld 1215 (VEX-Byte 1, Bits [4:0]-mmmmm) enthält einen Inhalt zum Codieren eines implizierten vorangehenden Opcode-Bytes. Das W-Feld 1264 (VEX-Byte 2, Bit [7] – W) wird durch die Bezeichnung VEX.W dargestellt und stellt je nach der Instruktion verschiedene Funktionen bereit. Die Rolle von VEX.vvvv 1220 (VEX-Byte 2, Bits [6:3]-vvvv) kann Folgendes enthalten: 1) VEX.vvvv codiert den ersten Quellenregisteroperanden, der in invertierter (1. Komplement-)Form spezifiziert ist, und ist für Instruktionen mit mindestens 2 Quellenoperanden gültig; 2) VEX.vvvv codiert den Zielregisteroperanden, der in 1. Komplement-Form für bestimmte Vektorverschiebungen spezifiziert ist; oder 3) VEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Falls das Größen-Feld VEX.L 1268 (VEX-Byte 2, Bit [2]-L) = 0, so zeigt es einen 128-Bit-Vektor an; falls VEX.L = 1, so zeigt es einen 256-Bit-Vektor an. Das Präfixcodierfeld 1225 (VEX-Byte 2, Bits [1:0]-pp) stellt weitere Bits für das Basisoperationsfeld bereit.
  • Das reale Opcode-Feld 1230 (Byte 3) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • Das MOD R/M-Feld 1240 (Byte 4) enthält das MOD-Feld 1242 (Bit [7-6]), das Reg-Feld 1244 (Bit [5-3]) und das R/M-Feld 1246 (Bit [2-0]). Die Rolle des Reg-Feldes 1244 kann Folgendes enthalten: Codieren entweder des Zielregisteroperanden oder eines Quellenregisteroperanden (das rrr von Rrrr), oder Behandeln als eine Opcode-Erweiterung und keine Verwendung zum Codieren eines Instruktionsoperanden. Die Rolle des R/M-Feldes 1246 kann Folgendes enthalten: Codieren des Instruktionsoperanden, der auf eine Speicheradresse verweist, oder Codieren entweder des Zielregisteroperanden oder eines Quellenregisteroperanden.
  • Scale, Index, Base(SIB)- Der Inhalt des Skalierungsfeldes 1250 (Byte 5) enthält SS1252 (Bit [7-6]), das zur Speicheradressengenerierung verwendet wird. Der Inhalt von SIB.xxx 1254 (Bit [5-3]) und SIB.bbb 1256 (Bit [2-0]) sind bereits mit Bezug auf die Register-Indizes Xxxx und Bbbb angesprochen worden.
  • Das Verschiebungsfeld 1262 und das Immediate-Feld (IMM8) 1272 enthalten Adressdaten.
  • Generisches Vektor-freundliches Instruktionsformat
  • Ein Vektor-freundliches Instruktionsformat ist ein Instruktionsformat, das für Vektorinstruktionen geeignet ist (zum Beispiel gibt es bestimmte Felder, die für Vektoroperationen spezifisch sind). Obgleich Ausführungsformen beschrieben werden, in denen sowohl Vektor- als auch skalare Operationen durch das Vektor-freundliche Instruktionsformat unterstützt werden, verwenden alternative Ausführungsformen nur Vektoroperationen mit Vektor-freundlichem Instruktionsformat.
  • 13A13B sind Blockschaubilder, die ein generisches Vektor-freundliches Instruktionsformat und Instruktionsmatrizen davon gemäß Ausführungsformen der Erfindung veranschaulichen. 13A ist ein Blockschaubild, das ein generisches Vektor-freundliches Instruktionsformat und Klasse-A-Instruktionsmatrizen davon gemäß Ausführungsformen der Erfindung veranschaulicht, während 13B ein Blockschaubild ist, das das generische Vektor-freundliche Instruktionsformat und Klasse-B-Instruktionsmatrizen davon gemäß Ausführungsformen der Erfindung veranschaulicht. Genauer gesagt, ein generisches Vektor-freundliches Instruktionsformat 1300, für das Klasse-A- und Klasse-B-Instruktionsmatrizen definiert sind, die beide keine Speicherzugriff 1305-Instruktionsmatrizen und Speicherzugriff 1320-Instruktionsmatrizen enthalten. Der Begriff „generisch” im Kontext des Vektor-freundlichen Instruktionsformats bezieht sich darauf, dass das Instruktionsformat nicht an keinen speziellen Instruktionssatz gebunden ist.
  • Obgleich Ausführungsformen der Erfindung beschrieben werden, in denen das Vektor-freundliche Instruktionsformat Folgendes unterstützt: eine 64-Byte-Vektoroperandenlänge (oder -größe) mit 32-Bit (4 Byte)- oder 64-Bit (8 Byte)-Datenelementbreiten (oder -größen) (so dass ein 64-Byte-Vektor entweder aus Elementen mit einer 16-Doppelwort-Größe oder alternativ aus Elementen mit einer 8-Quadwort-Größe besteht); eine 64-Byte-Vektoroperandenlänge (oder -größe) mit 16-Bit (2 Byte)- oder 8-Bit (1 Byte)-Datenelementbreiten (oder -größen); eine 32 Byte-Vektoroperandenlänge (oder -größe) mit 32-Bit (4 Byte)-, 64-Bit (8 Byte)-, 16-Bit (2 Byte)- oder 8-Bit (1 Byte)-Datenelementbreiten (oder -größen); und eine 16-Byte-Vektoroperandenlänge (oder -größe) mit 32-Bit (4 Byte)-, 64-Bit (8 Byte)-, 16-Bit (2 Byte)- oder 8-Bit (1 Byte)-Datenelementbreiten (oder -größen). Alternative Ausführungsformen können mehr, weniger und/oder andere Vektoroperandengrößen (zum Beispiel 256-Byte-Vektoroperanden) mit mehr, weniger und/oder anderen Datenelementbreiten (zum Beispiel 128-Bit (16 Byte)-Datenelementbreiten) unterstützen.
  • Die Klasse-A-Instruktionsmatrizen in 13A enthalten: 1) innerhalb der Kein-Speicherzugriff 1305-Instruktionsmatrizen ist eine Instruktionsmatrize für eine Kein-Speicherzugriff-Vollrundungssteuerungstyp-Operation 1310 und eine Instruktionsmatrize für eine Kein-Speicherzugriff-Datentransformationstyp-Operation 1315 gezeigt; und 2) innerhalb der Speicherzugriff 1320-Instruktionsmatrizen ist eine Speicherzugriff-Temporal 1325-Instruktionsmatrize und eine Speicherzugriff-Nicht-temporal 1330-Instruktionsmatrize gezeigt. Die Klasse-B-Instruktionsmatrizen in 13B enthalten: 1) innerhalb der Kein-Speicherzugriff 1305-Instruktionsmatrizen ist eine Instruktionsmatrize für eine Kein-Speicherzugriff-Schreibmaskensteuerung-Teilrundungssteuerungstyp-Operation 1312 und eine Instruktionsmatrize für eine Kein-Speicherzugriff-Schreibmaskensteuerung-vsize-Typ-Operation 1317 gezeigt; und 2) innerhalb der Speicherzugriff 1320-Instruktionsmatrizen ist eine Speicherzugriff-Schreibmaskensteuerung 1327-Instruktionsmatrize gezeigt.
  • Das generische Vektor-freundliche Instruktionsformat 1300 enthält die im Folgenden aufgelisteten Felder in der in den 13A13B veranschaulichten Reihenfolge.
  • Formatfeld 1340 – Ein spezifischer Wert (ein Instruktionsformatidentifikatorwert) in diesem Feld identifiziert eindeutig das Vektor-freundliche Instruktionsformat und somit das Auftreten von Instruktionen in dem Vektor-freundlichen Instruktionsformat in Instruktionsstreams. Insofern ist dieses Feld optional in dem Sinne, dass es nicht für einen Instruktionssatz benötigt wird, der nur das generische Vektor-freundliche Instruktionsformat hat.
  • Basisoperationsfeld 1342 – Sein Inhalt unterscheidet verschiedene Basisoperationen.
  • Registerindexfeld 1344 – Sein Inhalt spezifiziert, direkt oder durch Adressengenerierung, die Orte der Quellen- und Zieloperanden, ob in Registern oder in einem Speicher. Diese enthalten eine ausreichende Anzahl von Bits zum Auswählen von N Registern aus einer P×Q (zum Beispiel 32×512, 16×128, 32×1024, 64×1024)-Registerdatei. Obgleich N in einer Ausführungsform bis zu drei Quellen und ein Zielregister sein kann, können alternative Ausführungsformen mehr oder weniger Quellen und Zielregister unterstützen (können zum Beispiel bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel fungiert; können bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel fungiert; und können bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifikator-Feld 1346 – Sein Inhalt unterscheidet das Auftreten von Instruktionen in dem generischen Vektorinstruktionsformat, die einen Speicherzugriff spezifizieren, von denen, die es nicht tun; das heißt, zwischen Kein-Speicherzugriff 1305-Instruktionsmatrizen und Speicherzugriff 1320-Instruktionsmatrizen. Speicherzugriffsoperationen lesen und/oder schreiben aus der, bzw. in die, Speicherhierarchie (spezifizieren in einigen Fällen die Quellen- und/oder Zieladressen unter Verwendung von Werten im Register), während Nicht-Speicherzugriffsoperationen dies nicht tun (zum Beispiel sind die Quelle und die Ziele Register). Obgleich in einer Ausführungsform dieses Feld auch zwischen drei verschiedenen Möglichkeiten wählt, Speicheradressenberechnungen auszuführen, können alternative Ausführungsformen mehr, weniger oder andere Möglichkeiten unterstützen, Speicheradressenberechnungen auszuführen.
  • Verstärkungsoperationsfeld 1350 – Sein Inhalt unterscheidet, welche aus einer Vielzahl verschiedener Operationen zusätzlich zur Basisoperation ausgeführt werden soll. Dieses Feld ist kontextspezifisch. In einer Ausführungsform der Erfindung ist dieses Feld in ein Klasse-Feld 1368, ein alpha-Feld 1352 und ein beta-Feld 1354 unterteilt. Das Verstärkungsoperationsfeld 1350 erlaubt es, gemeinsame Gruppen von Operationen in einer einzelnen Instruktion anstatt in 2, 3 oder 4 Instruktionen auszuführen.
  • Skalierungsfeld 1360 – Sein Inhalt erlaubt das Skalieren des Inhalts des Index-Feldes zur Speicheradressengenerierung (zum Beispiel für eine Adressengenerierung, die 2scale·Index + Basis verwendet).
  • Verschiebungsfeld 1362A – Sein Inhalt wird als Teil der Speicheradressengenerierung verwendet (zum Beispiel für eine Adressengenerierung, die 2scale·Index + Basis + Verschiebung verwendet).
  • Verschiebungsfaktorfeld 1362B (es ist zu beachten, dass die Anordnung des Verschiebungsfeldes 1362A direkt über dem Verschiebungsfaktorfeld 1362B anzeigt, dass das eine oder das andere verwendet wird) – Sein Inhalt wird als Teil der Adressengenerierung verwendet; es spezifiziert einen Verschiebungsfaktor, der um die Größe eines Speicherzugriffs (N) zu skalieren ist, wobei N die Anzahl von Bytes in dem Speicherzugriff ist (zum Beispiel zur Adressengenerierung, die 2scale·Index + Basis + skalierte Verschiebung verwendet). Redundante Bits niedrigerer Ordnung werden ignoriert, und darum wird der Inhalt des Verschiebungsfaktorfeldes mit der Gesamtgröße (N) des Speicheroperanden multipliziert, um die endgültige Verschiebung zu generieren, die zum Berechnen einer effektiven Adresse verwendet wird. Der Wert von N wird durch die Prozessor-Hardware bei Laufzeit anhand des kompletten Opcode-Feldes 1374 (das weiter unten noch beschrieben wird) und des Datenmanipulationsfeldes 1354C bestimmt. Das Verschiebungsfeld 1362A und das Verschiebungsfaktorfeld 1362B sind optional in dem Sinne, dass sie nicht für die Kein-Speicherzugriff 1305-Instruktionsmatrizen verwendet werden und/oder dass verschiedene Ausführungsformen nur eine oder gar keine der zwei zu implementieren brauchen.
  • Datenelementbreitenfeld 1364 – Sein Inhalt unterscheidet, welche aus einer Anzahl von Datenelementbreiten zu verwenden ist (in einigen Ausführungsformen für alle Instruktionen; in anderen Ausführungsformen nur für einige der Instruktionen). Dieses Feld ist optional in dem Sinne, dass es nicht benötigt wird, falls nur eine einzige Datenelementbreite unterstützt wird und/oder Datenelementbreiten unter Verwendung eines Aspekts der Opcodes unterstützt werden.
  • Schreibmaskenfeld 1370 – Sein Inhalt steuert, auf der Basis einer einzelnen Datenelement-Position, ob diese Datenelement-Position in dem Zielvektoroperanden das Ergebnis der Basisoperation und der Verstärkungsoperation widerspiegelt. Klasse-A-Instruktionsmatrizen unterstützen Fusions-Schreibmaskierung, während Klasse-B-Instruktionsmatrizen sowohl Fusions- als auch Nullungs-Schreibmaskierung unterstützen. Beim Fusionieren erlauben es Vektormasken, jeden Satz Elemente im Ziel vor Aktualisierungen während der Ausführung einer Operation zu schützen (durch die Basisoperation und die Verstärkungsoperation spezifiziert); in einer anderen Ausführungsform erlauben sie es, den alten Wert jedes Elements des Ziels beizubehalten, wobei das entsprechende Maskenbit eine 0 hat. Im Gegensatz dazu erlauben es Vektormasken beim Nullen, jeden Satz Elemente im Ziel während der Ausführung jeder Operation zu nullen (durch die Basisoperation und die Verstärkungsoperation spezifiziert); in einer Ausführungsform wird ein Element des Ziels auf 0 gesetzt, wenn der entsprechende Maskenbit einen Wert 0 hat. Eine Teilmenge dieser Funktionalität ist die Fähigkeit, die Vektorlänge der ausgeführten Operation zu steuern (das heißt, die Spanne der modifizierten Elemente vom ersten bis zum letzten); es ist jedoch nicht notwendig, dass die Elemente, die modifiziert werden, aufeinanderfolgen. Somit erlaubt das Schreibmaskenfeld 1370 teilweise Vektoroperationen, einschließlich Ladevorgänge, Speichervorgänge, Arithmetik, Logik usw. Obgleich Ausführungsformen der Erfindung beschrieben werden, in denen der Inhalt des Schreibmaskenfeldes 1370 eines aus einer Anzahl von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält (so dass der Inhalt des Schreibmaskenfeldes 1370 indirekt angibt, dass eine Maskierung auszuführen ist), erlauben alternative Ausführungsformen statt dessen oder zusätzlich, dass der Inhalt des Maskenschreibfeldes 1370 direkt die auszuführende Maskierung spezifiziert.
  • Immediate-Feld 1372 – Sein Inhalt erlaubt die Spezifizierung eines Immediates. Dieses Feld ist optional in dem Sinne, dass es nicht in einer Implementierung des generischen Vektor-freundlichen Formats vorhanden ist, die kein Immediate unterstützt, und nicht in Instruktionen vorhanden ist, die kein Immediate verwenden.
  • Klasse-Feld 1368 – Sein Inhalt unterscheidet zwischen verschiedenen Klassen von Instruktionen. Mit Bezug auf die 13A–B wählt der Inhalt dieses Feldes zwischen Klasse-A- und Klasse-B-Instruktionen. In den 13A–B werden Quadrate mit gerundeten Ecken verwendet, um anzuzeigen, dass ein spezifischer Wert in einem Feld vorhanden ist (zum Beispiel Klasse A 1368A bzw. Klasse B 1368B für das Klasse-Feld 1368 in den 13A–B).
  • Instruktionsmatrizen der Klasse A
  • Im Fall der Nicht-Speicherzugriff 1305-Instruktionsmatrizen der Klasse A wird das alpha-Feld 1352 als ein RS-Feld 1352A interpretiert, dessen Inhalt unterscheidet, welche der verschiedenen Verstärkungsoperationsarten ausgeführt werden sollen (zum Beispiel werden Runden 1352A.1 bzw. Datentransformierung 1352A.2 für die Instruktionsmatrize für eine Kein-Speicherzugriff-Rundungstyp-Operation 1310 und die Instruktionsmatrize für eine Kein-Speicherzugriff-Datentransformationstyp-Operation 1315 spezifiziert), während das beta-Feld 1354 unterscheidet, welche der Operationen des spezifizierten Typs ausgeführt werden soll. In den Kein-Speicherzugriff 1305-Instruktionsmatrizen sind das Skalierungsfeld 1360, das Verschiebungsfeld 1362A und das Verschiebungsskalierungsfeld 1362B nicht vorhanden.
  • Kein-Speicherzugriff-Instruktionsmatrizen-Vollrundungssteuerungstyp-Operation
  • In der Instruktionsmatrize für eine Kein-Speicherzugriff-Vollrundungssteuerungstyp-Operation 1310 wird das beta-Feld 1354 als ein Rundungssteuerungsfeld 1354A interpretiert, dessen Inhalt(e) eine statische Rundung herbeiführen. Obgleich in den beschrieben Ausführungsformen der Erfindung das Rundungssteuerungsfeld 1354A ein Suppress-All-Floating-Point-Exceptions (SAE)-Feld 1356 und ein Rundungsoperationssteuerungsfeld 1358 enthält, können alternative Ausführungsformen unterstützen, diese beiden Konzepte in dasselbe Feld hinein zu codieren oder nur das eine oder das andere dieser Konzepte/Felder zu haben (zum Beispiel nur das Rundungsoperationssteuerungsfeld 1358 zu haben).
  • SAE-Feld 1356 – Sein Inhalt unterscheidet, ob die Ausnahmeereignisberichte zu deaktivieren sind oder nicht; wenn der Inhalt des SAE-Feldes 1356 anzeigt, dass eine Unterdrückung aktiviert ist, so berichtet eine bestimmte Instruktion keinerlei Art von Gleitkomma-Ausnahmemarkierung und ruft keinen Gleitkomma-Ausnahme-Handler auf.
  • Rundungsoperationssteuerungsfeld 1358 – Sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen auszuführen ist (zum Beispiel Aufrunden, Abrunden, Runden-in-Richtung-Null und Runden-zum-Nächsten). Somit erlaubt das Rundungsoperationssteuerungsfeld 1358 das Ändern des Rundungsmodus für jede einzelne Instruktion. In einer Ausführungsform der Erfindung, wo ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi enthält, setzt der Inhalt des Rundungsoperationssteuerungsfeldes 1350 diesen Registerwert außer kraft.
  • Kein-Speicherzugriff-Instruktionsmatrizen-Datentransformationstyp-Operation
  • In der Instruktionsmatrize für eine Kein-Speicherzugriff-Datentransformationstyp-Operation 1315 wird das beta-Feld 1354 als ein Datentransformationsfeld 1354B interpretiert, dessen Inhalt unterscheidet, welche aus einer Anzahl von Datentransformationen ausgeführt werden soll (zum Beispiel keine Datentransformation, -umordnung oder -rundsendung).
  • Im Fall einer Speicherzugriff 1320-Instruktionsmatrize der Klasse A wird das alpha-Feld 1352 als ein Räumungshinweisfeld 1352B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise zu verwenden ist (in 13A sind Temporal 1352B.1 und Nicht-temporal 1352B.2 für die Speicherzugriff-Temporal 1325-Instruktionsmatrize bzw. die Speicherzugriff-Nicht-temporal 1330-Instruktionsmatrize spezifiziert), während das beta-Feld 1354 als ein Datenmanipulationsfeld 1354C interpretiert wird, dessen Inhalt unterscheidet, welche aus einer Anzahl von Datenmanipulationsoperationen (auch als „Grundformen” (Primitives) bekannt) ausgeführt werden soll (zum Beispiel keine Manipulation; Rundsenden; Aufwärtskonvertierung einer Quelle; und Abwärtskonvertierung eines Ziels). Die Speicherzugriff 1320-Instruktionsmatrizen enthalten das Skalierungsfeld 1360 und optional das Verschiebungsfeld 1362A oder das Verschiebungsskalierungsfeld 1362B.
  • Vektorspeicherinstruktionen führen Vektor-Ladevorgänge aus einem Speicher und Vektorspeichervorgänge in einen Speicher mit Konvertierungsunterstützung aus. Wie im Fall regulärer Vektorinstruktionen übertragen Vektorspeicherinstruktionen Daten datenelementweise aus einem/in einen Speicher, wobei die Elemente, die tatsächlich übertragen werden, durch den Inhalt der Vektormaske diktiert werden, die als die Schreibmaske ausgewählt wird.
  • Speicherzugriff-Instruktionsmatrizen-Temporal
  • Temporale Daten sind Daten, die wahrscheinlich früh genug wiederverwendet werden, dass sich ein Cache-Speichern lohnt. Dies ist jedoch ein Hinweis, und verschiedene Prozessoren können ihn auf verschiedene Weise implementieren, einschließlich des völligen Ignorierens des Hinweises.
  • Speicherzugriff-Instruktionsmatrizen-Nicht-temporal
  • Nicht-temporale Daten sind Daten, die wahrscheinlich nicht früh genug wiederverwendet werden, dass sich ein Cache-Speichern im First-Level-Cache lohnt, und sollten Priorität bei der Speicherräumung (Eviction) erhalten. Dies ist jedoch ein Hinweis, und verschiedene Prozessoren können ihn auf verschiedene Weise implementieren, einschließlich des völligen Ignorierens des Hinweises.
  • Instruktionsmatrizen der Klasse B
  • Im Fall der Instruktionsmatrizen der Klasse B wird das alpha-Feld 1352 als ein Schreibmaskensteuerung(Z)-Feld 1352C interpretiert, dessen Inhalt unterscheidet, ob die Schreibmaskierung, die durch das Schreibmaskenfeld 1370 gesteuert wird, eine Fusion oder eine Nullung sein sollte.
  • Im Fall der Nicht-Speicherzugriff 1305-Instruktionsmatrizen der Klasse B wird ein Teil des beta-Feldes 1354 als ein RL-Feld 1357A interpretiert, dessen Inhalt unterscheidet, welche der verschiedenen Verstärkungsoperationsarten ausgeführt werden soll (zum Beispiel werden Runden 1357A.1 und Vektorlänge (VSIZE) 1357A.2 für die Instruktionsmatrize für eine Kein-Speicherzugriff-Schreibmaskensteuerung-Teilrundungssteuerungstyp-Operation 1312 bzw. für die Instruktionsmatrize für eine Kein-Speicherzugriff-Schreibmaskensteuerung-vsize-Typ-Operation 1317 spezifiziert), während der Rest des beta-Feldes 1354 unterscheidet, welche der Operationen des spezifizierten Typs ausgeführt werden soll. In den Kein-Speicherzugriff 1305-Instruktionsmatrizen sind das Skalierungsfeld 1360, das Verschiebungsfeld 1362A und das Verschiebungsskalierungsfeld 1362B nicht vorhanden.
  • In der Instruktionsmatrize für eine Kein-Speicherzugriff-Schreibmaskensteuerung-Teilrundungssteuerungstyp-Operation 1310 wird der Rest des beta-Feldes 1354 als ein Rundungsoperationsfeld 1359A interpretiert, und die Ausnahmeereignisberichte sind deaktiviert (eine bestimmte Instruktion berichtet keinerlei Art von Gleitkomma-Ausnahmemarkierung und ruft keinen Gleitkomma-Ausnahme-Handler auf).
  • Rundungsoperationssteuerungsfeld 1359A – Nur als Rundungsoperationssteuerungsfeld 1358 unterscheidet sein Inhalt, welche aus einer Gruppe von Rundungsoperationen auszuführen ist (zum Beispiel Aufrunden, Abrunden, Runden-in-Richtung-Null und Runden-zum-Nächsten). Somit erlaubt das Rundungsoperationssteuerungsfeld 1359A das Ändern des Rundungsmodus für jede einzelne Instruktion. In einer Ausführungsform der Erfindung, wo ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi enthält, setzt der Inhalt des Rundungsoperationssteuerungsfeldes 1350 diesen Registerwert außer Kraft.
  • In der Instruktionsmatrize für eine Kein-Speicherzugriff-Schreibmaskensteuerung-vsize-Typ-Operation 1317 wird der Rest des beta-Feldes 1354 als ein Vektorlängenfeld 1359B interpretiert, dessen Inhalt unterscheidet, welche aus einer Anzahl von Datenvektorlängen ausgeführt werden soll (zum Beispiel 128, 256 oder 512 Byte).
  • Im Fall einer Speicherzugriff 1320 Instruktionsmatrize der Klasse B wird ein Teil des beta-Feldes 1354 als ein Rundsendefeld 1357B interpretiert, dessen Inhalt unterscheidet, ob die Rundsendetyp-Datenmanipulationsoperation ausgeführt werden soll oder nicht, während der Rest des beta-Feldes 1354 die Vektorlängenfeld 1359B interpretiert wird. Die Speicherzugriff 1320-Instruktionsmatrizen enthalten das Skalierungsfeld 1360 und optional das Verschiebungsfeld 1362A oder das Verschiebungsskalierungsfeld 1362B.
  • Mit Bezug auf das generische Vektor-freundliche Instruktionsformat 1300 ist ein komplettes Opcode-Feld 1374 gezeigt, das das Formatfeld 1340, das Basisoperationsfeld 1342 und das Datenelementbreitenfeld 1364 enthält. Obgleich eine Ausführungsform gezeigt ist, bei der das komplette Opcode-Feld 1374 alle diese Felder enthält, enthält das komplette Opcode-Feld 1374 weniger als alle diese Felder in Ausführungsformen, die nicht alle davon unterstützen.
  • Das komplette Opcode-Feld 1374 bildet den Operationscode (Opcode).
  • Das Verstärkungsoperationsfeld 1350, das Datenelementbreitenfeld 1364 und das Schreibmaskenfeld 1370 erlauben das Spezifizieren dieser Merkmale für jede einzelne Instruktion in dem generischen Vektor-freundlichen Instruktionsformat.
  • Die Kombination aus Schreibmaskenfeld und Datenelementbreitenfeld erzeugt insofern typisierte Instruktionen, als sie es erlauben, die Maske auf der Basis verschiedener Datenelementbreiten anzuwenden.
  • Die verschiedenen Instruktionsmatrizen, die man in Klasse A und Klasse B findet, sind in verschiedenen Situationen von Nutzen. In einigen Ausführungsformen der Erfindung könnten verschiedene Prozessoren oder verschiedene Kerne in einem Prozessor nur Klasse A, nur Klasse B oder beide Klassen unterstützen. Zum Beispiel könnte ein Hochleistungs-Allzweck-Out-of-Order-Kern, der für Allzweckberechnungen vorgesehen ist, nur Klasse B unterstützen; ein Kern, der vor allem für r grafische und/oder wissenschaftliche (Durchsatz-)Berechnungen vorgesehen ist, könnte nur Klasse A unterstützen, und ein Kern, der für beides vorgesehen ist, könnte beide unterstützen (natürlich liegt ein Kern, der eine Mischung von Matrizen und Instruktionen beider Klassen hat, aber nicht alle Matrizen und Instruktionen beider Klassen, ebenfalls im Geltungsbereich der Erfindung). Außerdem kann ein einzelner Prozessor mehrere Kerne enthalten, die alle dieselbe Klasse unterstützen, oder wobei verschiedene Kerne verschiedene Klassen unterstützen. Zum Beispiel könnte in einem Prozessor mit separaten Grafik- und Allzweckkernen einer der Grafikkerne, der vor allem für grafische und/oder wissenschaftliche Berechnungen gedacht ist, nur Klasse A unterstützen, während einer oder mehrere der Allzweckkerne Hochleistungs-Allzweckkerne mit Out-of-Order-Ausführung und Registerumbenennung sein können, die für Allzweckberechnungen gedacht sind und nur Klasse B unterstützen. Ein anderer Prozessor, der keinen separaten Grafikkern hat, könnte einen oder mehrere Allzweck-In-Order- oder -Out-of-Order-Kerne enthalten, die beide Klassen A und B unterstützen. Natürlich können in verschiedenen Ausführungsformen der Erfindung Merkmale einer Klasse auch in der anderen Klasse implementiert sein. Programme, die in einer höheren Sprache geschrieben sind, würden in eine Vielzahl verschiedener ausführbarer Formen gebracht (zum Beispiel Just-in-Time-kompiliert oder statisch kompiliert) werden, einschließlich: 1) einer Form, die nur Instruktionen der Klasse(n) hat, die durch den Zielprozessor zur Ausführung unterstützt werden; oder 2) einer Form, die alternative Routinen hat, die unter Verwendung verschiedener Kombinationen der Instruktionen aller Klassen geschrieben sind, und einen Steuerfluss-Code hat, der die auszuführenden Routinen anhand der Instruktionen auswählt, die durch den Prozessor unterstützt werden, der momentan den Code ausführt.
  • Beispielhaftes spezifisches Vektor-freundliches Instruktionsformat
  • 14 ist ein Blockschaubild, das ein beispielhaftes spezifisches Vektor-freundliches Instruktionsformat gemäß Ausführungsformen der Erfindung veranschaulicht. 14 zeigt ein spezifisches Vektor-freundliches Instruktionsformat 1400, das in dem Sinne spezifisch ist, dass es den Ort, die Größe, die Interpretation und die Reihenfolge der Felder sowie Werte für einige dieser Felder spezifiziert. Das spezifische Vektor-freundliche Instruktionsformat 1400 kann dafür verwendet werden, den x86-Instruktionssatz zu erweitern, und somit sind einige der Felder ähnlich denen oder die gleichen wie die, die in dem vorhandenen x86-Instruktionssatz und seiner Erweiterung verwendet werden (zum Beispiel AVX). Dieses Format bleibt mit dem Präfixcodierfeld, dem realen Opcode-Byte-Feld, dem MOD R/M-Feld, dem SIB-Feld, dem Verschiebungsfeld und den Immediate-Feldern des vorhandenen x86-Instruktionssatzes mit Erweiterungen konsistent. Die Felder von 13, in die die Felder von 14 abgebildet werden, sind veranschaulicht.
  • Es versteht sich, dass, obgleich Ausführungsformen der Erfindung zur Veranschaulichung mit Bezug auf das spezifische Vektor-freundliche Instruktionsformat 1400 im Kontext des generischen Vektor-freundlichen Instruktionsformats 1300 beschrieben werden, die Erfindung nicht auf das spezifische Vektor-freundliche Instruktionsformat 1400 beschränkt ist, sofern nichts anderes beansprucht wird. Beispielsweise zieht das generische Vektor-freundliche Instruktionsformat 1300 eine Vielzahl verschiedener möglicher Größen für die verschiedenen Felder in Betracht, auch wenn das spezifische Vektor-freundliche Instruktionsformat 1400 mit Feldern von bestimmten Größen gezeigt ist. Obgleich das Datenelementbreitenfeld 1364 als ein konkretes Beispiel als ein 1-Bit-Feld in dem spezifischen Vektor-freundlichen Instruktionsformat 1400 veranschaulicht ist, ist die Erfindung nicht darauf beschränkt (das heißt, das generische Vektor-freundliche Instruktionsformat 1300 zieht auch andere Größen des Datenelementbreitenfeldes 1364 in Betracht).
  • Das generische Vektor-freundliche Instruktionsformat 1300 enthält die im Folgenden gelisteten Felder in der in 14A veranschaulichten Reihenfolge.
  • EVEX-Präfix (Bytes 0–3) 1402 – ist in einer Vier-Byte-Form codiert.
  • Formatfeld 1340 (EVEX-Byte 0, Bits [7:0]) – Das erste Byte (EVEX-Byte 0) ist das Formatfeld 1340, und es enthält 0×62 (der eindeutige Wert, der in einer Ausführungsform der Erfindung zum Unterscheiden des Vektor-freundlichen Instruktionsformats verwendet wird).
  • Die zweiten bis vierten Bytes (EVEX-Bytes 1–3) enthalten eine Anzahl von Bit-Feldern, die eine spezifische Fähigkeit bereitstellen.
  • REX-Feld 1405 (EVEX-Byte 1, Bits [7-5]) besteht aus einem EVEX.R-Bit-Feld (EVEX-Byte 1, Bit [7]-R), einem EVEX.X-Bit-Feld (EVEX-Byte 1, Bit [6]-X) und einem 1357BEX-Byte 1, Bit[5]-B). Die EVEX.R-, EVEX.X- und EVEX.B-Bit-Felder stellen die gleiche Funktionalität wie die entsprechenden VEX-Bit-Felder bereit und sind unter Verwendung der 1.-Komplement-Form codiert, d. h. ZMM0 ist als 1111B codiert, ZMM15 ist als 0000B codiert. Andere Felder der Instruktionen codieren die niedrigeren drei Bits der Registerindizes, wie dem Fachmann bekannt ist (rrr, xxx und bbb), so dass Rrrr, Xxxx und Bbbb durch Hinzufügen von EVEX.R, EVEX.X und EVEX.B gebildet werden können.
  • REX'-Feld 1310 – Dies ist der erste Teil des REX'-Feldes 1310 und ist das EVEX.R'-Bit-Feld (EVEX-Byte 1, Bit [4]-R'), das zum Codieren entweder der oberen 16 oder der unteren 16 des erweiterten 32-Register-Satzes verwendet wird. In einer Ausführungsform der Erfindung wird dieses Bit, zusammen mit anderen, wie unten dargelegt, in einem Bit-invertierten Format gespeichert, um eine Unterscheidung (in dem allgemein bekannten x86 32-Bit-Modus) zu der BOUND-Instruktion zu treffen, deren reales Opcode-Byte 62 ist, akzeptiert aber nicht im MOD R/M-Feld (unten beschrieben) den Wert von 11 im MOD-Feld; alternative Ausführungsformen der Erfindung speichern weder dieses noch die anderen angegebenen Bits unten in dem invertierten Format. Ein Wert von 1 wird zum Codieren der unteren 16 Register verwendet. Oder anders ausgedrückt: R'Rrrr wird durch Kombinieren von EVEX.R', EVEX.R und des anderen RRR aus anderen Feldern gebildet.
  • Opcode-Abbildungsfeld 1415 (EVEX-Byte 1, Bits [3:0]-mmmm) – Sein Inhalt codiert ein impliziertes vorangehendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelement-Breitenfeld 1364 (EVEX-Byte 2, Bit [7]-W) – wird durch die Bezeichnung EVEX. W dargestellt. EVEX. W wird dafür verwendet, die Auflösung (Größe) des Datentyps zu definieren (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente).
  • EVEX.vvw 1420 (EVEX-Byte 2, Bits [6:3]-vvvv) – Die Rolle von EVEX.vvvv kann Folgendes enthalten: 1) EVEX.vvvv codiert den ersten Quellenregisteroperanden, der in invertierter (1.-Komplement-)Form spezifiziert wird, und gilt für Instruktionen mit mindestens 2 Quellenoperanden; 2) EVEX.vvvv codiert den Zielregisteroperanden, der für bestimmte Vektorverschiebungen in 1.-Komplement-Form spezifiziert wird; oder 3) EVEX.vvvv codiert keinen Operanden; das Feld ist reserviert und sollte 1111b enthalten. Somit codiert das EVEX.vvvv-Feld 1420 die 4 Bits niedrigerer Ordnung des ersten Quellenregisterspezifikators, der in invertierter (1.-Komplement-)Form gespeichert wird. Je nach der Instruktion wird ein zusätzliches verschiedenes EVEX-Bit-Feld verwendet, um die Spezifikator-Größe auf 32 Register zu erweitern.
  • EVEX.0 1368 Klasse-Feld (EVEX-Byte 2, Bit [2]-U) – Wenn EVEX.U = 0, so zeigt es Klasse A oder EVEX.U0 an; wenn EVEX.U = 1, so zeigt es Klasse B oder EVEX.U1 an.
  • Präfixcodierfeld 1425 (EVEX-Byte 2, Bits [1:0]-pp) – Stellt zusätzliche Bits für das Basisoperationsfeld bereit. Neben der Unterstützung für die älteren SSE-Instruktionen im EVEX-Präfix-Format hat dies auch den Nutzen, das SIMD-Präfix kompakter zu machen (anstatt ein Byte zu erfordern, um das SIMD-Präfix auszudrücken, verlangt das EVEX-Präfix nur 2 Bits). Um ältere SSE-Instruktionen zu unterstützen, die ein SIMD-Präfix (66H, F2H, F3H) sowohl im älteren Format als auch im EVEX-Präfix-Format verwenden, werden diese älteren SIMD-Präfixe in einer Ausführungsform in dem SIMD-Präfixcodierfeld codiert und werden bei Laufzeit zum älteren SIMD-Präfix erweitert, bevor sie an das PLA des Decoders übermittelt werden (somit kann das PLA sowohl das ältere als auch das EVEX-Format dieser älteren Instruktionen ohne Modifizierung ausführen). Obgleich neuere Instruktionen den Inhalt des EVEX-Präfixcodierfeldes direkt als eine Opcode-Erweiterung verwenden könnten, nehmen bestimmte Ausführungsformen aus Konsistenzgründen eine ähnliche Erweiterung vor, aber erlauben die Spezifizierung anderer Bedeutungen durch diese älteren SIMD-Präfixe. Eine alternative Ausführungsform kann das PLA umgestalten, um die 2-Bit-SIMD-Präfixcodierungen zu unterstützen, und erfordert somit keine Erweiterung.
  • Alpha-Feld 1352 (EVEX-Byte 3, Bit [7]-EH; auch als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.Schreibmaskensteuerung und EVEX.N bekannt; auch mit α veranschaulicht) – Wie zuvor beschrieben, ist dieses Feld kontextspezifisch.
  • Beta-Feld 1354 (EVEX-Byte 3, Bits [6:4]-SSS, auch als EVEX.s2.0, EVEX.r2-0, EVEX.rr1, EVEX.LL0O, EVEX.LLB bekannt; auch mit βββ veranschaulicht) – Wie zuvor beschrieben, ist dieses Feld kontextspezifisch.
  • REX'-Feld 1310 – Dies ist der Rest des REX'-Feldes und ist das EVEX.V'-Bit-Feld (EVEX-Byte 3, Bit [3]-V'), das dafür verwendet werden kann, entweder die oberen 16 oder unteren 16 des erweiterten 32-Registersatzes zu codieren. Dieses Bit wird im Bit-invertierten Format gespeichert. Ein Wert von 1 wird zum Codieren der unteren 16 Register verwendet. Oder anders ausgedrückt: V'VVVV wird durch Kombinieren von EVEX.V', EVEX.vvvv gebildet.
  • Schreibmaskenfeld 1370 (EVEX-Byte 3, Bits [2:0]-kkk) – Sein Inhalt spezifiziert den Index eines Registers in den Schreibmaskenregistern, wie zuvor beschrieben. In einer Ausführungsform der Erfindung hat der spezifische Wert EVEX.kkk = 000 ein spezielles Verhalten, das impliziert, dass keine Schreibmaske für die konkrete Instruktion verwendet wird (dies kann auf vielfältige Weise implementiert werden, einschließlich der Verwendung einer Schreibmaske, die mit allen Einsen festverdrahtet ist, oder Hardware, die die Maskierungshardware umgeht).
  • Ein reales Opcode-Feld 1430 (Byte 4) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes wird in diesem Feld spezifiziert.
  • MOD R/M-Feld 1440 (Byte 5) enthält das MOD-Feld 1442, das Reg-Feld 1444 und das R/M-Feld 1446. Wie zuvor beschrieben, unterscheidet der Inhalt des MOD-Feldes 1442 zwischen Speicherzugriffs- und Nicht-Speicherzugriffs-Operationen. Die Rolle des Reg-Feldes 1444 kann zu zwei Situationen zusammengefasst werden: das Codieren entweder des Zielregisteroperanden oder eines Quellenregisteroperanden, oder die Behandlung als eine Opcode-Erweiterung und die Nichtverwendung zum Codieren von Instruktionsoperanden. Die Rolle des R/M-Feld 1446 kann Folgendes enthalten: Codieren des Instruktionsoperanden, der auf eine Speicheradresse verweist, oder Codieren entweder des Zielregisteroperanden oder eines Quellenregisteroperanden.
  • Scale, Index, Base(SIB)-Byte (Byte 6) – Wie zuvor beschrieben, wird der Inhalt des Skalierungsfeldes 1350 zur Speicheradressengenerierung verwendet. SIB.xxx 1454 und SIB.bbb 1456 – Auf die Inhalte dieser Felder ist zuvor mit Bezug auf die Register-Indizes Xxxx und Bbbb eingegangen worden.
  • Verschiebungsfeld 1362A (Bytes 7–10) – Wenn das MOD-Feld 1442 10 enthält, so sind die Bytes 7–10 das Verschiebungsfeld 1362A, und es funktioniert genauso wie die ältere 32-Bit-Verschiebung (disp32) und arbeitet mit der Auflösung eines Bytes.
  • Verschiebungsfaktorfeld 1362B (Byte 7) – Wenn das MOD-Feld 1442 01 enthält, so ist das Byte 7 das Verschiebungsfaktorfeld 1362B. Der Ort dieses Feldes ist der gleiche wie der der älteren 8-Bit-Verschiebung des x86-Instruktionssatzes (disp8), die mit der Auflösung eines Bytes arbeitet. Da disp8 um ein Vorzeichen erweitert ist, kann es nur zwischen –128 und 127 Bytes-Versätzen adressieren; in Bezug auf 64-Byte-Cache-Zeilen verwendet disp8 8 Bits, die auf nur vier wirklich brauchbare Werte gesetzt werden können: –128, –64, 0 und 64; da oft ein größerer Bereich benötigt wird, wird disp32 verwendet; jedoch verlangt disp32 4 Bytes. Im Gegensatz zu disp8 und disp32 ist das Verschiebungsfaktorfeld 1362B eine Neuinterpretation von disp8; bei Verwendung des Verschiebungsfaktorfeldes 1362B wird die tatsächliche Verschiebung durch den Inhalt des Verschiebungsfaktorfeldes, multipliziert mit der Größe des Speicheroperandenzugriffs (N), bestimmt. Diese Art der Verschiebung wird als disp8·N bezeichnet. Dies reduziert die durchschnittliche Instruktionslänge (ein einzelnes Byte wird für die Verschiebung verwendet, aber mit einem viel größeren Bereich). Eine solche komprimierte Verschiebung basiert auf der Annahme, dass die effektive Verschiebung ein Vielfaches der Auflösung des Speicherzugriffs ist, weshalb die redundanten Bits niedrigerer Ordnung des Adressenversatzes nicht codiert zu werden brauchen. Oder anders ausgedrückt: Das Verschiebungsfaktorfeld 1362B ersetzt die 8-Bit-Verschiebung des älteren x86-Instruktionssatzes. Somit wird das Verschiebungsfaktorfeld 1362B in der gleichen Weise codiert wie eine 8-Bit-Verschiebung eines x86-Instruktionssatzes (also keine Änderungen der ModRM/SIB-Codierungsregeln), wobei die einzige Ausnahme darin besteht, dass disp8 zu disp8·N überladen wird. Oder anders ausgedrückt: Es gibt keine Änderungen der Codierungsregeln oder Codierungslängen, sondern nur bei der Interpretation des Verschiebungswertes durch Hardware (die die Verschiebung um die Größe des Speicheroperanden skalieren muss, um einen Byte-weisen Adressenversatz zu erhalten).
  • Das Immediate-Feld 1372 arbeitet wie zuvor beschrieben.
  • Komplettes Opcode-Feld
  • 14B ist ein Blockschaubild, das die Felder des spezifischen Vektor-freundlichen Instruktionsformats 1400, aus denen das komplette Opcode-Feld 1374 besteht, gemäß einer Ausführungsform der Erfindung veranschaulicht. Genauer gesagt, enthält das komplette Opcode-Feld 1374 das Formatfeld 1340, das Basisoperationsfeld 1342 und das Datenelementbreiten(W)-Feld 1364. Das Basisoperationsfeld 1342 enthält das Präfixcodierfeld 1425, die Opcode-Abbildungsfeld 1415 und das reale Opcode-Feld 1430.
  • Registerindexfeld
  • 14C ist ein Blockschaubild, das die Felder des spezifischen Vektor-freundlichen Instruktionsformats 1400, aus denen das Registerindexfeld 1344 besteht, gemäß einer Ausführungsform der Erfindung veranschaulicht. Genauer gesagt, enthält das Registerindexfeld 1344 das REX-Feld 1405, das REX'-Feld 1410, das MODR/M.reg-Feld 1444, das MODR/M.r/m-Feld 1446, das VVVV-Feld 1420, das xxx-Feld 1454 und das bbb-Feld 1456.
  • Verstärkungsoperationsfeld
  • 14D ist ein Blockschaubild, das die Felder des spezifischen Vektor-freundlichen Instruktionsformats 1400, aus denen das Verstärkungsoperationsfeld 1350 besteht, gemäß einer Ausführungsform der Erfindung veranschaulicht. Wenn das Klasse(U)-Feld 1368 0 enthält, so bezeichnet es EVEX.U0 (Klasse A 1368A); wenn es 1 enthält, so bezeichnet es EVEX.U1 (Klasse B 1368B). Wenn U = 0 und das MOD-Feld 1442 11 enthält (was eine Kein-Speicherzugriffsoperation bezeichnet), so wird das alpha-Feld 1352 (EVEX-Byte 3, Bit [7]-EH) als das rs-Feld 1352A interpretiert. Wenn das rs-Feld 1352A eine 1 enthält (Runden 1352A.1), so wird das beta-Feld 1354 (EVEX-Byte 3, Bits [6:4]-SSS) als das Rundungssteuerungsfeld 1354A interpretiert. Das Rundungssteuerungsfeld 1354A enthält ein Ein-Bit-SAE-Feld 1356 und ein Zwei-Bit-Rundungsoperationsfeld 1358. Wenn das rs-Feld 1352A eine 0 enthält (Datentransformation 1352A.2), so wird das beta-Feld 1354 (EVEX-Byte 3, Bits [6:4]-SSS) als ein Drei-Bit-Datentransformationsfeld 1354B interpretiert. Wenn U = 0 und das MOD-Feld 1442 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bezeichnet), so wird das alpha-Feld 1352 (EVEX-Byte 3, Bit [7]-EH) als das Räumungshinweis(EH)-Feld 1352B interpretiert, und das beta-Feld 1354 (EVEX-Byte 3, Bits [6:4]-SSS) wird als ein Drei-Bit-Datenmanipulationsfeld 1354C interpretiert.
  • Wenn U = 1, so wird das alpha-Feld 1352 (EVEX-Byte 3, Bit [7]-EH) als das Schreibmaskensteuerung(Z)-Feld 1352C interpretiert. Wenn U = 1 und das MOD-Feld 1442 11 enthält (was eine Kein-Speicherzugriffsoperation) bezeichnet, so wird ein Teil des beta-Feldes 1354 (EVEX-Byte 3, Bit [4]-S0) als das RL-Feld 1357A interpretiert; wenn es eine 1 enthält (Runden 1357A.1), so wird der Rest des beta-Feldes 1354 (EVEX-Byte 3, Bit [6-5]-S2-1) als das Rundungsoperationsfeld 1359A interpretiert, während, wenn das RL-Feld 1357A eine 0 enthält (VSIZE 1357.A2), der Rest des beta-Feldes 1354 (EVEX-Byte 3, Bit [6-5] S2-1) als das Vektorlängenfeld 1359B (EVEX-Byte 3, Bit [6-5] L1-0) interpretiert wird. Wenn U = 1 und das MOD-Feld 1442 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bezeichnet), so wird das beta-Feld 1354 (EVEX-Byte 3, Bits [6:4]-SSS) als das Vektorlängenfeld 1359B (EVEX-Byte 3, Bit [6-5] L1-0) und das Rundsendefeld 1357B (EVEX-Byte 3, Bit [4]-B) interpretiert.
  • Beispielhafte Registerarchitektur
  • 15 ist ein Blockschaubild einer Registerarchitektur 1500 gemäß einer Ausführungsform der Erfindung. In der veranschaulichten Ausführungsform gibt es 32 Vektorregister 1510, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die 256 Bits niedrigerer Ordnung der unteren 16 zmm-Register werden über die Register ymm0-16 gelegt. Die 128 Bits niedrigerer Ordnung der unteren 16 zmm-Register (die 128 Bits niedrigerer Ordnung der ymm-Register) werden über die Register xmm0-15 gelegt. Das spezifische Vektor-freundliche Instruktionsformat 1400 operiert an dieser überlagerten Registerdatei, wie in den folgenden Tabellen veranschaulicht ist.
    Justierbare Vektorlänge Klasse Operationen Register
    Instruktionsmatrizen, die nicht das A (Figur 13A; U = 0) 1310, 1315, 1325, 1330 zmm-Register (die Vektorlänge ist 64 Byte)
    Vektorlängenfeld 1359B enthalten B (Figur 13B; U = 1) 1312 zmm-Register (die Vektorlänge ist 64 Byte)
    Instruktionsmatrizen, die das Vektorlängenfeld 1359B enthalten B (Figur 13B; U = 1) 1317, 1327 zmm-, ymm- oder xmm-Register (die Vektorlänge ist 64 Byte, 32 Byte oder 16 Byte) je nach dem Vektorlängenfeld 1359B
  • Oder anders ausgedrückt: Das Vektorlängenfeld 1359B wählt zwischen einer maximalen Länge und einer oder mehreren anderen kürzeren Längen, wobei jede dieser kürzeren Längen halb so lang ist wie die vorherige Länge; und Instruktionsmatrizen ohne das Vektorlängenfeld 1359B operieren an der maximalen Vektorlänge. Des Weiteren operieren in einer Ausführungsform die Klasse-B-Instruktionsmatrizen des spezifischen Vektor-freundlichen Instruktionsformats 1400 an gepackten oder skalaren Einzel/Doppelpräzisions-Gleitkommadaten und gepackten oder skalaren ganzzahligen Daten. Skalare Operationen sind Operationen, die an der Datenelement-Position der niedrigsten Ordnung in einem zmm/ymm/xmm-Register ausgeführt werden; die Datenelement-Positionen einer höheren Ordnung bleiben je nach Ausführungsform entweder so, wie sie vor der Instruktion waren, oder werden genullt.
  • Schreibmaskenregister 1515 – In der veranschaulichten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7) von jeweils 64 Bits Größe. In einer alternativen Ausführungsform sind die Schreibmaskenregister 1515 16 Bits groß. Wie zuvor beschrieben, kann in einer Ausführungsform der Erfindung das Vektormaskenregister k0 nicht als eine Schreibmaske verwendet werden; wenn die Codierung, die normalerweise anzeigen würde, dass k0 für eine Schreibmaske verwendet wird, so wählt es eine festverdrahtete Schreibmaske von 0×FFFF, so dass praktisch die Schreibmaskierung für diese Instruktion deaktiviert wird.
  • Allzweckregister 1525 – In der veranschaulichten Ausführungsform gibt es sechzehn 64-Bit-Allzweckregister, die zusammen mit den vorhandenen x86-Adressiermodi verwendet werden, um Speicheroperanden zu adressieren. Diese Register werden als RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Skalare Gleitkomma-Stapelregisterdatei (x87-Stapel) 1545, auf die die MMX Packed Integer Flat Register-Datei 1550 aliasiert wird – In der veranschaulichten Ausführungsform ist der x87-Stapel ein Acht-Element-Stapel, der dafür verwendet wird, skalare Gleitkomma-Operationen an 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Instruktionssatzerweiterung auszuführen, während die MMX-Register dafür verwendet werden, Operationen an 64-Bit-Packed-Integer-Daten auszuführen, sowie Operanden für einige Operationen zu speichern, die zwischen den MMX- und XMM-Registern ausgeführt werden.
  • Alternative Ausführungsformen der Erfindung können breitere oder schmalere Register verwenden. Außerdem können alternative Ausführungsformen der Erfindung mehr, weniger oder andere Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computer-Architekturen
  • Prozessorkerne können auf verschiedene Weise, für verschiedene Zwecke und in verschiedenen Prozessoren implementiert werden. Zum Beispiel können Implementierungen solcher Kerne enthalten: 1) einen Allzweck-In-Order-Kern, der für Allzweckberechnungen gedacht ist; 2) einen Hochleistungs-Allzweck-Out-of-Order-Kern, der für Allzweckberechnungen gedacht ist; 3) einen Spezialkern, der vor allem für grafische und/oder wissenschaftliche (Durchsatz-)Berechnungen gedacht ist. Implementierungen verschiedener Prozessoren können enthalten: 1) eine CPU, die einen oder mehrere Allzweck-In-Order-Kerne enthält, die für Allzweckberechnungen gedacht sind, und/oder einen oder mehrere Allzweck-Out-of-Order-Kerne enthält, die für Allzweckberechnungen gedacht sind; und 2) einen Koprozessor, der einen oder mehrere Spezialkerne enthält, die vor allem für grafische und/oder wissenschaftliche (Durchsatz-)Berechnungen gedacht sind. Solche verschiedenen Prozessoren führen zu verschiedenen Computersystemarchitekturen, die Folgendes enthalten können: 1) den Koprozessor auf einem anderen Chip als die CPU; 2) den Koprozessor auf einem anderen Chip im selben Package wie eine CPU; 3) den Koprozessor auf dem selben Chip wie eine CPU (in einem solchen Fall ist ein solcher Koprozessor mitunter als Speziallogik, wie zum Beispiel eine integrierte Grafik- und/oder Wissenschafts(Durchsatz)-Logik, oder als Spezialkerne bezeichnet); und 4) ein System auf einem Chip, das auf demselben Wafer die beschriebene CPU (mitunter als der oder die Anwendungskerne oder Anwendungsprozessoren bezeichnet), den oben beschrieben Koprozessor und weitere Funktionalität enthalten kann. Als Nächstes werden beispielhafte Kernarchitekturen beschrieben, gefolgt von Beschreibungen beispielhafter Prozessoren und Computer-Architekturen.
  • Beispielhafte Kernarchitekturen
  • In-order- und Out-of-Order-Kern-Blockschaubild
  • 16A ist ein Blockschaubild, das sowohl eine beispielhafte In-order-Pipeline als auch eine beispielhafte Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungs-Pipeline gemäß Ausführungsformen der Erfindung veranschaulicht. 16B ist ein Blockschaubild, das sowohl eine beispielhafte Ausführungsform eines In-order-Architekturkerns als auch einen beispielhaften Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungsarchitekturkern, der in einen Prozessor zu integrieren ist, gemäß Ausführungsformen der Erfindung veranschaulicht. Die mit durchgehenden Linien gezeichneten Kästchen in den 16A–B veranschaulichen die In-order-Pipeline und den In-order-Kern, während die optionale Hinzufügung der mit Strichlinien gezeichneten Kästchen die Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungs-Pipeline und -kern veranschaulicht. Weil der In-order-Aspekt eine Teilmenge des Out-of-Order-Aspekts ist, wird der Out-of-Order-Aspekt beschrieben.
  • In 16A enthält eine Prozessorpipeline 1600 eine Holstufe 1602, eine Längendecodierstufe 1604, eine Decodierstufe 1606, eine Zuordnungsstufe 1608, eine Umbenennungsstufe 1610, eine Disponierungsstufe (auch als eine Dispatch- oder Ausgabestufe bekannt) 1612, eine Registerlese/Speicherlesestufe 1614, eine Ausführungsstufe 1616, eine Rückschreibe/Speicherschreibstufe 1618, eine Ausnahmehandhabungsstufe 1622 und eine Bindungsstufe 1624.
  • 16B zeigt einen Prozessorkern 1690, der eine Front-End-Einheit 1630 enthält, die mit einer Ausführungsengine-Einheit 1650 gekoppelt ist, und beide sind mit einer Speichereinheit 1670 gekoppelt. Der Kern 1690 kann ein Reduced Instruction Set Computing(RISC)-Kern, ein Instruction Set Computing(CISC)-Kern, einen Very Long Instruction Word(VLIW)-Kern oder ein Hybrid- oder alternativer Kerntyp sein. Als eine weitere Option kann der Kern 1690 ein Spezialkern, wie zum Beispiel ein Netzwerk- oder Kommunikationskern, eine Komprimierungs-Engine, ein Koprozessorkern, ein Allzweckberechnungs-Grafikverarbeitungseinheit(GPGPU)-Kern, ein Grafikkern oder dergleichen sein.
  • Die Front-End-Einheit 1630 enthält eine Abzweigprädiktionseinheit 1632, die mit einer Instruktions-Cache-Einheit 1634 gekoppelt ist, die mit einem Instruktionsübersetzungspuffer (TLB) 1636 gekoppelt ist, der mit einer Instruktionsholeinheit 1638 gekoppelt ist, die mit einer Decodiereinheit 1640 gekoppelt ist. Die Decodiereinheit 1640 (oder der Decoder) kann Instruktionen decodieren und kann als ein Ausgangssignal eine oder mehrere Mikrooperationen, Mikrocode-Eintrittspunkte, Mikroinstruktionen, andere Instruktionen oder andere Steuersignale generieren, die aus den ursprünglichen Instruktionen decodiert werden oder diese auf sonstige Weise widerspiegeln oder von diesen abgeleitet sind. Die Decodiereinheit 1640 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Zu Beispielen geeigneter Mechanismen gehören Nachschlagetabellen, Hardware-Implementierungen, programmierbare Logik-Arrays (PLAs), Mikrocode-Nurlesespeicher (ROMs) usw. In einer Ausführungsform enthält der Kern 1690 einen Mikrocode-ROM oder ein sonstiges Medium, das Mikrocode für bestimmte Makroinstruktionen speichert (zum Beispiel in der Decodiereinheit 1640 oder auf sonstige Weise innerhalb der Front-End-Einheit 1630). Die Decodiereinheit 1640 ist mit einer Umbenennungs/Zuordnungs-Einheit 1652 in der Ausfühnmgsengine-Einheit 1650 gekoppelt.
  • Die Ausführungsengine-Einheit 1650 enthält die Umbenennungs/Zuordnungs-Einheit 1652, die mit einer Retirement-Einheit 1654 gekoppelt ist, und einen Satz aus einer oder mehreren Disponierer-Einheiten 1656. Die eine oder die mehreren Disponierer-Einheiten 1656 stellen eine beliebige Anzahl verschiedener Disponierer dar, einschließlich Reservierungsstationen, zentrale Instruktionsfenster usw. Die eine oder die mehreren Disponierer-Einheiten 1656 sind mit der einen oder den mehreren physischen Registerdateien-Einheiten 1658 gekoppelt. Jeder der physischen Registerdateien-Einheiten 1658 stellt eine oder mehrere physische Registerdateien dar, von denen verschiedene einen oder mehrere verschiedene Datentypen speichern, wie zum Beispiel skalare ganze Zahl, skalares Gleitkomma, gepackte ganze Zahl, gepacktes Gleitkomma, Vektor/ganze Zahl, Vektor/Gleitkomma, Status (zum Beispiel einen Instruktionszeiger, der die Adresse der nächsten auszuführenden Instruktion ist), usw. In einer Ausführungsform umfasst die physische Registerdateien-Einheit 1658 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architektur-Vektorregister, Vektormaskenregister und Allzweckregister bilden. Die eine oder die mehreren physischen Registerdateien-Einheiten 1658 werden durch die Retirement-Einheit 1654 überlappt, um verschiedene Möglichkeiten zu veranschaulichen, wie Registerumbenennungs- und Out-of-Order-Ausführung implementiert werden können (zum Beispiel unter Verwendung eines oder mehrerer Umordnungspuffer und einer oder mehrerer Retirement-Registerdateien; unter Verwendung einer oder mehrerer Zukunftsdateien, einer oder mehrerer Vergangenheitspuffer und einer oder mehrerer Retirement-Registerdateien; unter Verwendung einer Registerabbildung und eines Pools aus Registern, usw.). Die Retirement-Einheit 1654 und die eine oder die mehreren physischen Registerdateien-Einheiten 1658 sind mit dem einen oder den mehreren Ausführungsclustern 1660 gekoppelt. Das eine oder die mehreren Ausführungscluster 1660 enthalten einen Satz aus einem oder mehreren Ausführungseinheiten 1662 und einen Satz aus einer oder mehreren Speicherzugriffseinheiten 1664. Die Ausführungseinheiten 1662 können verschiedene Operationen (zum Beispiel Verschiebungen, Addition, Subtraktion, Multiplikation) und an verschiedenen Arten von Daten (zum Beispiel skalares Gleitkomma, gepackte ganze Zahl, gepacktes Gleitkomma, Vektor/ganze Zahl, Vektor/Gleitkomma) ausführen. Obgleich einige Ausführungsformen eine Anzahl von Ausführungseinheiten enthalten können, die für spezifische Funktionen oder Sätze von Funktionen dediziert sind, brauchen andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten zu enthalten, die alle sämtliche Funktionen ausführen. Die eine oder die mehreren Disponierer-Einheiten 1656, die eine oder die mehreren physischen Registerdateien-Einheiten 1658 und das eine oder die mehreren Ausführungscluster 1660 sind so gezeigt, dass sie auch zu mehreren vorhanden sein können, weil bestimmte Ausführungsformen separate Pipelines für bestimmte Arten von Daten/Operationen erzeugen (zum Beispiel eine skalare Ganzzahl-Pipeline, eine skalare Gleitkomma-/gepackte Ganzzahl-/gepackte Gleitkomma-/Vektor-Ganzzahl/-Vektor-Gleitkomma-Pipeline und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre eigene Disponierer-Einheit, ihre eigene(n) physische(n) Registerdateien-Einheit(en) und/oder ihr eigenes Ausführungscluster haben – und im Fall einer separaten Speicherzugriffs-Pipeline werden bestimmte Ausführungsformen implementiert, in denen nur das Ausführungscluster dieser Pipeline die eine oder die mehreren Speicherzugriffseinheiten 1664 hat). Es versteht sich des Weiteren, dass, wenn separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-Order-Ausgabe/Ausführung und der Rest in-Order sein können.
  • Der Satz Speicherzugriffseinheiten 1664 ist mit der Speichereinheit 1670 gekoppelt, die eine Daten-TLB-Einheit 1672 enthält, die mit einer Daten-Cache-Einheit 1674 gekoppelt ist, die mit einer Level 2 (L2)-Cache-Einheit 1676 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 1664 eine Ladeeinheit, eine Speicheradresseinheit und eine Speicherdateneinheit enthalten, die jeweils mit der Daten-TLB-Einheit 1672 in der Speichereinheit 1670 gekoppelt sind. Die Instruktions-Cache-Einheit 1634 ist des Weiteren mit einer Level 2 (L2)-Cache-Einheit 1676 in der Speichereinheit 1670 gekoppelt. Die L2-Cache-Einheit 1676 ist mit einem oder mehreren anderen Cache-Levels und letztendlich mit einem Hauptspeicher gekoppelt.
  • Beispielsweise kann die beispielhafte Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungs-Kernarchitektur die Pipeline 1600 folgendermaßen implementieren: 1) die Instruktionsholeinheit 1638 führt die Hol- und Längendecodierstufen 1602 und 1604 aus; 2) die Decodiereinheit 1640 führt die Decodierstufe 1606 aus; 3) die Umbenennungs/Zuordnungs-Einheit 1652 führt die Zuordnungsstufe 1608 und die Umbenennungsstufe 1610 aus; 4) die eine oder die mehreren Disponierer-Einheiten 1656 führen die Disponierstufe 1612 aus; 5) die eine oder die mehreren physischen Registerdateien-Einheiten 1658 und die Speichereinheit 1670 führen die Registerlese/Speicherlesestufe 1614 aus; das Ausführungscluster 1660 führt die Ausführungsstufe 1616 aus; 6) die Speichereinheit 1670 und die eine oder die mehreren physischen Registerdateien-Einheiten 1658 führen die Rückschreibe/Speicherschreibstufe 1618 aus; 7) verschiedene Einheiten können an der Ausnahmehandhabungsstufe 1622 beteiligt sein; und 8) die Retirement-Einheit 1654 und die eine oder die mehreren physischen Registerdateien-Einheiten 1658 führen die Bindungsstufe 1624 aus.
  • Der Kern 1690 kann eine oder mehrere Instruktionssätze unterstützen (zum Beispiel den x86-Instruktionssatz (mit einigen Erweiterungen, die den neueren Versionen hinzugefügt wurden); den MIPS-Instruktionssatz von MIPS Technologies aus Sunnyvale, Kalifornien; den ARM-Instruktionssatz (mit optionalen weiteren Erweiterungen, wie zum Beispiel NEON) von ARM Holdings aus Sunnyvale, Kalifornien), einschließlich der im vorliegenden Text beschriebenen Instruktion(en). In einer Ausführungsform enthält der Kern 1690 eine Logik zum Unterstützen einer Packdateninstruktionssatzerweiterung (zum Beispiel AVX1, AVX2), wodurch es ermöglicht wird, dass die Operationen, die durch viele Multimedia-Anwendungen verwendet werden, unter Verwendung von Packdaten ausgefürt werden können.
  • Es versteht sich, dass der Kern Multithreading unterstützen kann (das Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads), und dass er dies auf eine Vielzahl verschiedener Arten tun kann, einschließlich Time-Sliced-Multithreading, Simultaneous Multithreading (wobei ein einzelner physischer Kern einen logischen Kern für jeden der Threads bildet, für die der physische Kern gleichzeitig Multithreading ausführt) oder einer Kombination davon (zum Beispiel Time-Sliced-Fetching und Decodieren und gleichzeitiges Multithreading danach, wie zum Beispiel bei der Intel® Hyperthreading-Technologie).
  • Obgleich eine Registerumbenennung im Kontext einer Out-of-Order-Ausführung beschrieben ist, versteht es sich, dass eine Registerumbenennung auch in einer In-order-Architektur verwendet werden kann. Obgleich die veranschaulichte Ausführungsform des Prozessors auch separate Instruktions- und Daten-Cache-Einheiten 1634/1674 und eine gemeinsam genutzte L2-Cache-Einheit 1676 enthält, können alternative Ausführungsformen einen einzelnen internen Cache sowohl für Instruktionen als auch Daten haben, wie zum Beispiel einen internen Level 1(L1)-Cache oder mehrere Ebenen von internem Cache. In einigen Ausführungsformen kann das System eine Kombination eines internen Cache und eines externen Cache, der außerhalb des Kerns und/oder des Prozessors liegt, enthalten. Alternativ kann der gesamte Cache außerhalb des Kerns und/oder des Prozessors liegen.
  • Konkrete beispielhafte In-order-Kernarchitektur
  • 17A–B veranschaulichen ein Blockschaubild einer konkreteren beispielhaften In-order-Kernarchitektur, wobei der Kern einer von verschiedenen Logikblöcken (der weitere Kerne desselben Typs und/oder anderer Typen enthält) in einem Chip wäre. Die Logikblöcke kommunizieren über ein bandbreitenstarkes Interconnect-Netzwerk (zum Beispiel ein Ringnetzwerk) mit einiger Festfunktionslogik, Speicher-E/A-Schnittstellen und anderer notwendiger E/A-Logik entsprechend der Anwendung.
  • 17A ist ein Blockschaubild eines einzelnen Prozessorkerns, zusammen mit seiner Verbindung mit dem On-Chip-Interconnect-Netzwerk 1702 und mit seiner lokalen Teilmenge des Level 2(L2)-Caches 1704, gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Instruktionsdecoder 1700 den x86-Instruktionssatz mit einer Packdaten-Instruktionssatzerweiterung. Ein L1-Cache 1706 erlaubt Zugriffe mit geringer Latenz auf Cache-Speicher in die skalaren und Vektor-Einheiten. Obgleich in einer Ausführungsform (zur Vereinfachung des Designs) eine skalare Einheit 1708 und eine Vektoreinheit 1710 separate Registersätze verwenden (skalare Register 1712 bzw. Vektorregister 1714) und Daten, die zwischen ihnen übertragen werden, in Speicher geschrieben werden und dann aus einem Level 1 (L1)-Cache 1706 zurückgelesen werden, können alternative Ausführungsformen der Erfindung eine andere Herangehensweise verwenden (zum Beispiel einen einzelnen Registersatz verwenden oder einen Kommunikationspfad enthalten, der es ermöglicht, dass Daten zwischen den zwei Registerdateien übertragen werden, ohne geschrieben und zurückgelesen zu werden).
  • Die lokale Teilmenge des L2-Caches 1704 ist Teil eines globalen L2-Caches, der in separate lokale Teilmengen geteilt ist, einen je Prozessorkern. Jeder Prozessorkern hat einen direkten Zugriffspfad zu seiner eigenen lokalen Teilmenge des L2-Caches 1704. Daten, die durch einen Prozessorkern gelesen wurden, werden in seiner L2-Cache-Teilmenge 1704 gespeichert, wo rasch auf sie zugegriffen werden kann, parallel mit anderen Prozessorkernen, die auf ihre eigene lokalen L2-Cache-Teilmengen zugreifen. Daten, die durch einen Prozessorkern geschrieben wurden, werden in seiner eigenen L2-Cache-Teilmenge 1704 gespeichert und werden erforderlichenfalls aus anderen Teilmengen gelöscht. Das Ringnetzwerk gewährleistet Kohärenz für gemeinsam genutzte Daten. Das Ringnetzwerk ist bidirektional, um es Agenten, wie zum Beispiel Prozessorkernen, L2-Caches und anderen Logikblöcken, zu erlauben, innerhalb des Chips miteinander zu kommunizieren. Jeder Ringdatenpfad ist in jeder Richtung 1012 Bits breit.
  • 17B ist eine auseinandergezogene Ansicht eines Teils des Prozessorkerns in 17A gemäß Ausführungsformen der Erfindung. 17B enthält einen L1-Daten-Cache 1706A als Teil des L1-Cache 1704, sowie weitere Details bezüglich der Vektoreinheit 1710 und der Vektorregister 1714. Genauer gesagt, ist die Vektoreinheit 1710 eine 16 Bits breite Vektorverarbeitungseinheit (VPU) (siehe die 16 Bits breite ALU 1728), die eine oder mehrere von Ganzzahl-, Einzelpräzisions-Gleitkomma- und Doppelpräzisions-Gleitkommainstruktionen ausführt. Die VPU unterstützt das Umordnen der Registereingänge mit der Umordnungseinheit 1720, eine numerische Konvertierung mit Numerischen-Konvertierungseinheiten 1722A-B und eine Replizierung mit der Replizierungseinheit 1724 am Speichereingang. Schreibmaskenregister 1726 erlauben das Prädizieren resultierender Vektorschreibvorgänge.
  • Prozessor mit integriertem Speicher-Controller und Grafik
  • 18 ist ein Blockschaubild eines Prozessors 1800, der gemäß Ausführungsformen der Erfindung mehrere Kerne haben kann, einen integrierten Speicher-Controller haben kann und eine integrierte Grafik haben kann. Die mit durchgehenden Linien gezeichneten Kästchen in 18 veranschaulichen einen Prozessor 1800 mit einem einzelnen Kern 1802A, einem Systemagenten 1810, einen Satz aus einem oder mehreren Bus-Controller-Einheiten 1816, während die optionale Hinzufügung der mit Strichlinien gezeichneten Kästchen einen alternativen Prozessor 1800 mit mehreren Kernen 1802A–N, einen Satz aus einer oder mehreren integrierten Speicher-Controller-Einheiten 1814 in der Systemagenteinheit 1810 und Speziallogik 1808 veranschaulicht.
  • Somit können verschiedene Implementierungen des Prozessors 1800 Folgendes enthalten: 1) eine CPU mit der Speziallogik 1808, die eine integrierte grafische und/oder wissenschaftliche(Durchsatz-)Logik ist (die einen oder mehrere Kerne enthalten kann), und wobei die Kerne 1802A–N ein oder mehrere Allzweckkerne sind (zum Beispiel Allzweck-In-Order-Kerne, Allzweck-Out-of-Order-Kerne oder eine Kombination aus beiden); 2) einen Koprozessor, wobei die Kerne 1802A–N eine große Anzahl von Spezialkernen sind, die vor allem für grafische und/oder wissenschaftliche(Durchsatz-)Berechnungen gedacht sind; und 3) einen Koprozessor, wobei die Kerne 1802A–N eine große Anzahl von Allzweck-In-Order-Kernen sind. Somit kann der Prozessor 1800 ein Allzweck-Prozessor, ein Koprozessor oder ein Spezialprozessor sein, wie zum Beispiel ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, eine GPGPU (Allzweck-Grafikverarbeitungseinheit), ein durchsatzstarker Many-Integrated Core(MIC)-Koprozessor (der 30 Kerne oder mehr enthält), ein eingebetteter Prozessor oder dergleichen. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 1800 kann ein Teil eines oder mehrerer Substrate sein und/oder kann auf einem oder mehreren Substraten implementiert sein, wofür eine Reihe von Prozesstechnologien zum Einsatz kommen können, wie zum Beispiel BiCMOS, CMOS oder NMOS.
  • Die Speicherhierarchie enthält eine oder mehrere Cache-Ebenen innerhalb der Kerne, einen Satz aus einer oder mehreren gemeinsam genutzten Cache-Einheiten 1806 und externen Speicher (nicht gezeigt), der mit dem Satz integrierter Speicher-Controller-Einheiten 1814 gekoppelt ist. Der Satz gemeinsam genutzter Cache-Einheiten 1806 kann einen oder mehrere Mid-Level-Caches enthalten, wie zum Beispiel Level 2 (L2)-, Level 3 (L3)-, Level 4 (L4)- oder andere Cache-Ebenen, einen Last-Level-Cache (LLC) und/oder Kombinationen davon. Obgleich in einer Ausführungsform eine Ring-gestützte Interconnect-Einheit 1812 die integrierte Grafiklogik 1808, den Satz gemeinsam genutzter Cache-Einheiten 1806 und die Systemagenteinheit 1810 und die eine oder die mehreren integrierten Speicher-Controller-Einheiten 1814 verbindet, können alternative Ausführungsformen jede beliebige Anzahl allgemein bekannter Techniken zum Verbinden solcher Einheiten verwenden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cache-Einheiten 1806 und den Kerne 1802-A–N beibehalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 1802A–N zum Multithreading befähigt. Der Systemagent 1810 enthält jenen Komponenten, die die Kerne 1802A-N koordinieren und betreiben. Die Systemagenteinheit 1810 kann beispielsweise eine Energiesteuereinheit (die PCU) und eine Anzeigeeinheit enthalten. Die PCU kann Logik und Komponenten sein oder enthalten, die zum Regeln des Energiezustands der Kerne 1802A–N und der integrierten Grafiklogik 1808 benötigt werden. Die Anzeigeeinheit dient zum Ansteuern eines oder mehrerer extern angeschlossener Displays.
  • Die Kerne 1802A–N können in Bezug auf den Architektur-Instruktionssatz homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 1802A–N können in der Lage sein, denselben Instruktionssatz auszuführen, während andere nur in der Lage zu sein brauchen, eine Teilmenge jenes Instruktionssatzes oder einen anderen Instruktionssatz auszuführen.
  • Beispielhafte Computer-Architekturen
  • 1922 sind Blockschaubilder beispielhafter Computer-Architekturen. Andere dem Fachmann bekannte Systemdesigns und -konfigurationen für Laptops, Desktops, handgehaltene PCs, Personal Digital Assistants, Engineering-Workstations, Server, Netzwerkgeräte, Netzwerk-Hubs, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Grafikgeräte, Videospielegeräte, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Mediaplayer, handgehaltene Geräte und verschiedene andere elektronische Geräte sind ebenfalls geeignet. Generell ist eine enorme Vielfalt an Systemen oder elektronischen Geräten, die in der Lage sind, einen Prozessor und/oder andere im vorliegenden Text offenbarte Ausführungslogik zu enthalten, allgemein geeignet.
  • Wenden wir uns nun 19 zu, wo ein Blockschaubild eines Systems 1900 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Das System 1900 kann einen oder mehrere Prozessoren 1910, 1915 enthalten, die mit einem Controller-Hub 1920 gekoppelt sind. In einer Ausführungsform enthält der Controller-Hub 1920 einen Grafikspeicher-Controller-Hub (GMCH) 1990 und einen Eingabe/Ausgabe-Hub (IOH) 1950 (die sich auf separaten Chips befinden können); der GMCH 1990 enthält Speicher- und Grafik-Controller, an die ein Speicher 1940 und ein Koprozessor 1945 gekoppelt sind; der IOH 1950 koppelt Eingabe/Ausgabe(E/A)-Geräte 1960 mit dem GMCH 1990. Alternativ sind einer oder beide der Speicher- und Grafik-Controller innerhalb des Prozessors integriert (wie im vorliegenden Text beschrieben); der Speicher 1940 und der Koprozessor 1945 sind direkt mit dem Prozessor 1910 gekoppelt, und der Controller-Hub 1920 in einem einzelnen Chip mit dem IOH 1950.
  • Die optionale Art weiterer Prozessoren 1915 ist in 19 mit durchbrochenen Linien angedeutet. Jeder Prozessor 1910, 1915 kann einen oder mehrere der im vorliegenden Text beschriebenen Verarbeitungskerne enthalten und kann eine Version des Prozessors 1800 sein.
  • Der Speicher 1940 kann beispielsweise dynamischer Direktzugriffsspeicher (DRAM), Phasenänderungsspeicher (PCM) oder eine Kombination von beiden sein. Für mindestens eine Ausführungsform kommuniziert der Controller-Hub 1920 mit dem einen oder den mehreren Prozessoren 1910, 1915 über einen Multi-Drop-Bus, wie zum Beispiel einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie zum Beispiel QuickPath Interconnect (QPI), oder eine ähnliche Verbindung 1995.
  • In einer Ausführungsform ist der Koprozessor 1945 ein Spezialprozessor, wie zum Beispiel ein durchsatzstarker MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Controller-Hub 1920 einen integrierten Grafikbeschleuniger enthalten.
  • Es kann eine ganze Reihe von Unterschieden zwischen den physischen Ressourcen 1910, 1915 im Hinblick auf ein Spektrum relevanter Messgrößen geben, darunter Architektur, Mikroarchitektur, Thermik, Stromverbrauchscharakteristika und dergleichen.
  • In einer Ausführungsform führt der Prozessor 1910 Instruktionen aus, die Datenverarbeitungsoperationen einer allgemeinen Art steuern. In die Instruktionen können Koprozessor-Instruktionen eingebettet sein. Der Prozessor 1910 erkennt diese Koprozessor-Instruktionen als von einer Art, die durch den angeschlossenen Koprozessor 1945 ausgeführt werden sollte. Dementsprechend gibt der Prozessor 1910 diese Koprozessor-Instruktionen (oder Steuersignale, die Koprozessor-Instruktionen darstellen) auf einem Koprozessorbus oder einem anderen Interconnect an den Koprozessor 1945 aus. Ein oder mehrere Koprozessoren 1945 nehmen die empfangenen Koprozessor-Instruktionen entgegen und führen sie aus.
  • Wenden wir uns nun 20 zu, wo ein Blockschaubild eines ersten konkreteren beispielhaften Systems 2000 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Wie in 20 gezeigt, ist das Mehrprozessorsystem 2000 ein Punkt-zu-Punkt-Interconnect-System und enthält einen ersten Prozessor 2070 und einen zweiten Prozessor 2080, die über ein Punkt-zu-Punkt-Interconnect 2050 gekoppelt sind. Jeder der Prozessoren 2070 und 2080 kann eine Version des Prozessors 1800 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 2070 und 2080 die Prozessoren 1910 bzw. 1915, während der Koprozessor 2038 der Koprozessor 1945 ist. In einer anderen Ausführungsform sind die Prozessoren 2070 und 2080 der Prozessor 1910 bzw. der Koprozessor 1945.
  • Die Prozessoren 2070 und 2080 sind so gezeigt, dass sie integrierte Speicher-Controller(IMC)-Einheiten 2072 bzw. 2082 enthalten. Der Prozessor 2070 enthält außerdem als Teil seiner Bus-Controller-Einheiten Punkt-zu-Punkt(P-P)-Schnittstellen 2076 und 2078; gleichermaßen enthält der zweite Prozessor 2080 P-P-Schnittstellen 2086 und 2088. Die Prozessoren 2070, 2080 können Informationen über eine Punkt-zu-Punkt(P-P)-Schnittstelle 2050 unter Verwendung von P-P-Schnittstellenschaltkreisen 2078, 2088 austauschen. Wie in 20 gezeigt, koppeln IMCs 2072 und 2082 die Prozessoren mit jeweiligen Speichern, und zwar einem Speicher 2032 und einem Speicher 2034, die Abschnitte von Hauptspeicher sein können, die lokal an die jeweiligen Prozessoren angeschlossen sind.
  • Die Prozessoren 2070, 2080 können jeweils Informationen mit einem Chipsatz 2090 über individuelle P-P-Schnittstellen 2052, 2054 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltkreisen 2076, 2094, 2086, 2098 austauschen. Der Chipsatz 2090 kann optional Informationen mit dem Koprozessor 2038 über eine Hochleistungsschnittstelle 2039 austauschen. In einer Ausführungsform ist der Koprozessor 2038 ein Spezialprozessor, wie zum Beispiel ein durchsatzstarker MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein (nicht gezeigter) gemeinsam genutzter Cache kann in einem der Prozessoren oder außerhalb beider Prozessoren enthalten sein und kann dennoch mit den Prozessoren über ein P-P-Interconnect verbunden sein, dergestalt, dass die Informationen des lokalen Caches eines oder beider Prozessoren in dem gemeinsam genutzten Cache gespeichert werden können, falls ein Prozessor in einen niedrigeren Energiemodus versetzt wird.
  • Der Chipsatz 2090 kann mit einem ersten Bus 2016 über eine Schnittstelle 2096 gekoppelt sein. In einer Ausführungsform kann der erste Bus 2016 ein Peripheral Component Interconnect(PCI)-Bus oder ein Bus wie zum Beispiel ein PCI Express-Bus oder ein anderer E/A Interconnect-Bus der dritten Generation sein, obgleich der Schutzumfang der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in 20 gezeigt, können verschiedene E/A-Geräte 2014 mit dem erstes Bus 2016 gekoppelt sein, zusammen mit einer Busbrücke 2018, die den ersten Bus 2016 mit einem zweiten Bus 2020 koppelt. In einer Ausführungsform sind ein oder mehrere weitere Prozessoren 2015, wie zum Beispiel Koprozessoren, durchsatzstarke MIC-Prozessoren, GPGPUs, Beschleuniger (wie zum Beispiel Grafikbeschleuniger oder digitale Signalverarbeitungs(DSP)-Einheiten), feldprogrammierbare Gate-Arrays oder sonstige Prozessoren mit dem ersten Bus 2016 gekoppelt. In einer Ausführungsform kann der zweite Bus 2020 ein Low Pin Count(LPC)-Bus sein. Verschiedene Geräte können in einer Ausführungsform mit einem zweiten Bus 2020 gekoppelt sein, einschließlich beispielsweise einer Tastatur und/oder einer Maus 2022, Kommunikationsgeräten 2027 und einer Speichereinheit 2028, wie zum Beispiel einem Disk-Laufwerk oder einer anderen Massenspeichervorrichtung, die Instruktionen/Code und Daten 2030 enthalten kann. Des Weiteren kann ein Audio-E/A 2024 mit dem zweiten Bus 2020 gekoppelt sein. Es ist zu beachten, dass auch andere Architekturen möglich sind. Beispielsweise kann ein System anstelle der Punkt-zu-Punkt-Architektur von 20 einen Multi-Drop-Bus oder eine andere derartige Architektur implementieren.
  • Wenden wir uns nun 21 zu, wo ein Blockschaubild eines zweiten konkreteren beispielhaften Systems 2100 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Gleiche Elemente in den 20 und 21 tragen gleiche Bezugszahlen, und bestimmte Aspekte von 20 wurden aus 21 weggelassen, um zu vermeiden, dass andere Aspekte von 21 in den Hintergrund treten.
  • 21 veranschaulicht, dass die Prozessoren 2070, 2080 integrierten Speicher und E/A-Steuerungslogik („CL”) 2072 bzw. 2082 enthalten können. Somit enthält die CL 2072, 2082 integrierte Speicher-Controller-Einheiten und E/A-Steuerungslogik. 21 veranschaulicht, dass nicht nur die Speicher 2032, 2034 mit der CL 2072, 2082 gekoppelt sind, sondern ebenso, dass auch E/A-Geräte 2114 mit der Steuerungslogik 2072, 2082 gekoppelt sind. Ältere E/A-Geräte 2115 sind mit dem Chipsatz 2090 gekoppelt.
  • Wenden wir uns nun 22 zu, wo ein Blockschaubild eines SoC 2200 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Ähnliche Elemente in 18 tragen gleiche Bezugszahlen. Außerdem sind mit Strichlinien gezeichneten Kästchen optionale Merkmale auf höherentwickelten SoCs. In 22 sind eine oder mehrere Interconnect-Einheiten 2202 gekoppelt mit: einem Anwendungsprozessor 2210, der einen Satz aus einem oder mehreren Kernen 202A–N und gemeinsam genutzten Cache-Einheiten 1806 enthält; einer Systemagenteinheit 1810; einer oder mehreren Bus-Controller-Einheiten 1816; einer oder mehreren integrierten Speicher-Controller-Einheiten 1814; einem Satz aus einem oder mehreren Koprozessoren 2220, der eine integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor enthalten kann; einer statischen Direktzugriffsspeicher(SRAM)-Einheit 2230; einer Direktspeicherzugrtffs(DMA)-Einheit 2232; und einer Anzeigeeinheit 2240 zum Koppeln mit einem oder mehreren externen Displays. In einer Ausführungsform enthalten der eine oder die mehreren Koprozessoren 2220 einen Spezialprozessor, wie zum Beispiel einen Netzwerk- oder Kommunikationsprozessor, eine Komprimierungs-Engine, eine GPGPU, einen durchsatzstarken MIC-Prozessor, einen eingebetteten Prozessor oder dergleichen.
  • Ausführungsformen der im vorliegenden Text offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsansätze implementiert werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert werden, die auf programmierbaren Systemen ausgeführt werden, die mindestens einen Prozessor, ein Speichersystem (einschließlich flüchtigem und nicht-flüchtigem Speicher und/oder Speicherelementen), mindestens ein Eingabegerät und mindestens ein Ausgabegerät enthalten.
  • Programmcode, wie zum Beispiel Code 2030, der in 20 veranschaulicht ist, kann auf Eingabe-Instruktionen angewendet werden, um die im vorliegenden Text beschriebenen Funktionen auszuführen und Ausgabe-Informationen zu generieren. Die Ausgabe-Informationen können auf ein oder mehrere Ausgabegeräte in bekannter Weise angewendet werden. Für die Zwecke dieser Anmeldung meint ein „Verarbeitungssystem” jedes System, das einen Prozessor hat, wie zum Beispiel einen digitalen Signalprozessor (DSP), einen Mikrocontroller, einen anwendungsspezifischen integrierten Schaltkreis (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren prozeduralen oder objektorientierten Programmiersprache implementiert werden, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann außerdem gewünschtenfalls in Assembler- oder Maschinensprache implementiert werden. Der Geltungsbereich der im vorliegenden Text beschriebenen Mechanismen ist nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch repräsentative Instruktionen implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik innerhalb des Prozessors darstellt, die, wenn sie durch eine Maschine gelesen wird, die Maschine veranlasst, Logik zu bilden, mit der die im vorliegenden Text beschriebenen Techniken ausgeführt werden. Solche Darstellungen, die als „IP-Kerne” bekannt sind, können auf einem greifbaren, maschinenlesbaren Medium gespeichert sein und an verschiedene Kunden oder Herstellungseinrichtungen verschickt werden, um in die Produktionsmaschinen geladen zu werden, die die Logik oder den Prozessor letztendlich herstellen.
  • Zu solchen maschinenlesbaren Speichermedien können beispielsweise nicht-transitorische, greifbare Anordnungen von Artikeln gehören, die durch eine Maschine oder eine Vorrichtung hergestellt oder gebildet werden, einschließlich Speichermedien, wie zum Beispiel Festplatten, alle sonstigen Arten von Disks, einschließlich Floppy-Disks, optischer Disks, Compact Disk-Nurlesespeicher (CD-ROMs), Compact Disk-Rewritables (CD-RWs) und magnet-optischer Disks, Halbleiterbauelemente, wie zum Beispiel Nurlesespeicher (ROMs), Direktzugriffsspeicher (RAMs), wie zum Beispiel dynamischer Direktzugriffsspeicher (DRAMs), statischer Direktzugriffsspeicher (SRAMs), löschbarer programmierbarer Nurlesespeicher (EPROMs), Flash-Speicher, elektrisch löschbarer programmierbarer Nurlesespeicher (EEPROMs), Phasenänderungsspeicher (PCM), magnetischer oder optischer Karten, oder jede sonstige Art von Medium, das zum Speichern von elektronischen Instruktionen geeignet ist.
  • Dementsprechend enthalten Ausführungsformen der Erfindung auch nicht-transitorische, greifbare maschinenlesbare Medien, die Instruktionen enthalten oder Designdaten enthalten, wie zum Beispiel Hardware Description Language (HDL), die Strukturen, Schaltkreise, Vorrichtungen, Prozessoren und/oder Systemmerkmale, die im vorliegenden Text beschrieben sind, definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich binärer Übersetzung, Code-Morphing usw.)
  • In einigen Fällen kann ein Instruktionskonverter verwendet werden, um eine Instruktion aus einem Quelleninstruktionssatz zu einem Zielinstruktionssatz zu konvertieren. Zum Beispiel kann der Instruktionskonverter eine Instruktion zu einer oder mehreren anderen Instruktionen übersetzen (zum Beispiel unter Verwendung statischer binärer Übersetzung, dynamischer binärer Übersetzung, einschließlich dynamischer Kompilation), morphen, emulieren oder auf sonstige Weise konvertieren, damit sie durch den Kern verarbeitet werden. Der Instruktionskonverter kann in Software, Hardware, Firmware oder einer Kombination davon implementiert werden. Der Instruktionskonverter kann sich auf dem Prozessor, außerhalb des Prozessors oder zum Teil auf dem Prozessor und zum Teil außerhalb des Prozessors befinden.
  • 23 ist ein Blockschaubild, das als Gegensatz die Verwendung eines Software-Instruktionskonverters zum Konvertieren binärer Instruktionen in einem Quelleninstruktionssatz zu binären Instruktionen in einem Zielinstruktionssatz gemäß Ausführungsformen der Erfindung darstellt. In der veranschaulichten Ausführungsform ist der Instruktionskonverter ein Software-Instruktionskonverter, obgleich der Instruktionskonverter alternativ auch in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert werden kann. 23 zeigt ein Programm in einer höheren Sprache 2302, das unter Verwendung eines x86-Kompilierers 2304 kompiliert werden kann, um binären x86-Code 2306 zu generieren, der nativ durch einen Prozessor mit mindestens einem x86-Instruktionssatz-Kern 2316 ausgeführt werden kann. Der Prozessor mit mindestens einem x86-Instruktionssatz-Kern 2316 stellt jeden Prozessor dar, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit mindestens einem x86-Instruktionssatz-Kern ausführen kann, indem er kompatibel ausführt oder auf sonstige Weise verarbeitet: (1) einen wesentlichen Abschnitt des Instruktionssatzes des Intel x86-Instruktionssatz-Kerns, oder (2) Objektcode-Versionen von Anwendungen oder anderer Software, die dafür gedacht ist, auf einem Intel-Prozessor mit mindestens einem x86-Instruktionssatz-Kern zu laufen, um im Wesentlichen das gleiche Ergebnis zu erreichen wie ein Intel-Prozessor mit mindestens einem x86-Instruktionssatz-Kern. Der x86-Kompilierer 2304 stellt einen Kompilierer dar, der dafür geeignet ist, binären x86-Code 2306 (zum Beispiel Objektcode) zu generieren, der, mit oder ohne zusätzliche Linkage-Verarbeitung, auf dem Prozessor mit mindestens einem x86-Instruktionssatz-Kern 2316 ausgeführt werden kann. Gleichermaßen zeigt 23 das Programm in der höheren Sprache 2302, das unter Verwendung eines alternativen Instruktionssatz-Kompilierers 2308 kompiliert werden kann, um alternativen Instruktionssatz-Binärcode 2310 zu generieren, der nativ durch einen Prozessor ohne mindestens einen x86-Instruktionssatz-Kern 2314 ausgeführt werden kann (zum Beispiel einen Prozessor mit Kernen, die den MIPS-Instruktionssatz von MIPS Technologies aus Sunnyvale, Kalifornien, ausführen und/oder die den ARM-Instruktionssatz von ARM Holdings aus Sunnyvale, Kalifornien, ausführen). Der Instruktionskonverter 2312 dient zum Konvertieren des binären x86-Codes 2306 in Code, der nativ durch den Prozessor ohne einen x86-Instruktionssatz-Kern 2314 ausgeführt werden kann. Es ist unwahrscheinlich, dass dieser konvertierte Code der gleiche wie der alternative Instruktionssatz-Binärcode 2310 ist, weil ein dazu befähigter Instruktionskonverter nur schwierig herzustellen ist; jedoch wird der konvertierte Code die allgemeine Operation bewerkstelligen und aus Instruktionen aus dem alternativen Instruktionssatz bestehen. Somit stellt der Instruktionskonverter 2312 Software, Firmware, Hardware oder eine Kombination davon dar, die es einem Prozessor oder einer anderen elektronischen Vorrichtung, der bzw. die keinen x86-Instruktionssatz-Prozessor oder -Kern besitzt, durch Emulation, Simulation oder sonstige Prozesse erlaubt, den binären x86-Code 2306 auszuführen.
  • Komponenten, Merkmale und Details, die für jede der 411 beschrieben wurden, können optional auch in jeder der 13 verwendet werden. Darüber hinaus können Komponenten, Merkmale und Details, die im vorliegenden Text für jede der Vorrichtungen beschrieben wurden, optional auch in jedem der im vorliegenden Text beschriebenen Verfahren verwendet werden, die in Ausfürungsformen durch solche und/oder mit solchen Vorrichtungen ausgeführt werden können.
  • AUSFÜHRUNGSBEISPIELE
  • Die folgenden Beispiele betreffen weitere Ausführungsformen. Die besonderen Einzelheiten in den Beispielen können überall in einer oder mehreren Ausführungsformen werden verwendet.
    • Beispiel 1 ist ein Prozessor. Der Prozessor enthält mehrere Packdatenregister. Der Prozessor enthält außerdem eine Einheit, die mit den Packdatenregistern gekoppelt ist, wobei die Einheit dafür geeignet ist, in Reaktion auf eine bereichsbegrenzte Vektorspeicherzugriffsinstruktion, die einen quellengepackten Speicherindex anzeigen soll, der mehrere gepackte Speicherindizes aufweisen soll, die aus 8-Bit-Speicherindizes und 16-Bit-Speicherindizes ausgewählt sind, auf Speicherorte in nur einem begrenzten Bereich eines Speichers in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion zuzugreifen.
    • Beispiel 2 enthält den Gegenstand nach Anspruch 1, und wobei optional die bereichsbegrenzte Vektorspeicherzugriffsinstruktion den quellengepackten Speicherindex anzeigen soll, der 8-Bit-Speicherindizes enthalten soll.
    • Beispiel 3 enthält den Gegenstand nach Anspruch 1, und wobei optional die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion auf Speicherorte in dem begrenzten Bereich zugreifen soll, der nur 256 Bytes umfassen soll.
    • Beispiel 4 enthält den Gegenstand nach Anspruch 1, und wobei optional die bereichsbegrenzte Vektorspeicherzugriffsinstruktion den quellengepackten Speicherindex anzeigen soll, der mindestens 32 Speicherindizes enthalten soll.
    • Beispiel 5 enthält den Gegenstand nach Anspruch 1, und wobei optional die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion auf den begrenzten Bereich des Speichers mit einer Speicheradresse von mindestens 32 Bits zugreifen soll.
    • Beispiel 6 enthält den Gegenstand nach Anspruch 5, und wobei optional die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion jeden der Speicherindizes um ein Vorzeichen erweitern soll und einen Skalierungsfaktor auf jeden der um ein Vorzeichen erweiterten Speicherindizes anwenden soll.
    • Beispiel 7 enthält den Gegenstand nach Anspruch 1, und wobei optional die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion einen Mehrdatenelement-Ladevorgang ausführen soll, der mindestens ein Datenelement an eine Speicheradresse laden soll, die durch einen Speicherindex der Mehrzahl angezeigt werden soll, und mindestens ein Datenelement an eine Speicheradresse laden soll, die nicht durch einen Speicherindex der Mehrzahl angezeigt werden soll.
    • Beispiel 8 enthält den Gegenstand nach Anspruch 1, und wobei optional die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion den gesamten begrenzten Bereich aus dem Speicher an Speicherorte des Prozessors laden soll.
    • Beispiel 9 enthält den Gegenstand nach Anspruch 1, und wobei optional die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion einen Mehrdatenelement-Ladevorgang ausführen soll, der mehrere Datenelemente laden soll und ein erstes der mehreren geladenen Datenelemente an einem Zielspeicherort speichern soll, der durch die Instruktion angezeigt werden soll, ohne ein zweites der geladenen Datenelemente an dem Zielspeicherort zu speichern, wenn (a) die Instruktion keine Packdatenoperationsmaske anzeigt, oder (b) die Instruktion eine Packdatenoperationsmaske anzeigt, aber ein entsprechendes Maskenelement der Packdatenoperationsmaske unmaskiert sein soll.
    • Beispiel 10 enthält den Gegenstand nach Anspruch 1, und wobei optional die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion den gesamten begrenzten Bereich aus dem Speicher an Speicherorte des Prozessors laden soll, und wobei die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion eine Teilmenge von Datenelementen des gesamten begrenzten Bereichs selektiv an einen Zielspeicherort bewegen soll, der durch die Instruktion anhand der Speicherindizes angezeigt werden soll.
    • Beispiel 11 enthält den Gegenstand nach einem der Ansprüche 1–8, und wobei optional die bereichsbegrenzte Vektorspeicherzugriffsinstruktion einen Zielspeicherort anzeigen soll, und wobei die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion ein Packdatenergebnis an dem Zielspeicherort speichern soll, wobei das Packdatenergebnis mehrere Datenelemente haben soll, die jeweils von einem Speicherort in dem begrenzten Bereich stammen, der durch einen entsprechenden Speicherindex angezeigt werden soll.
    • Beispiel 12 enthält den Gegenstand nach einem der Ansprüche 1–8, und wobei optional die bereichsbegrenzte Vektorspeicherzugriffsinstruktion Quellenpackdaten anzeigen soll, die mehrere Datenelemente aufweisen, und wobei die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion jedes Datenelement der Quellenpackdaten an einen Speicherort in dem begrenzten Bereich schreiben soll, der durch einen entsprechenden Speicherindex angezeigt werden soll.
    • Beispiel 13 enthält den Gegenstand nach einem der Ansprüche 1–8, und wobei optional die bereichsbegrenzte Vektorspeicherzugriffsinstruktion eine Packdatenoperationsmaske anzeigen soll.
    • Beispiel 14 ist ein Verfahren in einem Prozessor. Das Verfahren enthält das Empfangen einer bereichsbegrenzten Vektorspeicherzugriffsinstruktion, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion einen quellengepackten Speicherindex anzeigt, der mehrere gepackte Speicherindizes aufweist, die aus 8-Bit-Speicherindizes und 16-Bit-Speicherindizes ausgewählt sind. Das Verfahren enthält außerdem das Zugreifen auf Speicherorte in nur einem begrenzten Bereich eines Speichers in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion.
    • Beispiel 15 enthält den Gegenstand nach Anspruch 14, und wobei optional das Empfangen das Empfangen der Instruktion umfasst, die den quellengepackten Speicherindex anzeigt, der 8-Bit-Speicherindizes enthält.
    • Beispiel 16 enthält den Gegenstand nach Anspruch 14, und wobei optional das Zugreifen das Zugreifen auf Speicherorte in dem begrenzten Bereich umfasst, der aus 256 Bytes besteht.
    • Beispiel 17 enthält den Gegenstand nach Anspruch 14, und wobei optional das Empfangen das Empfangen der Instruktion umfasst, die einen Zielspeicherort umfasst, und des Weiteren das Speichern eines Packdatenergebnisses an dem Zielspeicherort in Reaktion auf die Instruktion umfasst, wobei das Packdatenergebnis mehrere Datenelemente aufweist, die jeweils von einem Speicherort in dem begrenzten Bereich stammen, der durch einen entsprechenden Speicherindex angezeigt wird.
    • Beispiel 18 enthält den Gegenstand nach Anspruch 14, und wobei optional das Empfangen das Empfangen der Instruktion umfasst, die Quellenpackdaten anzeigt, die mehrere Datenelemente aufweisen, und wobei das Zugreifen das Schreiben jedes Datenelements der Quellenpackdaten in einen Speicherort in dem begrenzten Bereich, der durch einen entsprechenden Speicherindex angezeigt wird, in Reaktion auf die Instruktion umfasst.
    • Beispiel 19 enthält den Gegenstand nach Anspruch 14, und wobei optional das Zugreifen das Zugreifen mit mindestens 32-Bit-Speicheradressen umfasst.
    • Beispiel 20 enthält den Gegenstand nach Anspruch 14, und wobei optional das Zugreifen das Ausführen eines Mehrdatenelement-Ladevorgangs umfasst, der Folgendes enthält: Laden mindestens eines Datenelements an eine Speicheradresse, die durch einen Speicherindex der Mehrzahl angezeigt wird, und mindestens eines Datenelements an eine Speicheradresse, die nicht durch einen Speicherindex der Mehrzahl angezeigt wird.
    • Beispiel 21 enthält den Gegenstand nach Anspruch 14, und enthält optional des Weiteren das Ausführen eines Mehrdatenelement-Ladevorgangs zum Laden mehrerer Datenelemente und Speichern eines ersten der geladenen Datenelemente an einem Zielspeicherort, der durch die Instruktion angezeigt wird, ohne ein zweites der geladenen Datenelemente an dem Zielspeicherort zu speichern, wenn (a) die Instruktion keine Packdatenoperationsmaske verwendet, oder (b) die Instruktion eine Packdatenoperationsmaske verwendet, aber ein entsprechendes Maskenelement der Packdatenoperationsmaske unmaskiert ist.
    • Beispiel 22 ist ein System zum Verarbeiten von Instruktionen. Das System enthält ein Interconnect. Das System enthält außerdem einen Prozessor, der mit dem Interconnect gekoppelt ist. Das System enthält außerdem einen dynamischen Direktzugriffsspeicher (DRAM), der mit dem Interconnect gekoppelt ist, wobei der DRAM eine bereichsbegrenzte Vektorspeicherzugriffsinstruktion speichert, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion einen quellengepackten Speicherindex anzeigen soll, der mehrere gepackte Speicherindizes aufweist, die aus 8-Bit-Speicherindizes und 16-Bit-Speicherindizes ausgewählt sind, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion, wenn sie durch den Prozessor ausgeführt wird, dafür geeignet ist, den Prozessor zu veranlassen, Operationen auszuführen, die den Zugriff auf Speicherorte in nur einem begrenzten Bereich eines Speicher umfassen.
    • Beispiel 23 enthält den Gegenstand von Beispiel 22, und wobei optional die bereichsbegrenzte Vektorspeicherzugriffsinstruktion den quellengepackten Speicherindex anzeigen soll, der 8-Bit-Speicherindizes enthalten soll, wobei die Instruktion, wenn sie durch den Prozessor ausgeführt wird, dafür geeignet sein soll, den Prozessor zu veranlassen, auf den begrenzten Bereich mit einer Speicheradresse von mindestens 32 Bits zuzugreifen.
    • Beispiel 24 ist ein Erzeugnis, das ein nicht-transitorisches maschinenlesbares Speichermedium umfasst, wobei das nicht-transitorische maschinenlesbare Speichermedium eine bereichsbegrenzte Vektorspeicherzugriffsinstruktion speichert, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion einen quellengepackten Speicherindex anzeigt, der mehrere gepackte Speicherindizes aufweist, die aus 8-Bit-Speicherindizes und 16-Bit-Speicherindizes ausgewählt sind, und die bereichsbegrenzte Vektorspeicherzugriffsinstruktion, wenn sie durch eine Maschine ausgeführt wird, dafür geeignet ist, die Maschine zu veranlassen, Operationen auszuführen, die das Zugreifen auf Speicherorte in nur einem begrenzten Bereich eines Speichers umfassen.
    • Beispiel 25 enthält den Gegenstand von Beispiel 24, und wobei optional die bereichsbegrenzte Vektorspeicherzugriffsinstruktion den quellengepackten Speicherindex anzeigen soll, der 8-Bit-Speicherindizes enthalten soll, und wobei der quellengepackte Speicherindex mindestens 32 Speicherindizes enthalten soll.
    • Beispiel 26 ist eine Vorrichtung zum Ausführen des Verfahrens nach einem der Beispiele 14–21.
    • Beispiel 27 ist eine Vorrichtung, die ein Mittel zum Ausführen des Verfahrens nach einem der Beispiele 14–21 umfasst.
    • Beispiel 28 ist ein maschinenlesbares Speichermedium, das eine Instruktion speichert, die, wenn sie durch eine Maschine ausgeführt wird, die Maschine veranlassen soll, das Verfahren nach einem der Beispiele 14–21 auszuführen.
    • Beispiel 29 ist ein Prozessor zum Ausführen einer Instruktion im Wesentlichen wie im vorliegenden Text beschrieben.
    • Beispiel 30 ist ein Prozessor zum Ausführen eines Verfahrens im Wesentlichen wie im vorliegenden Text beschrieben.
    • Beispiel 31 ist ein Prozessor, der ein Mittel zum Ausführen eines Verfahrens im Wesentlichen wie im vorliegenden Text beschrieben umfasst.
  • In der Beschreibung und den Ansprüchen sind die Begriffe „gekoppelt” und/oder „verbunden”, zusammen mit ihren Ableitungen, verwendet worden. Es versteht sich, dass diese Begriffe nicht als Synonyme für einander gedacht sind. Vielmehr kann in 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 miteinander stehen. Jedoch kann „gekoppelt” auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander stehen, aber dennoch miteinander zusammenwirken oder in einer Wechselbeziehung stehen. Beispielsweise kann eine Ausführungseinheit mit einem Register oder einer Decodierlogik über eine oder mehrere dazwischenliegende Komponenten gekoppelt sein. 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. Im Sinne des vorliegenden Textes kann Logik ein Modul enthalten, wie zum Beispiel Hardware, Firmware, Software oder verschiedene Kombinationen davon. Zu Beispielen von Logik gehören integrierte Schaltungen, anwendungsspezifische integrierte Schaltkreise, analoge Schaltkreise, digitale Schaltkreise, programmierte Logikbauelemente, Speicherbauelemente, die Instruktionen enthalten, usw. In einigen Ausführungsformen kann Hardware-Logik Transistoren und/oder Gates, eventuell zusammen mit anderen Schaltungskomponenten, enthalten.
  • In der obigen Beschreibung sind konkrete Details dargelegt worden, um ein gründliches Verständnis der Ausführungsformen zu ermöglichen. Jedoch können andere Ausführungsformen auch ohne einige dieser konkreten Details praktiziert werden. Der Schutzumfang der Erfindung ist nicht anhand der oben konkret dargelegten Beispiele zu bestimmen, sondern allein anhand der folgenden Ansprüche. Alle äquivalenten Beziehungen zu denen, die in den Zeichnungen veranschaulicht und in der Spezifikation beschrieben sind, fallen unter die Ausführungsformen. In anderen Fällen sind allgemein bekannte Schaltkreise, Strukturen, Bauelemente und Operationen in Blockschaubildform oder ohne Details gezeigt, um zu vermeiden, dass das Verständnis der Beschreibung erschwert wird. Wo mehrere Komponenten gezeigt und beschrieben wurden, können in einigen Fällen diese mehreren Komponenten in einer einzelnen Komponente integriert werden. Wo eine einzelne Komponente gezeigt und beschrieben wurde, kann in einigen Fällen diese einzelne Komponente in zwei oder mehr Komponenten aufgeteilt werden.
  • Es sind verschiedene Operationen und Verfahren beschrieben worden. Einige der Verfahren wurden in einer relativ grundlegenden Form in den Flussdiagrammen beschrieben, aber es können optional Operationen zu den Verfahren hinzugefügt und/oder daraus entfernt werden. Außerdem zeigen die Flussdiagramme zwar eine bestimmte Reihenfolge der Operationen gemäß Ausführungsbeispielen, doch ist diese konkrete Reihenfolge nur beispielhaft. Alternative Ausführungsformen können optional die Operationen in anderer Reihenfolge ausführen, können bestimmte Operationen kombinieren, können bestimmte Operationen überlappen usw.
  • Bestimmte Operationen können durch Hardware-Komponenten ausgeführt werden oder können in maschinenausführbaren oder schaltkreisausführbaren Instruktionen verkörpert sein, die dafür verwendet werden können, eine Maschine, einen Schaltkreis oder eine Hardware-Komponente (zum Beispiel einen Prozessor, einen Abschnitt eines Prozessors, einen Schaltkreis usw.) herbeizuführen und/oder entstehen zu lassen, die mit den Instruktionen, die die Operationen ausführen, programmiert sind. Die Operationen können außerdem optional durch eine Kombination aus Hardware und Software ausgeführt werden. Ein Prozessor, eine Maschine, ein Schaltkreis oder eine Hardware kann spezielle oder bestimmte Schaltungen oder andere Logik (zum Beispiel Hardware, die eventuell mit Firmware und/oder Software kombiniert ist) enthalten, die dafür geeignet ist, die Instruktion auszuführen und/oder zu verarbeiten und ein Ergebnis in Reaktion auf die Instruktion speichern.
  • Einige Ausführungsformen enthalten ein Erzeugnis (zum Beispiel ein Computerprogrammprodukt), das ein maschinenlesbares Medium enthält. Das Medium kann einen Mechanismus enthalten, der Informationen in einer Form bereitstellt, beispielsweise speichert, die durch die Maschine gelesen werden kann. Das maschinenlesbare Medium kann eine Instruktion oder Instruktionsabfolge bereitstellen, oder gespeichert haben, die, falls und/oder wenn sie durch eine Maschine ausgeführt wird, dazu dient, die Maschine zu veranlassen, eine(s) der im vorliegenden Text offenbarten Operationen, Verfahren oder Techniken auszuführen, und/oder dazu führt, dass die Maschine eine(s) der im vorliegenden Text offenbarten Operationen, Verfahren oder Techniken ausführt. Das maschinenlesbare Medium kann eine oder mehrere der im vorliegenden Text offenbarten Ausführungsformen der Instruktionen bereitstellen, beispielsweise speichern.
  • In einigen Ausführungsformen kann das maschinenlesbare Medium ein greifbares und/oder nicht-transitorisches maschinenlesbares Speichermedium enthalten. Beispielsweise kann das greifbare und/oder nicht-transitorische maschinenlesbare Speichermedium Folgendes enthalten: eine Floppy-Diskette, ein optisches Speichermedium, eine optische Disk, eine optische Datenspeichervorrichtung, eine CD-ROM, eine magnetische Disk, eine magnet-optische Disk, einen Nurlesespeicher (ROM), einen programmierbaren ROM (PROM), einen lösch- und programmierbaren ROM (EPROM), einen elektrisch lösch- und programmierbaren ROM (EEPROM), einen Direktzugriffsspeicher (RAM), einen statischen RAM (SRAM), einen dynamischen RAM (DRAM), einen Flash-Speicher, einen Phasenänderungsspeicher, einen Phasenänderungsdatenspeichermaterial, einen nicht-flüchtigen Speicher, eine nicht-flüchtige Datenspeichervorrichtung, einen nicht-transitorischen Speicher, eine nicht-transitorische Datenspeichervorrichtung oder dergleichen. Das nicht-transitorische maschinenlesbare Speichermedium besteht nicht aus einem transitorischen ausgebreiteten Signal. In einer weiteren Ausführungsform kann das maschinenlesbare Medium ein transitorisches maschinenlesbares Kommunikationsmedium enthalten, beispielsweise die elektrischen, optischen, akustischen oder sonstigen Formen ausgebreiteter Signale, wie zum Beispiel Trägerwellen, Infrarotsignale, digitale Signale oder dergleichen.
  • Zu Beispielen geeigneter Maschinen gehören Allzweckprozessoren, Spezialprozessoren, Instruktionsverarbeitungsvorrichtungen, digitale Logik-Schaltkreise, integrierte Schaltkreise und dergleichen. Zu weiteren Beispielen geeigneter Maschinen gehören Computergeräte und andere elektronische Geräte, die solche Prozessoren, Instruktionsverarbeitungsvorrichtungen, digitalen Logik-Schaltkreise oder integrierten Schaltkreise enthalten. Zu Beispielen solcher Computergeräte und elektronischen Geräte gehören Desktop-Computer, Laptop-Computer, Notebook-Computer, Tablet-Computer, Netbooks, Smartphones, Mobiltelefone, Server, Netzwerkgeräte (zum Beispiel Router und Switches), mobile Internet-Geräte (MIDs), Mediaplayer, Smart-Fernseher, Nettops, Set-Top-Boxen und Videospiele-Controller.
  • Wenn in dieser Spezifikation beispielsweise von „eine bestimmte Ausführungsform”, „eine Ausführungsform”, „eine oder mehrere Ausführungsformen” oder „einige Ausführungsformen” gesprochen wird, so bedeutet das, dass ein bestimmtes Merkmal in der Praktizierung der Erfindung enthalten sein kann, aber nicht unbedingt erforderlich ist. Gleichermaßen werden in der Beschreibung mitunter verschiedene Merkmale in einer einzelnen Ausführungsform, Figur oder Beschreibung zusammengefasst, um die Offenbarung zu rationalisieren und das Verständnis der verschiedenen erfinderischen Aspekte zu erleichtern. Dieses Verfahren der Offenbarung darf jedoch nicht so ausgelegt werden, als zeige sich darin eine Absicht, dass die Erfindung mehr Merkmale verlange, als ausdrücklich in jedem Anspruch zitiert sind. Vielmehr liegen, wie die folgenden Ansprüche widerspiegeln, erfinderische Aspekte in weniger als allen Merkmalen einer einzelnen offenbarten Ausführungsform. Darum werden die Ansprüche, die der detaillierten Beschreibung folgen, hiermit ausdrücklich in diese detaillierte Beschreibung aufgenommen, wobei jeder Anspruch für sich allein als eine separate Ausführungsform der Erfindung steht.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • Intel® 64 und IA-32 Architectures Software Developers Manual, Oktober 2011; und siehe Intel® Advanced Vector Extensions Programming Reference, Juni 2011 [0089]

Claims (25)

  1. Prozessor, der Folgendes aufweist: mehrere Packdatenregister; und eine Einheit, die mit den Packdatenregistern gekoppelt ist, wobei die Einheit dafür geeignet ist, in Reaktion auf eine bereichsbegrenzte Vektorspeicherzugriffsinstruktion, die einen quellengepackten Speicherindex anzeigen soll, der mehrere gepackte Speicherindizes aufweisen soll, die aus 8-Bit-Speicherindizes und 16-Bit-Speicherindizes ausgewählt sind, auf Speicherorte in nur einem begrenzten Bereich eines Speichers in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion zuzugreifen.
  2. Prozessor nach Anspruch 1, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion den quellengepackten Speicherindex anzeigen soll, der 8-Bit-Speicherindizes enthalten soll.
  3. Prozessor nach Anspruch 1 oder 2, wobei die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion auf Speicherorte in dem begrenzten Bereich zugreifen soll, der nur 256 Bytes umfassen soll.
  4. Prozessor nach einem der Ansprüche 1 bis 3, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion den quellengepackten Speicherindex anzeigen soll, der mindestens 32 Speicherindizes aufweisen soll.
  5. Prozessor nach einem der Ansprüche 1 bis 4, wobei die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion auf den begrenzten Bereich des Speichers mit einer Speicheradresse von mindestens 32 Bits zugreifen soll.
  6. Prozessor nach Anspruch 5, wobei die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion Folgendes ausführen soll: Erweitern jedes der Speicherindizes um ein Vorzeichen; und Anwenden eines Skalierungsfaktors auf jeden der um ein Vorzeichen erweiterten Speicherindizes.
  7. Prozessor nach einem der Ansprüche 1 bis 6, wobei die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion einen Mehrdatenelement-Ladevorgang ausführen soll, der mindestens ein Datenelement an eine Speicheradresse laden soll, die durch einen Speicherindex der Mehrzahl angezeigt werden soll, und mindestens ein Datenelement an eine Speicheradresse laden soll, die nicht durch einen Speicherindex der Mehrzahl angezeigt werden soll.
  8. Prozessor nach einem der Ansprüche 1 bis 7, wobei die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion den gesamten begrenzten Bereich aus dem Speicher an Speicherorte des Prozessors laden soll.
  9. Prozessor nach einem der Ansprüche 1 bis 8, wobei die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion Folgendes durchführen soll: Ausführen eines Mehrdatenelement-Ladevorgangs, der mehrere Datenelemente laden soll; Speichern eines ersten der mehreren geladenen Datenelemente an einem Zielspeicherort, der durch die Instruktion angezeigt werden soll, ohne ein zweites der geladenen Datenelemente an dem Zielspeicherort zu speichern, wenn (a) die Instruktion keine Packdatenoperationsmaske anzeigt, oder (b) die Instruktion eine Packdatenoperationsmaske anzeigt, aber ein entsprechendes Maskenelement der Packdatenoperationsmaske unmaskiert sein soll.
  10. Prozessor nach einem der Ansprüche 1 bis 9, wobei die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion den gesamten begrenzten Bereich aus dem Speicher an Speicherorte des Prozessors laden soll, und wobei die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion eine Teilmenge von Datenelementen des gesamten begrenzten Bereichs selektiv an einen Zielspeicherort bewegen soll, der durch die Instruktion anhand der Speicherindizes angezeigt werden soll.
  11. Prozessor nach einem der Ansprüche 1 bis 10, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion einen Zielspeicherort anzeigen soll, und wobei die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion ein Packdatenergebnis an dem Zielspeicherort speichern soll, wobei das Packdatenergebnis mehrere Datenelemente haben soll, die jeweils von einem Speicherort in dem begrenzten Bereich stammen, der durch einen entsprechenden Speicherindex angezeigt werden soll.
  12. Prozessor nach einem der Ansprüche 1 bis 6, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion Quellenpackdaten anzeigen soll, die mehrere Datenelemente aufweisen, und wobei die Einheit in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion jedes Datenelement der Quellenpackdaten an einen Speicherort in dem begrenzten Bereich schreiben soll, der durch einen entsprechenden Speicherindex angezeigt werden soll.
  13. Prozessor nach einem der Ansprüche 1 bis 12, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion eine Packdatenoperationsmaske anzeigen soll.
  14. Verfahren in einem Prozessor, das Folgendes umfasst: Empfangen einer bereichsbegrenzten Vektorspeicherzugriffsinstruktion, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion einen quellengepackten Speicherindex anzeigt, der mehrere gepackte Speicherindizes aufweist, die aus 8-Bit-Speicherindizes und 16-Bit-Speicherindizes ausgewählt sind; und Zugreifen auf Speicherorte in nur einem begrenzten Bereich eines Speichers in Reaktion auf die bereichsbegrenzte Vektorspeicherzugriffsinstruktion.
  15. Verfahren nach Anspruch 14, wobei das Empfangen das Empfangen der Instruktion umfasst, die den quellengepackten Speicherindex anzeigt, der 8-Bit-Speicherindizes aufweist.
  16. Verfahren nach Anspruch 14 oder 15, wobei das Zugreifen das Zugreifen auf Speicherorte in dem begrenzten Bereich umfasst, der aus 256 Bytes besteht.
  17. Verfahren nach einem der Ansprüche 14 bis 16, wobei das Empfangen das Empfangen der Instruktion umfasst, die einen Zielspeicherort umfasst, und des Weiteren das Speichern eines Packdatenergebnisses an dem Zielspeicherort in Reaktion auf die Instruktion umfasst, wobei das Packdatenergebnis mehrere Datenelemente aufweist, die jeweils von einem Speicherort in dem begrenzten Bereich stammen, der durch einen entsprechenden Speicherindex angezeigt wird.
  18. Verfahren nach einem der Ansprüche 14 bis 16, wobei das Empfangen das Empfangen der Instruktion umfasst, die Quellenpackdaten anzeigt, die mehrere Datenelemente aufweisen, und wobei das Zugreifen das Schreiben jedes Datenelements der Quellenpackdaten in einen Speicherort in dem begrenzten Bereich, der durch einen entsprechenden Speicherindex angezeigt wird, in Reaktion auf die Instruktion umfasst.
  19. Verfahren nach einem der Ansprüche 14 bis 18, wobei das Zugreifen das Zugreifen mit mindestens 32-Bit-Speicheradressen umfasst.
  20. Verfahren nach einem der Ansprüche 14 bis 17, wobei das Zugreifen das Ausführen eines Mehrdatenelement-Ladevorgangs umfasst, der Folgendes enthält: Laden mindestens eines Datenelements an eine Speicheradresse, die durch einen Speicherindex der Mehrzahl angezeigt wird, und mindestens eines Datenelements an eine Speicheradresse, die nicht durch einen Speicherindex der Mehrzahl angezeigt wird.
  21. Verfahren nach einem der Ansprüche 14 bis 17, das des Weiteren Folgendes umfasst: Ausführen eines Mehrdatenelement-Ladevorgangs zum Laden mehrerer Datenelemente; Speichern eines ersten der geladenen Datenelemente an einem Zielspeicherort, der durch die Instruktion angezeigt wird, ohne ein zweites der geladenen Datenelemente an dem Zielspeicherort zu speichern, wenn (a) die Instruktion keine Packdatenoperationsmaske verwendet, oder (b) die Instruktion eine Packdatenoperationsmaske verwendet, aber ein entsprechendes Maskenelement der Packdatenoperationsmaske unmaskiert ist.
  22. System zum Verarbeiten von Instruktionen, das Folgendes umfasst: ein Interconnect; einen Prozessor, der mit dem Interconnect gekoppelt ist; und einen dynamischen Direktzugriffsspeicher (DRAM), der mit dem Interconnect gekoppelt ist, wobei der DRAM eine bereichsbegrenzte Vektorspeicherzugriffsinstruktion speichert, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion einen quellengepackten Speicherindex anzeigen soll, der mehrere gepackte Speicherindizes aufweist, die aus 8-Bit-Speicherindizes und 16-Bit-Speicherindizes ausgewählt sind, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion, wenn sie durch den Prozessor ausgeführt wird, dafür geeignet ist, den Prozessor zu veranlassen, Operationen auszuführen, die den Zugriff auf Speicherorte in nur einem begrenzten Bereich eines Speichers umfassen.
  23. System nach Anspruch 22, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion den quellengepackten Speicherindex anzeigen soll, der 8-Bit-Speicherindizes enthalten soll, wobei die Instruktion, wenn sie durch den Prozessor ausgeführt wird, dafür geeignet sein soll, den Prozessor zu veranlassen, auf den begrenzten Bereich mit einer Speicheradresse von mindestens 32 Bits zuzugreifen.
  24. Erzeugnis, das ein nicht-transitorisches maschinenlesbares Speichermedium umfasst, wobei das nicht-transitorische maschinenlesbare Speichermedium eine bereichsbegrenzte Vektorspeicherzugriffsinstruktion speichert, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion einen quellengepackten Speicherindex anzeigt, der mehrere gepackte Speicherindizes aufweist, die aus 8-Bit-Speicherindizes und 16-Bit-Speicherindizes ausgewählt sind, und die bereichsbegrenzte Vektorspeicherzugriffsinstruktion, wenn sie durch eine Maschine ausgeführt wird, dafür geeignet ist, die Maschine zu veranlassen, Operationen auszuführen, die das Zugreifen auf Speicherorte in nur einem begrenzten Bereich eines Speichers umfassen.
  25. Erzeugnis nach Anspruch 24, wobei die bereichsbegrenzte Vektorspeicherzugriffsinstruktion den quellengepackten Speicherindex anzeigen soll, der 8-Bit-Speicherindizes enthalten soll, und wobei der quellengepackte Speicherindex mindestens 32 Speicherindizes enthalten soll.
DE102014003706.1A 2013-03-15 2014-03-13 BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME Ceased DE102014003706A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/838,544 2013-03-15
US13/838,544 US9244684B2 (en) 2013-03-15 2013-03-15 Limited range vector memory access instructions, processors, methods, and systems

Publications (1)

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

Family

ID=50554630

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102014003706.1A Ceased DE102014003706A1 (de) 2013-03-15 2014-03-13 BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME

Country Status (6)

Country Link
US (3) US9244684B2 (de)
JP (1) JP5926754B2 (de)
KR (2) KR101599604B1 (de)
CN (1) CN104049943B (de)
DE (1) DE102014003706A1 (de)
GB (1) GB2513970B (de)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9477467B2 (en) * 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
US9600442B2 (en) 2014-07-18 2017-03-21 Intel Corporation No-locality hint vector memory access processors, methods, systems, and instructions
WO2016048333A1 (en) * 2014-09-25 2016-03-31 Hewlett Packard Enterprise Development Lp A report comprising a masked value
US9811464B2 (en) * 2014-12-11 2017-11-07 Intel Corporation Apparatus and method for considering spatial locality in loading data elements for execution
US9582422B2 (en) 2014-12-24 2017-02-28 Intel Corporation Hardware prefetcher for indirect access patterns
US9971686B2 (en) 2015-02-23 2018-05-15 Intel Corporation Vector cache line write back processors, methods, systems, and instructions
KR102248846B1 (ko) * 2015-11-04 2021-05-06 삼성전자주식회사 데이터를 병렬 처리하는 방법 및 이를 위한 장치
US10467006B2 (en) * 2015-12-20 2019-11-05 Intel Corporation Permutating vector data scattered in a temporary destination into elements of a destination register based on a permutation factor
US20170185402A1 (en) * 2015-12-23 2017-06-29 Intel Corporation Instructions and logic for bit field address and insertion
CN105739919B (zh) * 2016-01-21 2018-10-12 捷鼎创新股份有限公司 资料存取系统及方法
US11789734B2 (en) * 2018-08-30 2023-10-17 Advanced Micro Devices, Inc. Padded vectorization with compile time known masks
US10838734B2 (en) * 2018-09-24 2020-11-17 Intel Corporation Apparatus and method for processing structure of arrays (SoA) and array of structures (AoS) data
US11237970B2 (en) * 2018-11-07 2022-02-01 Micron Technology, Inc. Reduce data traffic between cache and memory via data access of variable sizes
US20200364047A1 (en) * 2019-05-16 2020-11-19 Facebook, Inc. High throughput neural network operations using inter-layer memory layout transformation
US11327862B2 (en) * 2019-05-20 2022-05-10 Micron Technology, Inc. Multi-lane solutions for addressing vector elements using vector index registers
US11340904B2 (en) 2019-05-20 2022-05-24 Micron Technology, Inc. Vector index registers
US11403256B2 (en) 2019-05-20 2022-08-02 Micron Technology, Inc. Conditional operations in a vector processor having true and false vector index registers
US11507374B2 (en) 2019-05-20 2022-11-22 Micron Technology, Inc. True/false vector index registers and methods of populating thereof
CN112559037B (zh) * 2019-09-25 2024-04-12 阿里巴巴集团控股有限公司 一种指令执行方法、单元、装置及系统
CN113626081A (zh) * 2020-05-08 2021-11-09 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
TW202215238A (zh) * 2020-09-02 2022-04-16 美商賽發馥股份有限公司 集中-分散操作記憶體保護
CN112860318A (zh) * 2021-01-29 2021-05-28 成都商汤科技有限公司 一种数据传输方法、芯片、设备和存储介质

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2665111B2 (ja) 1992-06-18 1997-10-22 日本電気株式会社 ベクトル処理装置
JPH0962654A (ja) 1995-08-22 1997-03-07 Kofu Nippon Denki Kk リストベクトル処理装置
JP2812292B2 (ja) 1996-02-22 1998-10-22 日本電気株式会社 画像処理装置
US6678807B2 (en) * 2000-12-21 2004-01-13 Intel Corporation System and method for multiple store buffer forwarding in a system with a restrictive memory model
JP3659252B2 (ja) * 2003-03-28 2005-06-15 セイコーエプソン株式会社 ベクトルデータのアドレス参照方法およびベクトルプロセッサ
US8190863B2 (en) 2004-07-02 2012-05-29 Intel Corporation Apparatus and method for heterogeneous chip multiprocessors via resource allocation and restriction
US8447962B2 (en) 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
US10387151B2 (en) 2007-12-31 2019-08-20 Intel Corporation Processor and method for tracking progress of gathering/scattering data element pairs in different cache memory banks
GB2461850A (en) 2008-07-10 2010-01-20 Cambridge Consultants Memory management unit with address translation for a range defined by upper and lower limits
US8656082B2 (en) 2008-08-05 2014-02-18 Micron Technology, Inc. Flexible and expandable memory architectures
US8458284B2 (en) * 2009-06-12 2013-06-04 International Business Machines Corporation Systems and methods for efficient live application migration within bandwidth constrained networks
US8230172B2 (en) 2009-12-03 2012-07-24 Intel Corporation Gather and scatter operations in multi-level memory hierarchy
JP5573134B2 (ja) 2009-12-04 2014-08-20 日本電気株式会社 ベクトル型計算機及びベクトル型計算機の命令制御方法
US8635431B2 (en) 2010-12-08 2014-01-21 International Business Machines Corporation Vector gather buffer for multiple address vector loads
US20120254591A1 (en) 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
US9001138B2 (en) 2011-08-29 2015-04-07 Intel Corporation 2-D gather instruction and a 2-D cache
JP5933725B2 (ja) 2011-09-26 2016-06-15 インテル・コーポレーション ベクトル散乱演算機能及びベクトル収集演算機能を提供する命令及びロジック
US9766887B2 (en) 2011-12-23 2017-09-19 Intel Corporation Multi-register gather instruction
EP2831692A1 (de) * 2012-03-30 2015-02-04 Intel Corporation Vorrichtung und verfahren zur auswahl von elementen einer vektorberechnung
US8972697B2 (en) 2012-06-02 2015-03-03 Intel Corporation Gather using index array and finite state machine
US9355068B2 (en) * 2012-06-29 2016-05-31 Intel Corporation Vector multiplication with operand base system conversion and re-conversion
US9785436B2 (en) 2012-09-28 2017-10-10 Intel Corporation Apparatus and method for efficient gather and scatter operations
US9348601B2 (en) 2012-12-26 2016-05-24 Intel Corporation Coalescing adjacent gather/scatter operations
JP5522283B1 (ja) * 2013-02-27 2014-06-18 日本電気株式会社 リストベクトル処理装置、リストベクトル処理方法、プログラム、コンパイラ、及び、情報処理装置

Non-Patent Citations (1)

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

Also Published As

Publication number Publication date
US20160371084A1 (en) 2016-12-22
US9244684B2 (en) 2016-01-26
GB2513970A (en) 2014-11-12
CN104049943A (zh) 2014-09-17
KR20150091448A (ko) 2015-08-11
CN104049943B (zh) 2018-07-27
GB2513970B (en) 2016-03-09
JP2014182807A (ja) 2014-09-29
KR101599604B1 (ko) 2016-03-03
US9448795B2 (en) 2016-09-20
JP5926754B2 (ja) 2016-05-25
US20160170749A1 (en) 2016-06-16
US20140281425A1 (en) 2014-09-18
KR20140113556A (ko) 2014-09-24
GB201403976D0 (en) 2014-04-23

Similar Documents

Publication Publication Date Title
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
DE102015007571B4 (de) Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren, -verfahren, -systeme und -befehle
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102016006400A1 (de) Hardware-prozessoren und verfahren für eng-gekoppelte heterogene datenverarbeitung
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE112011105121T5 (de) Systeme, Vorrichtungen und Verfahren zum Schrittmustersammeln von Datenelementen und Schrittmusterstreuen von Datenelementen
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE112012007119T5 (de) Threadmigration-Unterstützung für Kerne unterschiedlicher Architektur
DE112011105818T5 (de) Systeme, Vorrichtungen und Verfahren zum Expandieren einer Speicherquelle in ein Zielregister und komprimieren eines Quellenregisters in eine Zielspeicherstelle
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE112011105122T5 (de) Systeme, Vorrichtungen und Verfahren zum Vermischen zweier Quelloperanden in einem einzigen Ziel unter Verwendung einer Schreibmaske
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
DE112017003336T5 (de) Vorrichtungen, verfahren und systeme zum elementsortieren von vektoren
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE102014003644A1 (de) Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich
DE102018124919A1 (de) Skalierbare speicheroptimierte Hardware für Matrix-Solve
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE112016004348T5 (de) Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle
DE102015007422A1 (de) Befehlssatz zum Eliminieren fehlausgerichteter Speicherzugriffe während der Verarbeitung eines Arrays mit fehlausgerichteten Datenzeilen
DE112017001709T5 (de) Prozessoren, verfahren, systeme, und instruktionen zum partitionieren von quellpackdaten in spuren
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R003 Refusal decision now final