DE202016009013U1 - Befehle und Logik für Vektorpermutation - Google Patents

Befehle und Logik für Vektorpermutation Download PDF

Info

Publication number
DE202016009013U1
DE202016009013U1 DE202016009013.6U DE202016009013U DE202016009013U1 DE 202016009013 U1 DE202016009013 U1 DE 202016009013U1 DE 202016009013 U DE202016009013 U DE 202016009013U DE 202016009013 U1 DE202016009013 U1 DE 202016009013U1
Authority
DE
Germany
Prior art keywords
logic
size
processor
register
data
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.)
Active
Application number
DE202016009013.6U
Other languages
English (en)
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 DE202016009013U1 publication Critical patent/DE202016009013U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0855Overlapped cache accessing, e.g. pipeline
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Landscapes

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

Abstract

Prozessor, umfassend:ein Front-End zum Decodieren eines Befehls, wobei der Befehl Vektordaten in ein Zielregister zum Speichern einer Vielzahl von Elementen mit einer Elementgröße zu permutieren hat, die einer Größe eines der Elemente im Zielregister entspricht;eine Ausführungseinheit;eine Zuteilungseinheit zum Zuordnen des Befehls zur Ausführungseinheit zum Ausführen des Befehls mit Zugriff auf einen Arbeitsspeicher;wobei die Ausführungseinheit enthält:eine erste Logik zum Berechnen einer Elementanzahl auf Grundlage einer Größe des Zielregisters und der Elementgröße;eine zweite Logik zum Berechnen einer Indexgröße auf Grundlage zumindest eines Permutationsfaktors;eine dritte Logik zum Berechnen einer Byteanzahl auf Grundlage von zumindest der Elementgröße und des Permutationsfaktors;eine Identifikation eines temporären Ziels zum Speichern von Daten einer Größe, die der Byteanzahl entspricht, befindlich an einer Basisadresse im Arbeitsspeicher;eine vierte Logik zum Ermitteln eines Index aus einem Indexvektor auf Grundlage der Indexgröße undeines Elementzählers, der einem der Elemente im Zielregister entspricht;eine fünfte Logik zum Berechnen eines Offsets durch Multiplizieren des Index mit der Elementgröße;eine sechste Logik zum Ermitteln einer Teilmenge des temporären Ziels auf Grundlage des Offsets und der Elementgröße; undeine siebente Logik zum Speichern der Teilmenge in einem der Elemente im Zielregister auf Grundlage des Elementzählers und der Elementgröße.

Description

  • GEBIET DER ERFINDUNG
  • Die vorliegende Offenbarung betrifft das Gebiet der Verarbeitungslogik, der Mikroprozessoren und einer zugehörigen Befehlssatzarchitektur, die bei Ausführung durch den Prozessor oder eine andere Verarbeitungslogik logische, mathematische oder andere funktionale Operationen durchführt.
  • BESCHREIBUNG DER VERWANDTEN TECHNIK
  • Mehrprozessorsysteme werden immer häufiger. Anwendungen von Mehrprozessorsystemen enthalten eine parallele Verarbeitung von Vektoren. Anwendungen von Mehrprozessorsystemen enthalten eine dynamische Domänenpartitionierung bis ganz hinunter zum Desktop-Computing. Um die Vorteile von Mehrprozessorsystemen zu nutzen, kann auszuführender Code in mehrere Threads zur Ausführung durch verschiedene Verarbeitungsentitäten getrennt werden. Alle Threads können parallel zueinander ausgeführt werden. Befehle, wie sie an einem Prozessor empfangen werden, können zur Ausführung auf dem Prozessor in Ausdrücke oder Befehlswörter decodiert werden, die nativ oder nativer sind. Prozessoren können in einem Ein-Chip-System implementiert sein. Vektorverarbeitung kann in Multimediaanwendungen verwendet werden. Diese Anwendungen können Bild und Audio enthalten.
  • Figurenliste
  • Ausführungsformen werden in den Figuren der begleitenden Zeichnungen beispielhaft und nicht einschränkend dargestellt:
    • 1A ist ein Blockdiagramm eines beispielhaften Computersystems, das mit einem Prozessor gebildet ist und Ausführungseinheiten enthalten kann, um einen Befehl auszuführen, nach Ausführungsformen der vorliegenden Offenbarung;
    • 1B veranschaulicht ein Datenverarbeitungssystem nach Ausführungsformen der vorliegenden Offenbarung;
    • 1C veranschaulicht andere Ausführungsformen eines Datenverarbeitungssystems zum Durchführen von Textstring-Vergleichsoperationen;
    • 2 ist ein Blockdiagramm der Mikroarchitektur für einen Prozessor, der Logikschaltkreise enthalten kann, um Befehle auszuführen, nach Ausführungsformen der vorliegenden Offenbarung;
    • 3A veranschaulicht verschiedene gepackte Datentypdarstellungen in Multimediaregistern nach Ausführungsformen der vorliegenden Offenbarung;
    • 3B veranschaulicht mögliche Datenspeicherformate in Registern nach Ausführungsformen der vorliegenden Offenbarung;
    • 3C veranschaulicht verschiedene vorzeichenbehaftete und vorzeichenlose gepackte Datentypdarstellungen in Multimediaregistern nach Ausführungsformen der vorliegenden Offenbarung;
    • 3D veranschaulicht eine Ausführungsform eines Operationscodierformats;
    • 3E veranschaulicht ein anderes mögliches Operationscodierformat mit vierzig oder mehr Bits nach Ausführungsformen der vorliegenden Offenbarung;
    • 3F veranschaulicht noch ein anderes mögliches Operationscodierformat nach Ausführungsformen der vorliegenden Offenbarung;
    • 4A ist ein Blockdiagramm, das eine In-Order-Pipeline und eine Registerumbenennungsphase, Out-of-Order-Ausgabe-/Ausführungs-Pipeline veranschaulicht, nach Ausführungsformen der vorliegenden Offenbarung;
    • 4B ist ein Blockdiagramm, das einen In-Oder-Architekturkern und eine Registerumbenennungslogik, eine Out-of-Order-Ausgabe-/Ausführungslogik veranschaulicht, die in einem Prozessor aufzunehmen sind, nach Ausführungsformen der vorliegenden Offenbarung;
    • 5A ist ein Blockdiagramm eines Prozessors nach Ausführungsformen der vorliegenden Offenbarung;
    • 5B ist ein Blockdiagramm einer beispielhaften Implementierung eines Kerns nach Ausführungsformen der vorliegenden Offenbarung;
    • 6 ist ein Blockdiagramm eines Systems nach Ausführungsformen der vorliegenden Offenbarung;
    • 7 ist ein Blockdiagramm eines zweiten Systems nach Ausführungsformen der vorliegenden Offenbarung;
    • 8 ist ein Blockdiagramm eines dritten Systems nach Ausführungsformen der vorliegenden Offenbarung;
    • 9 ist ein Blockdiagramm eines Ein-Chip-Systems nach Ausführungsformen der vorliegenden Offenbarung;
    • 10 veranschaulicht einen Prozessor, der eine Zentralverarbeitungseinheit und eine Grafikverarbeitungseinheit enthält, die zumindest einen Befehl ausführen kann, nach Ausführungsformen der vorliegenden Offenbarung;
    • 11 ist ein Blockdiagramm, das die Entwicklung von IP-Kernen veranschaulicht, nach Ausführungsformen der vorliegenden Offenbarung;
    • 12 veranschaulicht, wie ein Befehl eines ersten Typs von einem Prozessor eines anderen Typs emuliert werden kann, nach Ausführungsformen der vorliegenden Offenbarung;
    • 13 veranschaulicht ein Blockdiagramm, das die Verwendung eines Software-Befehlswandlers zum Umwandeln von binären Befehlen in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz nach Ausführungsformen der vorliegenden Offenbarung gegenüberstellt;
    • 14 ist ein Blockdiagramm einer Befehlssatzarchitektur eines Prozessors nach Ausführungsformen der vorliegenden Offenbarung;
    • 15 ist ein detaillierteres Blockdiagramm einer Befehlssatzarchitektur eines Prozessors nach Ausführungsformen der vorliegenden Offenbarung;
    • 16 ist ein Blockdiagramm einer Ausführungspipeline für eine Befehlssatzarchitektur eines Prozessors nach Ausführungsformen der vorliegenden Offenbarung;
    • 17 ist ein Blockdiagramm einer elektronischen Einrichtung zum Einsetzen eines Prozessors nach Ausführungsformen der vorliegenden Offenbarung;
    • 18 ist ein Blockdiagramm eines Systems zur Vektorpermutation nach Ausführungsformen der vorliegenden Offenbarung;
    • 19 ist ein detaillierteres Blockdiagramm von Elementen eines Systems zur Vektorpermutation nach Ausführungsformen der vorliegenden Offenbarung; und
    • 20 ist ein Diagramm eines Betriebs eines Verfahrens zur Vektorpermutation.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Die folgende Beschreibung beschreibt eine Befehls- und Verarbeitungslogik zur Vektorpermutation. Die Befehls- und Verarbeitungslogik kann in einem Out-of-Order-Prozessor implementiert sein. In der folgenden Beschreibung werden zahlreiche spezifische Details, wie Verarbeitungslogik, Prozessortypen, mikroarchitektonische Bedingungen, Ereignisse, Bereitstellungsmechanismen und dergleichen, bereitgestellt, um ein gründlicheres Verständnis von Ausführungsformen der vorliegenden Offenbarung zu bieten. Es ist jedoch für Fachleute klar, dass die Ausführungsformen ohne derartige spezifische Details ausgeführt werden können. Darüber hinaus wurden einige wohlbekannte Strukturen, Schaltkreise und dergleichen nicht gezeigt, um ein unnötiges Verschleiern von Ausführungsformen der vorliegenden Offenbarung zu vermeiden.
  • Obwohl die folgenden Ausführungsformen in Bezug auf einen Prozessor beschrieben werden, sind andere Ausführungsformen auf andere Arten von integrierten Schaltkreisen und Logikeinrichtungen anwendbar. Ähnliche Techniken und Lehren von Ausführungsformen der vorliegenden Offenbarung können auf andere Arten von Schaltkreisen oder Halbleitereinrichtungen angewendet werden, die von einem höheren Pipelinedurchsatz und einer verbesserten Leistung profitieren können. Die Lehren von Ausführungsformen der vorliegenden Offenbarung sind auf einen beliebigen Prozessor oder eine beliebige Maschine anwendbar, die Datenmanipulationen durchführt. Die Ausführungsformen sind jedoch nicht auf Prozessoren oder Maschinen beschränkt, die 512-Bit-, 256-Bit-, 128-Bit-, 64-Bit-, 32-Bit- oder 16-Bit-Datenoperationen durchführen, und können auf einen beliebigen Prozessor oder eine beliebige Maschine angewandt werden, in dem bzw. der eine Manipulation oder eine Verwaltung von Daten durchgeführt werden kann. Darüber hinaus bietet die folgende Beschreibung Beispiele und die begleitenden Zeichnungen zeigen verschiedene Beispiele zum Zweck der Veranschaulichung. Diese Beispiele sollten jedoch nicht in einem einschränkenden Sinn ausgelegt werden, da sie lediglich Beispiele für Ausführungsformen der vorliegenden Offenbarung liefern sollen, anstatt eine erschöpfende Liste aller möglichen Implementierungen von Ausführungsformen der vorliegenden Offenbarung bereitzustellen.
  • Obwohl die Beispiele unten eine Befehlshandhabung und -verteilung im Kontext von Ausführungseinheiten und Logikschaltkreisen beschreiben, können andere Ausführungsformen der vorliegenden Offenbarung mithilfe eines Datenelements oder von Befehlen erreicht werden, die auf einem maschinenlesbaren greifbaren Medium gespeichert sind, die bei Ausführung durch eine Maschine die Maschine veranlassen, Funktionen durchzuführen, die mit mindestens einer Ausführungsform der vorliegenden Offenbarung übereinstimmen. In einer Ausführungsform sind Funktionen, die mit Ausführungsformen der vorliegenden Offenbarung assoziiert sind, in maschinenausführbaren Befehlen ausgeführt. Die Befehle können verwendet werden, um einen Universal- oder Spezial-Prozessor, der mit den Befehlen programmiert sein kann, zu veranlassen, die Schritte der vorliegenden Offenbarung auszuführen. Ausführungsformen der vorliegenden Offenbarung können als ein Computerprogrammprodukt oder Software bereitgestellt werden, das bzw. die ein maschinen- oder computerlesbares Medium mit darauf gespeicherten Befehlen enthalten kann, die verwendet werden können, um einen Computer (oder andere elektronische Einrichtungen) zu programmieren, um eine oder mehrere Operationen nach Ausführungsformen der vorliegenden Offenbarung durchzuführen. Ferner können Schritte von Ausführungsformen der vorliegenden Offenbarung durch spezifische Hardwarekomponenten, die Logik mit fester Funktion zum Durchführen der Schritte enthalten, oder durch eine beliebige Kombination aus programmierten Computerkomponenten und Hardwarekomponenten mit fester Funktion durchgeführt werden.
  • Befehle, die verwendet werden, um Ausführungsformen der vorliegenden Offenbarung durchzuführen, können in einem Arbeitsspeicher im System gespeichert sein, wie DRAM, Zwischenspeicher, Flashspeicher oder einem anderen Speicher. Ferner können die Befehle über ein Netzwerk oder mittels anderer computerlesbarer Medien verteilt werden. Deshalb kann ein maschinenlesbares Medium einen beliebigen Mechanismus zum Speichern oder Übertragen von Informationen in einer von einer Maschine (z. B. einem Computer) lesbaren Form enthalten, aber ist nicht auf Floppy-Disketten, optische Platten, schreibgeschützte Compact Discs (CD-ROMs) und magnetooptische Platten, schreibgeschützten Arbeitsspeicher (ROMs), Arbeitsspeicher mit wahlfreiem Zugriff (RAM), löschbaren programmierbaren schreibgeschützten Arbeitsspeicher (EPROM), elektrisch löschbaren programmierbaren schreibgeschützten Arbeitsspeicher (EEPROM), magnetische oder optische Karten, Flashspeicher oder einen greifbaren maschinenlesbaren Speicher beschränkt, der bei der Übertragung von Informationen über das Internet über elektrische, optische, akustische oder andere Formen von propagierten Signalen (z. B. Trägerwellen, Infrarotsignalen, Digitalsignalen usw.) verwendet wird. Dementsprechend kann das computerlesbare Medium eine beliebige Art von greifbarem maschinenlesbarem Medium enthalten, das zum Speichern oder Übertragen von elektronischen Befehlen oder Informationen in einer Form geeignet ist, die von einer Maschine (z. B. einem Computer) gelesen werden kann.
  • Ein Design kann verschiedene Phasen durchlaufen, von der Erstellung zur Simulation zur Herstellung. Daten, die ein Design darstellen, können das Design auf eine Anzahl an Art und Weisen darstellen. Erstens kann die Hardware unter Verwendung einer Hardwarebeschreibungssprache oder einer anderen funktionalen Beschreibungssprache dargestellt werden, wie es in Simulationen nützlich sein kann. Zusätzlich kann ein Modell auf Schaltkreisebene mit Logik und/oder Transistorgattern in einigen Phasen des Designprozesses hergestellt werden. Ferner können Designs in irgendeiner Phase ein Niveau an Daten erreichen, die die physische Platzierung von verschiedenen Vorrichtungen im Hardwaremodell darstellen. In Fällen, in denen irgendwelche Halbleiterfertigungstechniken verwendet werden, können die Daten, die das Hardwaremodell darstellen, die Daten sein, die das Vorhandensein oder Fehlen verschiedener Merkmale auf verschiedenen Maskenschichten für Masken angeben, die zur Herstellung des integrierten Schaltkreises verwendet werden. In einer beliebigen Darstellung des Designs können die Daten in einer beliebigen Form eines maschinenlesbaren Mediums gespeichert werden. Ein Arbeitsspeicher oder ein magnetischer oder optischer Speicher wie eine Platte kann das maschinenlesbare Medium sein, um Informationen zu speichern, die über eine optische oder elektrische Welle übertragen werden, die moduliert oder anderweitig erzeugt wird, um derartige Informationen zu übertragen. Wenn eine elektrische Trägerwelle übertragen wird, die den Code oder das Design anzeigt oder trägt, in dem Ausmaß, in dem ein Kopieren, Puffern oder erneutes Übertragen des elektrischen Signals durchgeführt wird, kann eine neue Kopie gemacht werden. Deshalb kann ein Kommunikationsanbieter oder ein Netzanbieter einen Gegenstand, wie Informationen, die in eine Trägerwelle codiert sind und Techniken der Ausführungsformen der vorliegenden Offenbarung ausbilden, zumindest temporär auf einem greifbaren, maschinenlesbaren Medium speichern.
  • In modernen Prozessoren können eine Anzahl von verschiedenen Ausführungseinheiten verwendet werden, um eine Vielfalt von Code und Befehlen zu verarbeiten und auszuführen. Einige Befehle können möglicherweise schneller abgeschlossen werden, während andere eine Anzahl an Taktzyklen zum Abschließen benötigen können. Je schneller der Durchsatz von Befehlen, desto besser die Gesamtleistung des Prozessors. Deshalb wäre es vorteilhaft, so viele Befehle so schnell wie möglich auszuführen. Es kann jedoch bestimmte Befehle geben, die eine größere Komplexität aufweisen und in Bezug auf Ausführungszeit und Prozessorressourcen mehr benötigen können, wie Gleitkommabefehle, Lade-/Speicheroperationen, Datenbewegungen usw.
  • Da immer mehr Computersysteme in Internet-, Text- und Multimediaanwendungen verwendet werden, wurde mit der Zeit zusätzliche Prozessorunterstützung eingeführt. In einer Ausführungsform kann ein Befehlssatz mit einer oder mehreren Computerarchitekturen assoziiert sein, die Datentypen, Befehle, Registerarchitektur, Adressierungsarten, Arbeitsspeicherarchitektur, Unterbrechungs- und Ausnahmebehandlung und externe Eingabe und Ausgabe (E/A) enthalten.
  • In einer Ausführungsform kann die Befehlssatzarchitektur (ISA) durch eine oder mehrere Mikroarchitekturen implementiert sein, was Prozessorlogik und Schaltkreise enthalten kann, die verwendet werden, um einen oder mehrere Befehlssätze zu implementieren. Dementsprechend können Prozessoren mit unterschiedlichen Mikroarchitekturen zumindest einen Abschnitt eines gemeinsamen Befehlssatzes gemeinsam nutzen. Zum Beispiel implementieren Intel® Pentium 4-Prozessoren, Intel® Core™-Prozessoren und Prozessoren von Advanced Micro Devices, Inc. in Sunnyvale, Kalifornien, nahezu identische Versionen des x86-Befehlssatzes (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden), weisen jedoch verschiedene interne Konstruktionen auf. Gleichermaßen können Prozessoren, die von anderen Prozessorentwicklungsunternehmen konstruiert sind, wie ARM Holdings, Ltd., MIPS oder deren Lizenznehmer oder Anwender, können zumindest einen Abschnitt eines gemeinsamen Befehlssatzes gemeinsam nutzen, aber können verschiedene Prozessordesigns enthalten. Zum Beispiel kann die gleiche Registerarchitektur der ISA auf unterschiedliche Weise in unterschiedlichen Mikroarchitekturen unter Verwendung neuer oder hinlänglich bekannter Techniken implementiert werden, einschließlich dedizierter physischer Register, wobei ein oder mehrere dynamisch zugeordnete physische Register einen Registerumbenennungsmechanismus verwenden (z. B. die Verwendung einer Registeraliastabelle (RAT), eines Umordnungspuffers (ROB) und einer Stilllegungsregisterdatei. In einer Ausführungsform können Register einen oder mehrere Register, Registerarchitekturen, Registerdateien oder andere Registersätze enthalten, die durch einen Softwareprogrammierer adressierbar sein können oder auch nicht.
  • Ein Befehl kann eine oder mehrere Befehlsformate enthalten. In einer Ausführungsform kann ein Befehlsformat verschiedene Felder (Anzahl von Bits, Position von Bits usw.) anzeigen, um unter anderem die Operation, die durchgeführt werden soll und die Operanden anzugeben, an denen diese Operation durchgeführt werden soll. In einer weiteren Ausführungsform können einige Befehlsformate ferner durch Befehlsvorlagen (oder Teilformate) definiert sein. Beispielsweise können die Befehlsvorlagen eines bestimmten Befehlsformats definiert sein, unterschiedliche Teilmengen der Felder des Befehlsformats aufzuweisen, und/oder definiert sein, ein bestimmtes Feld anders interpretiert aufzuweisen. In einer Ausführungsform kann ein Befehl unter Verwendung eines Befehlsformats (und falls definiert, in einer bestimmten der Befehlsvorlagen dieses Befehlsformats) ausgedrückt werden und gibt die Operation und die Operanden an, die die Operation bearbeiten wird, oder weist auf diese hin.
  • Wissenschaftliche, finanzielle, autovektorisierte Universal-, RMS- (Erkennung, Mining und Synthese) und visuelle und Multimediaanwendungen (z. B. 2D/3D-Grafiken, Bildverarbeitung, Videokomprimierung/Dekomprimierung, Spracherkennungsalgorithmen und Audiomanipulation) können erfordern, dass die gleiche Operation an einer großen Anzahl an Datenobjekten durchgeführt wird. In einer Ausführungsform bezeichnet Single Instruction Multiple Data (SIMD) einen Befehlstyp, der einen Prozessor veranlasst, eine Operation an mehreren Datenelementen durchzuführen. SIMD-Technologie kann in Prozessoren verwendet werden, die die Bits in einem Register logisch in eine Anzahl an Datenelementen mit fester Größe oder variabler Größe aufteilen können, von denen jedes einen separaten Wert repräsentiert. Beispielsweise können die Bits in einem 64-Bit-Register als ein Quelloperand organisiert sein, der vier separate 16-Bit-Datenelemente beinhaltet, von denen jedes einen separaten 16-Bit-Wert repräsentiert. Dieser Datentyp kann als ein ,gepackter` Datentyp oder ein ,Vektor`-Datentyp bezeichnet werden und Operanden dieses Datentyps können als gepackte Datenoperanden oder Vektoroperanden bezeichnet werden. In einer Ausführungsform kann ein gepacktes Datenobjekt oder ein Vektor eine Folge von gepackten Datenelementen sein, die innerhalb eines einzelnen Registers gespeichert sind, und ein gepackter Datenoperand oder ein Vektoroperand kann ein Quell- oder Zieloperand eines SIMD-Befehls (oder ein ,gepackter Datenbefehl' oder ein ,Vektorbefehl`) sein. In einer Ausführungsform gibt ein SIMD-Befehl eine einzige Vektoroperation an, die an zwei Quellvektoroperanden durchzuführen ist, um einen Zielvektoroperanden (der auch als ein Ergebnisvektoroperand bezeichnet wird) mit der gleichen oder einer anderen Größe, mit der gleichen oder einer anderen Anzahl an Datenelementen und in der gleichen oder einer anderen Reihenfolge der Datenelemente zu generieren.
  • SIMD-Technologie, wie die von den Prozessoren Intel® Core™ mit einem Befehlssatz, der x86-, MMX™-, Streaming-SIMD-Extensions(SSE)-, SSE2-, SSE3-, SSE4.1- und SSE4.2-Befehle enthält, eingesetzte, ARM-Prozessoren, wie die Prozessorfamilie ARM Cortex® mit einem Befehlssatz, der die Vector-Floating-Point(VFP)- und/oder NEON-Befehle enthält, und MIPS-Prozessoren, wie die Prozessorfamilie Loongson, die vom Institut für Rechentechnologie (ICT) der Chinesischen Akademie der Wissenschaften entwickelt wurde, hat eine wesentliche Verbesserung in der Anwendungsleistung ermöglicht (Core™ und MMX™ sind eingetragene Marken oder Marken von Intel Corporation in Santa Clara, Kalifornien).
  • In einer Ausführungsform können Ziel- und Quellregister/Daten generische Begriffe sein, um die Quelle und das Ziel der entsprechenden Daten oder Operation zu repräsentieren. In einigen Ausführungsformen können sie durch Register, Arbeitsspeicher oder andere Speicherbereiche implementiert werden, die andere Namen oder Funktionen als die gezeigten aufweisen. Beispielsweise kann in einer Ausführungsform „ZIEL1“ ein temporäres Speicherregister oder ein anderer Speicherbereich sein, wohingegen „QUELLE1“ und „QUELLE2“ ein erstes und ein zweites Quellen-Speicherregister oder ein anderer Speicherbereich sein können und so weiter. In anderen Ausführungsformen können zwei oder mehr der QUELL- und ZIEL-Speicherbereiche verschiedenen Datenspeicherelementen innerhalb des gleichen Speicherbereichs entsprechen (z.B. einem SIMD-Register). In einer Ausführungsform kann eines der Quellregister auch als ein Zielregister fungieren, beispielsweise durch Zurückschreiben des Ergebnisses einer an den ersten und den zweiten Quelldaten durchgeführten Operation in eines der zwei Quellregister, die als ein Zielregister dienen.
  • 1A ist ein Blockdiagramm eines beispielhaften Computersystems, das mit einem Prozessor gebildet ist und Ausführungseinheiten enthalten kann, um einen Befehl auszuführen, nach Ausführungsformen der vorliegenden Offenbarung. System 100 kann eine Komponente, wie einen Prozessor 102 enthalten, um Ausführungseinheiten einzusetzen, die Logik enthalten, um Algorithmen zum Verarbeiten von Daten durchzuführen, nach der vorliegenden Offenbarung, wie in der hierin beschriebenen Ausführungsform. Das System 100 kann für Verarbeitungssysteme repräsentativ sein, die auf den von Intel Corporation in Santa Clara, Kalifornien, erhältlichen Mikroprozessoren PENTIUM® III, PENTIUM® 4, Xeon™, Itanium®, XScale™ und/oder StrongARM™ beruhen, obwohl andere Systeme (einschließlich PCs mit anderen Mikroprozessoren, Konstruktions-Arbeitsplatzrechner, Set-Top-Boxen und dergleichen) ebenfalls verwendet werden können. In einer Ausführungsform kann das Beispielsystem 100 eine Version des Betriebssystems WINDOWS™ ausführen, das von Microsoft Corporation in Redmond, Washington, erhältlich ist, obwohl andere Betriebssysteme (zum Beispiel UNIX und Linux), eingebettete Software und/oder grafische Benutzeroberflächen ebenfalls verwendet werden können. Deshalb sind Ausführungsformen der vorliegenden Offenbarung nicht auf eine beliebige spezifische Kombination von Hardwareverschaltung und Software beschränkt.
  • Ausführungsformen sind nicht auf Computersysteme beschränkt. Ausführungsformen der vorliegenden Offenbarung können in anderen Vorrichtungen, wie tragbaren Vorrichtungen und eingebetteten Anwendungen, verwendet werden. Einige Beispiele für tragbare Vorrichtungen enthalten Mobiltelefone, Internetprotokollvorrichtungen, Digitalkameras, Organizer (PDAs) und tragbare PCs. Eingebettete Anwendungen können einen Mikrocontroller, einen digitalen Signalprozessor (DSP), ein Ein-Chip-System, Netzwerkcomputer (NetPC), Set-Top-Boxen, Netzwerkknoten, Fernnetz-Switches (WAN-Switches) oder ein beliebiges anderes System enthalten, das eine oder mehrere Befehle nach mindestens einer Ausführungsform ausführen kann.
  • Das Computersystem 100 kann einen Prozessor 102 enthalten, der eine oder mehrere Ausführungseinheiten 108 enthalten kann, um einen Algorithmus durchzuführen, um mindestens einen Befehl nach einer Ausführungsform der vorliegenden Offenbarung auszuführen. Eine Ausführungsform kann im Kontext eines Desktop- oder Serversystems mit einem einzelnen Prozessor beschrieben werden, aber andere Ausführungsformen können in einem Mehrprozessorsystem enthalten sein. Das System 100 kann ein Beispiel einer ,Knoten'-Systemarchitektur sein. Das System 100 kann einen Prozessor 102 zum Verarbeiten von Datensignalen enthalten. Der Prozessor 102 kann einen Computer-Mikroprozessor mit komplexem Befehlssatz (CISC-Mikroprozessor), einen Rechen-Mikroprozessor mit reduziertem Befehlssatz (RISC-Mikroprozessor), einen Very-Long-Instruction-Word(VLIW)-Mikroprozessor, einen Prozessor, der eine Kombination von Befehlssätzen implementiert, oder eine beliebige andere Prozessoreinrichtung enthalten, wie zum Beispiel einen digitalen Signalprozessor. In einer Ausführungsform kann der Prozessor 102 an einen Prozessorbus 110 gekoppelt sein, der Datensignale zwischen dem Prozessor 102 und anderen Komponenten im System 100 übertragen kann. Die Elemente des Systems 100 können herkömmliche Funktionen durchführen, die Fachleuten auf dem Gebiet wohlbekannt sind.
  • In einer Ausführungsform kann der Prozessor 102 einen internen Zwischenspeicher von Level 1 (L1-Zwischenspeicher) 104 enthalten. Abhängig von der Architektur kann der Prozessor 102 einen einzelnen internen Zwischenspeicher oder mehrere Ebenen von internen Zwischenspeichern aufweisen. In einer anderen Ausführungsform kann der Zwischenspeicher extern zum Prozessor 102 residieren. Andere Ausführungsformen können auch eine Kombination von sowohl internen als auch externen Zwischenspeichern enthalten, abhängig von der bestimmten Implementierung und den bestimmten Anforderungen. Eine Registerdatei 106 kann unterschiedliche Arten von Daten in verschiedenen Registern speichern, einschließlich ganzzahliger Register, Gleitkomma-Register, Statusregister und Befehlszeigerregister.
  • Die Ausführungseinheit 108, die Logik enthält, um ganzzahlige und Gleitkomma-Operationen durchzuführen, residiert ebenfalls im Prozessor 102. Der Prozessor 102 kann auch einen Mikrocode-ROM (ucode-ROM) enthalten, der Mikrocode für bestimmte Makrobefehle speichert. In einer Ausführungsform kann die Ausführungseinheit 108 Logik enthalten, um einen gepackten Befehlssatz 109 zu handhaben. Durch Aufnehmen des gepackten Befehlssatzes 109 in den Befehlssatz eines Universalprozessors 102, zusammen mit zugehöriger Verschaltung, um die Befehle auszuführen, können die Operationen, die von vielen Multimediaanwendungen verwendet werden, unter Verwendung gepackter Daten in einem Universalprozessor 102 durchgeführt werden. Deshalb können viele Multimediaanwendungen durch Verwendung der vollständigen Breite des Datenbusses eines Prozessors zum Durchführen von Operationen an gepackten Daten beschleunigt und effizienter ausgeführt werden. Dies kann möglicherweise den Bedarf eliminieren, kleinere Einheiten von Daten über den Datenbus des Prozessors zu übertragen, um eine oder mehrere Operationen durchführen, ein Datenelement auf einmal.
  • Ausführungsformen einer Ausführungseinheit 108 können auch in Mikrocontrollern, eingebetteten Prozessoren, Grafikvorrichtungen, DSPs und anderen Arten von Logikschaltkreisen verwendet werden. Das System 100 kann einen Arbeitsspeicher 120 enthalten. Der Arbeitsspeicher 120 kann als eine dynamische Arbeitsspeichervorrichtung mit wahlfreiem Zugriff (DRAM-Vorrichtung), eine statische Arbeitsspeichervorrichtung mit wahlfreiem Zugriff (SRAM-Vorrichtung), eine Flashspeichervorrichtung oder eine andere Arbeitsspeichervorrichtung implementiert sein. Der Arbeitsspeicher 120 kann Befehle und/oder Daten speichern, die durch Datensignale repräsentiert sind, die vom Prozessor 102 ausgeführt werden können.
  • Ein Systemlogikchip 116 kann an den Prozessorbus 110 und den Arbeitsspeicher 120 gekoppelt sein. Der Systemlogikchip 116 kann einen Arbeitsspeichersteuerungsknoten (MCH) enthalten. Der Prozessor 102 kann mit dem MCH 116 über einen Prozessorbus 110 kommunizieren. Der MCH 116 kann dem Arbeitsspeicher 120 einen Arbeitsspeicherpfad mit hoher Bandbreite 118 zur Befehls- und Datenspeicherung und zur Speicherung von Grafikbefehlen, Daten und Texturen bereitstellen. Der MCH 116 kann Datensignale zwischen dem Prozessor 102, dem Arbeitsspeicher 120 und anderen Komponenten im System 100 leiten und die Datensignale zwischen dem Prozessorbus 110, dem Arbeitsspeicher 120 und einer System-E/A 122 überbrücken. In einigen Ausführungsformen kann der System-Logikchip 116 einen Grafikanschluss zum Koppeln an eine Grafiksteuerung 112 bereitstellen. Der MCH 116 kann über eine Arbeitsspeicherschnittstelle 118 an den Arbeitsspeicher 120 gekoppelt sein. Die Grafikkarte 112 kann über eine Accelerated-Graphics-Port(AGP)-Zwischenverbindung 114 an den MCH 116 gekoppelt sein.
  • Das System 100 kann einen proprietären Knotenschnittstellenbus 122 verwenden, um den MCH 116 an den E/A-Steuerungsknoten (ICH) 130 zu koppeln. In einer Ausführungsform kann der ICH 130 einigen E/A-Einrichtungen direkte Verbindungen über einen lokalen E/A-Bus bereitstellen. Der lokale E/A-Bus kann einen Hochgeschwindigkeits-E/A-Bus zum Verbinden von Peripheriegeräten mit dem Arbeitsspeicher 120, dem Chipsatz und dem Prozessor 102 enthalten. Beispiele können die Audiosteuerung, einen Firmwareknoten (Flash-BIOS) 128, einen drahtlosen Sende-Empfänger 126, einen Datenspeicher 124, eine Alt-E/A-Steuerung, die Benutzereingabe- und Tastaturschnittstellen beinhaltet, einen seriellen Erweiterungsanschluss, wie einen Universal Serial Bus (USB) und eine Netzwerksteuerung 134 enthalten. Die Datenspeichervorrichtung 124 kann ein Festplattenlaufwerk, ein Diskettenlaufwerk, eine CD-ROM-Vorrichtung, eine Flashspeichervorrichtung oder eine andere Massenspeichervorrichtung umfassen.
  • Für eine andere Ausführungsform eines Systems kann ein Befehl nach einer Ausführungsform mit einem Ein-Chip-System verwendet werden. Eine Ausführungsform eines Ein-Chip-Systems umfasst einen Prozessor und einen Arbeitsspeicher. Der Arbeitsspeicher eines derartigen Systems kann einen Flashspeicher enthalten. Der Flashspeicher kann sich auf demselben Chip wie der Prozessor und andere Systemkomponenten befinden. Zusätzlich können sich auch andere Logikblöcke wie eine Arbeitsspeichersteuerung oder eine Grafiksteuerung auf einem Ein-Chip-System befinden.
  • 1B veranschaulicht ein Datenverarbeitungssystem 140, das die Prinzipien von Ausführungsformen der vorliegenden Offenbarung implementiert. Es ist für Fachleute offensichtlich, dass die hierin beschriebenen Ausführungsformen mit alternativen Verarbeitungssystemen arbeiten können, ohne vom Geltungsbereich von Ausführungsformen der Offenbarung abzuweichen.
  • Das Computersystem 140 umfasst einen Verarbeitungskern 159 zum Durchführen mindestens eines Befehls nach einer Ausführungsform. In einer Ausführungsform repräsentiert der Verarbeitungskern 159 eine Verarbeitungseinheit eines beliebigen Typs von Architektur, einschließlich unter anderem einer Architektur vom CISC-, RISC- oder VLIW-Typ. Der Verarbeitungskern 159 kann auch zur Herstellung in einer oder mehreren Prozesstechnologien geeignet sein und kann durch Repräsentation auf einem maschinenlesbaren Medium in hinreichendem Detail geeignet sein, eine derartige Herstellung zu ermöglichen.
  • Der Verarbeitungskern 159 umfasst eine Ausführungseinheit 142, einen Satz von Registerdateien 145 und einen Decoder 144. Der Verarbeitungskern 159 kann auch zusätzliche Verschaltung (nicht gezeigt) enthalten, die für das Verständnis von Ausführungsformen der vorliegenden Offenbarung unnötig sein können. Die Ausführungseinheit 142 kann vom Verarbeitungskern 159 empfangene Befehle ausführen. Zusätzlich zum Durchführen typischer Prozessorbefehle kann die Ausführungseinheit 142 Befehle in einem gepackten Befehlssatz 143 zum Durchführen von Befehlen an gepackten Datenformaten durchführen. Der gepackte Befehlssatz 143 kann Befehle zum Durchführen von Ausführungsformen der Offenbarung und anderer gepackter Befehle enthalten. Die Ausführungseinheit 142 kann über einen internen Bus an die Registerdatei 145 gekoppelt sein. Die Registerdatei 145 kann einen Speicherbereich auf dem Verarbeitungskern 159 zum Speichern von Informationen, einschließlich Daten, repräsentieren. Wie bereits erwähnt, versteht sich, dass der Speicherbereich die gepackten Daten speichern kann, nicht kritisch sein könnte. Die Ausführungseinheit 142 kann an den Decoder 144 gekoppelt sein. Der Decoder 144 kann vom Verarbeitungskern 159 empfangene Befehle in Steuersignale und/oder Mikrocode-Einstiegspunkte decodieren. Als Reaktion auf diese Steuersignale und/oder Mikrocode-Einstiegspunkte führt die Ausführungseinheit 142 die passenden Operationen durch. In einer Ausführungsform kann der Decoder den Opcode des Befehls interpretieren, was anzeigen wird, welche Operation an den entsprechenden Daten durchgeführt werden soll, die innerhalb des Befehls angezeigt werden.
  • Der Verarbeitungskern 159 kann an einen Bus 141 zum Kommunizieren mit verschiedenen anderen Systemeinrichtungen gekoppelt sein, die unter anderem beispielsweise eine synchrone dynamische Arbeitsspeichersteuerung mit wahlfreiem Zugriff (SDRAM-Steuerung) 146, statische Arbeitsspeichersteuerung mit wahlfreiem Zugriff (SRAM) 147, Burst-Flashspeicherschnittstelle 148, eine Personal-Computer-Memory-Card-International-Association(PCMCIA)/Compactflash(CF)-Kartensteuerung 149, Flüssigkristallanzeigen(LCD)-Steuerung 150, eine Steuerung für direkten Speicherzugriff (DMA) 151 und eine alternative Busmasterschnittstelle 152 enthalten kann. In einer Ausführungsform kann das Datenverarbeitungssystem 140 auch eine E/A-Brücke 154 zum Kommunizieren mit verschiedenen E/A-Einrichtungen über einen E/A-Bus 153 umfassen. Derartige E/A-Einrichtungen können unter anderem beispielsweise einen Universal Asynchronous Receiver/Transmitter (UART) 155, einen Universal Serial Bus (USB)156, einen drahtlosen Bluetooth-UART 157 und eine E/A-Erweiterungsschnittstelle 158 enthalten.
  • Eine Ausführungsform des Datenverarbeitungssystems 140 stellt mobile, Netzwerk- und/oder drahtlose Kommunikationen und einen Verarbeitungskern 159 bereit, der SIMD-Operationen einschließlich einer Textstring-Vergleichsoperation durchführen kann. Der Verarbeitungskern 159 kann mit verschiedenen Audio-, Video-, Bildgebungs- und Kommunikationsalgorithmen programmiert sein, einschließlich diskreter Transformationen, wie einer Walsh-Hadamard-Transformation, einer schnellen FourierTransformation (FFT), einer diskreten Cosinustransformation (DCT) und deren jeweiligen Umkehrtransformationen; Komprimierungs-/Dekomprimierungstechniken wie einer Farmtransformation, Videocodierungs-Bewegungsabschätzung oder Videodecodierungs-Bewegungskompensierung; und Modulations-/Demodulationsfunktionen (MODEM-Funktionen), wie Puls-Code-Modulation (PCM).
  • 1C veranschaulicht andere Ausführungsformen eines Datenverarbeitungssystems, das SIMD-Textstring-Vergleichsoperationen durchführt. In einer Ausführungsform kann das Datenverarbeitungssystem 160 einen Hauptprozessor 166, einen SIMD-Coprozessor 161, einen Zwischenspeicher 167 und ein Eingabe/Ausgabe-System 168 enthalten. Das Eingabe/Ausgabe-System 168 kann optional an eine drahtlose Schnittstelle 169 gekoppelt sein. Der SIMD-Coprozessor 161 kann Operationen durchführen, die Befehle nach einer Ausführungsform enthalten. In einer Ausführungsform kann der Verarbeitungskern 170 zur Herstellung in einer oder mehreren Prozesstechnologien geeignet sein und kann durch Repräsentation auf einem maschinenlesbaren Medium in hinreichendem Detail geeignet sein, die Herstellung der Gesamtheit oder eines Teils des Datenverarbeitungssystems 160 einschließlich des Verarbeitungskerns 170 zu ermöglichen.
  • In einer Ausführungsform umfasst der SIMD-Coprozessor 161 eine Ausführungseinheit 162 und einen Satz von Registerdateien 164. Eine Ausführungsform des Hauptprozessors 165 umfasst einen Decoder 165, um Befehle des Befehlssatzes 163 einschließlich Befehle nach einer Ausführungsform zur Ausführung durch die Ausführungseinheit 162 zu erkennen. In anderen Ausführungsformen umfasst der SIMD-Coprozessor 161 auch zumindest einen Teil des Decoders 165, um Befehle des Befehlssatzes 163 zu decodieren. Der Verarbeitungskern 170 kann auch zusätzliche Verschaltung (nicht gezeigt) enthalten, die für das Verständnis von Ausführungsformen der vorliegenden Offenbarung unnötig sein können.
  • Im Betrieb führt der Hauptprozessor 166 einen Strom an Datenverarbeitungsbefehlen durch, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern, einschließlich Interaktionen mit dem Zwischenspeicher 167 und dem Eingabe/Ausgabe-System 168. Im Strom der Datenverarbeitungsbefehle können SIMD-Coprozessorbefehle eingebettet sein. Der Decoder 165 des Hauptprozessors 166 erkennt, dass diese SIMD-Coprozessorbefehle von einem Typ sind, der von einem angebundenen SIMD-Coprozessor 161 ausgeführt werden soll. Dementsprechend gibt der Hauptprozessor 166 diese SIMD-Coprozessorbefehle (oder Steuersignale, die die SIMD-Coprozessorbefehle repräsentieren) auf dem Coprozessorbus 166 aus. Vom Coprozessorbus 166 können diese Befehle von beliebigen angebundenen SIMD-Coprozessoren empfangen werden. In diesem Fall kann der SIMD-Coprozessor 161 beliebige empfangene SIMD-Coprozessorbefehle akzeptieren und ausführen, die für ihn bestimmt sind.
  • Daten können über die drahtlose Schnittstelle 169 zum Verarbeiten durch die SIMD-Coprozessorbefehle empfangen werden. Für ein Beispiel kann Sprachkommunikation in Form eines digitalen Signals empfangen werden, das von den SIMD-Coprozessorbefehlen verarbeitet werden kann, um digitale Audioproben erneut zu generieren, die für die Sprachkommunikation repräsentativ sind. Für ein anderes Beispiel kann komprimiertes Audio und/oder Video in Form eines digitalen Bitstroms empfangen werden, der von den SIMD-Coprozessorbefehlen verarbeitet werden kann, um digitale Audioproben und/oder Bewegungsvideoframes erneut zu generieren. In einer Ausführungsform des Verarbeitungskerns 170 können der Hauptprozessor 166 und ein SIMD-Coprozessor 161 in einen einzigen Verarbeitungskern 170 integriert sein, der eine Ausführungseinheit 162, einen Satz von Registerdateien 164 und einen Decoder 165 umfasst, um Befehle des Befehlssatzes 163 zu erkennen, der Befehle nach einer Ausführungsform enthält.
  • 2 ist ein Blockdiagramm der Mikroarchitektur für einen Prozessor 200, der Logikschaltkreise enthalten kann, um Befehle auszuführen, nach Ausführungsformen der vorliegenden Offenbarung. In einigen Ausführungsformen kann ein Befehl nach einer Ausführungsform implementiert sein, um an Datenelementen zu operieren, die Größen von Byte, Wort, Doppelwort, Quadwort usw. aufweisen, sowie Datentypen wie ganzzahlige und Gleitkomma-Datentypen mit einzelner und . doppelter Genauigkeit. In einer Ausführungsform kann ein In-Order-Front-End 201 einen Teil des Prozessors 200 implementieren, der auszuführende Befehle abruft und die Befehle vorbereitet, die später in der Prozessorpipeline zu verwenden sind. Das Front-End 201 kann mehrere Einheiten enthalten. In einer Ausführungsform ruft eine Befehlsvorabrufeinheit 226 Befehle aus einem Arbeitsspeicher ab und speist die Befehle in einen Befehlsdecoder 228, der die Befehle wiederum decodiert oder interpretiert. Beispielsweise decodiert der Decoder in einer Ausführungsform einen empfangenen Befehl in eine oder mehrere Operationen, die „Mikrobefehle“ oder „Mikrooperationen“ genannt werden (auch Mikro-Op oder uops genannt), die die Maschine ausführen kann. In anderen Ausführungsformen parst der Decoder den Befehl in einen Opcode und entsprechende Daten- und Steuerfelder, die von der Mikroarchitektur verwendet werden können, um Operationen nach einer Ausführungsform durchzuführen. In einer Ausführungsform kann ein Ablaufverfolgungszwischenspeicher 230 decodierte uops in Programm-geordnete Sequenzen oder Ablaufverfolgungen in einer uop-Warteschlange 234 zur Ausführung sammeln. Wenn der Ablaufverfolgungszwischenspeicher 230 auf einen komplexen Befehl trifft, stellt der Mikrocode-ROM 232 die uops bereit, die benötigt werden, um die Operation abzuschließen.
  • Einige Befehle können in eine einzelne Mikro-Op umgewandelt werden, wohingegen andere mehrere Mikro-Ops benötigen, um die volle Operation abzuschließen. In einer Ausführungsform, falls mehr als vier Mikro-Ops benötigt werden, um einen Befehl abzuschließen, kann der Decoder 228 auf den Mikrocode-ROM 232 zugreifen, um den Befehl durchzuführen. In einer Ausführungsform kann ein Befehl in eine kleine Anzahl von Mikro-Ops zum Verarbeiten am Befehlsdecoder 228 decodiert werden. In einer anderen Ausführungsform kann ein Befehl innerhalb des Mikrocode-ROM 232 gespeichert werden, sollte eine Anzahl von Mikro-Ops nötig sein, um die Operation zu erzielen. Der Ablaufverfolgungszwischenspeicher 230 bezieht sich auf einen Einstiegspunkt eines programmierbaren Logikarrays (PLA), um einen korrekten Mikrobefehlszeiger zum Lesen der Mikrocode-Sequenzen zu ermitteln, um einen oder mehrere Befehle nach einer Ausführungsform vom Mikrocode-ROM 232 abzuschließen. Nachdem der Mikrocode-ROM 232 das Sequenzieren von Mikro-Ops für einen Befehl abgeschlossen hat, kann das Front-End 201 der Maschine mit dem Abrufen von Mikro-Ops aus dem Ablaufverfolgungszwischenspeicher 230 fortfahren.
  • Eine Out-of-Order-Ausführungsengine 203 kann Befehle zur Ausführung vorbereiten. Die Out-of-Order-Ausführungslogik weist eine Anzahl von Puffern auf, um den Ablauf von Befehlen zu glätten und neu zu ordnen, um die Leistung zu optimieren, während sie die Pipeline durchlaufen und zur Ausführung geplant werden. Die Zuteilungslogik ordnet die Maschinenpuffer und Ressourcen zu, die jede uop benötigt, um ausgeführt zu werden. Die Registerumbenennungslogik benennt Logikregister in Einträge in einer Registerdatei um. Die Zuteilungseinheit ordnet auch einen Eintrag für jede uop in einer der zwei uop-Warteschlangen zu, eine für Arbeitsspeicheroperationen und eine für Nicht-Arbeitsspeicheroperationen, vor den Befehlsplanern: ein Arbeitsspeicherplaner, ein schneller Planer 202, ein langsamer/allgemeiner Gleitkomma-Planer 204 und ein einfacher Gleitkomma-Planer 206. Die uop-Planer 202, 204, 206 ermitteln, wann eine uop zur Ausführung bereit ist, auf Grundlage der Bereitschaft ihrer abhängigen Eingangsregister-Operandenquellen und der Verfügbarkeit der Ausführungsressourcen, die die uops benötigen, um ihre Operation abzuschließen. Ein schneller Planer 202 einer Ausführungsform kann auf jeder Hälfte des Haupttaktzyklus planen, während die anderen Planer nur einmal pro Hauptprozessor-Taktzyklus planen können. Die Planer vermitteln, damit die Verteilungsports uops zur Ausführung planen.
  • Registerdateien 208, 210 können zwischen den Planern 202, 204, 206 und Ausführungseinheiten 212, 214, 216, 218, 220, 222, 224 in einem Ausführungsblock 211 angeordnet sein. Jede der Registerdateien 208, 210 führen Glanzzahl- bzw. Gleitkomma-Operationen durch. Jede Registerdatei 208, 210 kann ein Umgehungsnetz enthalten, das gerade abgeschlossene Ergebnisse, die noch nicht in die Registerdatei geschrieben wurden, umgehen oder an neue abhängige uops weiterleiten kann. Die Ganzzahl-Registerdatei 208 und die Gleitkomma-Registerdatei 210 können Daten mit der anderen kommunizieren. In einer Ausführungsform kann die Ganzzahl-Registerdatei 208 in zwei separate Registerdateien aufgeteilt werden, eine Registerdatei für niedrig-rangige zweiunddreißig Datenbits und eine zweite Registerdatei für hochrangige zweiunddreißig Datenbits. Die Gleitkomma-Registerdatei 210 kann 128 Bit breite Einträge enthalten, da Gleitkomma-Befehle üblicherweise Operanden in einer Breite von 64 bis 128 Bits aufweisen.
  • Der Ausführungsblock 211 kann die Ausführungseinheiten 212, 214, 216, 218, 220, 222, 224 enthalten. Die Ausführungseinheiten 212, 214, 216, 218, 220, 222, 224 könne die Befehle ausführen. Der Ausführungsblock 211 kann die Registerdateien 208, 210 enthalten, die die ganzzahligen und Gleitkomma-Datenoperandenwerte speichern, die die Mikrobefehle zur Ausführung benötigen. In einer Ausführungsform kann der Prozessor 200 eine Anzahl von Ausführungseinheiten umfassen: eine Adressengenerierungseinheit (AGU) 212, eine AGU 214, eine schnelle ALU 216, eine schnelle ALU 218, eine langsame ALU 220, ein Gleitkomma-ALU 222, eine Gleitkomma-Bewegungseinheit 224. In einer anderen Ausführungsform können die Gleitkomma-Ausführungsblöcke 222, 224 Gleitkomma-, MMX-, SIMD- und SSE- oder andere Operationen ausführen. In noch einer anderen Ausführungsform kann die Gleitkomma-ALU 222 einen 64-Bit-mal-64-Bit-Gleitkomma-Dividierer enthalten, um Divisions-, Wurzel- und Restglied-Mikroops auszuführen. In verschiedenen Ausführungsformen können Befehle, die einen Gleitkommawert involvieren, mit der Gleitkomma-Hardware gehandhabt werden. In einer Ausführungsform können ALU-Operationen an die Hochgeschwindigkeits-ALU-Ausführungseinheiten 216, 218 übergeben werden. Die Hochgeschwindigkeits-ALUs 216, 218 können schnelle Operationen mit einer effektiven Latenz von einem halben Taktzyklus ausführen. In einer Ausführungsform gehen die meisten komplexen ganzzahligen Operationen an die langsame ALU 220, da die langsame ALU 220 Ganzzahl-Ausführungshardware für Operationstypen langer Latenz enthalten kann, wie eine Multiplikator-, Verschiebungs-, Flag-Logik- und Verzweigungsverarbeitung. Arbeitsspeicher-Lade/Speicheroperationen können von den AGUs 212, 214 ausgeführt werden. In einer Ausführungsform können ganzzahlige ALUs 216, 218, 220 ganzzahlige Operationen an 64-Bit-Datenoperanden durchführen. In anderen Ausführungsformen können die ALUs 216, 218, 220 implementiert sein, eine Vielfalt von Datenbitgrößen einschließlich sechzehn, zweiunddreißig, 128, 256 usw. zu unterstützen. Gleichermaßen können die Gleitkommaeinheiten 222, 224 implementiert sein, einen Bereich an Operanden mit Bits verschiedener Breiten zu unterstützen. In einer Ausführungsform können die Gleitkommaeinheiten 222, 224 an 128 Bit breiten gepackten Datenoperanden zusammen mit SIMD- und Multimediabefehlen zu operieren.
  • In einer Ausführungsform verteilen die uops-Planer 202, 204, 206 abhängige Operationen, bevor die Ausführung der übergeordneten Last abgeschlossen ist. Da uops im Prozessor 200 spekulativ geplant und ausgeführt werden können, kann der Prozessor 200 auch Logik enthalten, um Arbeitsspeicherfehlzugriffe zu handhaben. Falls eine Datenlast im Datenzwischenspeicher verfehlt wird, kann es abhängige Operationen in Schwebe in der Pipeline geben, die den Planer mit temporär falschen Daten verlassen haben. Ein Wiederholungsmechanismus verfolgt Befehle, die falsche Daten verwenden, und führt diese erneut durch. Nur die abhängigen Operationen müssen möglicherweise wiederholt werden und es kann erlaubt werden, dass die abhängigen abgeschlossen werden. Die Planer und der Wiederholungsmechanismus einer Ausführungsform eines Prozessors können auch konstruiert sein, Befehlssequenzen für Textstring-Vergleichsoperationen zu fangen.
  • Der Begriff „Register“ kann sich auf interne Prozessorspeicherstellen beziehen, die als Teil von Befehlen verwendet werden können, um Operanden zu identifizieren. Anders ausgedrückt können Register diejenigen sein, die von außerhalb des Prozessors (aus der Perspektive eines Programmierers) verwendbar sind. In einigen Ausführungsformen können Register jedoch nicht auf einen bestimmten Schaltkreistyp beschränkt sein. Vielmehr kann ein Register Daten speichern, Daten bereitstellen und die hierin beschriebenen Funktionen durchführen. Die hierin beschriebenen Register können durch Verschaltung innerhalb eines Prozessors unter Verwendung einer beliebigen Anzahl verschiedener Techniken implementiert werden, wie dedizierte physische Register, dynamisch zugeordnete physische Register unter Verwendung von Registerumbenennung, Kombinationen von dedizierten und dynamisch zugeordneten physischen Registern usw. In einer Ausführungsform speichern ganzzahlige Register 32-Bit-Ganzzahldaten. Eine Registerdatei einer Ausführungsform enthält auch acht Multimedia-SIMD-Register für gepackte Daten. Für die Diskussionen unten können die Register als Datenregister verstanden werden, die konstruiert sind, gepackte Daten zu halten, wie 64 Bit breite MMX™-Register (in einigen Fällen auch als ,mm'-Register bezeichnet) in Mikroprozessoren, die mit MMX-Technologie von Intel Corporation in Santa Clara, Kalifornien. Diese MMX-Register, die sowohl in Ganzzahl- als auch Gleitkomma-Form erhältlich sind, können mit gepackten Datenelementen arbeiten, die SIMD- und SSE-Befehle begleiten. Gleichermaßen können 128 Bit breite XMM-Register, die mit SSE2-, SSE3-, SSE4- oder darüber hinaus gehender Technologie (allgemein als „SSEx“ bezeichnet) verbunden sind, können derartige gepackte Datenoperanden halten. In einer Ausführungsform müssen die Register beim Speichern gepackter Daten und ganzzahliger Daten nicht zwischen den zwei Datentypen unterscheiden. In einer Ausführungsform können ganze Zahlen und Gleitkomma in derselben Registerdatei oder unterschiedlichen Registerdateien enthalten sein. Ferner können in einer Ausführungsform Gleitkomma- und ganzzahlige Daten in unterschiedlichen Registern oder denselben Registern gespeichert werden.
  • In den Beispielen der folgenden Figuren kann eine Anzahl von Datenoperanden beschrieben werden. 3A veranschaulicht verschiedene gepackte Datentypdarstellungen in Multimediaregistern nach Ausführungsformen der vorliegenden Offenbarung. 3A veranschaulicht Datentypen für ein gepacktes Byte 310, ein gepacktes Wort 320 und ein gepacktes Doppelwort (dword) 330 für 128 Bit breite Operanden. Das gepackte Byteformat 310 dieses Beispiels kann 128 Bit lang sein und enthält sechzehn gepackte Byte-Datenelemente. Ein Byte kann zum Beispiel als acht Datenbits definiert sein. Informationen für jedes Byte-Datenelement können in Bit 7 bis einschließlich Bit 0 für Byte 0, Bit 15 bis einschließlich Bit 8 für Byte 1, Bit 23 bis einschließlich Bit 16 für Bye 2 und schließlich Bit 120 bis einschließlich Bit 127 für Byte 15 gespeichert sein. Deshalb können alle verfügbaren Bits im Register verwendet werden. Diese Speicheranordnung erhöht die Speichereffizienz des Prozessors. Ebenso kann bei sechzehn zugegriffenen Datenelementen eine Operation nun parallel an sechzehn Datenelementen durchgeführt werden.
  • Im Allgemeinen kann ein Datenelement ein individuelles Datenstück enthalten, das in einem einzelnen Register oder einer einzelnen Arbeitsspeicherposition mit anderen Datenelementen der gleichen Länge gespeichert ist. In gepackten Datensequenzen, die mit SSEx-Technologie verbunden sind, kann die Anzahl von Datenelementen, die in einem XMM-Register gespeichert sind, 128 Bits dividiert durch die Länge eines individuellen Datenelements in Bits sein. Gleichermaßen kann in gepackten Datensequenzen, die mit MMX- und SSE-Technologie verbunden sind, die Anzahl von Datenelementen, die in einem MMX-Register gespeichert sind, 64 Bits dividiert durch die Länge eines individuellen Datenelements in Bits sein. Obwohl die in 3A veranschaulichten Datentypen 128 Bit lang sein können, können Ausführungsformen der vorliegenden Offenbarung auch mit 64 Bit breiten oder anders bemessenen Operanden operieren. Das gepackte Wortformat 320 dieses Beispiels kann 128 Bit lang sein und enthält acht gepackte Wort-Datenelemente. Jedes gepackte Wort beinhaltet sechzehn Bits an Informationen. Das gepackte Doppelwortformat 330 von 3A kann 128 Bit lang sein und enthält vier gepackte Doppelwort-Datenelemente. Jedes gepackte Doppelwort-Datenelement beinhaltet zweiunddreißig Bits an Informationen. Ein gepacktes Quadwort kann 128 Bits lang sein und zwei gepackte Quadwort-Datenelemente beinhalten.
  • 3B veranschaulicht mögliche Datenspeicherformate in Registern nach Ausführungsformen der vorliegenden Offenbarung. Jedes gepackte Datenelement kann mehr als ein unabhängiges Datenelement enthalten. Drei gepackte Datenformate sind veranschaulicht; gepackt halb 341, gepackt einzeln 342 und gepackt doppelt 343. Eine Ausführungsform von gepackt halb 341, gepackt einzeln 342 und gepackt doppelt 343 beinhaltet Festkomma-Datenelemente. Für eine andere Ausführungsform können eines oder mehrere von gepackt halb 341, gepackt einzeln 342 und gepackt doppelt 343 Gleitkomma-Datenelemente beinhalten. Eine Ausführungsform von gepackt halb 341 kann 128 Bits lang sein und acht 16-Bit-Datenelemente enthalten. Eine Ausführungsform von gepackt einzeln 342 kann 128 Bits lang sein und vier 32-Bit-Datenelemente enthalten. Eine Ausführungsform von gepackt doppelt 343 kann 128 Bits lang sein und zwei 64-Bit-Datenelemente enthalten. Es ist klar, dass derartige gepackte Datenformate ferner auf andere Registerlängen erweitert werden können, zum Beispiel auf 96 Bits, 160 Bits, 192 Bits, 224 Bits, 256 Bits, 512 Bits oder mehr.
  • 3C veranschaulicht verschiedene vorzeichenbehaftete und vorzeichenlose gepackte Datentypdarstellungen in Multimediaregistern nach Ausführungsformen der vorliegenden Offenbarung. Eine vorzeichenlose gepackte Bytedarstellung 344 veranschaulicht die Speicherung eines vorzeichenlosen Bytes in einem SIMD-Register. Informationen für jedes Byte-Datenelement können in Bit 7 bis einschließlich Bit 0 für Byte 0, Bit 15 bis einschließlich Bit 8 für Byte 1, Bit 23 bis einschließlich Bit 16 für Bye 2 und schließlich Bit 120 bis einschließlich Bit 127 für Byte 15 gespeichert sein. Deshalb können alle verfügbaren Bits im Register verwendet werden. Diese Speicheranordnung kann die Speichereffizienz des Prozessors erhöhen. Ebenso kann bei sechzehn zugegriffenen Datenelementen eine Operation nun auf parallele Weise an sechzehn Datenelementen durchgeführt werden. Eine vorzeichenbehaftete gepackte Bytedarstellung 345 veranschaulicht die Speicherung eines vorzeichenbehafteten gepackten Bytes. Es ist anzumerken, dass das achte Bit jedes Bytedatenelements der Vorzeichenindikator sein kann. Eine vorzeichenlose gepackte Wortdarstellung 346 veranschaulicht, wie Wort sieben bis einschließlich Wort null in einem SIMD-Register gespeichert werden können. Eine vorzeichenbehaftete gepackte Wortdarstellung 347 kann der vorzeichenlosen gepackten registerinternen Wortdarstellung 346 ähnlich sein. Es ist anzumerken, dass das sechzehnte Bit jedes Wortdatenelements der Vorzeichenindikator sein kann. Eine vorzeichenlose gepackte Doppelwortdarstellung 348 zeigt, wie Doppelwort-Datenelemente gespeichert werden. Eine vorzeichenbehaftete gepackte Doppelwortdarstellung 349 kann der vorzeichenlosen gepackten registerinternen Doppelwortdarstellung 348 ähnlich sein. Es ist anzumerken, dass das notwendige Vorzeichenbit das zweiunddreißigste Bit jedes Doppelwort-Datenelements sein kann.
  • 3D veranschaulicht eine Ausführungsform einer Operationscodierung (Opcode). Ferner kann das Format 360 Register/Arbeitsspeicheroperanden-Adressierungsmodi enthalten, die einem Typ von Opcodeformat entsprechen, das in „IA-32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference“ beschrieben wird, das von Intel Corporation, Santa Clara, Kalifornien, im World Wide Web (www) unter intel.com/design/litcentr erhältlich ist. In einer Ausführungsform kann ein Befehl durch ein oder mehrere von Feldern 361 und 362 codiert werden. Bis zu zwei Operandenpositionen pro Befehl können identifiziert werden, einschließlich bis zu zwei Quelloperandenidentifikatoren 364 und 365. In einer Ausführungsform kann der Zieloperandenidentifikator 366 der gleiche wie der Quelloperandenidentifikator 364 sein, wohingegen sie in anderen Ausführungsformen unterschiedlich sein können. In einer anderen Ausführungsform kann der Zieloperandenidentifikator 366 der gleiche wie der Quelloperandenidentifikator 365 sein, wohingegen sie in anderen Ausführungsformen unterschiedlich sein können. In einer Ausführungsform kann einer der von den Quelloperandenidentifikatoren 364 und 365 identifizierten Quelloperanden von den Ergebnissen der Textstring-Vergleichsoperationen überschrieben werden, wohingegen der Identifikator 364 in anderen Ausführungsformen einem Quellregisterelement entspricht und der Identifikator 365 einem Zielregisterelement entspricht. In einer Ausführungsform können die Operandenidentifikatoren 364 und 365 32-Bit- oder 64-Bit-Quellen- und Zieloperanden identifizieren.
  • 3E veranschaulicht ein anderes mögliches Operationscodierformat (Opcodeformat) 370 mit vierzig oder mehr Bits nach Ausführungsformen der vorliegenden Offenbarung. Das Opcodeformat 370 entspricht Opcodeformat 360 und umfasst ein optionales Präfixbyte 378. Ein Befehl nach einer Ausführungsform kann durch ein oder mehrere der Felder 378, 371 und 372 codiert werden. Bis zu zwei Operandenpositionen pro Befehl können von den Quelloperandenidentifikatoren 374 und 375 und durch das Präfixbyte 378 identifiziert werden. In einer Ausführungsform kann das Präfixbyte 378 verwendet werden, um 32-Bit- oder 64-Bit-Quellen- und Zieloperanden zu identifizieren. In einer Ausführungsform kann der Zieloperandenidentifikator 376 der gleiche wie der Quelloperandenidentifikator 374 sein, wohingegen sie in anderen Ausführungsformen unterschiedlich sein können. Für eine andere Ausführungsform kann der Zieloperandenidentifikator 376 der gleiche wie der Quelloperandenidentifikator 375 sein, wohingegen sie in anderen Ausführungsformen unterschiedlich sein können. In einer Ausführungsform bearbeitet ein Befehl einen oder mehrere der von den Operandenidentifikatoren 374 und 375 identifizierten Operanden und ein oder mehrere der von den Operandenidentifikatoren 374 und 375 identifizierten Operanden können durch die Ergebnisse des Befehls überschrieben werden, wohingegen in anderen Ausführungsformen von den von den Operandenidentifikatoren 374 und 375 identifizierte Operanden in ein anderes Datenelement in einem anderen Register geschrieben werden können. Die Opcodeformate 360 und 370 ermöglichen eine Adressierung von Register zu Register, von Arbeitsspeicher zu Register, von Register durch Arbeitsspeicher, von Register durch Register, von Register durch unmittelbar, von Register zu Arbeitsspeicher, was teilweise durch die MOD-Felder 363 und 373 und optional durch Skalen-Index-Basis und Verschiebungsbytes angegeben wird.
  • 3F veranschaulicht noch ein anderes mögliches Operationscodierformat (Opcodeformat) nach Ausführungsformen der vorliegenden Offenbarung. Arithmetische 64-Bit-Operationen vom Typ Single Instruction Multiple Data (SIMD) können durch einen Coprozessor-Datenverarbeitungs(CDP)-Befehl durchgeführt werden. Ein Operationscodierformat (Opcodeformat) 380 zeigt einen derartigen CDP-Befehl mit CDP-Opcodefeldern 382 und 389. Der Typ von CDP-Befehl, für eine andere Ausführungsform, Operationen können durch ein oder mehrere der Felder 383, 384, 387 und 388 codiert werden. Bis zu drei Operandenpositionen pro Befehl können identifiziert werden, einschließlich bis zu zwei Quelloperandenidentifikatoren 385 und 390 und eines Zieloperandenidentifikators 386. Eine Ausführungsform des Coprozessors kann acht, sechzehn, zweiunddreißig und 64-Bit-Werte bearbeiten. In einer Ausführungsform kann ein Befehl an ganzzahligen Datenelementen durchgeführt werden. In einigen Ausführungsformen kann ein Befehl bedingt ausgeführt werden, unter Verwendung eines Bedingungsfelds 381. Für einige Ausführungsformen können Quelldatengrößen durch das Feld 383 codiert sein. In einigen Ausführungsformen kann eine Erkennung von null (Z), negativ (N), Übertrag (C) und Überlauf (V) an SIMD-Feldern erfolgen. Für einige Befehle kann der Sättigungstyp durch das Feld 384 codiert werden.
  • 4A ist ein Blockdiagramm, das eine In-Order-Pipeline und eine Registerumbenennungsphase, Out-of-Order-Ausgabe-/Ausführungs-Pipeline veranschaulicht, nach Ausführungsformen der vorliegenden Offenbarung. 4B ist ein Blockdiagramm, das einen In-Oder-Architekturkern und eine Registerumbenennungslogik, eine Out-of-Order-Ausgabe-/Ausführungslogik veranschaulicht, die in einem Prozessor aufzunehmen sind, nach Ausführungsformen der vorliegenden Offenbarung. Die durchgezogen umrandeten Kästchen in 4A veranschaulichen die In-Order-Pipeline, während die gestrichelt umrandeten Kästchen die Registerumbenennungs-, Out-of-Order-Ausgabe-/Ausführungs-Pipeline veranschaulichen. Gleichermaßen veranschaulichen die durchgezogen umrandeten Kästchen in 4B die In-Order-Architekturlogik, während die gestrichelt umrandeten Kästchen die Registerumbenennungs- und Out-of-Order-Ausgabe-/Ausführungs-Logik veranschaulichen.
  • In 4A kann eine Prozessor-Pipeline 400 eine Abrufphase 402, eine Längendecodierphase 404, eine Decodierphase 406, eine Zuordnungsphase 408, eine Umbenennungsphase 410, eine Planungsphase (auch als Versand- oder Ausgabephase bekannt) 412, eine Registerlese-/Speicherlesephase 414, eine Ausführungsphase 416, eine Zurückschreib-/Speicherschreibphase 418, eine Ausnahmebehandlungsphase 422 und eine Festschreibphase 424 enthalten.
  • In 4B bezeichnen Pfeile eine Kopplung zwischen zwei oder mehr Einheiten und die Richtung des Pfeils zeigt eine Richtung des Datenflusses zwischen diesen Einheiten an. 4B zeigt einen Prozessorkern 490, der eine Front-End-Einheit 430 enthält, die an eine Ausführengineeinheit 450 gekoppelt ist, und beide können an eine Arbeitsspeichereinheit 470 gekoppelt sein.
  • Der Kern 490 kann ein Reduced-Instruction-Set-Computing(RISC)-Kern, ein Complex-Instruction-Set-Computing(CISC)-Kern, ein Very-Long-Instruction-Word(VLIW)-Kern oder ein Hybrid- oder alternativer Kerntyp sein. In einer Ausführungsform kann der Kern 490 ein Kern für Spezialzwecke sein, wie zum Beispiel ein Netzwerk- oder Kommunikationskern, eine Komprimierungsengine, ein Grafikkern oder dergleichen.
  • Die Front-End-Einheit 430 kann eine Verzweigungsvorhersageeinheit 432 enthalten, die an eine Befehlszwischenspeichereinheit 434 gekoppelt ist. Die Befehlszwischenspeichereinheit 434 kann an einen Befehlsübersetzungspuffer (TLB) 436 gekoppelt sein. Der TLB 436 kann an eine Befehlsabrufeinheit 438 gekoppelt sein, die an eine Decodiereinheit 440 gekoppelt ist. Die Decodiereinheit 440 (oder der Decoder) kann Befehle decodieren und als eine Ausgabe eine oder mehrere MikroOperationen, Mikrocode-Eintrittspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale generieren, die von den ursprünglichen Befehlen decodiert oder abgeleitet werden können oder die diese auf andere Weise widerspiegeln können. Der Decoder kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Beispiele von geeigneten Mechanismen enthalten Nachschlagetabellen, Hardwareimplementierungen, programmierbare Logikarrays (PLAs), schreibgeschützte Mikrocode-Arbeitsspeicher (Mikrocode-ROMs) usw., sind jedoch nicht darauf beschränkt. In einer Ausführungsform kann die Befehlszwischenspeichereinheit 434 ferner an eine Level-2(L2)-Zwischenspeichereinheit 476 in der Arbeitsspeichereinheit 470 gekoppelt sein. Die Decodiereinheit 440 kann in der Ausführungsengineeinheit 450 an eine Umbenennungs-/Zuteilungseinheit 452 gekoppelt sein.
  • Die Ausführungsengineeinheit 450 kann die an eine Stilllegungseinheit 454 gekoppelte Umbenennungs-/Zuteilungseinheit 452 und einen Satz von einer oder mehreren Planungseinheiten 456 enthalten. Die Planungseinheiten 456 stellen eine beliebige Anzahl von unterschiedlichen Planern dar, einschließlich Reservierungsstationen, zentrales Befehlsfenster usw. Die Planungseinheiten 456 können an physische Registerdateieinheiten 458 gekoppelt sein. Jede der physischen Registerdateieinheiten 458 repräsentiert eine oder mehrere physische Registerdateien, von denen verschiedene einen oder mehrere verschiedene Datentypen speichern, wie skalare ganze Zahl, skalares Gleitkomma, gepackte ganze Zahl, gepacktes Gleitkomma, vektorielle ganze Zahl, vektorielles Gleitkomma usw., Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. Physische Registerdateieinheiten 458 können von der Stilllegungseinheit 154 überlappt werden, um verschiedene Arten zu veranschaulichen, auf die eine Registerumbenennung und Out-of-Order-Ausführung implementiert werden kann (z. B. unter Verwendung eines oder mehrerer Umordnungspuffer und einer oder mehrerer Stilllegungregisterdateien, unter Verwendung einer oder mehrerer zukünftiger Dateien, eines oder mehrerer Verlaufspuffer, und einer oder mehrerer Stilllegungregisterdateien; unter Verwendung von Registerabbildungen und eines Pools von Registern; usw.). Im Allgemeinen können die Architekturregister von außerhalb des Prozessors oder aus der Perspektive eines Programmierers sichtbar sein. Die Register können jedoch nicht auf irgendeinen bekannten bestimmten Schaltkreistyp beschränkt sein. Verschiedene unterschiedliche Arten von Registern können geeignet sein, solange sie Daten wie hierin beschrieben speichern und bereitstellen. Beispiele von geeigneten Registern enthalten unter anderem dedizierte physische Register, dynamisch unter Verwendung von Registerumbenennung zugeordnete physische Register, Kombinationen von dedizierten und dynamisch zugeordneten physischen Registern usw. Die Stilllegungseinheit 454 und die physischen Registerdateieinheiten 458 können an Ausführungscluster 460 gekoppelt sein. Die Ausführungscluster 460 können einen Satz von einer oder mehreren Ausführungseinheiten 162 und einen Satz von einer oder mehreren Arbeitsspeicherzugriffseinheiten 464 enthalten. Die Ausführungseinheiten 462 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und an verschiedenen Datentypen (z. B. skalares Gleitkomma, gepackte ganze Zahl, gepacktes Gleitkomma, vektorielle ganze Zahl, vektorielles Gleitkomma) durchführen. Während einige Ausführungsformen eine Reihe von Ausführungseinheiten enthalten können, die für spezifische Funktionen oder Funktionssätze vorgesehen sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten enthalten, die jeweils alle Funktionen durchführen. Die Planungseinheiten 456, physischen Registerdateieinheiten 458 und Ausführungscluster 460 sind als möglicherweise mehrzahlig gezeigt, da bestimmte Ausführungsformen separate Pipelines für bestimmte Arten von Daten/Operationen erstellen (z. B. eine Pipeline für skalare ganze Zahlen, eine Pipeline für skalares Gleitkomma/gepackte ganze Zahlen/gepacktes Gleitkomma/vektorielle ganze Zahlen/vektorielles Gleitkomma und/oder eine Arbeitsspeicherzugriffs-Pipeline, die jeweils ihre eigene Planungseinheit, physische Registerdateieinheit und/oder ihren eigenen Ausführungscluster aufweisen - und im Fall einer separaten Arbeitsspeicherzugriffs-Pipeline können bestimmte Ausführungsformen implementiert sein, in denen nur der Ausführungscluster dieser Pipeline die Arbeitsspeicherzugriffseinheiten 464 aufweist). Es sollte auch klar sein, dass, wo separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-Order-Ausgabe-/Ausführungs- und der Rest In-Order-Pipelines sein können.
  • Der Satz von Arbeitsspeicherzugriffseinheiten 464 kann an die Arbeitsspeichereinheit 470 gekoppelt sein, die eine Daten-TLB-Einheit 472 enthalten kann, die an eine Daten-Zwischenspeichereinheit 474 gekoppelt ist, die an eine Level-2(L2)-Zwischenspeichereinheit 476 gekoppelt ist. In einer beispielhaften Ausführungsform können die Arbeitsspeicherzugriffseinheiten 464 eine Ladeeinheit, eine Adressspeichereinheit und eine Datenspeichereinheit enthalten, die alle an die Daten-TLB-Einheit 472 in der Arbeitsspeichereinheit 470 gekoppelt sein können. Die L2-Zwischenspeichereinheit 476 kann an eine oder mehrere andere Zwischenspeicher-Levels und letztendlich an einen Hauptspeicher gekoppelt sein.
  • Beispielsweise kann die beispielhafte Kernarchitektur für Registerumbenennung, Out-Of-Order-Ausgabe/-Ausführung die Pipeline 400 wie folgt implementieren: 1) Der Befehlsabruf 438 kann den Abruf und die Längendecodierphasen 402 und 404 durchführen; 2) die Decodiereinheit 440 kann die Decodierphase 406 durchführen; 3) die Umbenennungs-/Zuteilungseinheit 452 kann die Zuteilungsphase 408 und die Umbenennungsphase 410 durchführen; 4) die Planereinheiten 456 können die Planungsphase 412 durchführen; 5) die physischen Registerdateieinheiten 458 und die Arbeitsspeichereinheit 470 können die Registerlese-/Speicherlesephase 414 durchführen; der Ausführungscluster 460 kann die Ausführungsphase 416 durchführen; 6) die Arbeitsspeichereinheit 470 und die physischen Registerdateieinheiten 458 können die Zurückschreib-/Speicherschreibphase 418 durchführen; 7) verschiedene Einheiten können an der Durchführung der Ausnahmebehandlungsphase 422 beteiligt sein; und 8) die Stilllegungseinheit 454 und die physischen Registerdateieinheiten 458 können die Festschreibphase 424 durchführen.
  • Der Kern 490 kann eine oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, Kalifornien; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) von ARM Holdings in Sunnyvale, Kalifornien).
  • Es sollte klar sein, dass der Kern Multithreading (ein Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) auf vielfältige Weisen unterstützen kann. Multithreading-Unterstützung kann beispielsweise einschließlich durch Zeitscheiben-Multithreading, simultanes Multithreading (wobei ein einziger physischer Kern für jeden der Threads, für den dieser physischer Kern simultanes Multithreading durchführt, einen logischen Kern bereitstellt) oder eine Kombination davon, durchgeführt werden. Eine derartige Kombination kann beispielsweise Abrufen und Decodieren in Zeitscheiben und nachfolgendes simultanes Multithreading enthalten, wie zum Beispiel in der Hyperthreading-Technologie von Intel®.
  • Während Registerumbenennen im Kontext einer Out-of-Order-Ausführung beschrieben werden kann, sollte klar sein, dass das Registerumbenennen in einer In-Order-Architektur verwendet werden kann. Während die illustrierte Ausführungsform des Prozessors auch separate Befehls- und Datenzwischenspeichereinheiten 434/474 und eine gemeinsam genutzte L2-Zwischenspeichereinheit 476 enthalten kann, können andere Ausführungsformen einen einzigen internen Zwischenspeicher für sowohl Befehle als auch Daten aufweisen, wie zum Beispiel einen internen Level-1(L1)-Zwischenspeicher oder mehrere Levels von internem Zwischenspeicher. In einigen Ausführungsformen kann das System eine Kombination von einem internen Zwischenspeicher und einem externen Zwischenspeicher, der sich außerhalb des Kerns und/oder des Prozessors befinden kann, enthalten. In anderen Ausführungsformen kann der gesamte Zwischenspeicher extern zum Kern und/oder zum Prozessor sein.
  • 5A ist ein Blockdiagramm eines Prozessors 500 nach Ausführungsformen der vorliegenden Offenbarung. In einer Ausführungsform kann der Prozessor 500 einen Mehrkernprozessor enthalten. Der Prozessor 500 kann einen Systemagenten 510 enthalten, der kommunikativ an einen oder mehrere Kerne 502 gekoppelt ist. Ferner können die Kerne 502 und der Systemagent 510 kommunikativ an einen oder mehrere Zwischenspeicher 506 gekoppelt sein. Die Kerne 502, der Systemagent 510 und die Zwischenspeicher 506 können kommunikativ über eine oder mehrere Arbeitsspeichersteuereinheiten 552 gekoppelt sein. Ferner können die Kerne 502, der Systemagent 510 und die Zwischenspeicher 506 kommunikativ über die Arbeitsspeichersteuereinheiten 552 an ein Grafikmodul 560 gekoppelt sein.
  • Der Prozessor 500 kann einen beliebigen geeigneten Mechanismus zum Zwischenverbinden der Kerne 502, des Systemagenten 510 und der Zwischenspeicher 506 und des Grafikmoduls 560 enthalten. In einer Ausführungsform kann der Prozessor 500 eine ringbasierte Zwischenverbindungseinheit 508 enthalten, um die Kerne 502, den Systemagenten 510 und die Zwischenspeicher 506 und das Grafikmodul 560 miteinander zu verbinden. In anderen Ausführungsformen kann der Prozessor 500 eine beliebige Anzahl von wohlbekannten Techniken zum Verbinden derartiger Einheiten miteinander enthalten. Die ringbasierte Zwischenverbindungseinheit 508 kann die Arbeitsspeichersteuereinheiten 552 einsetzen, um Zwischenverbindungen zu ermöglichen.
  • Der Prozessor 500 kann eine Arbeitsspeicherhierarchie enthalten, die einen oder mehrere Levels von Zwischenspeichern innerhalb der Kerne, eine oder mehrere gemeinsam genutzte Zwischenspeichereinheiten wie die Zwischenspeicher 506 oder externen Arbeitsspeicher (nicht gezeigt) umfasst, die an den Satz der integrierten Speichercontrollereinheiten 552 gekoppelt sind. Die Zwischenspeicher 506 können einen beliebigen geeigneten Zwischenspeicher enthalten. In einer Ausführungsform können die Zwischenspeicher 506 einen oder mehrere Zwischenspeicher mittlerer Levels enthalten, wie Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Zwischenspeicherlevel, einen Last-Level-Zwischenspeicher (LLC) und/oder Kombinationen davon.
  • In verschiedenen Ausführungsformen können ein oder mehrere der Kerne 502 Multithreading durchführen. Der Systemagent 510 kann Komponenten zum Koordinieren und Betreiben der Kerne 502 enthalten. Die Systemagenteneinheit 510 kann zum Beispiel eine Energiesteuereinheit (PCU) enthalten. Die PCU kann Logik und Komponenten, die zum Regeln des Leistungszustands der Kerne 502 benötigt werden, sein oder umfassen. Der Systemagent 510 kann eine Anzeigeengine 512 zum Ansteuern eines oder mehrerer extern verbundener Anzeigen oder Grafikmodule 560 enthalten. Der Systemagent 510 kann eine Schnittstelle für Kommunikationsbusse für Grafik enthalten. In einer Ausführungsform kann die Schnittstelle durch PCI Express (PCIe) implementiert sein. In einer weiteren Ausführungsform kann die Schnittstelle durch PCI Express Graphics (PEG) 514 implementiert sein. Der Systemagent 510 kann eine Direct Media Interface (DMI) 516 enthalten. Die DMI 516 kann Verknüpfungen zwischen unterschiedlichen Brücken auf einer Hauptplatine oder einem anderen Abschnitt eines Computersystems bereitstellen. Der Systemagent 510 kann eine PCI-Brücke 518 zum Bereitstellen von PCIe-Verknüpfungen mit anderen Elementen eines Rechensystems enthalten. die PCIe-Brücke 518 kann unter Verwendung einer Arbeitsspeichersteuerung 520 und von Kohärenzlogik 522 implementiert sein.
  • Die Kerne 502 können auf beliebige geeignete Weise implementiert sein. Die Kerne 502 können in Bezug auf einen Architektur- und/oder Befehlssatz homogen oder heterogen sein. In einer Ausführungsform können einige der Kerne 502 In-Order-Kerne sein, während andere Out-of-Order-Kerne sein können. In einer anderen Ausführungsform können zwei oder mehr der Kerne 502 den gleichen Befehlssatz ausführen, während andere nur einen Teilsatz dieses Befehlssatzes oder einen anderen Befehlssatz ausführen können.
  • Der Prozessor 500 kann einen Universalprozessor enthalten, wie einen Prozessor Core™ i3, i5, i7, 2 Duo und Quad, Xeon™, Itanium™, XScale™ oder StrongARM™, die von Intel Corporation in Santa Clara, Kalifornien, erhältlich sein können. Der Prozessor 500 kann von einem anderen Unternehmen bereitgestellt werden, wie ARM Holdings, Ltd, MIPS usw. Der Prozessor 500 kann einen Prozessor für Sonderzwecke enthalten, wie zum Beispiel einen Netzwerk- oder Kommunikationsprozessor, eine Komprimierungsengine, einen Grafikprozessor, einen Coprozessor, einen eingebetteten Prozessor oder Ähnliches. Der Prozessor 500 kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 500 kann ein Teil eines oder mehrerer Substrate sein und/oder kann auf einem oder mehreren Substraten unter Verwendung einer beliebigen Anzahl von Prozesstechniken wie zum Beispiel BiCMOS, CMOS oder NMOS implementiert sein.
  • In einer Ausführungsform kann ein bestimmter der Zwischenspeicher 506 von mehreren der Kerne 502 gemeinsam genutzt werden. In einer anderen Ausführungsform kann ein bestimmter der Zwischenspeicher 506 für einen der Kerne 502 dediziert sein. Die Zuordnung von Zwischenspeichern 506 zu den Kernen 502 kann von einer Zwischenspeichersteuerung oder einem anderen geeigneten Mechanismus gehandhabt werden. Ein bestimmter der Zwischenspeicher 506 kann von zwei oder mehr Kernen 502 durch Implementieren von Zeitscheiben eines bestimmten Zwischenspeichers 506 gemeinsam genutzt werden.
  • Das Grafikmodul 560 kann ein integriertes Grafikverarbeitungssubsystem implementieren. In einer Ausführungsform kann das Grafikmodul 560 einen Grafikprozessor enthalten. Ferner kann das Grafikmodul 560 eine Medienengine 565 enthalten. Die Medienengine 565 kann Mediencodierung und Videodecodierung bereitstellen.
  • 5B ist ein Blockdiagramm einer beispielhaften Implementierung eines Kerns 502 nach Ausführungsformen der vorliegenden Offenbarung. Der Kern 502 kann ein Front-End 570 enthalten, das kommunikativ an eine Out-of-Order-Engine 580 gekoppelt ist. Der Kern 502 kann über eine Zwischenspeicherhierarchie 503 kommunikativ an andere Abschnitte des Prozessors 500 gekoppelt sein.
  • Das Front-End 570 kann auf beliebige geeignete Weise implementiert sein, wie vollständig oder teilweise durch das Front-End 201, wie oben beschrieben. In einer Ausführungsform kann das Front-End 570 durch die Zwischenspeicherhierarchie 503 mit anderen Abschnitten des Prozessors 500 kommunizieren. In einer weiteren Ausführungsform kann das Front-End 570 Befehle von Abschnitten des Prozessors 500 abrufen und die Befehle vorbereiten, die später in der Prozessorpipeline verwendet werden, wenn sie an die Out-of-Order-Ausführungsengine 580 weitergeleitet werden.
  • Die Out-of-Order-Ausführungsengine 580 kann auf beliebige geeignete Weise implementiert sein, wie vollständig oder teilweise durch die Out-of-Order-Ausführungsengine 203, wie oben beschrieben. Die Out-of-Order-Ausführungsengine 580 kann vom Front-End 570 empfangene Befehle zur Ausführung vorbereiten. Die Out-of-Order-Ausführungsengine 580 kann ein Zuteilungsmodul 1282 enthalten. In einer Ausführungsform kann das Zuteilungsmodul 1282 Ressourcen des Prozessors 500 oder andere Ressourcen zuteilen, wie Register oder Puffer, um einen bestimmten Befehl auszuführen. Das Zuteilungsmodul 1282 kann Zuteilungen in Planern durchführen, wie einem Arbeitsspeicherplaner, einem schnellen Planer oder einem Gleitkomma-Planer. Derartige Planer können in 5B durch Ressourcenplaner 584 repräsentiert sein. Das Zuteilungsmodul 1282 kann vollständig oder teilweise durch die im Zusammenhang mit 2 beschriebene Zuteilungslogik implementiert werden. Ressourcenplaner 584 können ermitteln, wann ein Befehl zur Ausführung bereit ist, auf Grundlage der Bereitschaft der Quellen einer bestimmten Ressource und der Verfügbarkeit von Ausführungsressourcen, die zum Ausführen eines Befehls benötigt werden. Die Ressourcenplaner 584 können beispielsweise durch die Planer 202, 204, 206 implementiert sein, wie oben besprochen. Die Ressourcenplaner 584 können die Ausführung von Befehlen auf einer oder mehreren Ressourcen planen. In einer Ausführungsform können derartige Ressourcen intern zum Kern 502 sein und können beispielsweise als Ressourcen 586 veranschaulicht sein. In einer anderen Ausführungsform können derartige Ressourcen extern zum Kern 502 sein und können beispielsweise durch die Zwischenspeicherhierarchie 503 zugänglich sein. Ressourcen können zum Beispiel Arbeitsspeicher, Zwischenspeicher, Registerdateien oder Register enthalten. Zum Kern 502 interne Ressourcen können durch die Ressourcen 586 in 5B repräsentiert sein. Wenn nötig können Werte, die in die Ressourcen 586 geschrieben werden oder aus diesen gelesen werden, mit anderen Abschnitten des Prozessors 500 beispielsweise durch die Zwischenspeicherhierarchie 503 koordiniert werden. Wenn Befehlen Ressourcen zugeordnet werden, können sie in einen Umordnungspuffer 588 platziert werden. Der Umordnungspuffer 588 kann Befehle nachverfolgen, während sie ausgeführt werden, und kann ihre Ausführung selektiv auf Grundlage beliebiger geeigneter Kriterien des Prozessors 500 umordnen. In einer Ausführungsform kann der Umordnungspuffer 588 Befehle oder eine Reihe von Befehlen identifizieren, die unabhängig ausgeführt werden können. Derartige Befehle oder eine Reihe von Befehlen können bzw. kann parallel von anderen derartigen Befehlen ausgeführt werden. Eine Parallelausführung im Kern 502 kann von einer beliebigen geeigneten Anzahl von separaten Ausführungsblöcken oder virtuellen Prozessoren durchgeführt werden. In einer Ausführungsform können gemeinsam genutzte Ressourcen - wie Arbeitsspeicher, Register und Zwischenspeicher - für mehrere virtuelle Prozessoren innerhalb eines bestimmten Kerns 502 zugänglich sein. In anderen Ausführungsformen können gemeinsam genutzte Ressourcen für mehrere Verarbeitungsentitäten innerhalb des Prozessors 500 zugänglich sein.
  • Die Zwischenspeicherhierarchie 503 kann auf beliebige geeignete Weise implementiert sein. Beispielsweise kann die Zwischenspeicherhierarchie 503 einen oder mehrere Zwischenspeicher eines niedrigen oder mittleren Levels enthalten, wie Zwischenspeicher 572, 574. In einer Ausführungsform kann die Zwischenspeicherhierarchie 503 einen LLC 595 enthalten, der kommunikativ an die Zwischenspeicher 572, 574 gekoppelt ist. In einer anderen Ausführungsform kann der LLC 595 in einem Modul 590 implementiert sein, das für alle Verarbeitungsentitäten des Prozessors 500 zugänglich ist. In einer weiteren Ausführungsform kann ein Modul 590 in einem Uncore-Modul von Prozessoren von Intel, Inc. implementiert sein. Das Modul 590 kann Abschnitte oder Subsysteme des Prozessors 500 enthalten, die für die Ausführung des Kerns 502 notwendig sind, aber möglicherweise nicht innerhalb des Kerns 502 implementiert sein können. Abgesehen vom LLC 595, kann das Modul 590 zum Beispiel Hardwareschnittstellen, Arbeitsspeicherkohärenzkoordinatoren, Zwischenverbindungen zwischen Prozessoren, Anweisungspipelines oder Arbeitsspeichersteuerungen enthalten. Ein Zugriff auf einen RAM 599, der dem Prozessor 500 zur Verfügung steht, kann durch das Modul 590 erfolgen, und genauer durch den LLC 595. Ferner können andere Instanzen des Kerns 502 gleichermaßen auf das Modul 590 zugreifen. Eine Koordination der Instanzen des Kerns 502 kann teilweise durch das Modul 590 ermöglicht werden.
  • 6-8 können beispielhafte Systeme veranschaulichen, die zum Enthalten des Prozessors 500 geeignet sind, wohingegen 9 ein beispielhaftes Ein-Chip-System (SoC) veranschaulichen kann, das einen oder mehrere der Kerne 502 enthalten kann. Andere Systemdesigns und -implementierungen, die in der Technik für Laptops, Desktops, tragbare PCs, Organizer, Entwicklungs-Workstations, Server, Netzwerkeinrichtungen, Netzwerkknoten, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Grafikeinrichtungen, Videospieleinrichtungen, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Mediaplayer, tragbare Geräte und verschiedene andere Elektronikgeräte bekannt sind, können ebenfalls geeignet sein. Im Allgemeinen kann eine enorm große Vielfalt von Systemen oder Elektronikeinrichtungen geeignet sein, die einen Prozessor und/oder eine andere Ausführungslogik, wie hierin offenbart, einbinden.
  • 6 veranschaulicht ein Blockdiagramm eines Systems 600 nach Ausführungsformen der vorliegenden Offenbarung. Das System 600 kann einen oder mehrere Prozessoren 610, 615 enthalten, die an einen Grafikarbeitsspeicher-Steuerungsknoten (GMCH) 620 gekoppelt sein können. Der optionale Charakter der zusätzlichen Prozessoren 615 wird in 6 durch unterbrochene Linien angezeigt.
  • Jeder Prozessor 610, 615 kann eine Version des Prozessors 500 sein. Es muss jedoch angemerkt werden, dass integrierte Grafiklogik und integrierte Arbeitsspeichersteuerungseinheiten in den Prozessoren 610, 615 möglicherweise nicht existieren. 6 veranschaulicht, dass der GMCH 620 an einen Arbeitsspeicher 640 gekoppelt sein kann, der beispielsweise ein dynamischer Arbeitsspeicher mit wahlfreiem Zugriff (DRAM) sein kann. Der DRAM kann für mindestens eine Ausführungsform mit einem nichtflüchtigen Zwischenspeicher assoziiert sein.
  • Der GMCH 620 kann ein Chipsatz oder ein Abschnitt eines Chipsatzes sein. Der GMCH 620 kann mit den Prozessoren 610, 615 kommunizieren und eine Interaktion zwischen den Prozessoren 610, 615 und dem Arbeitsspeicher 640 steuern. Der GMCH 620 kann auch als eine beschleunigte Busschnittstelle zwischen den Prozessoren 610, 615 und anderen Elementen des Systems 600 fungieren. In einer Ausführungsform kommuniziert der GMCH 620 mit den Prozessoren 610, 615 über einen Mehrpunktbus, wie einen Frontside-Bus (FSB) 695.
  • Ferner kann der GMCH 620 an eine Anzeige 645 gekoppelt sein (wie eine Flachbildschirmanzeige). In einer Ausführungsform kann der GMCH 620 einen integrierten Grafikbeschleuniger enthalten. Der GMCH 620 kann ferner an einen Eingabe/Ausgabe(E/A)-Steuerungsknoten (ICH) 650 gekoppelt sein, der verwendet werden kann, um verschiedene periphere Einrichtungen an das System 600 zu koppeln. Eine externe Grafikeinrichtung 660 kann eine diskrete Grafikeinrichtung enthalten, die an den ICH 650 zusammen mit einer anderen peripheren Einrichtung 670 gekoppelt ist.
  • In anderen Ausführungsformen können zusätzliche oder unterschiedliche Prozessoren auch im System 600 vorhanden sein. Die zusätzlichen Prozessoren 610, 615 können zum Beispiel zusätzliche Prozessoren enthalten, die gleich dem Prozessor 610 sind, zusätzliche Prozessoren, die zum Prozessor 610 heterogen oder asymmetrisch sind, Beschleuniger (wie z. B. Grafikbeschleuniger oder digitale Signalverarbeitungseinheiten (DSP-Einheiten)), feldprogrammierbare Gatearrays oder einen beliebigen anderen Prozessor. Es kann eine Vielzahl an Unterschieden hinsichtlich eines Spektrums von Leistungsmetriken, einschließlich Architektur-, Mikroarchitektur-, thermischen, Energieverbrauchseigenschaften und dergleichen, zwischen den physischen Ressourcen 610, 615 geben. Diese Unterschiede können sich effektiv als eine Asymmetrie und Heterogenität unter den Prozessoren 610, 615 offenbaren. Für mindestens eine Ausführungsform können die Prozessoren 610, 615 in demselben Gehäusepaket residieren.
  • 7 veranschaulicht ein Blockdiagramm eines zweiten Systems 700 nach Ausführungsformen der vorliegenden Offenbarung. Wie in 7 gezeigt, kann das Multiprozessorsystem 700 ein Punkt-zu-Punkt-Zwischenverbindungssystem enthalten und kann einen ersten Prozessor 770 und einen zweiten Prozessor 780 enthalten, die über eine Punkt-zu-Punkt-Zwischenverbindung 750 gekoppelt sind. Jeder der Prozessoren 770 und 780 kann eine Version des Prozessors 500 als einer oder mehrere der Prozessoren 610, 615 sein.
  • Während 7 zwei Prozessoren 770, 780 veranschaulichen kann, soll klar sein, dass der Umfang der vorliegenden Offenbarung nicht darauf beschränkt ist. In anderen Ausführungsformen . können ein oder mehrere zusätzliche Prozessoren in einem bestimmten Prozessor vorhanden sein.
  • Die Prozessoren 770 und 780 sind als eine integrierte Arbeitsspeichersteuerungseinheit 772 bzw. 782 enthaltend gezeigt. Der Prozessor 770 kann auch als Teil seiner Bussteuerungseinheiten Punkt-zu-Punkt(P-P)-Schnittstellen 776 und 778 enthalten; gleichermaßen kann der zweite Prozessor 780 P-P-Schnittstellen 786 und 788 enthalten. Die Prozessoren 770, 780 können Informationen über eine Punkt-zu-Punkt(P-P)-Schnittstelle 750 unter Verwendung der P-P-Schnittstellenschaltkreise 778, 788 austauschen. Wie in 7 gezeigt, können die IMCs 772 und 782 die Prozessoren an jeweilige Arbeitsspeicher koppeln, nämlich einen Arbeitsspeicher 732 und einen Arbeitsspeicher 734, die in einer Ausführungsform Teile eines Hauptarbeitsspeichers sein können, der lokal an die jeweiligen Prozessoren angebunden ist.
  • Die Prozessoren 770, 780 können jeweils Informationen mit einem Chipsatz 790 über individuelle P-P-Schnittstellen 752, 754 unter Verwendung von Punktzu-Punkt-Schnittstellenschaltkreisen 776, 794, 786, 798 austauschen. In einer Ausführungsform kann der Chipsatz 790 auch über eine Hochleistungs-Grafikschnittstelle 739 Informationen mit einem Hochleistungs-Grafikschaltkreis 738 austauschen.
  • Ein gemeinsam genutzter Zwischenspeicher (nicht gezeigt) kann in einem der Prozessoren oder außerhalb beider Prozessoren enthalten sein, jedoch mit den Prozessoren über eine P-P-Verbindung verbunden sein, sodass die lokalen Zwischenspeicherinformationen von einem der beiden oder beiden Prozessoren im gemeinsam genutzten Zwischenspeicher gespeichert werden können, wenn ein Prozessor in einen Niedrigenergiemodus versetzt wird.
  • Der Chipsatz 790 kann über eine Schnittstelle 796 an einen ersten Bus 716 gekoppelt sein. In einer Ausführungsform kann der erste Bus 716 ein Peripheral-Component-Interconnect(PCI)-Bus oder ein Bus wie ein PCI-Express-Bus oder ein anderer E/A-Zwischenverbindungsbus der dritten Generation sein, obwohl der Umfang der vorliegenden Offenbarung dadurch nicht eingeschränkt ist.
  • Wie in 7 gezeigt, können verschiedene E/A-Einrichtungen 714 zusammen mit einer Busbrücke 718, die den ersten Bus 716 an einen zweiten Bus 720 koppelt, an den ersten Bus 716 gekoppelt sein. In einer Ausführungsform kann der zweite Bus 720 ein Low-Pin-Count(LPC)-Bus sein. Verschiedene Einrichtungen können in einer Ausführungsform mit einem zweiten Bus 720 gekoppelt sein, einschließlich zum Beispiel eine Tastatur und/oder eine Maus 722, Kommunikationseinrichtungen 727 und eine Speichereinheit 728, wie zum Beispiel ein Festplattenlaufwerk oder eine andere Massenspeichereinrichtung, die Befehle/Code und Daten 730 enthalten kann. Darüber hinaus kann ein Audio-E/A 724 an den zweiten Bus 720 gekoppelt sein. Es sei darauf hingewiesen, dass andere Architekturen möglich sein können. Zum Beispiel kann ein System statt der Punkt-zu-Punkt-Architektur von 7 einen Mehrpunktbus oder eine andere solche Architektur implementieren.
  • 8 veranschaulicht ein Blockdiagramm eines dritten Systems 800 nach Ausführungsformen der vorliegenden Offenbarung. Gleiche Elemente in den 7 und 8 tragen gleiche Referenzziffern, und bestimmte Aspekte von 7 wurden von 8 weggelassen, um ein Verdecken anderer Aspekte von 8 zu vermeiden.
  • 8 veranschaulicht, dass die Prozessoren 870, 880 eine integrierte Speicher- und E/A-Steuerlogik („CL“) 872 bzw. 882 enthalten können. Für mindestens eine Ausführungsform kann die CL 872, 882 integrierte Arbeitsspeichersteuerungseinheiten wie die oben in Verbindung mit 5 und 7 beschriebenen enthalten. Darüber hinaus CL 872, 882 kann auch E/A-Steuerlogik enthalten. 8 veranschaulicht, dass nicht nur die Arbeitsspeicher 832, 834 an die CL 872, 882 gekoppelt sein können, sondern auch, dass E/A-Einrichtungen 814 ebenfalls an die Steuerlogik 872, 882 gekoppelt sein können. Alt-E/A-Einrichtungen 815 können an den Chipsatz 890 gekoppelt sein.
  • 9 veranschaulicht ein Blockdiagramm eines SoC 900 nach Ausführungsformen der vorliegenden Offenbarung. Ähnliche Elemente in 5 tragen gleiche Referenzziffern. Gestrichelt umrandete Kästchen können außerdem optionale Merkmale an hochentwickelteren SoCs repräsentieren. Eine Zwischenverbindungseinheit 902 kann gekoppelt sein an: einen Anwendungsprozessor 910, der einen Satz von einem oder mehreren Kernen 902A-N und gemeinsam genutzte Zwischenspeichereinheiten 906 enthalten kann; eine Systemagenteneinheit 910; eine Bussteuerungseinheiten 916; eine integrierte Arbeitsspeichersteuerungseinheiten 914; einen Satz oder einen oder mehrere Medienprozessoren 920, die eine integrierte Grafiklogik 908, einen Bildprozessor 924 zum Bereitstellen von Standbild- und/oder Videokamerafunktionalität, einen Audioprozessor 926 zum Bereitstellen von Hardwareaudiobeschleunigung und einen Videoprozessor 928 zum Bereitstellen von Videocodier-/- decodierbeschleunigung enthalten kann; eine statische Arbeitsspeichereinheit mit wahlfreiem Zugriff (SRAM-Einheit) 930; eine direkte Arbeitsspeicherzugriffs(DMA)-Einheit 932; und eine Anzeigeeinheit 940 zum Koppeln an eine oder mehrere externe Anzeigen.
  • 10 veranschaulicht einen Prozessor, der eine Zentralverarbeitungseinheit (CPU) und eine Grafikverarbeitungseinheit (GPU) enthält, die zumindest einen Befehl ausführen kann, nach Ausführungsformen der vorliegenden Offenbarung. In einer Ausführungsform könnte ein Befehl zum Durchführen von Operationen nach mindestens einer Ausführungsform von der CPU durchgeführt werden. In einer anderen Ausführungsform könnte der Befehl von der GPU durchgeführt werden. In noch einer anderen Ausführungsform könnte der Befehl durch eine Kombination von Operationen durchgeführt werden, die von der GPU und der CPU durchgeführt werden. Beispielsweise kann in einer Ausführungsform ein Befehl nach einer Ausführungsform zur Ausführung auf der GPU empfangen und decodiert werden. Eine oder mehrere Operationen innerhalb des decodierten Befehls kann jedoch von einer CPU durchgeführt werden und das Ergebnis an die GPU zur endgültigen Stilllegung des Befehls zurückgegeben werden. Umgekehrt kann die CPU in einigen Ausführungsformen als der primäre Prozessor und die GPU als der Coprozessor fungieren.
  • In einigen Ausführungsformen können Befehle, die von hochparallelen Durchsatzprozessoren profitieren können, von der GPU durchgeführt werden, während Befehle, die von der Leistung von Prozessoren profitieren können, die von Architekturen mit tiefen Pipelines profitieren können, von der CPU durchgeführt werden können. Beispielsweise können Grafik-, wissenschaftliche Anwendungen, finanzielle Anwendungen und andere parallele Nutzlasten von der Leistung der GPU profitieren und dementsprechend ausgeführt werden, wohingegen sequenziellere Anwendungen, wie Betriebssystemkernel- oder Anwendungscode besser für die CPU geeignet sein kann.
  • In 10 enthält ein Prozessor 1000 eine CPU 1005, eine GPU 1010, einen Bildprozessor 1015, einen Videoprozessor 1020, eine USB-Steuerung 1025, eine UART-Steuerung 1030, eine SPI/SDIO-Steuerung 1035, eine Anzeigeeinrichtung 1040, eine Arbeitsspeicherschnittstellensteuerung 1045, eine MIPI-Steuerung 1050, eine Flashspeichersteuerung 1055, eine Steuerung mit doppelter Datenrate (DDR) 1060, eine Sicherheitsengine 1065 und eine I2S/I2C-Steuerung 1070. Andere Logik und Schaltkreise können im Prozessor von 10 enthalten sein, einschließlich mehr CPUs oder GPUs und andere periphere Schnittstellensteuerungen.
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch repräsentative Daten implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik innerhalb des Prozessors repräsentiert, die, wenn sie von einer Maschine gelesen wird, bewirkt, dass die Maschine Logik erzeugt, um die hierin beschriebenen Techniken durchzuführen. Derartige Repräsentationen, bekannt als IP-Kerne, können auf einem greifbaren maschinenlesbaren Medium („Band“) gespeichert und verschiedenen Kunden oder Herstellungseinrichtungen bereitgestellt werden, um sie in die Herstellungsmaschinen zu laden, die die Logik oder den Prozessor tatsächlich herstellen. Beispielsweise können IP-Kerne, wie die Prozessorfamilie Cortex™, die von ARM Holdings, Ltd. entwickelt wurden, und Loongson-IP-Kerne, die vom Institut für Rechentechnologie (ICT) der Chinesischen Akademie der Wissenschaften entwickelt wurden, an verschiedene Kunden oder Lizenznehmer lizenziert oder verkauft werden, wie Texas Instruments, Qualcomm, Apple oder Samsung, und in von diesen Kunden oder Lizenznehmern produzierte Prozessoren implementiert werden.
  • 11 veranschaulicht ein Blockdiagramm, das die Entwicklung von IP-Kernen veranschaulicht, nach Ausführungsformen der vorliegenden Offenbarung. Ein Speicher 1130 kann Simulationssoftware 1120 und/oder Hardware oder ein Softwaremodell 1110 enthalten. In einer Ausführungsform können die Daten, die das IP-Kern-Design repräsentieren, dem Speicher 1130 über einen Arbeitsspeicher 1140 (z. B. eine Festplatte), eine verdrahtete Verbindung (z. B. das Internet) 1150 oder eine drahtlose Verbindung 1160 bereitgestellt werden. Die IP-Kern-Informationen, die vom Simulationswerkzeug und - modell generiert wurden, können dann an eine Erzeugungsanlage übertragen werden, wo er von einer dritten Partei gefertigt werden kann, um mindestens einen Befehl nach mindestens einer Ausführungsform durchzuführen.
  • In einigen Ausführungsformen kann bzw. können ein oder mehrere Befehle einem ersten Typ oder einer ersten Architektur (z. B. x86) entsprechen und auf einem Prozessor eines anderen Typs oder einer anderen Architektur (z. B. ARM) übersetzt oder emuliert werden. Ein Befehl kann nach einer Ausführungsform deshalb auf einem beliebigen Prozessor oder Prozessortyp durchgeführt werden, einschließlich ARM, x86, MIPS, einer GPU oder eines anderen Prozessortyps oder einer anderen Architektur.
  • 12 veranschaulicht, wie ein Befehl eines ersten Typs von einem Prozessor eines anderen Typs emuliert werden kann, nach Ausführungsformen der vorliegenden Offenbarung. In 12 beinhaltet das Programm 1205 einige Befehle, die die gleiche oder im Wesentlichen die gleiche Funktion wie ein Befehl nach einer Ausführungsform durchführen können. Die Befehle des Programms 1205 können von einem Typ und/oder einem Format sein, der bzw. das vom Prozessor 1215 verschieden ist oder mit diesem inkompatibel ist, was heißt, dass die Befehle des Typs im Programm 1205 nicht nativ vom Prozessor 1215 ausgeführt werden können. Mit der Hilfe von Emulationslogik 1210 können die Befehle des Programms 1205 in Befehle übersetzt werden, die nativ vom Prozessor 1215 ausgeführt werden können. In einer Ausführungsform kann die Emulationslogik in Hardware ausgeführt werden. In einer anderen Ausführungsform kann die Emulationslogik in einem greifbaren maschinenlesbaren Medium ausgebildet sein, das Software enthält, um Befehle vom Typ im Programm 1205 in den Typ zu übersetzen, der nativ vom Prozessor 1215 ausführbar ist. In anderen Ausführungsformen kann Emulationslogik eine Kombination von Hardware mit fester Funktion oder programmierbarer Hardware und einem Programm sein, das auf einem greifbaren, maschinenlesbaren Medium gespeichert ist. In einer Ausführungsform beinhaltet der Prozessor die Emulationslogik, wohingegen die Emulationslogik in anderen Ausführungsformen außerhalb des Prozessors existiert und von einem Drittanbieter bereitgestellt werden kann. In einer Ausführungsform kann der Prozessor die Emulationslogik, die in einem greifbaren maschinenlesbaren Medium ausgebildet ist, das Software beinhaltet, durch Ausführen von Mikrocode oder Firmware laden, die im Prozessor enthalten ist oder mit diesem assoziiert ist.
  • 13 veranschaulicht ein Blockdiagramm, das die Verwendung eines Software-Befehlswandlers zum Umwandeln von binären Befehlen in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz nach Ausführungsformen der vorliegenden Offenbarung gegenüberstellt. Bei der illustrierten Ausführungsform kann der Befehlswandler ein Softwarebefehlswandler sein, obwohl der Befehlswandler in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert werden kann. 13 zeigt, dass ein Programm in einer höheren Sprache 1302 unter Verwendung eines x86-Compilers 1304 compiliert werden kann, um x86-Binärcode 1306 zu generieren, der nativ von einem Prozessor mit mindestens einem x86-Befehlssatzkern 1316 ausgeführt werden kann. Der Prozessor mit mindestens einem x86-Befehlssatzkern 1316 repräsentiert einen beliebigen Prozessor, der möglicherweise im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern durchführen kann, indem er Folgendes kompatibel ausführt oder anderweitig verarbeitet: (1) einen wesentlichen Teil des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die auf einem Intel-Prozessor mit mindestens einem x86-Befehlssatzkern laufen sollen, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern zu erreichen. Der x86-Compiler 1304 repräsentiert einen Compiler, der betrieben werden kann, um x86-Binärcode 1306 (z. B. Objektcode) zu generieren, der ohne oder mit zusätzlicher Verlinkungsverarbeitung auf dem Prozessor mit mindestens einem x86-Befehlssatzkern 1316 ausgeführt werden kann. Gleichermaßen zeigt 13, dass das Programm in der höheren Sprache 1302 unter Verwendung eines Compilers für einen alternativen Befehlssatz 1308 compiliert werden kann, um Binärcode eines alternativen Befehlssatzes 1310 zu generieren, der nativ von einem Prozessor ohne mindestens einen x86-Befehlssatzkern 1314 ausgeführt werden kann (z. B. einem Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, Kalifornien, und/oder die den ARM-Befehlssatz von ARM Holdings in Sunnyvale, Kalifornien, ausführen). Der Befehlswandler 1312 kann verwendet werden, um den x86-Binärcode 1306 in Code umzuwandeln, der nativ vom Prozessor ohne einen x86-Befehlssatzkern 1314 ausgeführt werden kann. Dieser umgewandelte Code ist möglicherweise nicht der gleiche wie der Alternativbefehlssatz-Binärcode 1310; dennoch wird der umgewandelte Code die allgemeine Operation erzielen und aus Befehlen aus dem alternativen Befehlssatz bestehen. Deshalb repräsentiert der Befehlswandler 1312 Software, Firmware, Hardware oder eine Kombination davon, die durch Emulation, Simulation oder einen beliebigen anderen Prozess einem Prozessor oder einer anderen Elektronikeinrichtung erlaubt, der bzw. die keinen x86-Befehlssatzprozessor oder -Kern aufweist, den x86-Binärcode 1306 auszuführen.
  • 14 ist ein Blockdiagramm einer Befehlssatzarchitektur 1400 eines Prozessors nach Ausführungsformen der vorliegenden Offenbarung. Die Befehlssatzarchitektur 1400 kann eine beliebige geeignete Anzahl oder Art von Komponenten enthalten.
  • Beispielsweise kann die Befehlssatzarchitektur 1400 Verarbeitungsentitäten wie einen oder mehrere Kerne 1406, 1407 und eine Grafikverarbeitungseinheit 1415 enthalten. Die Kerne 1406, 1407 können kommunikativ durch einen beliebigen geeigneten Mechanismus, wie durch einen Bus oder einen Zwischenspeicher, an den Rest der Befehlssatzarchitektur 1400 gekoppelt sein. In einer Ausführungsform können die Kerne 1406, 1407 kommunikativ durch eine L2-Zwischenspeichersteuerung 1408 gekoppelt sein, die eine Busschnittstelleneinheit 1409 und einen L2-Zwischenspeicher 1410 enthalten kann. Die Kerne 1406, 1407 und die Grafikverarbeitungseinheit 1415 können durch die Zwischenverbindung 1410 kommunikativ aneinander und an den Rest der Befehlssatzarchitektur 1400 gekoppelt sein. In einer Ausführungsform kann die Grafikverarbeitungseinheit 1415 einen Videocode 1420 verwenden, der die Art definiert, auf die bestimmte Videosignale zur Ausgabe codiert und decodiert werden.
  • Die Befehlssatzarchitektur 1400 kann auch eine beliebige Anzahl oder Art von Schnittstellen, Steuerungen oder andere Mechanismen zum Anbinden oder Kommunizieren mit anderen Abschnitten einer elektronischen Einrichtung oder eines elektronischen Systems enthalten. Derartige Mechanismen können eine Wechselwirkung beispielsweise mit Peripheriegeräten, Kommunikationseinrichtungen, anderen Prozessoren oder Arbeitsspeicher ermöglichen. Im Beispiel von 14 kann die Befehlssatzarchitektur 1400 eine Flüssigkristallanzeige(LCD)-Videoschnittstelle 1425, eine Subscriber-Interface-Module(SIM)-Schnittstelle 1430, eine Boot-ROM-Schnittstelle 1435, eine synchrone dynamische Arbeitsspeichersteuerung mit wahlfreiem Zugriff (SDRAM) 1440, eine Flashsteuerung 1445 und eine Mastereinheit für serielle periphere Schnittstellen (SPI) 1450 enthalten. Die LCD-Videoschnittstelle 1425 kann einer Anzeige eine Ausgabe von Videosignalen zum Beispiel von GPU 1415 und beispielsweise durch eine Mobile Industry Processor Interface (MIPI) 1490 oder eine High-Definition Multimedia Interface (HDMI) 1495 bereitstellen. Eine derartige Anzeige kann beispielsweise eine LCD enthalten. Die SIM-Schnittstelle 1430 kann Zugriff zu oder von einer SIM-Karte oder -Einrichtung bereitstellen. Die SDRAM-Steuerung 1440 kann Zugriff zu oder von einem Arbeitsspeicher wie einem SDRAM-Chip oder -Modul bereitstellen. Die Flashsteuerung 1445 kann Zugriff zu oder von einem Arbeitsspeicher wie Flashspeicher oder anderen Instanzen von RAM bereitstellen. Die SPI-Mastereinheit 1450 kann Zugriff zu oder von Kommunikationsmodulen bereitstellen, wie einem Bluetooth-Modul 1470, einem Hochgeschwindigkeits-3G-Modem 1475, einem globalen Positionierungssystemmodul 1480 oder einem drahtlosen Modul 1485, das einen Kommunikationsstandard wie 802.11 implementiert.
  • 15 ist ein detaillierteres Blockdiagramm einer Befehlssatzarchitektur 1500 eines Prozessors nach Ausführungsformen der vorliegenden Offenbarung. Die Befehlsarchitektur 1500 kann einen oder mehrere Gesichtspunkte der Befehlssatzarchitektur 1400 implementieren. Ferner kann die Befehlssatzarchitektur 1500 Module und Mechanismen für die Ausführung von Befehlen innerhalb eines Prozessors veranschaulichen.
  • Die Befehlsarchitektur 1500 kann ein Arbeitsspeichersystem 1540 enthalten, das kommunikativ an einen oder mehrere Ausführungsentitäten 1565 gekoppelt ist. Ferner kann die Befehlsarchitektur 1500 eine Zwischenspeicher- und Busschnittstelleneinheit wie Einheit 1510 enthalten, die kommunikativ an die Ausführungsentitäten 1565 und das Arbeitsspeichersystem 1540 gekoppelt ist. In einer Ausführungsform kann ein Laden von Befehlen in die Ausführungsentitäten 1564 durch eine oder mehrere Ausführungsphasen durchgeführt werden. Derartige Phasen können beispielsweise eine Befehlsvorabrufphase 1530, eine duale Befehlsdecodierphase 1550, eine Registerumbenennungsphase 155, eine Erteilungsphase 1560 und eine Zurückschreibphase 1570 enthalten.
  • In einer Ausführungsform kann das Arbeitsspeichersystem 1540 einen ausgeführten Befehlszeiger 1580 enthalten. Der ausgeführte Befehlszeiger 1580 kann einen Wert speichern, der den ältesten, nicht verteilten Befehl innerhalb eines Befehlsbatches identifiziert. Der älteste Befehl kann dem niedrigsten Programmordnungswert (PO-Wert) entsprechen. Eine PO kann eine eindeutige Nummer eines Befehls enthalten. Ein derartiger Befehl kann ein einzelner Befehl innerhalb eines Threads sein, der durch mehrere Stränge repräsentiert ist. Eine PO kann bei Anordnungsbefehlen verwendet werden, um eine richtige Ausführungssemantik von Code sicherzustellen. Eine PO kann durch Mechanismen wie Auswerten von Erhöhungsschritten zu einer im Befehl codierten PO anstatt eines Absolutbetrags rekonstruiert werden. Eine derartige rekonstruierte PO kann als eine „RPO“ bekannt sein. Obwohl hierin auf eine PO Bezug genommen werden kann, kann eine derartige PO austauschbar mit einer RPO verwendet werden. Ein Strang kann eine Folge von Befehlen enthalten, die voneinander datenabhängig sind. Der Strang kann von einer binären Übersetzungseinheit zur Compilierzeit angeordnet sein. Hardware, die einen Strang ausführt, kann die Befehle eines bestimmten Strangs in einer Reihenfolge nach der PO der verschiedenen Befehle ausführen. Ein Thread kann mehrere Stränge enthalten, sodass Befehle verschiedener Stränge voneinander abhängig sein können. Eine PO eines bestimmten Strangs kann die PO des ältesten Befehls im Strang sein, der noch nicht zur Ausführung von einer Erteilungsphase verteilt wurde. Dementsprechend kann, wenn ein Thread mehrerer Stränge gegeben ist, wobei jeder Strang nach PO geordnete Befehle enthält, der ausgeführte Befehlszeiger 1580 die älteste PO - durch die niedrigste Nummer veranschaulicht - im Thread speichern.
  • In einer anderen Ausführungsform kann das Arbeitsspeichersystem 1540 einen Stilllegungszeiger 1582 enthalten. Der Stilllegungszeiger 1582 kann einen Wert speichern, der den PO des zuletzt stillgelegten Befehls speichert. Der Stilllegungszeiger 1582 kann beispielsweise durch die Stilllegungseinheit 454 gesetzt sein. Falls noch keine Befehle stillgelegt wurden, kann der Stilllegungszeiger 1582 einen Nullwert enthalten.
  • Die Ausführungseinheiten 1565 können eine beliebige geeignete Anzahl und Art von Mechanismen enthalten, durch die ein Prozessor Befehle ausführen kann. Im Beispiel von 15 können die Ausführungseinheiten 1565 ALU/Multiplikationseinheiten (MUL) 1566, ALUs 1567 und Gleitkommaeinheiten (FPU) 1568 enthalten. In einer Ausführungsform können derartige Entitäten Informationen verwenden, die innerhalb einer bestimmten Adresse 1569 enthalten sind. Die Ausführungseinheiten 1565 können in Kombination mit den Phasen 1530, 1550, 1555, 1560, 1570 gemeinsam eine Ausführungseinheit bilden.
  • Die Einheit 1510 kann auf beliebige geeignete Weise implementiert sein. In einer Ausführungsform kann die Einheit 1510 eine Zwischenspeichersteuerung durchführen. In einer derartigen Ausführungsform kann die Einheit 1510 deshalb einen Zwischenspeicher 1525 enthalten. Der Zwischenspeicher 1525 kann in einer weiteren Ausführungsform als ein vereinheitlichter L2-Zwischenspeicher mit beliebiger geeigneter Größe implementiert sein, wie null, 128 k, 256 k, 512 k, 1 M oder 2 M-Byte von Arbeitsspeicher. In einer weiteren Ausführungsform kann der Zwischenspeicher 1525 in Arbeitsspeicher für Fehlerkorrekturcode implementiert sein. In einer anderen Ausführungsform kann die Einheit 1510 eine Busanbindung an andere Abschnitte eines Prozessors oder einer elektronischen Einrichtung durchführen. In einer derartigen Ausführungsform kann die Einheit 1510 deshalb eine Busschnittstelleneinheit 1520 zum Kommunizieren über eine Zwischenverbindung, einen Intraprozessorbus, einen Interprozessorbus oder einen anderen Kommunikationsbus, -anschluss oder eine andere Kommunikationsleitung enthalten. Die Busschnittstelleneinheit 1520 kann ein Anbinden bereitstellen, um beispielsweise eine Generierung der Arbeitsspeicher- und Eingabe/Ausgabe-Adressen für den Transfer von Daten zwischen den Ausführungsentitäten 1565 und den Abschnitten eines zur Befehlsarchitektur 1500 externen Systems durchzuführen.
  • Um ihre Funktionen weiter zu ermöglichen, kann die Busschnittstelleneinheit 1520 eine Interruptsteuerungs- und Verteilungseinheit 1511 zum Generieren von Interrupts und anderen Kommunikationen an andere Abschnitte eines Prozessors oder einer elektronischen Einrichtung enthalten. In einer Ausführungsform kann die Busschnittstelleneinheit 1520 eine Snoop-Steuereinheit 1512 enthalten, die einen Zwischenspeicherzugriff und Kohärenz für mehrere Verarbeitungskerne handhabt. In einer weiteren Ausführungsform, um eine derartige Funktionalität bereitzustellen, kann die Snoop-Steuereinheit 1512 eine Zwischenspeicher-zu-Zwischenspeicher-Transfereinheit enthalten, die Informationsaustauschvorgänge zwischen unterschiedlichen Zwischenspeichern handhabt. In einer weiteren Ausführungsform kann die Snoop-Steuereinheit 1512 einen oder mehrere Snoopfilter 1514 enthalten, die die Kohärenz anderer Zwischenspeicher (nicht gezeigt) überwachen, sodass eine Zwischenspeichersteuerung, wie Einheit 1510, kein derartiges Überwachen direkt durchführen muss. Die Einheit 1510 kann eine beliebige geeignete Anzahl an Zeitgebern 1515 zum Synchronisieren der Aktionen der Befehlsarchitektur 1500 enthalten. Die Einheit 1510 kann auch einen AC-Anschluss 1516 enthalten.
  • Das Arbeitsspeichersystem 1540 kann eine beliebige geeignete Anzahl und Art von Mechanismen zum Speichern von Informationen für die Verarbeitungsanforderungen der Befehlsarchitektur 1500 enthalten. In einer Ausführungsform kann das Arbeitsspeichersystem 1504 eine Ladespeichereinheit 1530 zum Speichern von Informationen wie Puffer enthalten, in die von Arbeitsspeicher oder Registern geschrieben oder aus denen zurückgelesen wird. In einer anderen Ausführungsform kann das Arbeitsspeichersystem 1504 einen Übersetzungspuffer (TLB) 1545 enthalten, der ein Nachschlagen von Adresswerten zwischen physischen und virtuellen Adressen bereitstellt. In noch einer anderen Ausführungsform kann die Busschnittstelleneinheit 1520 eine Arbeitsspeicherverwaltungseinheit (MMU) 1544 zum Ermöglichen eines Zugriffs auf einen virtueller Arbeitsspeicher enthalten. In noch einer anderen Ausführungsform kann das Arbeitsspeichersystem 1504 eine Vorabrufeinheit 1543 zum Anfordern von Befehlen vom Arbeitsspeicher enthalten, bevor derartige Befehle tatsächlich ausgeführt werden müssen, um Latenz zu reduzieren.
  • Die Operation der Befehlsarchitektur 1500 zum Ausführen eines Befehls kann durch unterschiedliche Phasen durchgeführt werden. Beispielsweise kann die Befehlsvorabrufphase 1530 unter Verwendung der Einheit 1510 auf einen Befehl durch die Vorabrufeinheit 1543 zugreifen. Abgerufene Befehle können in einem Befehlszwischenspeicher 1532 gespeichert werden. Die Vorabrufeinheit 1530 kann eine Option 1531 für einen Schnell-Schleifen-Modus ermöglichen, wobei eine Reihe von Befehlen ausgeführt wird, die eine Schleife bilden, die klein genug ist, sodass sie in einen bestimmten Zwischenspeicher passt. In einer Ausführungsform kann eine derartige Ausführung durchgeführt werden, ohne dass auf zusätzliche Befehle beispielsweise vom Befehlszwischenspeicher 1532 zugegriffen werden muss. Die Ermittlung, welche Befehle vorab abzurufen sind, kann zum Beispiel durch eine Verzweigungsvorhersageeinheit 1535 erfolgen, die auf Hinweise auf Ausführung in einem globalen Verlauf 1536, Hinweise auf Zieladressen 1537 oder einen Inhalt eines Rückgabestapels 1538 zugreifen kann, um zu ermitteln, welche von Verzweigungen 1557 von Code als Nächstes ausgeführt werden. Derartige Verzweigungen können möglicherweise als ein Ergebnis vorab abgerufen werden. Die Verzweigungen 1557 können durch andere Operationsphasen erzeugt werden, wie unten beschrieben. Die Befehlsvorabrufphase 1530 kann einer dualen Befehlsdecodierphase Befehle sowie alle Vorhersagen über zukünftige Befehle bereitstellen.
  • Die duale Befehlsdecodierphase 1550 kann einen empfangenen Befehl in Befehle auf Mikrocode-Basis übersetzen, die ausgeführt werden können. Die duale Befehlsdecodierphase 1550 kann gleichzeitig zwei Befehle pro Taktzyklus decodieren. Ferner kann die duale Befehlsdecodierphase 1550 ihre Ergebnisse an eine Registerumbenennungsphase 1555 weiterleiten. Darüber hinaus kann die duale Befehlsdecodierphase 1550 jegliche resultierende Verzweigungen aus ihrer Decodierung und schließlichen Ausführung des Mikrocodes ermitteln. Derartige Ergebnisse können in die Verzweigungen 1557 eingegeben werden.
  • Die Registerumbenennungsphase 1555 kann Verweise auf virtuelle Register oder andere Ressourcen in Verweise auf physische Register oder Ressourcen übersetzen. Die Registerumbenennungsphase 1555 kann Hinweise auf eine derartige Abbildung in einem Registerpool 1556 aufnehmen. Die Registerumbenennungsphase 1555 kann die Befehle wie empfangen ändern und das Ergebnis an eine Erteilungsphase 1560 senden.
  • Die Erteilungsphase 1560 kann Befehle an Ausführungsentitäten 1565 erteilen oder verteilen. Eine derartige Erteilung kann auf Out-of-Order-Weise durchgeführt werden. In einer Ausführungsform können mehrere Befehle in der Erteilungsphase 1560 vor der Ausführung gehalten werden. Die Erteilungsphase 1560 kann eine Befehlswarteschlange 1561 zum Halten derartiger mehrerer Befehle enthalten. Befehle können von der Erteilungsphase 1560 an eine bestimmte Verarbeitungsentität 1565 auf Grundlage beliebiger akzeptabler Kriterien erteilt werden, wie eine Verfügbarkeit oder Eignung von Ressourcen zur Ausführung eines bestimmten Befehls. In einer Ausführungsform kann die Erteilungsphase 1560 die Befehle innerhalb der Befehlswarteschlange 1561 umordnen, sodass die ersten empfangenen Befehle nicht die ersten ausgeführten Befehle sein könnten. Auf Grundlage der Reihenfolge der Befehlswarteschlange 1561 können den Verzweigungen 1557 zusätzliche Verzweigungsinformationen bereitgestellt werden. Die Erteilungsphase 1560 kann Befehle an Ausführungsentitäten 1565 zur Ausführung weiterleiten.
  • Nach der Ausführung kann eine Zurückschreibphase 1570 Daten in Register, Warteschlangen oder andere Strukturen der Befehlssatzarchitektur 1500 schreiben, um den Abschluss eines bestimmten Befehls zu kommunizieren. Abhängig von der Reihenfolge der Befehle, die in der Erteilungsphase 1560 angeordnet wurde, kann die Operation der Zurückschreibphase 1570 ermöglichen, dass zusätzliche Befehle ausgeführt werden. Die Leistung der Befehlssatzarchitektur 1500 kann von einer Nachverfolgungseinheit 1575 überwacht oder korrigiert werden.
  • 16 ist ein Blockdiagramm einer Ausführungspipeline 1600 für eine Befehlssatzarchitektur eines Prozessors nach Ausführungsformen der vorliegenden Offenbarung. Die Ausführungspipeline 1600 kann eine Operation von beispielsweise der Befehlsarchitektur 1500 von 15 veranschaulichen.
  • Die Ausführungspipeline 1600 kann eine beliebige geeignete Kombination von Schritten oder Operationen enthalten. In 1605 können Vorhersagen der Verzweigung erfolgen, die als Nächstes auszuführen ist. In einer Ausführungsform können derartige Vorhersagen auf vorherigen Ausführungsvorgängen von Befehlen und deren Ergebnissen beruhen. Bei 1610 können Befehle, die der vorhergesagten Ausführungsverzweigung entsprechen, in einen Befehlszwischenspeicher geladen werden. Bei 1615 können ein oder mehrere derartiger Befehle im Befehlszwischenspeicher zur Ausführung abgerufen werden. Bei 1620 können die Befehle, die abgerufen wurden, in Mikrocode oder spezifischere Maschinensprache decodiert werden. In einer Ausführungsform können mehrere Befehle gleichzeitig decodiert werden. Bei 1625 können Verweise auf Register oder andere Ressourcen innerhalb der decodierten Befehle neu zugewiesen werden. Beispielsweise können Verweise auf virtuelle Register mit Verweisen auf entsprechende physische Register ersetzt werden. Bei 1630 können die Befehle an Warteschlangen zur Ausführung verteilt werden. Bei 1640 können die Befehle ausgeführt werden. Eine derartige Ausführung Schritt kann auf beliebige geeignete Weise durchgeführt werden. Bei 1650 können die Befehle an eine geeignete Ausführungsentität erteilt werden. Die Art und Weise, auf die der Befehl ausgeführt wird, kann von der bestimmten Entität abhängen, die den Befehl ausführt. Beispielsweise kann bei 1655 eine ALU arithmetische Funktionen ausführen. Die ALU kann einen einzigen Taktzyklus für ihre Operation nutzen, sowie zwei Verschiebungseinheiten. In einer Ausführungsform können zwei ALUs eingesetzt werden und deshalb können bei 1655 zwei Befehle ausgeführt werden. Bei 1660 kann eine Ermittlung einer resultierenden Verzweigung erfolgen. Ein Programmzähler kann verwendet werden, um das Ziel anzugeben, zu dem die Verzweigung erfolgen wird. 1660 kann innerhalb eines einzigen Taktzyklus ausgeführt werden. Bei 1665 kann Gleitkomma-Arithmetik durch eine oder mehrere FPUs durchgeführt werden. Die Gleitkommaoperation kann zur Ausführung mehrere Taktzyklen erfordern, wie zwei bis zehn Zyklen. Bei 1670 können Multiplikations- und Divisionsoperationen durchgeführt werden. Derartige Operationen können in vier Taktzyklen durchgeführt werden. Bei 1675 können Lade- und Speicheroperationen in Register oder andere Abschnitte der Pipeline 1600 durchgeführt werden. Die Operationen können ein Laden und Speichern von Adressen enthalten. Derartige Operationen können in vier Taktzyklen durchgeführt werden. Bei 1680 können Zurückschreiboperationen durchgeführt werden, wie sie von den resultierenden Operationen von 1655-1675 erforderlich sind.
  • 17 ist ein Blockdiagramm einer elektronischen Einrichtung 1700 zum Einsetzen eines Prozessors 1710 nach Ausführungsformen der vorliegenden Offenbarung. Die elektronische Einrichtung 1700 kann zum Beispiel ein Notebook, ein Ultrabook, einen Computer, einen Turmserver, einen Rackserver, einen Bladeserver, einen Laptop, einen Desktop, ein Tablet, eine mobile Einrichtung, ein Telefon, einen eingebetteten Computer oder eine beliebige andere geeignete elektronische Einrichtung enthalten.
  • Die elektronische Einrichtung 1700 kann einen Prozessor 1710 enthalten, der kommunikativ an eine beliebige geeignete Anzahl oder Art von Komponenten, Peripheriegeräten, Modulen oder Einrichtungen gekoppelt ist. Eine derartige Kopplung kann durch eine beliebige geeignete Art von Bus oder Schnittstelle erreicht werden, wie einen I2C-Bus, einen Systemverwaltungsbus (SMBus) , einen Low-Pin-Count(LPC)-Bus, SPI, einen Hochauflösungsaudio(HDA)-Bus, einen Serial-Advance-Technology-Attachment(SATA)-Bus, einen USB-Bus (Versionen 1, 2, 3) oder einen Universal-Asynchronous-Receiver/Transmitter(UART)-Bus.
  • Derartige Komponenten können beispielsweise eine Anzeige 1724, einen Berührungsbildschirm 1725, ein Touchpad 1730, eine Nahfeldkommunikationseinheit (NFC-Einheit) 1745, einen Sensorknoten 1740, einen thermalen Sensor 1746, einen Express-Chipsatz (EC) 1735, ein Trusted Platform Module (TPM) 1738, BIOS/Firmware/Flashspeicher 1722, einen digitalen Signalprozessor 1760, ein Laufwerk 1720, wie eine Festkörperplatte (SSD) oder ein Festplattenlaufwerk (HDD), eine drahtlose lokale Netzwerkeinheit (WLAN-Einheit) 1750, eine Bluetooth-Einheit 1752, eine drahtlose Weitverkehrsnetz-Einheit (WWAN-Einheit) 1756, ein globales Positionierungssystem (GPS, eine Kamera 1754 wie eine USB-3.0-Kamera oder eine Niedrigenergie-Arbeitsspeichereinheit mit doppelter Datenrate (LPDDR-Arbeitsspeichereinheit) 1715, die zum Beispiel im LPDDR3-Standard implementiert ist, enthalten. Diese Komponenten können jeweils auf beliebige geeignete Weise implementiert sein.
  • Ferner können in verschiedenen Ausführungsformen andere Komponenten über die oben besprochenen Komponenten kommunikativ an den Prozessor 1710 gekoppelt sein. Beispielsweise können ein Beschleunigungsmesser 1741, ein Umgebungslichtsensor (ALS) 1742, ein Kompass 1743 und ein Gyroskop 1744 kommunikativ an den Sensorknoten 1740 gekoppelt sein. Ein thermaler Sensor 1739, ein Lüfter 1737, die Tastatur 1746 und das Touchpad 1730 können kommunikativ an den EC 1735 gekoppelt sein. Ein Lautsprecher 1763, Kopfhörer 1764 und ein Mikrofon 1765 können kommunikativ an eine Audioeinheit 1764 gekoppelt sein, die wiederum kommunikativ an den DSP 1760 gekoppelt sein kann. Die Audioeinheit 1764 kann beispielsweise einen Audiocodec und einen Verstärker der Klasse D enthalten. Eine SIM-Karte 1757 kann kommunikativ an die WWAN-Einheit 1756 gekoppelt sein. Komponenten wie die WLAN-Einheit 1750 und die Bluetooth-Einheit 1752 sowie die WWAN-Einheit 1756 können in einem Formfaktor der nächsten Generation (NGFF) implementiert sein.
  • Ausführungsformen der vorliegenden Offenbarung involvieren eine Befehls- und Verarbeitungslogik zur Vektorpermutation. 18 ist eine Veranschaulichung eines Ausführungsbeispiels eines Systems 1800 für einen Befehl und eine Logik zur Vektorpermutation. Das System 1800 kann einen Prozessor, SoC, integrierten Schaltkreis oder anderen Mechanismus enthalten. Beispielsweise kann das System 1800 einen Prozessor 1802 enthalten. Obwohl der Prozessor 1802 als ein Beispiel in 18 gezeigt und beschrieben ist, kann ein beliebiger geeigneter Mechanismus verwendet werden. Der Prozessor 1802 kann einen beliebigen geeigneten Mechanismus zur Vektorpermutation enthalten. In einer Ausführungsform können derartige Mechanismen in Hardware implementiert werden. Der Prozessor 1802 kann vollständig oder teilweise durch die in 1-17 beschriebenen Elemente implementiert sein.
  • In einer Ausführungsform kann das System 1800 eine Vektorpermutationseinheit 1826 enthalten, um Vektordaten in ein Zielregister zu mischen. Das System 1800 kann eine Vektorpermutationseinheit 1826 in einem beliebigen geeigneten Abschnitt des Systems 1800 enthalten. Beispielsweise kann die Vektorpermutationseinheit 1826 als eine Ausführungseinheit 1822 innerhalb einer In-Oder- oder Out-of-Order-Ausführungspipeline 1816 implementiert sein. In einem weiteren Beispiel kann die Vektorpermutationseinheit 1826 innerhalb eines Intellectual-Property-Kerns (IP-Kerns) 1828 implementiert sein, der vom Hauptkern bzw. den Hauptkernen 1814 des Prozessors 1802 getrennt ist. Die Vektorpermutationseinheit 1826 kann von einer beliebigen geeigneten Kombination von Verschaltung Hardware-Rechenlogik eines Prozessors implementiert sein.
  • Eine Vektorpermutation kann beim Hochleistungsrechnen (HPC) und anderen Anwendungen verwendet werden, einschließlich mobilem und Desktop-Rechnen, um eine Ausführung durch Extrahieren von Datenparallelismus in einem Vektorisierungsprozess zu beschleunigen. Unter Verwendung von SIMD-Funktionen können mehrere Datenelemente auf die gleiche Weise verarbeitet werden. Diese Fähigkeit kann Datenelemente, die in ein fortlaufendes Bytepaket innerhalb eines SIMD-Registers gepackt sind, oder Datenelemente bearbeiten, die an zufälligen Arbeitsspeicherpositionen platziert sind. Die Vektorpermutation ermöglicht das Mischen eines beliebigen Elements in einem Datensatz an eine beliebige Position in einem Zielregister. In verschiedenen Ausführungsformen kann die Vektorpermutationseinheit 1826 Datenelemente aus einem Arbeitsspeicher in ein Zielregister mischen.
  • Das Permutieren von Vektordaten mit einem Permutationsfaktor kann rechnerisch aufwendig sein. Softwarebasierte Lösungen, wobei Code zum Laden und Permutieren von Datenelementen einfach an üblichen Ausführungseinheiten ausgeführt wird, wie er auf dem Prozessor 1802 decodiert wird, sind oft langsam, leistungsverbrauchend oder werden zu einer Engstelle für Anwendungen, einschließlich unter anderem vektorisierte grundlegende Mathematikfunktionen. Die Vektorpermutationseinheit 1802 kann eine K- oder Permutationsfaktorvektorpermutation implementieren, um Elemente effizient zu mischen, ohne den Vektorindex oder die Tabelle der Quelldaten zu überschreiben. Der K-Faktor kann so klein wie zwei sein und kann größer als acht sein. Der Prozessor 1802 kann entweder implizit oder durch Decodierung und Ausführung von bestimmten Befehlen erkennen, dass eine K-Faktor-Permutation durchzuführen ist. In derartigen Fällen kann die Vektorpermutation an die Vektorpermutationseinheit 1826 ausgelagert werden. In einer Ausführungsform können bestimmte Befehle 1830, die in einem Befehlsstrom 1804 auszuführen sind, auf die Vektorpermutationseinheit 1826 abzielen. Derartige bestimmte Befehle können beispielsweise von einem Compiler generiert werden oder können von einem Verfasser von Code designiert werden, der im Befehlsstrom 1804 resultiert. Der Befehl kann in einer Bibliothek enthalten sein, die zur Ausführung durch den Prozessor 1802 oder die Vektorpermutationseinheit 1826 definiert ist. In einer anderen Ausführungsform können Abschnitte des Prozessors 1802 auf die Vektorpermutationseinheit 1826 abzielen, wobei der Prozessor 1802 einen Versuch im Befehlsstrom 1804 erkennt, eine K-Faktor-Vektorberechnung in Software auszuführen. Befehle 1830 können Permutieren(D, Größe, A, K) oder Permutieren(D, Größe, A, B, K) enthalten. D kann einem Zielregister entsprechen. Größe kann der Größe des in D gepackten Datentyps entsprechen. A kann einer Basisadresse im Arbeitsspeicher entsprechen. B kann einem Indexvektor mit einem Satz von Indizes entsprechen, der Offsets von der Basisadresse im Arbeitsspeicher bereitstellt. K kann dem K-Faktor oder Permutationsfaktor entsprechen, der dem Datensatz entspricht, der in D zu permutieren ist. Diese Parameter, D, Größe, A, B und K, können in einer beliebigen geeigneten Form sein, einschließlich Parameterflags für den Permutationsbefehl, explizite Parameter, erforderliche Parameter, optionale Parameter mit einem angenommenen Standardwert oder inhärente Parameter, die in Registern oder an anderen bekannten Positionen gespeichert sind, die nicht erfordern, dass die Informationen explizit als ein Parameter übergeben werden.
  • In einer Ausführungsform kann die Vektorpermutation Logik enthalten, um Daten aus einem Arbeitsspeicher in ein temporäres Ziel zu kopieren. Die Logik kann folgendermaßen beschrieben werden:
    • Permutieren (D, Größe, A, B, K)
    • Temporäres Ziel = memcopy(A, Größe*2K)
    • FOR (i = 0 bis (Größe von D/Größe)- 1)
    • Ziel[i] = Temporäres Ziel [B[i] & 2K-1]
  • Befehle können vom Befehlsstrom 1804 empfangen werden, der innerhalb eines Arbeitsspeichersubsystems des Systems 1800 residieren kann. Der Befehlsstrom 1804 kann in einem beliebigen geeigneten Abschnitt des Prozessors 1802 des Systems 1800 enthalten sein. In einer Ausführungsform kann der Befehlsstrom 1804A in einem SoC, System oder anderen Mechanismus enthalten sein. In einer anderen Ausführungsform kann der Befehlsstrom 1804B in einem Prozessor, integrierten Schaltkreis oder in einem anderen Mechanismus enthalten sein. Der Prozessor 1802 kann ein Front-End 1806 enthalten, das unter Verwendung einer Decodierpipelinephase Befehle vom Befehlsstrom 1804 empfangen und decodieren kann. Die decodierten Befehle können zur Ausführung durch eine Zuteilungseinheit 1818 und einen Planer 1820 einer Ausführungspipeline 1816 verteilt, zugeteilt und geplant werden und bestimmten Ausführungseinheiten 1822 zugeteilt werden. Nach der Ausführung können Befehle von einer Zurückschreibphase oder Stilllegungsphase in der Stilllegungseinheit 1824 stillgelegt werden. Falls der Prozessor 1802 die Befehle out-of-order ausführt, kann die Zuteilungseinheit 1818 Befehle umbenennen und die Befehle können in einen Umordnungspuffer 1824 in Assoziation mit der Stilllegungseinheit eingegeben werden. Die Befehle können stillgelegt werden, als ob sie in-order ausgeführt worden wären. Verschiedene Abschnitte einer derartigen Ausführungspipeline können von einem oder mehreren Kernen 1814 durchgeführt werden.
  • Die Vektorpermutationseinheit 1826 kann auf beliebige geeignete Weise implementiert sein. In einer Ausführungsform kann die Vektorpermutationseinheit 1826 durch Verschaltung implementiert werden, die Logik zum Ermitteln des Arbeitsspeichers zum Abrufen in einen Zwischenspeicher, ein temporäres Ziel und Logik zum Permutieren der Daten in ein Zielregister enthält.
  • In einer Ausführungsform können die Vektordaten, die in einen Zwischenspeicher abzurufen sind, bereits in den Zwischenspeicher geladen sein, und die Vektorpermutationseinheit kann Daten direkt aus dem Zwischenspeicher permutieren. In einer anderen Ausführungsform müssen die Vektordaten möglicherweise aus dem Arbeitsspeicher in den Zwischenspeicher abgerufen werden, bevor die Permutationsoperation durchgeführt werden kann.
  • In einer Ausführungsform kann der K-Faktor der Anzahl von Quellregister entsprechen, die durch die Permutationsfunktion in das Zielregister gemischt werden. Die Quellregister können nur im Arbeitsspeicher und im Zwischenspeicher existieren oder können auch in oder als ein SIMD-Register existieren. Die Anzahl von Bits, die erforderlich sind, um eine Quelle zu indizieren, kann durch Finden des Logarithmus des K-Faktors zur Basis zwei berechnet werden. Die Menge an Arbeitsspeicher, die in den Zwischenspeicher zu kopieren ist, kann gleich der Größe des Registers multipliziert mit dem K-Faktor sein.
  • In einer anderen Ausführungsform kann der K-Faktor der Anzahl der Bits entsprechen, die erforderlich ist, um ein bestimmtes Quellregister zu indizieren, das durch die Permutationsfunktion in das Zielregister zu mischen ist. Die Menge an Arbeitsspeicher, die in den Zwischenspeicher zu kopieren ist, kann gleich der Größe des Registers multipliziert mit zwei zur Potenz des K-Faktors sein.
  • Die Anzahl an Bits, die erforderlich sind, um ein Element innerhalb eines bestimmten Quellregisters, Quellarbeitsspeichers oder temporären Zwischenspeichers zu indizieren, kann aus dem Logarithmus der Anzahl von Elementen innerhalb des Quellregisters zur Basis zwei, minus eins, berechnet werden. Das Quellregister kann dem Zielregister in Länge äquivalent sein oder kann eine unterschiedliche Länge als das Zielregister aufweisen. In einer Ausführungsform kann die Anzahl von Bits, die zum Indizieren eines Elements erforderlich ist, vom K-Faktor verschieden sein. In einer anderen Ausführungsform kann die Anzahl von Bits, die zum Indizieren eines Elements erforderlich ist, mit dem K-Faktor kombiniert werden, wobei jede bestimmte Quelle dem in das Ziel-SIMD-Register gepackten Datentyp in der Größe äquivalent sein kann. Die Anzahl der Zwischenspeicherzeilen, die abzurufen sind, kann durch Dividieren der Menge an Arbeitsspeicher, die zu kopieren ist, durch die Größe einer Zwischenspeicherzeile berechnet werden.
  • Die Vektorpermutationseinheit 1826 kann Daten in jedes Element eines Ziel-SIMD-Registers durch Ermitteln eines Offsets vom Indexvektor mischen. Der Indexvektor kann Bits für jedes Element eines Ziel-SIMD-Register enthalten. Einige der Bits können der Anzahl von Bits entsprechen, die erforderlich sind, um ein bestimmtes Quellregister auszuwählen, und einige der Bits können der Anzahl von Bits entsprechen, die erforderlich sind, um ein Element innerhalb des ausgewählten Quellregisters zu indizieren. Einige der Bits können unverwendet oder reserviert bleiben. Die Bits, die von einer bestimmten K-Faktor-Vektorpermutation erforderlich sind, können mit der Maximalanzahl von möglichen Bits für einen Indexvektor oder ein Element eines Indexvektors verglichen werden. Ein Fehlerflag kann gesetzt werden, wenn die erforderlichen Bits den maximal möglichen Wert überschreiten.
  • Die Vektorpermutationseinheit kann einen beliebigen geeigneten Datentyp unterstützen, einschließlich unter anderem ein Byte, ein Wort, ein Doppelwort, ein Quadwort, Gleitkomma mit einzelner Genauigkeit oder Gleitkomma mit doppelter Genauigkeit. Die unterstützte Arbeitsspeicheradressierung kann einen beliebigen geeigneten Typ enthalten, einschließlich unter anderem 32-Bit- und 64-Bit-Adressierung. Der K-Faktor kann entweder als ein Parameter oder als ein Operand eines Befehls repräsentiert sein oder kann Teil des Namens oder der Bezeichnung des Befehls sein. Der K-Faktor kann durch einen beliebigen geeigneten Datentyp definiert sein, einschließlich eines unmittelbaren 8-Bit-Werts, eines Universalregisterwerts, der als ein Byte, Wort, Doppelwort oder Quadwort repräsentiert ist. Der Indexvektor kann durch den Vektorpermutationsbefehl als eine beliebige geeignete Quelle angegeben werden, einschließlich Arbeitsspeicher, eines SIMD-Registers oder eines aus einer Arbeitsspeicherposition geladenen Vektors.
  • In einer Ausführungsform können die Elemente des Zielregisters maskiert sein. Die Maske kann anzeigen, welches eine oder mehrere Elemente zu maskieren sind oder die gespeicherten Werte zu modifizieren hat. In einer Ausführungsform bleiben die gespeicherten Werte unverändert, falls die Maske festgelegt ist. In einer anderen Ausführungsform werden die gespeicherten Werte auf null gesetzt, falls die Maske festgelegt ist. In einer weiteren Ausführungsform kann die Maske dem Zielregister entsprechen. In noch einer anderen Ausführungsform kann die Maske nur einem Element des Zielregisters entsprechen.
  • Obwohl verschiedene Operationen in dieser Offenbarung als von bestimmten Komponenten des Prozessors 1802 beschrieben sind, kann die Funktionalität durch einen beliebigen geeigneten Abschnitt des Prozessors 1802 durchgeführt werden.
  • 19 veranschaulicht eine Beispieloperation des Systems 1800 und eine Implementierung verschiedener Abschnitte nach Ausführungsformen der vorliegenden Offenbarung.
  • In einer Ausführungsform können Vektordaten zufällig existieren. Die Vektordaten können dynamisch, statisch, fortlaufend oder auf eine beliebige andere geeignete Weise in den Arbeitsspeicher geladen werden. Die Vektordaten können ein Permutationsmuster zeigen, das den relativen Positionen von Elementen innerhalb der Vektordaten entspricht. In einer Ausführungsform kann das Permutationsmuster vor der Ausführung bekannt sein. In einer anderen Ausführungsform kann das Permutationsmuster vor der Ausführung nicht bekannt sein.
  • Der Arbeitsspeicher 1902 kann ein von einem Vektor indizierter Quellarbeitsspeicher sein, der ein beliebiger Typ von flüchtigem oder nichtflüchtigem computerlesbarem Medium sein kann. Die Menge an Arbeitsspeicher, die in das temporäre Ziel 1906 abzurufen ist, kann durch Berechnen der Anzahl an erforderlichen Bytes berechnet werden. In einer Ausführungsform kann der abgerufene Arbeitsspeicher 1902 die volle Breite des Quellarbeitsspeichers A sein. In einer anderen Ausführungsform kann der abgerufene Arbeitsspeicher 1902 eine lange fortlaufende Zeile sein, die aus mehreren Zwischenspeicherzeilen besteht. Der K-Faktor 1903 kann die Anzahl von Zeilen, Anzahl von Spalten, sowohl die Anzahl von Zeilen als auch Spalten oder einen anderen Wert in Bezug auf die Quelldaten repräsentieren. In einer Ausführungsform können die erforderlichen Bytes das Produkt der Größe des im Ziel-SIMD-Register 1910 zu speichernden Datentyps und des K-Faktors 1903 sein. In einer anderen Ausführungsform können die erforderlichen Bytes die Größe des im Ziel-SIMD-Register 1910 zu speichernden Datentyps und zwei zur Potenz des K-Faktors sein. In einer weiteren Ausführungsform können die erforderlichen Bytes das Produkt der Größe des SIMD-Registers und einer Form des K-Faktors ein, einschließlich des K-Faktors selbst oder zwei zur Potenz des K-Faktors.
  • Vektordaten können im Arbeitsspeicher und im temporären Ziel verstreut sein. Beispielsweise kann D0, das erste Element des Zielregisters 1910, in Zielregisterposition 1928 residieren, aber kann von Arbeitsspeicherposition 1912 bezogen werden. Gleichermaßen kann D1, das zweite Element des Zielregisters 1910, in Zielregisterposition 1930 residieren, aber kann von Arbeitsspeicherposition 1914 bezogen werden. Schließlich können D2 und D3, das zweite bzw. das dritte Element, in Zielregisterpositionen 1932 bzw. 1934 residieren, aber können von Arbeitsspeicherpositionen 1916 bzw. 1918 bezogen werden.
  • Die Vektordaten im temporären Ziel 1906 können als ein Zwischenspeicher implementiert sein oder Teil eines Zwischenspeichers des Prozessors 1802 sein. Die Vektorpermutationseinheit 1826 kann den Mischindex 1904 verwenden, um zu ermitteln, welche Vektordaten in das Zielregister 1910 zu laden sind. Beispielsweise kann IndexO 1920 ein bestimmtes Register im temporären Ziel und ein bestimmtes Element mit diesem bestimmten Register auswählen oder indizieren. In einer Ausführungsform sind die Werte in den Elementen D0, D1, D2 und D3 (1928, 1930, 1932 und 1934) einzigartig. In einer anderen Ausführungsform teilen sich mindestens zwei Elemente im Zielregister die Werte. Dementsprechend können die Indizes im Mischindex 1904 identisch sein. Beispielsweise können Index0 1920 und Index1 1922 identisch sein.
  • In einer weiteren Ausführungsform (nicht gezeigt) kann ein Element 1928, 1930, 1932 oder 1934 des Zielregisters 1910 maskiert sein. Die Maske kann verhindern, dass die Vektorpermutationseinheit 1826 einen Wert in das Element schreibt, oder zwingt die Vektorpermutationseinheit 1826 alles Null in das Element zu schreiben, wobei alle vorherigen Werte aus dem Feld des Zielregisters 1910 gelöscht werden.
  • 20 ist ein Blockdiagramm eines beispielhaften Verfahrens 2000 zur Vektorpermutation. Das Verfahren 2000 kann durch die in 1-19 beschriebenen Elemente implementiert sein. Das Verfahren 2000 kann von beliebigen geeigneten Kriterien initiiert werden und kann eine Operation an einem beliebigen geeigneten Punkt initiieren. In einer Ausführungsform kann das Verfahren 2000 eine Operation bei 2005 initiieren. Das Verfahren 2000 kann mehr oder weniger Schritte als die veranschaulichten enthalten. Darüber hinaus kann das Verfahren 2000 seine Schritte in einer anderen Reihenfolge als die unten veranschaulichten ausführen. Das Verfahren 2000 kann an einem beliebigen geeigneten Schritt enden. Ferner kann das Verfahren 2000 eine Operation an einem beliebigen geeigneten Schritt wiederholen. Das Verfahren 2000 kann beliebige seiner Schritte parallel zu anderen Schritten des Verfahrens 2000 oder in anderen Verfahren durchführen. Das Verfahren 2000 kann beliebige seiner Schritte an einem beliebigen Datenelement parallel mit anderen Datenelementen durchführen, sodass das Verfahren 2000 auf vektorisierte Art arbeitet.
  • Bei 2005 können in einer Ausführungsform ein oder mehrere Befehle empfangen werden, die für eine Vektorpermutation sind. Die Befehle können empfangen, decodiert, zugeteilt und ausgeführt werden. Die Befehle können spezifisch eine Handhabung durch eine Vektorpermutationseinheit 1826 anzeigen, oder es kann ermittelt werden, dass die Befehle von einer Vektorpermutationseinheit 1826 gehandhabt werden können. Eingaben, die zum Permutieren von Vektordaten relevant sind, können an eine Vektorpermutationseinheit zur Verarbeitung übergeben werden. 2005 kann beispielsweise von einem Front-End, einem Kern, einer Ausführungseinheit oder anderen geeigneten Elementen durchgeführt werden.
  • Bei 2010 kann die Anzahl von Elementen in einem Zielregister auf Grundlage der Größe des SIMD-Registers dividiert durch die Größe des in das Register gepackten Datentyps berechnet werden. Ein Elementzähler kann nachverfolgen, welches Element innerhalb des Zielregisters referenziert wird.
  • Bei 2015 kann die Anzahl von Indexbits pro Element berechnet werden. In einer Ausführungsform kann die Anzahl von pro Element des Zielregisters erforderlichen Indexbits unter Verwendung eines K-Faktors berechnet werden. In einer anderen Ausführungsform kann die Anzahl von pro Element des Zielregisters erforderlichen Indexbits unter Verwendung eines K-Faktors unter der Anzahl von Elementen in der bestimmten Quelle berechnet werden. In einer Ausführungsform kann die Anzahl von Indexbits für alle Elemente im Zielregister identisch sein.
  • Bei 2020 wird in einer Ausführungsform auf Grundlage der Größe des in das Zielregister gepackten Datentyps ermittelt, ob die Anzahl an pro Element erforderlichen Indexbits ungültig ist. In einer Ausführungsform kann dieser Fehler von einem Compiler entdeckt werden, der Zugriff auf die Größe des in das Zielregister gepackten Datentyps und die Anzahl der pro Element erforderlichen Indexbits haben kann. In einer anderen Ausführungsform kann dieser Fehler von einem Prozessor entdeckt werden, der Zugriff auf die Größe des in das Zielregister gepackten Datentyps und die Anzahl der pro Element erforderlichen Indexbits haben kann. Beispielsweise kann ein 512-Bit-Register 64 8-Bit-Werte enthalten, was 6 Bits erfordert, um jeden Wert zu indizieren. Ein K-Faktor von 8, was 3 zusätzlichen Bits zum Indizieren der richtigen Quelle entspricht, kann insgesamt 9 Bits erfordern. Ein 512-Bit-Indexregister kann jedoch nur 8 Bits für jeden der 64 Werte im Zielregister aufweisen. Deshalb kann die Anzahl von erforderlichen Indexbits ungültig sein. In einer anderen Ausführungsform kann die Anzahl von pro Element erforderlichen Indexbits per Definition nicht ungültig sein. Beispielsweise kann ein 512-Bit-Satz von Daten 64 8-Bit-Werte enthalten, was einem K-Faktor entspricht, der 6 Bits erfordert. Der Indexvektor kann dementsprechend mindestens 6 Bits für jedes Element im Zielregister aufweisen.
  • Bei 2025 kann in einer Ausführungsform ein Flag auf Grundlage der Ermittlung gesetzt werden, dass die Anzahl an pro Element erforderlichen Indexbits ungültig ist.
  • Bei 2030 kann in einer Ausführungsform die Anzahl von Bytes, die vom Arbeitsspeicher in den Zwischenspeicher zu kopieren ist, auf Grundlage von zumindest der Größe des Datentyps und des K-Faktors berechnet werden. Die Anzahl der Zwischenspeicherzeilen, die abzurufen ist, kann der Anzahl an Bytes, die zu kopieren ist, dividiert durch die Anzahl an Bytes pro Zwischenspeicherzeile entsprechen.
  • Bei 2035 kann in einer Ausführungsform die Anzahl an erforderlichen Bytes von einer Basisadresse im Arbeitsspeicher in ein temporäres Ziel kopiert werden. In einer Ausführungsform kann das temporäre Ziel ein Datenregister oder ein Satz von Datenregistern sein. In einer anderen Ausführungsform kann das temporäre Ziel ein Zwischenspeicher sein.
  • Bei 2040 kann in einer Ausführungsform der Offset für jedes Element auf Grundlage der Größe des Datentyps und einer Kennung für jedes Element berechnet werden.
  • Bei 2045 kann in einer Ausführungsform der Indexvektorbitbereich auf Grundlage des Elementoffsets und der Anzahl an pro Element erforderlichen Bits oder der Indexgröße berechnet werden.
  • Bei 2050 kann in einer Ausführungsform der Index auf Grundlage des Indexvektors und des Indexvektorbitbereichs ermittelt werden. Der Index kann der resultierende Wert sein, der im Indexvektor im Indexvektorbitbereich gespeichert ist.
  • Bei 2055 kann in einer Ausführungsform der temporäre Zieloffset auf Grundlage der Größe des Datentyps und des Index berechnet werden.
  • Bei 2060 kann in einer Ausführungsform der temporäre Zielbitbereich auf Grundlage der Größe des Datentyps und des temporären Zieloffsets berechnet werden.
  • Bei 2065 kann in einer Ausführungsform der Zielregisterbitbereich auf Grundlage der Größe des Datentyps und des Elementoffsets berechnet werden.
  • Bei 2070 wird in einer Ausführungsform ermittelt, ob jedes Element des Zielregisters von der Vektorpermutationseinheit 1826 maskiert ist, die einen Wert aus dem temporären Ziel schreibt.
  • Bei 2075 kann in einer Ausführungsform ein Element des temporären Ziels, das vom temporären Zielbitbereich indiziert ist, in ein Element des Zielregisters gespeichert werden, das vom temporären Zielregisterbitbereich indiziert ist, auf Grundlage der Ermittlung, dass das Element des Zielregisters nicht maskiert ist. Ein oder mehrere Befehle können beispielsweise durch eine Stilllegungseinheit stillgelegt werden. Das Verfahren 2000 kann optional wiederholt werden oder enden.
  • Ausführungsformen der hier offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination derartiger Implementierungsansätze implementiert werden. Ausführungsformen der Offenbarung können als Computerprogramme oder Programmcode implementiert werden, die auf programmierbaren Systemen ausgeführt werden, die mindestens einen Prozess, ein Speichersystem (das flüchtigen und nichtflüchtigen Speicher und/oder Speicherelemente enthält), mindestens eine Eingabeeinrichtung und mindestens eine Ausgabeeinrichtung umfassen.
  • Programmcode kann auf Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen durchzuführen und Ausgabeinformationen zu generieren. Die Ausgabeinformationen können auf eine oder mehrere Ausgabeeinrichtungen angewandt werden, auf bekannte Weise. Für Zwecke dieser Anmeldung kann ein Verarbeitungssystem ein beliebiges System enthalten, das einen Prozessor aufweist, wie zum Beispiel: einen digitalen Signalprozessor (DSP), einen Mikrocontroller, einen anwendungsspezifischen integrierten Schaltkreis (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren verfahrens- oder objektorientierten Programmiersprache implementiert werden, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann, falls gewünscht, auch in einer Assembler- oder Maschinensprache implementiert werden. Tatsächlich sind die hierin beschriebenen Mechanismen im Umfang nicht auf eine beliebige bestimmte Programmiersprache beschränkt. Auf jeden Fall kann die Sprache eine compilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch repräsentative Befehle implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik innerhalb des Prozessors repräsentiert, die, wenn sie von einer Maschine gelesen wird, bewirkt, dass die Maschine Logik erzeugt, um die hierin beschriebenen Techniken durchzuführen. Derartige Repräsentationen, bekannt als „IP-Kerne“, können auf einem greifbaren maschinenlesbaren Medium gespeichert und verschiedenen Kunden oder Herstellungseinrichtungen bereitgestellt werden, um sie in die Herstellungsmaschinen zu laden, die die Logik oder den Prozessor tatsächlich herstellen.
  • Derartige maschinenlesbare Speichermedien können nicht-transitorische, greifbare Anordnungen von einer Maschine oder Einrichtung gefertigte oder gebildete Artikel enthalten, die Speichermedien wie Festplatten, irgendeinen anderen Typ von Platte einschließlich Disketten, optische Platten, Compact Disc Read-Only Memories (CD-ROMs), wiederbeschreibbare Compact Discs (CD-RWs) und magneto-optische Platten, Halbleiterbauelemente wie schreibgeschützte Arbeitsspeicher (ROMs), Arbeitsspeicher mit wahlfreiem Zugriff (RAMs) wie dynamische Arbeitsspeicher mit wahlfreiem Zugriff (DRAMs), statische Arbeitsspeicher mit wahlfreiem Zugriff (SRAMs), löschbare programmierbare schreibgeschützte Arbeitsspeicher (EPROMs), Flashspeicher, elektrisch löschbare programmierbare schreibgeschützte Arbeitsspeicher (EEPROMs), magnetische oder optische Karten oder irgendeinen anderen, zur Speicherung von elektronischen Befehlen geeigneten Medientyp enthalten, sind jedoch nicht darauf beschränkt.
  • Dementsprechend können Ausführungsformen der Offenbarung auch nicht-transitorische, greifbare maschinenlesbare Medien enthalten, die Befehle enthalten oder die Designdaten enthalten, wie Hardwarebeschreibungssprache (HDL), die hierin beschriebene Strukturen, Schaltkreise, Vorrichtungen, Prozessoren und/oder Systemmerkmale definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • In einigen Fällen kann ein Befehlswandler verwendet werden, um einen Befehl von einem Quellbefehlssatz in einen Zielbefehlssatz umzuwandeln. Zum Beispiel kann der Befehlswandler einen Befehl in einen oder mehrere andere Befehle, die vom Kern verarbeitet werden sollen, übersetzen (z. B. unter Verwendung statischer binärer Übersetzung, dynamischer binärer Übersetzung einschließlich dynamischer Kompilierung), morphen, emulieren oder auf andere Weise umwandeln. Der Befehlswandler kann in Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. Der Befehlswandler kann sich auf dem Prozessor, außerhalb des Prozessors oder teilweise auf und teilweise außerhalb des Prozessors befinden.
  • Deshalb werden Techniken zum Durchführen eines oder mehrerer Befehle nach mindestens einer Ausführungsform offenbart. Während bestimmte Ausführungsbeispiele in den beigefügten Zeichnungen beschrieben und gezeigt wurden, versteht es sich, dass derartige Ausführungsformen lediglich andere Ausführungsformen veranschaulichen und nicht einschränken, und dass derartige Ausführungsformen nicht auf die spezifischen Konstruktionen und Anordnungen beschränkt sind, die gezeigt und beschrieben werden, da Fachleuten beim Studium dieser Offenbarung verschiedene andere Modifikationen einfallen können. In einem Technologiebereich wie diesem, wo das Wachstum rasch ist und weitere Fortschritte nicht leicht vorhersehbar sind, können die offenbarten Ausführungsformen in Anordnung und Detail leicht modifizierbar sein, was durch Ermöglichen technologischer Fortschritte erleichtert wird, ohne von den Prinzipien der vorliegenden Offenbarung oder dem Geltungsbereich der begleitenden Ansprüche abzuweichen.
  • In einigen Ausführungsformen der vorliegenden Offenbarung kann ein Prozessor ein Front-End, um einen Befehl zu decodieren, eine Ausführungseinheit und eine Zuteilungseinheit oder einen anderen Mechanismus zum Zuordnen des Befehls an die Ausführungseinheit zum Ausführen des Befehls enthalten, mit Zugriff auf einen Arbeitsspeicher. Der Befehl kann dazu dienen, Vektordaten in ein Zielregister zu permutieren. Das Zielregister kann zum Speichern einer Vielzahl von Elementen mit einer Elementgröße dienen, die einer Größe eines der Elemente im Zielregister entspricht. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine erste Logik enthalten, die zum Berechnen einer Elementanzahl auf Grundlage einer Größe des Zielregisters und der Elementgröße dienen kann. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine zweite Logik enthalten, die zum Berechnen einer Indexgröße auf Grundlage zumindest eines Permutationsfaktors dienen kann. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine dritte Logik enthalten, die zum Berechnen einer einer Byteanzahl auf Grundlage von zumindest der Elementgröße und des Permutationsfaktors dienen kann. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine Identifikation eines temporären Ziels enthalten. Das temporäre Ziel kann zum Speichern von Daten einer Größe dienen, die der Byteanzahl entspricht, befindlich an einer Basisadresse im Arbeitsspeicher. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine fünfte Logik enthalten, die zum Berechnen eines Offsets durch Multiplizieren des Index mit der Elementgröße dient. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine sechste Logik enthalten, die zum Ermitteln einer Teilmenge des temporären Ziels auf Grundlage des Offsets und der Elementgröße dienen kann. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine siebente Logik zum Speichern der Teilmenge in einem der Elemente im Zielregister auf Grundlage des Elementzählers und der Elementgröße enthalten.
  • In Kombination mit beliebigen der obigen Ausführungsformen kann die berechnete Indexgröße in einer Ausführungsform auf der Elementanzahl beruhen. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine achte Logik enthalten, die zum Ermitteln davon dienen kann, ob zumindest eines der Elemente im Zielregister maskiert ist, und die siebente Logik, die zum Speichern der Teilmenge in einem der Elemente des Zielregisters dienen kann, beruht ferner auf der Ermittlung, dass das Element maskiert ist. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor in einer Ausführungsform eine Quellregisteranzahl repräsentieren und die zweite Logik kann zum Berechnen der Indexgröße durch Subtrahieren von eins vom Logarithmus des Permutationsfaktors zur Basis zwei dienen. Die Quellregisteranzahl kann Daten entsprechen, die in das Zielregister zu permutieren sind. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor in einer Ausführungsform eine Quellregister-Indexgröße repräsentieren. Die Quellregister-Indexgröße kann einer Quellregisteranzahl entsprechen, die Daten entspricht, die in das Zielregister zu permutieren sind. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor in einer Ausführungsform vom Befehl definiert sein. In Kombination mit beliebigen der obigen Ausführungsformen kann das temporäre Ziel in einer Ausführungsform ein Datenzwischenspeicher sein. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor in einer Ausführungsform durch eine Eingabe in den Befehl definiert sein. In Kombination mit beliebigen der obigen Ausführungsformen ist das temporäre Ziel in einer Ausführungsform ein Datenzwischenspeicher.
  • In einigen der vorliegenden Beispeilen kann ein Verfahren ein Festlegen einer Elementgröße enthalten. Die Elementgröße kann einer Größe von einem von einer Vielzahl von Elementen in einem Zielregister entsprechen. In Kombination mit beliebigen der obigen Ausführungsformen kann das Verfahren in einem Beispiel ein Berechnen einer Elementanzahl auf Grundlage einer Größe des Zielregisters und der Elementgröße enthalten. In Kombination mit beliebigen der obigen Ausführungsformen kann das Verfahren in einem Beispiel ein Berechnen einer Indexgröße auf Grundlage zumindest eines Permutationsfaktors enthalten. In Kombination mit beliebigen der obigen Ausführungsformen kann das Verfahren in einem Beispiel ein Berechnen einer einer Byteanzahl auf Grundlage von zumindest der Elementgröße und des Permutationsfaktors enthalten. In Kombination mit beliebigen der obigen Ausführungsformen kann das Verfahren in einem Beispiel ein Speichern von Daten in einer Größe, die der Byteanzahl entspricht, befindlich an einer Basisadresse in einem Arbeitsspeicher, in ein temporäres Ziel enthalten. In Kombination mit beliebigen der obigen Ausführungsformen kann das Verfahren in einem Beispiel ein Berechnen eines Offsets durch Multiplizieren des Index mit der Elementgröße enthalten. In Kombination mit beliebigen der obigen Ausführungsformen kann das Verfahren in einem Beispiel ein Ermitteln einer Teilmenge des temporären Ziels auf Grundlage des Offsets und der Elementgröße enthalten. In Kombination mit beliebigen der obigen Ausführungsformen kann das Verfahren in einem Beispiel ein Speichern der Teilmenge in eines der Elemente im Zielregister auf Grundlage des Elementzählers und der Elementgröße enthalten.
  • In Kombination mit beliebigen der obigen Ausführungsformen kann das Verfahren in einem Beispiel ein Berechnen der Indexgröße auf Grundlage der Elementanzahl enthalten. In Kombination mit beliebigen der obigen Ausführungsformen kann das Verfahren in einem Beispiel ein Ermitteln davon, ob zumindest eines der Elemente im Zielregister maskiert ist, und das Modifizieren des mindestens einen der Elemente des Zielregisters auf Grundlage der Ermittlung enthalten, dass das Element maskiert ist. In Kombination mit beliebigen der obigen Ausführungsformen kann das Verfahren in einem Beispiel ein Definieren des Permutationsfaktors als eine Quellregisteranzahl, die in das Zielregister zu permutieren ist, und ein Berechnen der Indexgröße durch Subtrahieren von eins vom Logarithmus des Permutationsfaktors zur Basis zwei enthalten. In Kombination mit beliebigen der obigen Ausführungsformen kann das Verfahren in einem Beispiel ein Definieren des Permutationsfaktors als eine Quellregister-Indexgröße enthalten. Die Quellregister-Indexgröße kann einer Quellregisteranzahl entsprechen, die in das Zielregister zu permutieren ist. In Kombination mit beliebigen der obigen Ausführungsformen kann das Verfahren in einem Beispiel ein Verwenden eines temporären Ziels enthalten, das ein Datenzwischenspeicher ist.
  • In einigen Ausführungsformen der vorliegenden Offenbarung kann ein System ein Front-End, um einen Befehl zu decodieren, eine Ausführungseinheit und eine Zuteilungseinheit oder einen anderen Mechanismus zum Zuordnen des Befehls an die Ausführungseinheit zum Ausführen des Befehls enthalten, mit Zugriff auf einen Arbeitsspeicher. Der Befehl kann dazu dienen, Vektordaten in ein Zielregister zu permutieren. Das Zielregister kann zum Speichern einer Vielzahl von Elementen mit einer Elementgröße dienen, die einer Größe eines der Elemente im Zielregister entspricht. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine erste Logik enthalten, die zum Berechnen einer Elementanzahl auf Grundlage einer Größe des Zielregisters und der Elementgröße dienen kann. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine zweite Logik enthalten, die zum Berechnen einer Indexgröße auf Grundlage zumindest eines Permutationsfaktors dienen kann. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine dritte Logik enthalten, die zum Berechnen einer einer Byteanzahl auf Grundlage von zumindest der Elementgröße und des Permutationsfaktors dienen kann. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine Identifikation eines temporären Ziels enthalten. Das temporäre Ziel kann zum Speichern von Daten einer Größe dienen, die der Byteanzahl entspricht, befindlich an einer Basisadresse im Arbeitsspeicher. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine fünfte Logik enthalten, die zum Berechnen eines Offsets durch Multiplizieren des Index mit der Elementgröße dient. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine sechste Logik enthalten, die zum Ermitteln einer Teilmenge des temporären Ziels auf Grundlage des Offsets und der Elementgröße dienen kann. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine siebente Logik zum Speichern der Teilmenge in einem der Elemente im Zielregister auf Grundlage des Elementzählers und der Elementgröße enthalten.
  • In Kombination mit beliebigen der obigen Ausführungsformen kann die berechnete Indexgröße in einer Ausführungsform auf der Elementanzahl beruhen. In Kombination mit beliebigen der obigen Ausführungsformen kann die Ausführungseinheit in einer Ausführungsform eine achte Logik enthalten, die zum Ermitteln davon dienen kann, ob zumindest eines der Elemente im Zielregister maskiert ist, und die siebente Logik, die zum Speichern der Teilmenge in einem der Elemente des Zielregisters dienen kann, beruht ferner auf der Ermittlung, dass das Element maskiert ist. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor in einer Ausführungsform eine Quellregisteranzahl repräsentieren und die zweite Logik kann zum Berechnen der Indexgröße durch Subtrahieren von eins vom Logarithmus des Permutationsfaktors zur Basis zwei dienen. Die Quellregisteranzahl kann Daten entsprechen, die in das Zielregister zu permutieren sind. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor in einer Ausführungsform eine Quellregister-Indexgröße repräsentieren. Die Quellregister-Indexgröße kann einer Quellregisteranzahl entsprechen, die Daten entspricht, die in das Zielregister zu permutieren sind. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor in einer Ausführungsform vom Befehl definiert sein. In Kombination mit beliebigen der obigen Ausführungsformen kann das temporäre Ziel in einer Ausführungsform ein Datenzwischenspeicher sein. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor in einer Ausführungsform durch eine Eingabe in den Befehl definiert sein. In Kombination mit beliebigen der obigen Ausführungsformen ist das temporäre Ziel in einer Ausführungsform ein Datenzwischenspeicher.
  • In einigen Ausführungsformen der vorliegenden Offenbarung kann eine Vektorpermutationseinheit eine Elementgröße enthalten. Die Elementgröße kann einer Größe von einem von einer Vielzahl von Elementen in einem Zielregister entsprechen. In Kombination mit beliebigen der obigen Ausführungsformen, kann die Vektorpermutationseinheit in einer Ausführungsform eine erste Logik enthalten, die zum Berechnen einer Elementanzahl auf Grundlage einer Größe des Zielregisters und der Elementgröße dienen kann. In Kombination mit beliebigen der obigen Ausführungsformen, kann die Vektorpermutationseinheit in einer Ausführungsform eine zweite Logik enthalten, die zum Berechnen einer Indexgröße auf Grundlage zumindest eines Permutationsfaktors dienen kann. In Kombination mit beliebigen der obigen Ausführungsformen, kann die Vektorpermutationseinheit in einer Ausführungsform eine dritte Logik enthalten, die zum Berechnen einer einer Byteanzahl auf Grundlage von zumindest der Elementgröße und des Permutationsfaktors dienen kann. In Kombination mit beliebigen der obigen Ausführungsformen kann die Vektorpermutationseinheit in einer Ausführungsform eine Identifikation eines temporären Ziels enthalten. Das temporäre Ziel kann zum Speichern von Daten einer Größe dienen, die der Byteanzahl entspricht, befindlich an einer Basisadresse im Arbeitsspeicher. In Kombination mit beliebigen der obigen Ausführungsformen, kann die Vektorpermutationseinheit in einer Ausführungsform eine fünfte Logik enthalten, die zum Berechnen eines Offsets durch Multiplizieren des Index mit der Elementgröße dient. In Kombination mit beliebigen der obigen Ausführungsformen kann die Vektorpermutationseinheit in einer Ausführungsform eine sechste Logik enthalten, die zum Ermitteln einer Teilmenge des temporären Ziels auf Grundlage des Offsets und der Elementgröße dienen kann. In Kombination mit beliebigen der obigen Ausführungsformen kann die Vektorpermutationseinheit in einer Ausführungsform eine siebente Logik enthalten, die zum Speichern der Teilmenge in einem der Elemente im Zielregister auf Grundlage des Elementzählers und der Elementgröße dienen kann.
  • In Kombination mit beliebigen der obigen Ausführungsformen kann die berechnete Indexgröße in einer Ausführungsform auf der Elementanzahl beruhen. In Kombination mit beliebigen der obigen Ausführungsformen kann die Vektorpermutationseinheit in einer Ausführungsform eine siebente Logik enthalten, die zum Ermitteln davon dienen kann, ob zumindest eines der Elemente im Zielregister maskiert ist, und das mindestens eine der Elemente des Zielregisters kann auf Grundlage der Ermittlung davon modifiziert werden, dass das Element maskiert ist. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor in einer Ausführungsform eine Quellregisteranzahl repräsentieren und die zweite Logik kann zum Berechnen der Indexgröße durch Subtrahieren von eins vom Logarithmus des Permutationsfaktors zur Basis zwei dienen. Die Quellregisteranzahl kann Daten entsprechen, die in das Zielregister zu permutieren sind. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor in einer Ausführungsform eine Quellregister-Indexgröße repräsentieren. Die Quellregister-Indexgröße kann einer Quellregisteranzahl entsprechen, die Daten entsprechen kann, die in das Zielregister zu permutieren sind. In Kombination mit beliebigen der obigen Ausführungsformen kann das temporäre Ziel in einer Ausführungsform ein Datenzwischenspeicher sein. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor eine Eingabe in die Vektorpermutationseinheit sein. In Kombination mit beliebigen der obigen Ausführungsformen ist das temporäre Ziel in einer Ausführungsform ein Datenzwischenspeicher.
  • In einigen Ausführungsformen der vorliegenden Offenbarung kann eine Vorrichtung ein Mittel zum Definieren einer Elementgröße enthalten. Die Elementgröße kann einer Größe von einem von einer Vielzahl von Elementen in einem Zielmittel entsprechen. In Kombination mit beliebigen der obigen Ausführungsformen kann die Vorrichtung in einer Ausführungsform ein Mittel zum Berechnen einer Elementanzahl auf Grundlage einer Größe des Zielmittels und der Elementgröße enthalten. In Kombination mit beliebigen der obigen Ausführungsformen kann die Vorrichtung in einer Ausführungsform ein Mittel zum Berechnen einer Indexgröße auf Grundlage zumindest eines Permutationsfaktors enthalten. In Kombination mit beliebigen der obigen Ausführungsformen kann die Vorrichtung in einer Ausführungsform ein Mittel zum Berechnen einer einer Byteanzahl auf Grundlage von zumindest der Elementgröße und des Permutationsfaktors enthalten. In Kombination mit beliebigen der obigen Ausführungsformen kann die Vorrichtung in einer Ausführungsform ein Mittel zum Speichern temporärer Daten enthalten. Das Mittel zum Speichern temporärer Daten kann ein Mittel zum Speichern von Daten einer Größe sein, die der Byteanzahl entspricht, befindlich an einer Basisadresse im Arbeitsspeicher. In Kombination mit beliebigen der obigen Ausführungsformen kann die Vorrichtung in einer Ausführungsform ein Mittel zum Berechnen eines Offsets durch Multiplizieren des Index mit der Elementgröße enthalten. In Kombination mit beliebigen der obigen Ausführungsformen kann die Vorrichtung in einer Ausführungsform ein Mittel zum Ermitteln einer Teilmenge des Mittels zum Speichern temporärer Daten auf Grundlage des Offsets und der Elementgröße enthalten. In Kombination mit beliebigen der obigen Ausführungsformen kann die Vorrichtung in einer Ausführungsform ein Speichermittel zum Speichern der Teilmenge in einem der Elemente im Zielmittel auf Grundlage des Elementzählers und der Elementgröße enthalten.
  • In Kombination mit beliebigen der obigen Ausführungsformen kann die berechnete Indexgröße in einer Ausführungsform auf der Elementanzahl beruhen. In Kombination mit beliebigen der obigen Ausführungsformen kann die Vorrichtung in einer Ausführungsform ein Mittel zum Ermitteln, ob zumindest eines der Elemente im Zielmittel maskiert ist, und ein Mittel zum Modifizieren des mindestens einen der Elemente des Zielregisters auf Grundlage der Ermittlung enthalten, dass das Element maskiert ist. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor in einer Ausführungsform eine Quellregisteranzahl repräsentieren und das Mittel zum Berechnen der Indexgröße kann die Indexgröße durch Subtrahieren von eins vom Logarithmus des Permutationsfaktors zur Basis zwei berechnen. Die Quellregisteranzahl kann Daten entsprechen, die in das Zielmittel zu permutieren sind. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor in einer Ausführungsform eine Quellregister-Indexgröße repräsentieren. Die Quellregister-Indexgröße kann einer Quellregisteranzahl entsprechen, die Daten entsprechen kann, die in das Zielmittel zu permutieren sind. In Kombination mit beliebigen der obigen Ausführungsformen kann das Mittel zum Speichern temporärer Daten in einer Ausführungsform ein Datenzwischenspeicher sein. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor in einer Ausführungsform eine Eingabe in die Vorrichtung sein. In Kombination mit beliebigen der obigen Ausführungsformen kann der Permutationsfaktor eine Eingabe in die Vektorpermutationseinheit sein.

Claims (14)

  1. Prozessor, umfassend: ein Front-End zum Decodieren eines Befehls, wobei der Befehl Vektordaten in ein Zielregister zum Speichern einer Vielzahl von Elementen mit einer Elementgröße zu permutieren hat, die einer Größe eines der Elemente im Zielregister entspricht; eine Ausführungseinheit; eine Zuteilungseinheit zum Zuordnen des Befehls zur Ausführungseinheit zum Ausführen des Befehls mit Zugriff auf einen Arbeitsspeicher; wobei die Ausführungseinheit enthält: eine erste Logik zum Berechnen einer Elementanzahl auf Grundlage einer Größe des Zielregisters und der Elementgröße; eine zweite Logik zum Berechnen einer Indexgröße auf Grundlage zumindest eines Permutationsfaktors; eine dritte Logik zum Berechnen einer Byteanzahl auf Grundlage von zumindest der Elementgröße und des Permutationsfaktors; eine Identifikation eines temporären Ziels zum Speichern von Daten einer Größe, die der Byteanzahl entspricht, befindlich an einer Basisadresse im Arbeitsspeicher; eine vierte Logik zum Ermitteln eines Index aus einem Indexvektor auf Grundlage der Indexgröße und eines Elementzählers, der einem der Elemente im Zielregister entspricht; eine fünfte Logik zum Berechnen eines Offsets durch Multiplizieren des Index mit der Elementgröße; eine sechste Logik zum Ermitteln einer Teilmenge des temporären Ziels auf Grundlage des Offsets und der Elementgröße; und eine siebente Logik zum Speichern der Teilmenge in einem der Elemente im Zielregister auf Grundlage des Elementzählers und der Elementgröße.
  2. Prozessor nach Anspruch 1, wobei die berechnete Indexgröße ferner auf der Elementanzahl beruht.
  3. Prozessor nach Anspruch 1, wobei die Ausführungseinheit ferner eine achte Logik zum Ermitteln enthält, ob zumindest eines der Elemente im Zielregister maskiert ist, und wobei die siebente Logik zum Speichern der Teilmenge in einem der Elemente des Zielregisters ferner auf der Ermittlung beruht, dass das Element maskiert ist.
  4. Prozessor nach Anspruch 1, wobei der Permutationsfaktor eine Quellregisteranzahl zu repräsentieren hat, die in das Zielregister zu permutieren ist, und wobei die zweite Logik ferner die Indexgröße durch Subtrahieren von eins vom Logarithmus des Permutationsfaktors zur Basis zwei berechnet.
  5. Prozessor nach Anspruch 1, wobei der Permutationsfaktor eine Quellregister-Indexgröße zu repräsentieren hat, die einer Quellregisteranzahl entspricht, die in das Zielregister zu permutieren ist.
  6. Prozessor nach Anspruch 1, wobei der Permutationsfaktor vom Befehl definiert ist.
  7. Prozessor nach Anspruch 1, wobei das temporäre Ziel ein Datenzwischenspeicher ist.
  8. Vektorpermutationseinheit, umfassend: eine Elementgröße, die einer Größe von einem von einer Vielzahl von Elementen in einem Zielregister entspricht; eine erste Logik zum Berechnen einer Elementanzahl auf Grundlage einer Größe des Zielregisters und der Elementgröße; eine zweite Logik zum Berechnen einer Indexgröße auf Grundlage zumindest eines Permutationsfaktors; eine dritte Logik zum Berechnen einer Byteanzahl auf Grundlage von zumindest der Elementgröße und des Permutationsfaktors; eine Identifikation eines temporären Ziels zum Speichern von Daten einer Größe, die der Byteanzahl entspricht, befindlich an einer Basisadresse in einem Arbeitsspeicher; eine vierte Logik zum Ermitteln eines Index aus einem Indexvektor auf Grundlage der Indexgröße und eines Elementzählers, der einem der Elemente im Zielregister entspricht; eine fünfte Logik zum Berechnen eines Offsets durch Multiplizieren des Index mit der Elementgröße; eine sechste Logik zum Ermitteln einer Teilmenge des temporären Ziels auf Grundlage des Offsets und der Elementgröße; und eine siebente Logik zum Speichern der Teilmenge in einem der Elemente im Zielregister auf Grundlage des Elementzählers und der Elementgröße.
  9. Vektorpermutationseinheit nach Anspruch 8, wobei die berechnete Indexgröße ferner auf der Elementanzahl beruht.
  10. Vektorpermutationseinheit nach Anspruch 8, ferner umfassend eine achte Logik zum Ermitteln, ob zumindest eines der Elemente im Zielregister maskiert ist, und wobei die siebente Logik zum Speichern der Teilmenge in einem der Elemente des Zielregisters ferner auf der Ermittlung beruht, dass das Element maskiert ist.
  11. Vektorpermutationseinheit nach Anspruch 8, wobei der Permutationsfaktor eine Quellregisteranzahl zu repräsentieren hat, die in das Zielregister zu permutieren ist, und wobei die zweite Logik ferner die Indexgröße durch Subtrahieren von eins vom Logarithmus des Permutationsfaktors zur Basis zwei berechnet.
  12. Vektorpermutationseinheit nach Anspruch 8, wobei der Permutationsfaktor eine Quellregister-Indexgröße zu repräsentieren hat, die einer Quellregisteranzahl entspricht, die in das Zielregister zu permutieren ist.
  13. Vektorpermutationseinheit nach Anspruch 8, wobei das temporäre Ziel ein Datenzwischenspeicher ist.
  14. Vektorpermutationseinheit nach Anspruch 8, wobei der Permutationsfaktor eine Eingabe in die Vektorpermutationseinheit ist.
DE202016009013.6U 2015-12-20 2016-11-18 Befehle und Logik für Vektorpermutation Active DE202016009013U1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/975,804 2015-12-20
US14/975,804 US10467006B2 (en) 2015-12-20 2015-12-20 Permutating vector data scattered in a temporary destination into elements of a destination register based on a permutation factor

Publications (1)

Publication Number Publication Date
DE202016009013U1 true DE202016009013U1 (de) 2021-06-16

Family

ID=59065072

Family Applications (1)

Application Number Title Priority Date Filing Date
DE202016009013.6U Active DE202016009013U1 (de) 2015-12-20 2016-11-18 Befehle und Logik für Vektorpermutation

Country Status (6)

Country Link
US (1) US10467006B2 (de)
EP (1) EP3391206A4 (de)
CN (1) CN108292271B (de)
DE (1) DE202016009013U1 (de)
TW (1) TWI723075B (de)
WO (1) WO2017112170A1 (de)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US10216515B2 (en) * 2016-10-18 2019-02-26 Oracle International Corporation Processor load using a bit vector to calculate effective address
WO2019136454A1 (en) * 2018-01-08 2019-07-11 Atlazo, Inc. Compact arithmetic accelerator for data processing devices, systems and methods
US11488002B2 (en) 2018-02-15 2022-11-01 Atlazo, Inc. Binary neural network accelerator engine methods and systems
US11900111B2 (en) * 2021-09-24 2024-02-13 Qualcomm Incorporated Permutation instruction

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5887183A (en) * 1995-01-04 1999-03-23 International Business Machines Corporation Method and system in a data processing system for loading and storing vectors in a plurality of modes
US5933650A (en) 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6446198B1 (en) 1999-09-30 2002-09-03 Apple Computer, Inc. Vectorized table lookup
US20040054877A1 (en) * 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US7725678B2 (en) 2005-02-17 2010-05-25 Texas Instruments Incorporated Method and apparatus for producing an index vector for use in performing a vector permute operation
WO2007057832A2 (en) 2005-11-15 2007-05-24 Nxp B.V. Vector shuffle unit
US20070226469A1 (en) 2006-03-06 2007-09-27 James Wilson Permutable address processor and method
CN101072349B (zh) * 2006-06-08 2012-10-10 威盛电子股份有限公司 内容适应性可变长度编码的解码系统与方法
US8700884B2 (en) * 2007-10-12 2014-04-15 Freescale Semiconductor, Inc. Single-instruction multiple-data vector permutation instruction and method for performing table lookups for in-range index values and determining constant values for out-of-range index values
US8051226B2 (en) 2008-06-13 2011-11-01 Freescale Semiconductor, Inc. Circular buffer support in a single instruction multiple data (SIMD) data processor
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
CN103827813B (zh) * 2011-09-26 2016-09-21 英特尔公司 用于提供向量分散操作和聚集操作功能的指令和逻辑
CN104094182B (zh) * 2011-12-23 2017-06-27 英特尔公司 掩码置换指令的装置和方法
WO2013095669A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Multi-register scatter instruction
CN104040489B (zh) * 2011-12-23 2016-11-23 英特尔公司 多寄存器收集指令
CN104011616B (zh) * 2011-12-23 2017-08-29 英特尔公司 改进置换指令的装置和方法
CN107092465B (zh) * 2011-12-23 2021-06-29 英特尔公司 用于提供向量混合和置换功能的指令和逻辑
US9342479B2 (en) * 2012-08-23 2016-05-17 Qualcomm Incorporated Systems and methods of data extraction in a vector processor
GB2509055B (en) * 2012-12-11 2016-03-23 Gurulogic Microsystems Oy Encoder and method
EP2941891B1 (de) * 2013-01-04 2020-09-16 GE Video Compression, LLC Effiziente skalierbare codierungskonzept
US9244684B2 (en) * 2013-03-15 2016-01-26 Intel Corporation Limited range vector memory access instructions, processors, methods, and systems
US9823925B2 (en) * 2014-03-28 2017-11-21 Intel Corporation Instruction and logic for a logical move in an out-of-order processor
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

Also Published As

Publication number Publication date
CN108292271A (zh) 2018-07-17
TW201732548A (zh) 2017-09-16
TWI723075B (zh) 2021-04-01
EP3391206A1 (de) 2018-10-24
US20170177357A1 (en) 2017-06-22
EP3391206A4 (de) 2020-05-06
WO2017112170A1 (en) 2017-06-29
US10467006B2 (en) 2019-11-05
CN108292271B (zh) 2024-03-29

Similar Documents

Publication Publication Date Title
DE202016009016U1 (de) Befehle und Logik für wiederkehrende benachbarte Sammlungen
DE112016004960T5 (de) Befehl und logik, um informationen im voraus aus einem beständigen speicher zu holen
DE112017004911T5 (de) Anweisung und Logik für die Erkennung eines numerischen Ansammlungsfehlers
DE102013021221A1 (de) Befehle und Logik zur Vektorisierung von bedingten Schleifen
DE102015006863A1 (de) Befehle und Logik zum Unterbrechen und Wiederaufnehmen von Paging in Secure Enclaves
DE112011105664T5 (de) Instruktion und Logik zum Bereitstellen einer Vektorstreuungs-Op- und -Hol-Op-Funktionalität
DE112013004867T5 (de) Befehl und Logik zum Bereitstellen von Push-Puffer-Kopier- und Speicher-Funktionalität
DE102018000886A1 (de) Virtuelle Maschinenkommunikation auf Hardware-Basis
DE112017001825T5 (de) Prozessoren, verfahren, systeme und instruktionen zum atomischen speichern von daten, die breiter als eine nativ unterstützte datenbreite sind, in einem speicher
DE112016007566T5 (de) Systeme, Verfahren und Vorrichtungen zur heterogenen Berechnung
DE102014003795A1 (de) Verfahren und Vorrichtungen für Fusionsbefehle zur Bereitstellung der OR-Test- und AND-Test-Funktionalität auf mehreren Testquellen
DE102014004563A1 (de) Befehle und Logik zur Bereitstellung verbesserter Paging-Fähigkeiten für Secure Enclave-Seitencaches
DE112013005416T5 (de) Verfahren, Vorrichtungen, Befehle und Logik zum Bereitstellen von Vektoradressenkonflikt-Detektionsfunktionalität
DE112011105666T5 (de) Befehl und Logik zum Bereitstellen von Vektor-Lade-OP/Speicher-OP mit Schritt-Funktionalität
DE102013018238A1 (de) Anweisung und Logik zum Bereitstellen einer Vektorkompressions- und Rotationsfunktionalität
DE102014003689A1 (de) Verfolgung des kontrollflusses von befehlen
DE112011105665T5 (de) Befehl und Logik zum Liefern von Vektorladen und -speichern mit Schritt- und Maskierfunktionalität
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE102014003563A1 (de) Fusionierbare befehle und logik zum versehen mit or-test- und and-test-funktionalität unter benutzen von mehrfachtestquellen
DE112013003743T5 (de) Beschleunigte spurübergreifende Vektorreduzierungsbefehle
DE112013005131T5 (de) Verfahren, Vorrichtung, System zur automatischen Abstimmung von Coderegionen
US10338920B2 (en) Instructions and logic for get-multiple-vector-elements operations
DE112013007702T5 (de) Befehl und Logik für den Speicherzugriff in einer geclusterten Maschine mit breiter Ausführung
DE202016009013U1 (de) Befehle und Logik für Vektorpermutation
DE102018001229A1 (de) Beschleunigerschaltung mit variabler Wortlänge für ein neuronales Netzwerk

Legal Events

Date Code Title Description
R150 Utility model maintained after payment of first maintenance fee after three years
R207 Utility model specification
R151 Utility model maintained after payment of second maintenance fee after six years