DE112011105664T5 - Instruktion und Logik zum Bereitstellen einer Vektorstreuungs-Op- und -Hol-Op-Funktionalität - Google Patents

Instruktion und Logik zum Bereitstellen einer Vektorstreuungs-Op- und -Hol-Op-Funktionalität Download PDF

Info

Publication number
DE112011105664T5
DE112011105664T5 DE112011105664.8T DE112011105664T DE112011105664T5 DE 112011105664 T5 DE112011105664 T5 DE 112011105664T5 DE 112011105664 T DE112011105664 T DE 112011105664T DE 112011105664 T5 DE112011105664 T5 DE 112011105664T5
Authority
DE
Germany
Prior art keywords
register
data
value
memory
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
DE112011105664.8T
Other languages
English (en)
Inventor
Kshitij A. Doshi
Charles R. Yount
Elmoustapha Ould-Ahmed-Vall
Suleyman Sair
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 DE112011105664T5 publication Critical patent/DE112011105664T5/de
Ceased legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8061Details on data memory access
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3875Pipelining a single stage, e.g. superpipelining

Abstract

Instruktionen und Logik stellen eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereit. In einigen Ausführungsformen lesen Ausführungseinheiten in Reaktion auf eine Instruktion, die eine Hol- und eine zweite Operation, ein Zielregister, ein Operandenregister und eine Speicheradresse spezifiziert, Werte in einem Maskenregister, wobei Felder in dem Maskenregister Versatzindizes in dem Indizesregister für Datenelemente im Speicher entsprechen. Ein erster Maskenwert gibt an, dass das Element nicht aus dem Speicher geholt wurde, und ein zweiter Wert gibt an, dass das Element nicht geholt zu werden braucht oder bereits geholt wurde. Für jedes mit dem ersten Wert wird das Datenelement aus dem Speicher in die entsprechende Zielregisterposition geholt, und der entsprechende Wert in dem Maskenregister wird zu dem zweiten Wert geändert. Wenn alle Maskenregisterfelder den zweiten Wert haben, so wird die zweite Operation unter Verwendung entsprechender Daten in den Zielort- und Operandenregistern ausgeführt, um Ergebnisse zu generieren.

Description

  • GEBIET DER OFFENBARUNG
  • Die vorliegende Offenbarung betrifft das Gebiet der Verarbeitungslogik, der Mikroprozessoren und der damit verbundenen Instruktionssatzarchitektur, die, wenn sie durch den Prozessor oder eine andere Verarbeitungslogik ausgeführt werden, logische, mathematische oder sonstige funktionale Operationen ausführen. Insbesondere betrifft die Offenbarung Instruktionen und Logik zum Bereitstellen einer Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität.
  • HINTERGRUND DER OFFENBARUNG
  • Moderne Prozessoren enthalten oft Instruktionen, um Operationen bereitzustellen, die zwar rechenintensiv sind, aber einen hohen Grad an Datenparallelismus bieten, den man sich durch eine effiziente Implementierung unter Verwendung verschiedener Datenspeicherbausteine, wie zum Beispiel Single Instruction Multiple Data(SIMD)-Vektorregister, zunutze machen kann.
  • Die Vektorisierung eines Anwendungs- oder Software-Codes kann enthalten, die Anwendung zu veranlassen, auf bestimmten Systemen oder Instruktionssatzarchitekturen, wie zum Beispiel einer breiten Vektorarchitektur oder Vektorarchitektur mit großer Breite, zu kompilieren, zu installieren und/oder zu laufen. Für einige Anwendungen kann der Speicherzugriff komplex, inkonsistent oder unzusammenhängend sein, zum Beispiel, wenn die Vektorbreiten zunehmen (zum Beispiel für Operationen wie dreidimensionales (3D) Bildrendern). Speicher, der für vektorisierte Prozesse verwendet wird, kann an unzusammenhängenden oder nichtbenachbarten Speicherpositionen gespeichert werden. Eine Reihe von Architekturen kann zusätzliche Instruktionen erfordern, die den Instruktionsdurchsatz minimieren und deutlich die Anzahl der Taktzyklen erhöhen, die benötigt werden, um Daten in den Registern zu ordnen, bevor arithmetische Operationen ausgeführt werden.
  • Zu Mechanismen zum Optimieren des Speicherzugriffs und des Ordnens von Daten zu und von breiteren Vektoren kann das Implementieren von Hol- und Streuungsoperationen zum Erzeugen lokaler aneinandergrenzender Speicherzugriffe für Daten aus anderen nichtlokalen und/oder unzusammenhängenden Speicherpositionen gehören. Hol-Operationen können Daten aus einem Satz unzusammenhängender oder zufälliger Speicherpositionen in einem Speicherbaustein holen und die ungleichen Daten zu einer gepackten Struktur kombinieren. Streuungsoperationen können Elemente in einer gepackten Struktur zu einem Satz unzusammenhängender oder zufälliger Speicherpositionen verteilen. Einige dieser Speicherpositionen werden möglicherweise nicht Cache-gespeichert oder wurden möglicherweise aus dem physischen Speicher ausgelagert.
  • Wenn Hol-Operationen wegen eines Seitenfehlers oder aus einem anderen Grund unterbrochen werden, so wird bei einigen Architekturen möglicherweise der Zustand der Maschine nicht gespeichert, wodurch eine Wiederholung der gesamten Hol-Operation anstelle eines Neustarts an der Stelle, wo die Hol-Operation unterbrochen wurde, erforderlich wird. Da für jede Hol-Operation mehrere Speicherzugriffe erforderlich sein können, können viele Taktzyklen für eine Vollendung erforderlich sein, worauf alle nachfolgenden abhängigen arithmetischen Operationen zwangsläufig warten müssen. Solche Verzögerungen stellen einen Engpass dar, der Leistungsvorteile zunichte machen kann, die man sich normalerweise zum Beispiel aus einer breiten Vektorarchitektur oder Vektorarchitektur mit großer Breite erhoffen würde.
  • Bis heute sind potenzielle Lösungen für solche leistungsbegrenzenden Probleme und Engpässe nicht hinreichend untersucht worden.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Die vorliegende Erfindung wird beispielhaft und nicht-einschränkend in den Figuren der beiliegenden Zeichnungen veranschaulicht.
  • 1A ist ein Blockschaubild einer Ausführungsform eines Systems, das Instruktionen ausführt, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitzustellen.
  • 1B ist ein Blockschaubild einer weiteren Ausführungsform eines Systems, das Instruktionen ausführt, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitzustellen.
  • 1C ist ein Blockschaubild einer weiteren Ausführungsform eines Systems, das Instruktionen ausführt, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitzustellen.
  • 2 ist ein Blockschaubild einer Ausführungsform eines Prozessors, der Instruktionen ausführt, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitzustellen.
  • 3A veranschaulicht gepackte Datenarten gemäß einer Ausführungsform.
  • 3B veranschaulicht gepackte Datenarten gemäß einer Ausführungsform.
  • 3C veranschaulicht gepackte Datenarten gemäß einer Ausführungsform.
  • 3D veranschaulicht eine Instruktionscodierung, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitzustellen, gemäß einer Ausführungsform.
  • 3E veranschaulicht eine Instruktionscodierung, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitzustellen, gemäß einer weiteren Ausführungsform.
  • 3F veranschaulicht eine Instruktionscodierung, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitzustellen, gemäß einer weiteren Ausführungsform.
  • 3G veranschaulicht eine Instruktionscodierung, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitzustellen, gemäß einer weiteren Ausführungsform.
  • 3H veranschaulicht eine Instruktionscodierung, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitzustellen, gemäß einer weiteren Ausführungsform.
  • 4A veranschaulicht Elemente einer Ausführungsform einer Prozessormikroarchitektur zum Auszuführen von Instruktionen, die eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitstellen.
  • 4B veranschaulicht Elemente einer weiteren Ausführungsform einer Prozessormikroarchitektur zum Auszuführen von Instruktionen, die eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitstellen.
  • 5 ist ein Blockschaubild einer Ausführungsform eines Prozessors zum Auszuführen von Instruktionen, die eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitstellen.
  • 6 ist ein Blockschaubild einer Ausführungsform eines Computersystems zum Auszuführen von Instruktionen, die eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitstellen.
  • 7 ist ein Blockschaubild einer weiteren Ausführungsform eines Computersystems zum Auszuführen von Instruktionen, die eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitstellen.
  • 8 ist ein Blockschaubild einer weiteren Ausführungsform eines Computersystems zum Auszuführen von Instruktionen, die eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitstellen.
  • 9 ist ein Blockschaubild einer Ausführungsform eines Systems-auf-einem-Chip zum Auszuführen von Instruktionen, die eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitstellen.
  • 10 ist ein Blockschaubild einer Ausführungsform eines Prozessors zum Auszuführen von Instruktionen, die eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitstellen.
  • 11 ist ein Blockschaubild einer Ausführungsform eines IP-Kernentwicklungssystems, das eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitstellt.
  • 12 veranschaulicht eine Ausführungsform eines Architekturemulationssystems, das eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitstellt.
  • 13 veranschaulicht eine Ausführungsform eines Systems zum Übersetzen von Instruktionen, die eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitstellen.
  • 14 veranschaulicht ein Flussdiagramm für eine Ausführungsform eines Prozesses zum Bereitstellen einer Vektor-Hol-Op-Funktionalität.
  • 15 veranschaulicht ein Flussdiagramm für eine weitere Ausführungsform eines Prozesses zum Bereitstellen einer Vektor-Hol-Op-Funktionalität.
  • 16 veranschaulicht ein Flussdiagramm für eine Ausführungsform eines Prozesses zum Bereitstellen einer Vektorstreuungs-Op-Funktionalität.
  • 17 veranschaulicht ein Flussdiagramm für eine weitere Ausführungsform eines Prozesses zum Bereitstellen einer Vektorstreuungs-Op-Funktionalität.
  • DETAILLIERTE BESCHREIBUNG
  • Die folgende Beschreibung beschreibt eine Instruktions- und Verarbeitungslogik, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität innerhalb eines, oder im Zusammenwirken mit einem, Prozessor, Computersystem oder sonstigen Verarbeitungsvorrichtung bereitzustellen.
  • In einigen Ausführungsformen lesen Ausführungseinheiten in Reaktion auf eine Instruktion, die beispielsweise eine Hol- und eine zweite Operation, ein Zielregister, ein Operandenregister und eine Speicheradresse spezifiziert, Werte in einem Maskenregister, wobei Felder in dem Maskenregister Versatzindizes in dem Indizesregister für Datenelemente im Speicher entsprechen. Ein erster Maskenwert gibt an, dass das Element nicht aus dem Speicher geholt wurde, und ein zweiter Wert gibt an, dass das Element nicht geholt zu werden braucht oder bereits geholt wurde. Für jedes mit dem ersten Wert wird das Datenelement aus dem Speicher in die entsprechende Zielregisterposition geholt, und der entsprechende Wert in dem Maskenregister wird zu dem zweiten Wert geändert. Wenn alle Maskenregisterfelder den zweiten Wert haben, so wird die zweite Operation unter Verwendung entsprechender Daten in den Zielort- und Operandenregistern ausgeführt, um Ergebnisse zu generieren. In einigen alternativen Ausführungsformen können Ausführungseinheiten in Reaktion auf eine Instruktion, die zum Beispiel eine Streuungs- und eine erste Operation, ein Zielregister, ein Operandenregister und eine Speicheradresse spezifiziert, die erste Operation mit oder ohne Nutzung des Maskenregisters ausführen, und die Maskenwerte können verwendet werden, um anzuzeigen, ob das resultierende Element nicht in den Speicher gestreut wurde oder dass das Element nicht in den Speicher gestreut zu werden braucht oder bereits in den Speicher gestreut wurde.
  • In der folgenden Beschreibung werden zahlreiche konkrete Details, wie zum Beispiel Verarbeitungslogik, Prozessorarten, Mikroarchitekturbedingungen, Ereignisse, Aktivierungsmechanismen und dergleichen, dargelegt, um ein gründlicheres Verständnis von Ausführungsformen der vorliegenden Erfindung zu erreichen. Dem Fachmann ist jedoch klar, dass die Erfindung auch ohne solche konkreten Details praktiziert werden kann. Des Weiteren sind einige allgemein bekannte Strukturen, Schaltkreise und dergleichen nicht im Detail gezeigt worden, um Ausführungsformen der vorliegenden Erfindung nicht unnötig in den Hintergrund treten zu lassen.
  • Obgleich die folgenden Ausführungsformen mit Bezug auf einen Prozessor beschrieben werden, finden andere Ausführungsformen auch auf andere Arten integrierter Schaltkreise und Logikbausteine Anwendung. Ähnliche Techniken und Lehren von Ausführungsformen der vorliegenden Erfindung können auch auf andere Arten von Schaltkreisen oder Halbleiterbausteinen angewendet werden, die von höherem Pipelinedurchsatz und verbesserter Leistung profitieren können. Die Lehren von Ausführungsformen der vorliegenden Erfindung finden auf alle Prozessoren oder Maschinen Anwendung, die Daten verarbeiten. Jedoch ist die vorliegende Erfindung nicht auf Prozessoren oder Maschinen beschränkt, die 512-Bit-, 256-Bit-, 128-Bit-, 64-Bit-, 32-Bit oder 16-Bit-Datenoperationen ausführen, und kann auf alle Prozessoren und Maschinen angewendet werden, wo Daten verarbeitet oder verwaltet werden. Enthält des Weiteren die folgende Beschreibung Beispiele, und die beiliegenden Zeichnungen zeigen verschiedene Beispielen zum Zweck der Veranschaulichung. Jedoch dürfen diese Beispiele nicht in einem einschränkenden Sinn verstanden werden, da sie lediglich dazu dienen, Beispiele von Ausführungsformen der vorliegenden Erfindung zu zeigen, und nicht, um eine erschöpfende Aufzählung alter möglichen Implementierungen von Ausführungsformen der vorliegenden Erfindung zu geben.
  • Obgleich die folgenden Beispiele die Handhabung und Verteilung von Instruktion im Kontext von Ausführungseinheiten und Logikschaltkreisen beschreiben, können andere Ausführungsformen der vorliegenden Erfindung mittels Daten oder Instruktionen realisiert werden, die auf einem maschinenlesbaren, greifbaren Medium gespeichert sind und die, wenn sie durch eine Maschine ausgeführt werden, die Maschine veranlassen, Funktionen im Einklang mit mindestens einer Ausführungsform der Erfindung auszuführen. In einer Ausführungsform sind Funktionen, die zu Ausführungsformen der vorliegenden Erfindung gehören, in maschinenausführbaren Instruktionen verkörpert. Die Instruktionen können dafür verwendet werden, einen Allzweck- oder Spezialprozessor, der mit den Instruktionen programmiert wurde, zu veranlassen, die Schritte der vorliegenden Erfindung auszuführen. Ausführungsformen der vorliegenden Erfindung können als ein Computerprogrammprodukt oder Software bereitgestellt werden, das bzw. die ein maschinen- oder computerlesbares Medium enthalten kann, auf dem Instruktionen gespeichert sind, die dafür verwendet werden können, einen Computer (oder andere elektronische Geräte) zu programmieren, um eine oder mehrere Operationen gemäß Ausführungsformen der vorliegenden Erfindung auszuführen. Alternativ könnten Schritte von Ausführungsformen der vorliegenden Erfindung durch spezielle Hardware-Komponenten, die Festfunktionslogik zum Ausführen der Schritte enthalten, oder durch beliebige Kombinationen programmierter Computerkomponenten und Festfunktions-Hardware-Komponenten ausgeführt werden.
  • Instruktionen, die dafür verwendet werden, Logik zum Auszuführen von Ausführungsformen der Erfindung zu programmieren, kann innerhalb eines Speichers in dem System gespeichert werden, wie zum Beispiel DRAM, Cache, Flash-Speicher oder sonstiger Speicher. Des Weiteren können die Instruktionen über ein Netzwerk oder mit Hilfe anderer computerlesbarer Medien verteilt werden. Somit kann ein maschinenlesbares Medium jeden beliebigen Mechanismus zum Speichern oder Senden von Informationen in einer durch eine Maschine (zum Beispiel einen Computer) lesbaren Form enthalten, einschließlich beispielsweise Floppydisketten, optische Disks, Compact-Disk, Nurlesespeicher (CD-ROMs) und magnet-optische Disks, Nurlesespeicher (ROMs), Direktzugriffsspeicher (RAM), Löschbarer Programmierbarer Nurlesespeicher (EPROM), Elektrisch Löschbarer Programmierbarer Nurlesespeicher (EEPROM), magnetische oder optische Karten, Flash-Speicher oder ein greifbarer, maschinenlesbarer Speicher, der zum Übertragen von Informationen über das Internet mittels elektrischer, optischer, akustischer oder sonstiger Formen ausgebreiteter Signale (zum Beispiel Trägerwellen, Infrarotsignale, digitale Signale usw.) verwendet wird. Dementsprechend beinhaltet das computerlesbare Medium jegliche Arten von greifbaren maschinenlesbaren Medien, die zum Speichern oder Senden elektronischer Instruktionen oder Informationen in einer durch eine Maschine (zum Beispiel einen Computer) lesbaren Form geeignet sind.
  • Ein Design kann verschiedenen Stufen durchlaufen: von der Kreation über die Simulation bis hin zur Fabrikation. Daten, die ein Design darstellen, können das Design auf verschiedene Weise darstellen. Zunächst kann, wie es für Simulationen nützlich ist, die Hardware unter Verwendung einer Hardwarebeschreibungssprache oder einer anderen Funktionsbeschreibungssprache dargestellt werden. Des Weiteren kann auf einigen Stufen des Designprozesses ein Schaltkreisebenenmodell mit Logik- und/oder Transistorgattern generiert werden. Des Weiteren erreichen die meisten Designs auf der einen oder anderen Stufe einen Grad an Daten, der die physische Platzierung verschiedener Bauelemente in dem Hardwaremodell. In dem Fall, wo konventionelle 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, die zum Herstellen des integrierten Schaltkreises verwendet werden, spezifizieren. In jeder Darstellung des Designs können die Daten in einer beliebigen Form eines maschinenlesbaren Mediums gespeichert werden. Ein Speicher oder ein magnetisches oder optisches Datenlager, wie zum Beispiel eine Disk, kann das maschinenlesbare Medium sein, um Informationen zu speichern, die über optische oder elektrische Wellen übertragen werden, die moduliert oder auf sonstige Weise generiert werden, um solche Informationen zu senden. Wenn eine elektrische Trägerwelle, die den Code oder das Design anzeigt oder trägt, übertragen wird, so wird in dem Umfang, wie ein Kopieren, Puffern oder erneutes Senden des elektrischen Signals ausgeführt wird, eine neue Kopie angefertigt. Somit kann ein Kommunikationsanbieter oder ein Netzanbieter auf einem greifbaren, maschinenlesbaren Medium – zumindest zeitweilig – ein Erzeugnis, wie zum Beispiel Informationen, die zu einer Trägerwelle codiert wurden, speichern, das Techniken von Ausführungsformen der vorliegenden Erfindung verkörpert.
  • In modernen Prozessoren werden eine Anzahl verschiedener Ausführungseinheiten verwendet, um eine Vielzahl verschiedener Codes und Instruktionen zu verarbeiten und auszuführen. Nicht alle Instruktionen werden einander gleich erzeugt, da einige schneller zu vollenden sind, während andere eine Anzahl von Taktzyklen zum Vollenden erfordern. Je schneller der Durchsatz von Instruktionen ist, desto höher ist die Gesamtleistung des Prozessors. Darum wäre es von Vorteil, dass möglichst viele Instruktionen möglichst schnell ausgeführt werden. Es gibt jedoch bestimmte Instruktionen, die komplexer sind und mehr Ausführungszeit und Prozessorressourcen erfordern. Zum Beispiel gibt es Gleitkomma-Instruktionen, Lade-/Speicher-Operationen, Datenbewegungen usw.
  • In dem Maße, wie immer mehr Computersysteme in Internet-, Text- und Multimedia-Anwendungen verwendet wurden, ist im Lauf der Zeit zunehmend Unterstützung durch zusätzliche Prozessoren hinzugekommen. In einer Ausführungsform kann ein Instruktionssatz mit einer oder mehreren Computerarchitekturen verknüpft sein, wie zum Beispiel Datenarten, Instruktionen, Registerarchitektur, Adressierungsmodi, Speicherarchitektur, Interrupt- und Ausnahmenhandhabung und externe Eingabe und Ausgabe (E/A).
  • In einer Ausführungsform kann die Instruktionssatzarchitektur (ISA) durch eine oder mehrere Mikroarchitekturen implementiert werden, wozu Prozessorlogik und Schaltkreise gehören, die zum Implementieren eines oder mehrerer Instruktionssätze verwendet werden. Dementsprechend können sich Prozessoren mit verschiedenen Mikroarchitekturen in mindestens einen Abschnitt eines gemeinsamen Instruktionssatzes teilen. Zum Beispiel implementieren Intel® Pentium 4-Prozessoren, Intel® CoreTM-Prozessoren und Prozessoren von Advanced Micro Devices, Inc. aus Sunnyvale (Kalifornien) nahezu identische Versionen des x86-Instruktionssatzes (mit einigen Erweiterungen, die den neueren Versionen hinzugefügt wurden), aber sie haben unterschiedliche interne Designs. Gleichermaßen können sich Prozessoren, die von anderen Prozessorentwicklungsfirmen entworfen wurden, wie zum Beispiel ARM Holdings, Ltd., MIPS oder ihre Lizenznehmer oder Anwender, in mindestens einen Abschnitt eines gemeinsamen Instruktionssatzes teilen, können aber andere Prozessordesigns enthalten. Zum Beispiel kann die gleiche Registerarchitektur der ISA in verschiedenen Mikroarchitekturen (wie zum Beispiel in dedizierten physischen Registern, einem oder mehreren dynamisch zugewiesenen physischen Registern, die einen Registerumbenennungsmechanismus (zum Beispiel eine Register Alias Table (RAT)) verwenden, einem Reorder Buffer (ROB) und einer Retirement Register File) unter Verwendung neuer oder allgemein bekannter Techniken auf verschiedene Weise implementiert werden. In einer Ausführungsform können Register ein oder mehrere Register, Registerarchitekturen, Registerdateien oder sonstige Registersätze enthalten, die gegebenenfalls durch einen Softwareprogrammierer adressiert werden können.
  • In einer Ausführungsform kann eine Instruktion ein oder mehrere Instruktionsformate enthalten. In einer Ausführungsform kann ein Instruktionsformat verschiedene Felder (Anzahl von Bits, Position von Bits usw.) anzeigen, um unter anderem die auszuführende Operation und den oder die Operanden, an denen die Operation auszuführen ist, zu spezifizieren. Einige Instruktionsformate können weiter aufgeschlüsselt und durch Instruktionsvorlagen (oder Teilformate) definiert werden. Zum Beispiel können die Instruktionsvorlagen eines bestimmten Instruktionsformats so definiert werden, dass sie verschiedene Teilmengen der Felder des Instruktionsformats haben, und/oder können so definiert werden, dass bei ihnen ein bestimmtes Feld anders interpretiert wird. In einer Ausführungsform wird eine Instruktion mittels eines Instruktionsformats (und, falls definiert, in einer bestimmten der Instruktionsvorlagen jenes Instruktionsformats) ausgedrückt und spezifiziert oder bezeichnet die Operation und die Operanden, an denen die Operation ausgeführt wird.
  • Bei wissenschaftlichen, Finanz-, autovektorisierten Allzweck-, RMS(Recognition, Mining and Synthesis)- sowie visuellen und Multimedia-Anwendungen (zum Beispiel 2D/3D-Grafik, Bildverarbeitung, Videokompression/-dekompression, Spracherkennungsalgorithmen und Audiomanipulation) kann es erforderlich sein, die gleiche Operation an einer großen Anzahl von Datenpunkten auszuführen. In einer Ausführungsform bezieht sich Single Instruktion Multiple Data (SIMD) auf eine Art von Instruktion, die einen Prozessor veranlasst, eine Operation an mehreren Datenelementen auszuführen. Die SIMD-Technologie kann in Prozessoren verwendet werden, welche die Bits in einem Register in eine Anzahl größenunveränderlicher oder größenvariabler Datenelemente, die jeweils einen separaten Wert darstellen, logisch teilen können. Zum Beispiel können in einer Ausführungsform die Bits in einem 64-Bit-Register als ein Quellenoperand organisiert sein, der vier separate 16-Bit-Datenelemente enthält, von denen jedes einen separaten 16-Bit-Wert darstellt. Diese Art von Daten kann als „gepackter” Datentyp oder „Vektor”-Datentyp bezeichnet werden, und Operanden dieser Datenart werden als gepackte Datenoperanden oder Vektoroperanden bezeichnet. In einer Ausführungsform kann ein gepacktes Datenstück oder ein Vektor eine Sequenz aus gepackten Datenelementen sein, die innerhalb eines einzelnen Registers gespeichert sind, und ein gepackter Datenoperand oder ein Vektoroperand kann ein Quellen- oder Zielortoperand einer SIMD-Instruktion (oder „gepackten Dateninstruktion” oder einer „Vektorinstruktion”) sein. In einer Ausführungsform spezifiziert eine SIMD-Instruktion eine einzelne Vektoroperation, die an zwei Quellenvektoroperanden auszuführen sind, um einen Zielortvektoroperanden (auch als ein Ergebnisvektoroperand bezeichnet) von gleicher oder anderer Größe mit der gleichen oder einer anderen Anzahl von Datenelementen und in der gleichen oder einer anderen Datenelementreihenfolge zu generieren.
  • Die SIMD-Technologie, wie sie zum Beispiel durch die Intel® CoreTM-Prozessoren, die einen Instruktionssatz aufweisen, der x86-, MMXTM-, Streaming SIMD Extensions (SSE)-, SSE2-, SSE3-, SSE4.1- und SSE4.2-Instruktionen enthält, die ARM-Prozessoren, wie zum Beispiel die ARM Cortex®-Prozessorenfamilie, die einen Instruktionssatz aufweist, der die Vektor Floating Point(VFP)- und/oder NEON-Instruktionen enthält, und die MIPS-Prozessoren, wie zum Beispiel die Loongson-Prozessorenfamilie, die durch das Institut für Computertechnologie (ICT) der chinesischen Akademie der Wissenschaften entwickelt wurde, verwendet wird, hat eine signifikante Verbesserung der Anwendungsleistung ermöglicht (CoreTM und MMXTM sind eingetragene Warenzeichen oder Warenzeichen der Intel Corporation aus Santa Clara, Kalifornien).
  • In einer Ausführungsform sind Ziel- und Quellenregister/-daten generische Begriffe zum Darstellen von Quelle und Zielort der entsprechenden Daten oder Operation. In einigen Ausführungsformen können sie durch Register, Speicher oder andere Speicherbereiche implementiert werden, die andere Bezeichnungen oder Funktionen haben als die, die gezeigt sind. Zum Beispiel kann in einer Ausführungsform „DEST1” ein temporäres Speicherregister oder ein sonstiger Speicherbereich sein, während „SRC1” und „SRC2” ein erstes und zweites Quellenspeicherregister oder ein sonstiger Speicherbereich sein können, und so weiter. In weiteren Ausführungsformen können zwei oder mehr der SRC- und DEST-Speicherbereiche anderen Datenspeicherelementen innerhalb desselben Speicherbereichs (zum Beispiel einem SIMD-Register) entsprechen. In einer Ausführungsform kann eines der Quellenregister auch als ein Zielregister fungieren, indem beispielsweise das Ergebnis einer Operation, die an den ersten und zweiten Quellendaten ausgeführt wurde, zurück in eines der zwei Quellenregister geschrieben wird, das als ein Zielregister fungiert.
  • 1A ist ein Blockschaubild eines beispielhaften Computersystems, das mit einem Prozessor gebildet wird, der Ausführungseinheiten zum Ausführen einer Instruktion gemäß einer Ausführungsform der vorliegenden Erfindung enthält. Das System 100 enthält eine Komponente, wie zum Beispiel einen Prozessor 102, um Ausführungseinheiten zu verwenden, die eine Logik enthalten, um Algorithmen für Prozessdaten auszuführen, gemäß der vorliegenden Erfindung, wie zum Beispiel in der im vorliegenden Text beschrieben Ausführungsform. Das System 100 ist zur Verarbeitungssysteme repräsentativ, die auf PENTIUM® III-, PENTIUM® 4-, XeonTM-, Itanium®-, XScaleTM- und/oder StrongARMTM-Mikroprozessoren basieren, die bei der Intel Corporation aus Santa Clara, Kalifornien, bezogen werden können, obgleich auch andere Systeme (einschließlich PCs mit anderen Mikroprozessoren, Engineering-Workstations, Settop-Boxen und dergleichen) verwendet werden können. In einer Ausführungsform kann das beispielhafte System 100 eine Version des WINDOWSTM-Betriebssystems ausführen, das bei der Microsoft Corporation aus Redmond, Washington, bezogen werden kann, obgleich auch andere Betriebssysteme (zum Beispiel UNIX und Linux), eingebettete Software und/oder grafische Benutzerschnittstellen, verwendet werden können. Somit sind Ausführungsformen der vorliegenden Erfindung nicht auf irgend eine bestimmte Kombination von Hardwareschaltungen und Software beschränkt.
  • Ausführungsformen sind nicht auf Computersysteme beschränkt. Alternative Ausführungsformen der vorliegenden Erfindung können auch in anderen Vorrichtungen verwendet werden, wie zum Beispiel in handgehaltenen Geräten und eingebetteten Anwendungen. Zu einigen Beispielen von handgehaltenen Geräten gehören Mobiltelefone, Internet Protocol-Geräte, Digitalkameras, Persönliche Digitale Assistenten (PDAs) und handgehaltene PCs. Zu eingebetteten Anwendungen können gehören: ein Mikrocontroller, ein digitaler Signalprozessor (DSP), Systeme auf einem Chip, Netzwerkcomputer (NetPC), Settop-Boxen, Netzwerkhubs, Wide Area Network(WAN)-Switches oder sonstige Systems, die eine oder mehrere Instruktionen gemäß mindestens einer Ausführungsform ausführen können.
  • 1A ist ein Blockschaubild eines Computersystems 100, das mit einem Prozessor 102 gebildet ist, der eine oder mehrere Ausführungseinheiten 108 enthält, um einen Algorithmus auszuführen, um mindestens eine Instruktion auszuführen, gemäß einer Ausführungsform der vorliegenden Erfindung. Eine Ausführungsform kann im Kontext eines Einzelprozessordesktop- oder -serversystems beschrieben werden, aber alternative Ausführungsformen können auch in einem Mehrprozessorsystem enthalten sein. Das System 100 ist ein Beispiel einer „Hub”-Systemarchitektur. Das Computersystem 100 enthält einen Prozessor 102 zum Verarbeiten von Datensignalen. Der Prozessor 102 kann ein Complex Instruction Set Computer(CISC)-Mikroprozessor, ein Reduced Instruction Set Computer(RISC)-Mikroprozessor, ein Very Long Instruction Word(VLIW)-Mikroprozessor, ein Prozessor, der eine Kombination aus Instruktionssätzen implementiert, oder ein sonstiger Prozessorbaustein sein, wie zum Beispiel ein digitaler Signalprozessor. Der Prozessor 102 ist mit einem Prozessorbus 110 gekoppelt, der Datensignale zwischen dem Prozessor 102 und anderen Komponenten in dem System 100 übertragen kann. Die Elemente des Systems 100 führen ihre konventionellen Funktionen aus, wie sie dem Fachmann allgemein bekannt sind.
  • In einer Ausführungsform enthält der Prozessor 102 einen internen Level 1(L1)-Cache-Speicher 104. In Abhängigkeit von der Architektur kann der Prozessor 102 einen einzelnen internen Cache oder mehrere Ebenen von internem Cache haben. Alternativ kann der Cache-Speicher in einer weiteren Ausführungsform außerhalb des Prozessors 102 angeordnet sein. Andere Ausführungsformen können außerdem – in Abhängigkeit von der konkreten Implementierung und den speziellen Erfordernissen – eine Kombination aus sowohl internen als auch externen Caches enthalten. Die Registerdatei 106 kann verschiedene Arten von Daten in verschiedenen Registern speichern, wie zum Beispiel Ganzzahlregistern, Gleitkommaregistern, Statusregistern und Instruktionszeigerregistern.
  • Die Ausführungseinheit 108, die Logik zum Auszuführen von Ganzzahl- und Gleitkommaoperationen enthält, befindet sich ebenfalls in dem Prozessor 102. Der Prozessor 102 enthält des Weiteren einen Mikrocode(ucode)-ROM, der Mikrocode für bestimmte Makroinstruktionen speichert. In einer Ausführungsform enthält die Ausführungseinheit 108 Logik zum Handhaben eines gepackten Instruktionssatzes 109. Durch Einbinden des gepackten Instruktionssatzes 109 in den Instruktionssatz eines Allzweckprozessors 102, zusammen mit zugehörigen Schaltungen zum Ausführen der Instruktionen, können die Operationen, die von vielen Multimedia-Anwendungen verwendet werden, unter Verwendung gepackter Daten in einem Allzweckprozessor 102 ausgeführt werden. Somit können viele Multimedia-Anwendungen beschleunigt und effizienter ausgeführt werden, indem die volle Breite des Datenbusses eines Prozessors zum Ausführen von Operationen an gepackten Daten ausgenutzt wird. Dies kann die Notwendigkeit überflüssig machen, kleinere Einheiten von Daten über den Datenbus eines Prozessors zu senden, um eine oder mehrere Operationen datenelementweise auszuführen.
  • Es können auch alternative Ausführungsformen einer Ausführungseinheit 108 in Mikrocontrollern, eingebetteten Prozessoren, Grafikgeräten, DSPs und anderen Arten von Logikschaltkreisen verwendet werden. Das System 100 enthält einen Speicher 120. Der Speicher 120 kann ein dynamisches Direktzugriffsspeicher(DRAM)-Bauelement, ein statisches Direktzugriffsspeicher(SRAM)-Bauelement, ein Flash-Speicherbaustein oder ein sonstiger Speicherbaustein sein. Der Speicher 120 kann Instruktionen und/oder Datenspeichern, die durch Datensignale dargestellt werden, die durch den Prozessor 102 ausgeführt werden können.
  • Ein Systemlogikchip 116 ist mit dem Prozessorbus 110 und dein Speicher 120 gekoppelt. Der Systemlogikchip 116 in der veranschaulichten Ausführungsform ist ein Speicher-Controller-Hub (MCH). Der Prozessor 102 kann mit dem MCH 116 über einen Prozessorbus 110 kommunizieren. Der MCH 116 stellt einen Speicherpfad mit großer Bandbreite 118 zu Speicher 120 für Instruktion- und Datenspeicherung und für die Speicherung von Grafikbefehlen, Daten und Texturen bereit. Der MCH 116 dient dazu, Datensignale zwischen dem Prozessor 102, dem Speicher 120 und weiteren Komponenten in dem System 100 zu lenken und die Datensignale zwischen dem Prozessorbus 110, dem Speicher 120 und dem System-E/A 122 zu überbrücken. In einigen Ausführungsformen kann der Systemlogikchip 116 einen Grafikport zum Koppeln mit einem Grafik-Controller 112 bereitstellen. Der MCH 116 ist mit dem Speicher 120 durch eine Speicherschnittstelle 118 gekoppelt. Die Grafikkarte 112 ist mit dem MCH 116 durch ein Accelerated Graphics Port(AGP)-Interconnect 114 gekoppelt.
  • Das System 100 verwendet einen proprietären Hub-Schnittstellenbus 122 zum Koppeln des MCH 116 mit dem E/A-Controller-Hub (ICH) 130. Der ICH 130 stellt direkte Verbindungen zu einigen E/A-Geräten über einen lokalen E/A-Bus bereit. Der lokale E/A-Bus ist ein Hochgeschwindigkeits-E/A-Bus zum Verbinden von Peripheriegeräten mit dem Speicher 120, einem Chipsatz und dem Prozessor 102. Einige Beispiele sind der Audio-Controller, der Firmware-Hub (Flash-BIOS) 128, der Drahtlos-Transceiver 126, der Datenspeicher 124, der Legacy-E/A-Controller, der Nutzereingabe- und Tastaturschnittstellen enthält, ein serieller Erweiterungsport, wie zum Beispiel ein Universal Serial Bus (USB), und ein Netzwerk-Controller 134. Der Datenspeicherbaustein 124 kann ein Festplattenlaufwerk, ein Floppydisklaufwerk, ein CD-ROM-Laufwerk, einen Flash-Speicherbaustein oder eine sonstige Massenspeichervorrichtung umfassen.
  • Bei einer weiteren Ausführungsform eines Systems kann eine Instruktion gemäß einer Ausführungsform mit einem System auf einem Chip verwendet werden. Eine Ausführungsform eines Systems auf einem Chip umfasst einen Prozessor und einen Speicher. Der Speicher für ein solches System ist ein Flash-Speicher. Der Flash-Speicher kann auf demselben Chip angeordnet sein wie der Prozessor und weitere Systemkomponenten. Des Weiteren können noch andere Logikblöcke, wie zum Beispiel ein Speicher-Controller oder Grafik-Controller, auf einem System auf einem Chip angeordnet sein.
  • 1B veranschaulicht ein Datenverarbeitungssystem 140, das die Prinzipien einer Ausführungsform der vorliegenden Erfindung implementiert. Der Fachmann erkennt sofort, dass die im vorliegenden Text beschriebenen Ausführungsformen mit alternativen Verarbeitungssystemen verwendet werden können, ohne vom Geltungsbereich von Ausführungsformen der Erfindung abzuweichen.
  • Das Computersystem 140 umfasst einen Verarbeitungskern 159, der in der Lage ist, mindestens eine Instruktion gemäß einer Ausführungsform auszuführen. In einer Ausführungsform stellt der Verarbeitungskern 159 eine Verarbeitungseinheit mit einer beliebigen Art von Architektur dar, einschließlich beispielsweise einer Architektur vom CISC-, vom RISC- oder vom VLIW-Typ. Der Verarbeitungskern 159 kann des Weiteren zur Herstellung gemäß einer oder mehreren Prozesstechnologien geeignet sein, und indem er hinreichend detailliert auf einem maschinenlesbaren Medium dargestellt wird, kann er zum Vereinfachen der Herstellung geeignet sein.
  • Der Verarbeitungskern 159 umfasst eine Ausführungseinheit 142, einen Satz aus einer oder mehreren Registerdateien 145 und einen Decodierer 144. Der Verarbeitungskern 159 enthält des Weiteren (nicht gezeigte) zusätzliche Schaltungen, die für das Verständnis von Ausführungsformen der vorliegenden Erfindung nicht notwendig sind. Die Ausführungseinheit 142 wird zum Ausführen von Instruktionen verwendet, die durch den Verarbeitungskern 159 empfangen werden. Zusätzlich zum Ausführen typischer Prozessorinstruktionen kann die Ausführungseinheit 142 Instruktionen in dem gepackten Instruktionssatz 143 ausführen, um Operationen an gepackten Datenformaten auszuführen. Der gepackte Instruktionssatz 143 enthält Instruktionen zur Ausführung von Ausführungsformen der Erfindung und anderer gepackter Instruktionen. Die Ausführungseinheit 142 ist durch einen internen Bus mit einer Registerdatei 145 gekoppelt. Die Registerdatei 145 stellt einen Speicherbereich auf dem Verarbeitungskern 159 zum Speichern von Informationen, einschließlich Daten, dar. Wie zuvor erwähnt, versteht es sich, dass der Speicherbereich, der zum Speichern der gepackten Daten verwendet wird, nicht von kritischer Bedeutung ist. Die Ausführungseinheit 142 ist mit einem Decodierer 144 gekoppelt. Der Decodierer 144 wird dafür verwendet, Instruktionen, die durch den Verarbeitungskern 159 empfangen wurden, zu Steuersignalen und/oder Mikrocode-Eintrittspunkten zu decodieren. In Reaktion auf diese Steuersignale und/oder Mikrocode-Eintrittspunkte führt die Ausführungseinheit 142 die entsprechenden Operationen aus. In einer Ausführungsform wird der Decodierer dafür verwendet, den Opcode der Instruktion zu interpretieren, der angibt, welche Operation an den in der Instruktion angegebenen entsprechenden Daten ausgeführt werden soll.
  • Der Verarbeitungskern 159 ist mit dem Bus 141 gekoppelt, um mit verschiedenen anderen Systemkomponenten zu kommunizieren, wie beispielsweise einer synchronen dynamischen Direktzugriffsspeicher(SDRAM)-Steuerung 146, einer statischen Direktzugriffsspeicher(SRAM)-Steuerung 147, einer Burst-Flash-Speicherschnittstelle 148, einer Personal Computer Memory Card International Association(PCMCIA)-Compact Flash-(CF)-Kartensteuerung 149, einer Flüssigkristallanzeige(LCD)-Steuerung 150, einem Direct Memory Access(DMA)-Controller 151 und einer alternativen Busmasterschnittstelle 152. In einer Ausführungsform kann das Datenverarbeitungssystem 140 des Weiteren eine E/A-Brücke 154 zum Kommunizieren mit verschiedenen E/A-Geräten über einen E/A-Bus 153 umfassen. Zu solchen E/A-Geräten gehören beispielsweise ein Universal Asynchronous Receiver/Transmitter (UART) 155, ein Universal Serial Bus (USB) 156, ein Bluetooth-Drahtlos-UART 157 und eine E/A-Erweiterungsschnittstelle 158.
  • Eine Ausführungsform des Datenverarbeitungssystems 140 stellt eine Mobil-, Netzwerk- und/oder Drahtloskommunikation und einen Verarbeitungskern 159 bereit, der in der Lage ist, SIMD-Operationen auszuführen, einschließlich einer Textzeichenkettenvergleichsoperation. Der Verarbeitungskern 159 kann mit verschiedenen Audio-, Video-, Bildgabe- und Kommunikationsalgorithmen programmiert werden, einschließlich diskreter Transformationen, wie zum Beispiel einer Walsh-Hadamard-Transformation, einer Fast-Fourier-Transformation (FFT), einer diskreten Cosinus-Transformation (DCT) und ihrer jeweiligen inversen Transformationen; Kompressions-/Dekompressionstechniken, wie zum Beispiel Farbraumtransformation, Videocodierbewegungsschätzung oder Videodecodierbewegungskompensation; und Modulations-/Demodulations(MODEM)-Funktionen, wie zum Beispiel impulscodierte Modulation (PCM).
  • 1C veranschaulicht weitere alternative Ausführungsformen eines Datenverarbeitungssystems, das in der Lage ist, Instruktionen auszuführen, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitzustellen. Gemäß einer alternativen Ausführungsform kann das Datenverarbeitungssystem 160 einen Hauptprozessor 166, einen SIMD-Koprozessor 161, einen Cache-Speicher 167 und ein Eingabe/Ausgabe-System 168 enthalten. Das Eingabe/Ausgabe-System 168 kann optional mit einer Drahtlosschnittstelle 169 gekoppelt sein. Der SIMD-Koprozessor 161 ist in der Lage, Operationen auszuführen, einschließlich Instruktionen gemäß einer Ausführungsform. Der Verarbeitungskern 170 kann zur Herstellung gemäß einer oder mehreren Prozesstechnologien geeignet sein, und indem er hinreichend detailliert auf einem maschinenlesbaren Medium dargestellt wird, kann er dafür geeignet sein, die Herstellung des gesamten oder eines Teils des Datenverarbeitungssystems 160, einschließlich des Verarbeitungskerns 170, zu vereinfachen.
  • In einer Ausführungsform umfasst der SIMD-Koprozessor 161 eine Ausführungseinheit 162 und einen Satz aus einer oder mehreren Registerdateien 164. Eine Ausführungsform des Hauptprozessors 166 umfasst einen Decodierer 165 zum Erkennen von Instruktionen des Instruktionssatzes 163, einschließlich Instruktionen gemäß einer Ausführungsform, zur Ausführung durch die Ausführungseinheit 162. Bei alternativen Ausführungsformen umfasst der SIMD-Koprozessor 161 des Weiteren mindestens einen Teil des Decodierers 165B zum Decodieren von Instruktionen des Instruktionssatzes 163. Der Verarbeitungskern 170 enthält des Weiteren (nicht gezeigte) zusätzliche Schaltungen, die für das Verständnis von Ausführungsformen der vorliegenden Erfindung nicht notwendig sind.
  • Während des Betriebes führt der Hauptprozessor 166 einen Stream von Datenverarbeitungsinstruktionen aus, die Datenverarbeitungsoperationen von allgemeiner Art steuern, einschließlich Interaktionen mit dem Cache-Speicher 167 und dem Eingabe/Ausgabe-System 168. In den Stream aus Datenverarbeitungsinstruktionen sind SIMD-Koprozessor-Instruktionen eingebettet. Der Decodierer 165 des Hauptprozessors 166 erkennt diese SIMD-Koprozessor-Instruktionen als von einer Art, die durch einen gekoppelten SIMD-Koprozessor 161 ausgeführt werden sollten. Dementsprechend gibt der Hauptprozessor 166 diese SIMD-Koprozessor-Instruktionen (oder Steuersignale, die SIMD-Koprozessor-Instruktionen darstellen) an den Koprozessorbus 171 aus, von wo sie durch alle gekoppelten SIMD-Koprozessoren empfangen werden. In diesem Fall nimmt der SIMD-Koprozessor 161 alle empfangenen SIMD-Koprozessor-Instruktionen, die für ihn vorgesehen sind, entgegen und führt sie aus.
  • Daten können über die Drahtlosschnittstelle 169 zur Verarbeitung durch die SIMD-Koprozessor-Instruktionen empfangen werden. In einem Beispiel kann eine Sprachkommunikation in Form eines digitalen Signals empfangen werden, das durch die SIMD-Koprozessor-Instruktionen verarbeitet werden kann, um digitale Audioabtastungen zu regenerieren, die für die Sprachkommunikation stehen. In einem weiteren Beispiel kann komprimiertes Audio und/oder Video in Form eines digitalen Bit-Streams empfangen werden, der durch die SIMD-Koprozessor-Instruktionen verarbeitet werden kann, um digitale Audioabtastungen und/oder Bewegungsvideo-Frames zu regenerieren. In einer Ausführungsform des Verarbeitungskerns 170 sind der Hauptprozessor 166 und ein SIMD-Koprozessor 161 in einem einzelnen Verarbeitungskern 170 integriert, der eine Ausführungseinheit 162, einen Satz aus einer oder mehreren Registerdateien 164 und einen Decodierer 165 zum Erkennen von Instruktionen des Instruktionssatzes 163, einschließlich Instruktionen gemäß einer Ausführungsform, umfasst.
  • 2 ist ein Blockschaubild der Mikroarchitektur für einen Prozessor 200, die Logikschaltkreise zum Auszuführen von Instruktionen gemäß einer Ausführungsform der vorliegenden Erfindung enthält. In einigen Ausführungsformen kann eine Instruktion gemäß einer Ausführungsform implementiert werden, um an Datenelementen, die Größen von Byte, Wort, Doppelwort, Quadwort usw. haben, sowie Datenarten, wie zum Beispiel Einzel- und Doppelpräzisions-Ganzzahl- und Gleitkomma-Datenarten, ausgeführt zu werden. In einer Ausführungsform ist das In-Order-Frontend 201 der Teil des Prozessors 200, der auszuführende Instruktionen holt und sie für eine spätere Verwendung in der Prozessorpipeline vorbereitet. Das Frontend 201 kann mehrere Einheiten enthalten. In einer Ausführungsform holt der Instruktions-Prefetcher 226 Instruktionen aus dem Speicher und speist sie in einen Instruktionsdecodierer 228 ein, der sie seinerseits decodiert oder interpretiert. Zum Beispiel decodiert der Decodierer in einer Ausführungsform eine empfangene Instruktion in einer oder mehreren Operationen, die als „Mikro-Instruktionen” oder „Mikro-Operationen” bezeichnet werden (oder auch als Mikro-Ops oder Uops bezeichnet werden), die die Maschine ausführen kann. In anderen Ausführungsformen zergliedert der Decodierer die Instruktion in einen Opcode und entsprechende Daten- und Steuerfelder, die durch die Mikroarchitektur zum Ausführen von Operationen gemäß einer Ausführungsform verwendet werden. In einer Ausführungsform nimmt der Trace-Cache 230 decodierte Uops auf und assembliert sie zu programmgeordneten Sequenzen oder Traces in der Uop-Schlange 234 zur Ausführung. Wenn der Trace-Cache 230 auf eine komplexe Instruktion trifft, so stellt der Mikrocode-ROM 232 die Uops bereit, die zum Vollenden der Operation benötigt werden.
  • Einige Instruktionen werden in eine einzelne Mikro-Op umgewandelt, während andere mehrere Mikro-Ops benötigen, um die volle Operation zu vollenden. In einer Ausführungsform, wenn mehr als vier Mikro-Ops zum Vollenden einer Instruktion benötigt werden, greift der Decodierer 228 auf den Mikrocode-ROM 232 zu, um die Instruktion auszuführen. In einer Ausführungsform kann eine Instruktion zu einer kleinen Anzahl von Mikro-Ops zur Verarbeitung in dem Instruktionsdecodierer 228 decodiert werden. In einer weiteren Ausführungsform kann eine Instruktion in dem Mikrocode-ROM 232 gespeichert werden, sollte eine Anzahl von Mikro-Ops zum Vollenden der Operation benötigt werden. Der Trace-Cache 230 nimmt auf ein Eintrittspunkt-Programmable Logic Array (PLA) Bezug, um einen korrekten Mikroinstruktionszeiger zum Lesen der Mikrocodesequenzen zu bestimmen, um eine oder mehrere Instruktionen gemäß einer Ausführungsform aus dem Mikrocode-ROM 232 zu vollenden. Nachdem der Mikrocode-ROM 232 das Sequenzieren von Mikro-Ops für eine Instruktion beendet hat, setzt das Frontend 201 der Maschine das Holen von Mikro-Ops aus dem Trace-Cache 230 fort.
  • Die Out-of-Order-Ausführungs-Engine 203 ist der Ort, wo die Instruktionen zur Ausführung vorbereitet werden. Die Out-of-Order-Ausführungslogik besitzt eine Anzahl von Puffern, um den Fluss der Instruktionen zu glätten und umzuordnen, um die Leistung zu optimieren, während sie sich die Pipeline entlang bewegen und für die Ausführung disponiert werden. Die Zuordnungslogik ordnet die Maschinenpuffer und Ressourcen zu, die jede Uop zum Ausführen braucht. Die Registerumbenennungslogik benennt Logikregister auf Einträge in einer Registerdatei um. Der Zuordner ordnet des Weiteren einen Eintritt für jede Uop in einer der zwei Uop-Schlangen – eine für Speicheroperationen und eine für Nichtspeicheroperationen – vor den Instruktionsdisponierern zu: Speicherdisponierer, Schnelldisponierer 202, langsamer/allgemeiner Gleitkommadisponierer 204, und einfacher Gleitkommadisponierer 206. Die Uop-Disponierer 202, 204, 206 bestimmen, wann eine Uop zum Ausführen bereit ist, anhand der Bereitschaft ihrer abhängigen Eingaberegisteroperandenquellen und der Verfügbarkeit der Ausführungsressourcen, welche die Uops benötigen, um ihre Operation zu vollenden. Der Schnelldisponierer 202 einer Ausführungsform kann auf jeder Hälfte des Haupttaktzyklus disponieren, während die anderen Disponierer nur einmal je Hauptprozessor-Taktzyklus disponieren können. Die Disponierer arbitrieren um die Versendeports zum Disponieren von Uops zur Ausführung.
  • Registerdateien 208, 210 sitzen zwischen den Disponierern 202, 204, 206 und den Ausführungseinheiten 212, 214, 216, 218, 220, 222, 224 im Ausführungsblock 211. Es gibt eine separate Registerdatei 208, 210 für Ganzzahl- bzw. Gleitkomma-Operationen. Jede Registerdatei 208, 210 einer Ausführungsform enthält des Weiteren ein Umgehungsnetzwerk, das soeben vollendete Ergebnisse, die noch nicht in die Registerdatei geschrieben wurden, umgehen oder zu neuen abhängigen Uops weiterleiten kann. Die Ganzzahlregisterdatei 208 und die Gleitkommaregisterdatei 210 sind ebenfalls in der Lage, miteinander Daten auszutauschen. In einer Ausführungsform wird die Ganzzahlregisterdatei 208 in zwei separate Registerdateien geteilt: eine Registerdatei für die 32 Bits niederer Ordnung von Daten und eine zweite Registerdatei für die 32 Bits höherer Ordnung von Daten. Die Gleitkommaregisterdatei 210 einer Ausführungsform hat 128 Bit breite Einträge, weil Gleitkomma-Instruktionen in der Regel Operanden von 64 bis 128 Bits Breite haben.
  • Der Ausführungsblock 211 enthält die Ausführungseinheiten 212, 214, 216, 218, 220, 222, 224, wo die Instruktionen tatsächlich ausgeführt werden. Diese Sektion enthält die Registerdateien 208, 210, welche die Ganzzahl- und Gleitkommadatenoperandwerte speichern, welche die Mikroinstruktionen zum Ausführen brauchen. Der Prozessor 200 einer Ausführungsform besteht aus einer Anzahl von Ausführungseinheiten: Adressgenerierungseinheit (AGU) 212, AGU 214, schnelle ALU 216, schnelle ALU 218, langsame ALU 220, Gleitkomma-ALU 222, Gleitkommabewegungseinheit 224. In einer Ausführungsform führen die Gleitkommaausführungsblöcke 222, 224 Gleitkomma-, MMX-, SIMD- und SSE- oder andere Operationen aus. Die Gleitkomma-ALU 222 einer Ausführungsform enthält einen 64-Bit-mal-64-Bit-Gleitkommateiler zum Ausführen von Divisions-, Quadratwurzel- und Rest-Mikro-Ops. In Ausführungsformen der vorliegenden Erfindung können Instruktionen, die einen Gleitkommawert beinhalten, mit der Gleitkomma-Hardware verarbeitet werden. In einer Ausführungsform gehen die ALU-Operationen zu den Hochgeschwindigkeits-ALU-Ausführungseinheiten 216, 218. Die schnellen ALUs 216, 218 einer Ausführungsform können schnelle Operationen mit einer effektiven Latenz eines halben Taktzyklus ausführen. In einer Ausführungsform gehen die komplexesten Ganzzahl- Operationen zu der langsamen ALU 220, da die langsame ALU 220 Ganzzahlausführungshardware für Operationen mit langer Latenz enthält, wie zum Beispiel eine Multiplikator-, Verschiebungs-, Markierungslogik- und Abzweigverarbeitung. Speicherlade-/-ablegeoperationen werden durch die AGUs 212, 214 ausgeführt. In einer Ausführungsform werden die Ganzzahl-ALUs 216, 218, 220 im Kontext der Ausführung von Ganzzahloperationen an 64 Bit-Datenoperanden beschrieben. In alternativen Ausführungsformen können die ALUs 216, 218, 220 implementiert werden, um eine Vielzahl verschiedener Datenbits zu unterstützen, einschließlich 16, 32, 128, 256 usw. Gleichermaßen können die Gleitkomma-Einheiten 222, 224 implementiert werden, um einen Bereich von Operanden mit Bits unterschiedlicher Breite zu unterstützen. In einer Ausführungsform können die Gleitkomma-Einheiten 222, 224 an 128 Bits breiten gepackten Datenoperanden in Verbindung mit SIMD- und Multimedia-Instruktionen operieren.
  • In einer Ausführungsform versenden die Uops-Disponierer 202, 204, 206 abhängige Operationen, bevor die Mutterdaten das Ausführen beendet haben. Da Uops im Prozessor 200 spekulativ disponiert und ausgeführt werden, enthält der Prozessor 200 des Weiteren Logik für die Handhabung von Speicherfehlzugriffen. Wenn eine Datenlast einen Fehlzugriff im Daten-Cache erfährt, so können sich abhängige Operationen „in flight” in der Pipeline befinden, die den Disponierer mit zeitweilig falschen Daten verlassen haben. Ein Neuwiedergabemechanismus verfolgt Instruktionen, die falsche Daten verwenden, und führt sie aus. Nur die abhängigen Operationen müssen erneut wiedergegeben werden, und die unabhängigen Operationen dürfen zu Ende ausgeführt werden. Die Disponierer und der Neuwiedergabemechanismus einer Ausführungsform eines Prozessors sind des Weiteren dafür ausgelegt, Instruktionen aufzufangen, die eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitstellen.
  • Der Begriff „Register” kann sich auf die Onboard-Prozessorspeicherpositionen beziehen, die als Teil von Instruktionen zum Identifizieren von Operanden verwendet werden. Oder anders ausgedrückt: Register können jene sein, die von außerhalb des Prozessors verwendet werden können (aus der Sicht eines Programmierers). Jedoch darf die Bedeutung der Register einer Ausführungsform nicht auf eine spezielle Art von Schaltkreis beschränkt werden. Vielmehr ist ein Register einer Ausführungsform in der Lage, Daten zu speichern und bereitzustellen und die im vorliegenden Text beschriebenen Funktionen auszuführen. Die im vorliegenden Text beschriebenen Register können durch Schaltungen innerhalb eines Prozessors unter Verwendung einer beliebigen Anzahl verschiedener Techniken implementiert werden, wie zum Beispiel dedizierte physische Register, dynamisch zugewiesene physische Register, die mit Registerumbenennung arbeiten, Kombinationen dedizierter und dynamisch zugewiesener physischer Register usw. In einer Ausführungsform speichern Ganzzahlregister 32-Bit-Ganzzahldaten. Eine Registerdatei einer Ausführungsform enthält des Weiteren acht Multimedia-SIMD-Register für gepackte Daten. Für die folgenden Besprechungen sind die Register als Datenregister zu verstehen, die dafür ausgelegt sind, gepackte Daten zu speichern, wie zum Beispiel 64 Bits breite MMXTM-Register (in einigen Fällen auch als „mm”-Register bezeichnet) in Mikroprozessoren, die MMX-Technologie-fähig sind, von der Intel Corporation aus Santa Clara, Kalifornien. Diese MMX-Register, die sowohl in Ganzzahl- als auch in Gleitkommaformen verfügbar sind, können mit gepackten Datenelementen operieren, die SIMD- und SSE-Instruktionen begleiten. Gleichermaßen können auch 128 Bits breite XMM-Register, die sich auf SSE2-, SSE3-, SSE4- oder noch spätere (generisch als „SSEx” bezeichnet) Technologie beziehen, verwendet werden, um solche gepackten Datenoperanden zu speichern. In einer Ausführungsform brauchen die Register beim Speichern von gepackten Daten und Ganzzahldaten nicht zwischen den zwei Datenarten zu differenzieren. In einer Ausführungsform sind Ganzzahl und Gleitkomma entweder in der gleichen Registerdatei oder in verschiedenen Registerdateien enthalten. Des Weiteren können in einer Ausführungsform Gleitkomma- und Ganzzahldaten in verschiedenen Registern oder denselben Registern gespeichert werden.
  • In den Beispielen der folgenden Figuren werden eine Anzahl von Datenoperanden beschrieben. 3A veranschaulicht verschiedene Darstellungen gepackter Datenarten in Multimedia-Registern gemäß einer Ausführungsform der vorliegenden Erfindung. 3A veranschaulicht Datenarten für ein gepacktes Byte 310, ein gepacktes Wort 320 und ein gepacktes Doppelwort (Dwort) 330 für 128 Bits breite Operanden. Das gepackte Byte-Format 310 dieses Beispiels ist 128 Bits lang und enthält sechzehn gepackte Byte-Datenelemente. Ein Byte ist hier als 8 Bits an Daten definiert. Informationen für jedes Byte-Datenelement ist in Bit 7 bis Bit 0 für Byte 0, Bit 15 bis Bit 8 für Byte 1, Bit 23 bis Bit 16 für Byte 2 und schließlich Bit 120 bis Bit 127 für Byte 15 gespeichert. Somit werden alle verfügbaren Bits in dem Register verwendet. Diese Speicheranordnung erhöht die Speichereffizienz des Prozessors. Außerdem kann nun, wenn auf sechzehn Datenelemente zugegriffen wird, eine einzelne Operation an sechzehn Datenelementen parallel ausgeführt werden.
  • Allgemein ist ein Datenelement ein einzelnes Datenstück, das an einer einzelnen Register- oder Speicherposition mit anderen Datenelementen von gleicher Länge gespeichert wird. In gepackten Datensequenzen, die sich auf die SSEx-Technologie beziehen, ist die Anzahl von in einem XMM-Register gespeicherten Datenelementen 128 Bits, geteilt durch die Länge in Bits eines einzelnen Datenelements. Gleichermaßen ist in gepackten Datensequenzen, die sich auf MMX- und SSE-Technologie beziehen, die Anzahl von in einem MMX-Register gespeicherten Datenelementen 64 Bits, geteilt durch die Länge in Bits eines einzelnen Datenelements. Obgleich die in 3A veranschaulichten Datenarten 128 Bit lang sind, können Ausführungsformen der vorliegenden Erfindung auch mit 64 Bit breiten Operanden, 256 Bit breiten Operanden, 512 Bit breiten Operanden oder Operanden sonstiger Breite operieren. Das gepackte Wortformat 320 dieses Beispiels ist 128 Bits lang und enthält acht gepackte Wortdatenelemente. Jedes gepackte Wort enthält sechzehn Bits an Informationen. Das gepackte Doppelwortformat 330 von 3A ist 128 Bits lang und enthält vier gepackte Doppelwort-Datenelemente. Jedes gepackte Doppelwort-Datenelement enthält 32 Bits an Informationen. Ein gepacktes Quadwort ist 128 Bits lang und enthält zwei gepackte Quadwort-Datenelemente.
  • 3B veranschaulicht alternative registerinterne Datenspeicherformate. Jedes gepackte Datenstück kann mehrere unabhängige Datenelemente enthalten. Es sind drei gepackte Datenformate 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 enthält Festkomma-Datenelemente. In einer alternativen Ausführungsform können ein oder mehrere von gepackt halb 341, gepackt einzeln 342 und gepackt doppelt 343 Gleitkomma-Datenelemente enthalten. Eine alternative Ausführungsform von gepackt halb 341 ist 128 Bits lang, einschließlich acht 16-Bit-Datenelementen. Eine Ausführungsform von gepackt einzeln 342 ist 128 Bits lang und enthält vier 32-Bit-Datenelemente. Eine Ausführungsform von gepackt doppelt 343 ist 128 Bits lang und enthält zwei 64-Bit-Datenelemente. Es versteht sich, dass solche gepackten Datenformate weiter zu anderen Registerlängen erweitert werden können, beispielsweise zu 96 Bits, 160 Bits, 192 Bits, 224 Bits, 256 Bits, 512 Bits oder mehr.
  • 3C veranschaulicht verschiedene mit Vorzeichen versehene und nicht mit Vorzeichen versehene Darstellungen gepackter Datenarten in Multimedia-Registern gemäß einer Ausführungsform der vorliegenden Erfindung. Die nicht mit Vorzeichen versehene gepackte Byte-Darstellung 344 veranschaulicht die Speicherung eines nicht mit Vorzeichen versehenen gepackten Bytes in einem SIMD-Register. Informationen für jedes Byte-Datenelement werden in Bit sieben bis Bit null für Byte null, Bit fünfzehn bis Bit acht für Byte eins, Bit dreiundzwanzig bis Bit sechzehn für Byte zwei usw. und schließlich Bit einhundertzwanzig bis Bit einhundertsiebenundzwanzig für Byte fünfzehn gespeichert. Somit werden alle verfügbaren Bits in dein Register verwendet. Diese Speicheranordnung kann die Speichereffizienz des Prozessors erhöhen. Außerdem kann nun, wenn auf sechzehn Datenelemente zugegriffen wird, eine einzelne Operation an sechzehn Datenelementen parallel ausgeführt werden. Die Darstellung eines mit Vorzeichen versehenen gepackten Bytes 345 veranschaulicht die Speicherung eines mit Vorzeichen versehenen gepackten Bytes. Es ist zu beachten, dass das achte Bit jedes Byte-Datenelements der Vorzeichenindikator ist. Die Darstellung eines nicht mit Vorzeichen versehenen gepackten Wortes 346 veranschaulicht, wie Wort sieben bis Wort null in einem SIMD-Register gespeichert sind. Die Darstellung eines mit Vorzeichen versehenen gepackten Wortes 347 ähnelt der registerinternen Darstellung eines nicht mit Vorzeichen versehenen gepackten Wortes 346. Es ist zu beachten, dass das sechzehnte Bit jedes Wort-Datenelements der Vorzeichenindikator ist. Die Darstellung eines nicht mit Vorzeichen versehenen gepackten Doppelwortes 348 zeigt, wie Doppelwort-Datenelemente gespeichert werden. Die Darstellung eines mit Vorzeichen versehenen gepackten Doppelwortes 349 ähnelt der registerinternen Darstellung eines nicht mit Vorzeichen versehenen gepackten Doppelwortes 348. Es ist zu beachten, dass das notwendige Vorzeichen-Bit das zweiunddreißigste Bit jedes Doppelwort-Datenelements ist.
  • 3D ist eine Darstellung einer Ausführungsform eines Operationscodierungs(Opcode)-Format 360, das 32 oder mehr Bits hat, und Register/Speicheroperandenadressierungsmodi, die einer Art von Opcode-Format entsprechen, die in „Intel® 64 and IA-32 Intel Architektur Software Developer’s Manual Combined Volumes 2A und 2B: Instruktion Set Reference A–Z” beschrieben ist, das bei der Intel Corporation, Santa Clara, (Kalifornien) im World-Wide-Web (www) auf intel.com/products/processor/manuals abgerufen werden kann. In einer Ausführungsform kann eine Instruktion durch ein oder mehrere der Felder 361 und 362 codiert werden. Es können bis zu zwei Operandenpositionen je Instruktion identifiziert werden, einschließlich bis zu zwei Quellenoperandenidentifikatoren 364 und 365. In einer Ausführungsform ist der Zieloperandenidentifikator 366 der gleiche wie der Quellenoperandenidentifikator 364, während sie in anderen Ausführungsformen verschieden sind. In einer alternativen Ausführungsform ist der Zieloperandenidentifikator 366 der gleiche wie der Quellenoperandenidentifikator 365, während sie in anderen Ausführungsformen verschieden sind. In einer Ausführungsform wird einer der durch die Quellenoperandenidentifikatoren 364 und 365 identifizierten Quellenoperanden durch die Ergebnisse der Instruktion überschrieben, während in anderen Ausführungsformen der Identifikator 364 einem Quellenregisterelement entspricht und der Identifikator 365 einem Zielregisterelement entspricht. In einer Ausführungsform können Operandenidentifikatoren 364 und 365 zum Identifizieren von 32-Bit- oder 64-Bit-Quellen- und Zieloperanden verwendet werden.
  • 3E ist eine Darstellung eines weiteren alternativen Operationscodierungs(Opcode)-Formats 370, das vierzig oder mehr Bits aufweist. Das Opcode-Format 370 entspricht dem Opcode-Format 360 und umfasst ein optionales Präfix-Byte 378. Eine Instruktion gemäß einer Ausführungsform kann durch eines oder mehrere der Felder 378, 371 und 372 codiert werden. Bis zu zwei Operandenpositionen je Instruktion können durch die Quellenoperandenidentifikatoren 374 und 375 und durch das Präfix-Byte 378 identifiziert werden. In einer Ausführungsform kann das Präfix-Byte 378 zum Identifizieren von 32-Bit- oder 64-Bit-Quellen- und Zieloperanden verwendet werden. In einer Ausführungsform ist der Zieloperandenidentifikator 376 der gleiche wie der Quellenoperandenidentifikator 374, während sie in anderen Ausführungsformen verschieden sind. In einer alternativen Ausführungsform ist der Zieloperandenidentifikator 376 der gleiche wie der Quellenoperandenidentifikator 375, während sie in anderen Ausführungsformen verschieden sind. In einer Ausführungsform operiert eine Instruktion an einem oder mehreren der Operanden, die durch die Operandenidentifikatoren 374 und 375 identifiziert wurden, und ein oder mehrere Operanden, die durch die Operandenidentifikatoren 374 und 375 identifiziert wurden, werden durch die Ergebnisse der Instruktion überschrieben, während in anderen Ausführungsformen Operanden, die durch die Identifikatoren 374 und 375 identifiziert wurden, in ein anderes Datenelement in einem anderen Register geschrieben werden. Die Opcode-Formate 360 und 370 erlauben Register to Register-, Memory to Register-, Register by Memory-, Register by Register-, Register by Immediate- und Register to Memory-Adressierung, was zum Teil durch MOD-Felder 363 und 373 und durch optionale Scale-Index-Base- und Verschiebungsbytes spezifiziert wird.
  • Wenden wir uns als Nächstes 3F zu. In einigen alternativen Ausführungsformen können 64-Bit (oder 128-Bit oder 256-Bit oder 512-Bit oder mehr) Single Instruction Multiple Data(SIMD)-Arithmetikoperationen durch eine Koprozessor-Datenverarbeitungs(CDP)-Instruktion ausgeführt werden. Das Operationscodierungs(Opcode)-Format 380 zeigt eine solche CDP-Instruktion, die CDP-Opcode-Felder 382 und 389 aufweist. Die Art von CDP-Instruktionsoperationen kann in alternativen Ausführungsformen durch eines oder mehrere der Felder 383, 384, 387 und 388 codiert werden. Es können bis zu drei Operandenpositionen je Instruktion identifiziert werden, einschließlich bis zu zwei Quellenoperandenidentifikatoren 385 und 390 und ein Zieloperandenidentifikator 386. Eine Ausführungsform des Koprozessors kann an 8-, 16-, 32- und 64-Bit-Werten operieren. In einer Ausführungsform wird eine Instruktion an Ganzzahldatenelementen ausgeführt. In einigen Ausführungsformen kann eine Instruktion bedingt unter Verwendung des Bedingungsfeldes 381 ausgeführt werden. In einigen Ausführungsformen können Quellendatengrößen durch das Feld 383 codiert werden. In einigen Ausführungsformen kann eine Zero(Z)-, Negative(N)-, Carry(C)- und Overflow(V)-Detektion an SIMD-Feldern ausgeführt werden. Bei einigen Instruktionen kann die Art der Sättigung durch das Feld 384 codiert werden.
  • Wenden wir uns als Nächstes 3G zu, die eine Darstellung eines weiteren alternativen Operationscodierungs(Opcode)-Formats 397 zum Bereitstellen einer Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität gemäß einer weiteren Ausführungsform ist, die einer Art von Opcode-Format entspricht, das in der „Intel® Advanced Vektor Extensions Programming Reference” beschrieben ist, die bei der Intel Corporation, Santa Clara, (Kalifornien) im World-Wide-Web (www) auf intel.com/products/processor/manuals abgerufen werden kann.
  • Der originale x86-Instruktionssatz wurde für einen 1-Byte-Opcode mit verschiedenen Formaten eines Adresssilben- und Immediate-Operanden bereitgestellt, der in zusätzlichen Bytes enthalten ist, deren Vorhandensein aus dem ersten „Opcode”-Byte bekannt war. Des Weiteren gab es bestimmte Byte-Werte, die als Modifikatoren für den Opcode reserviert waren (als Präfixe bezeichnet, da sie der Instruktion vorangestellt werden mussten). Als die originale Palette aus 256 Opcode-Bytes (einschließlich dieser speziellen Präfixwerte) erschöpft war, wurde ein einzelnes Byte als Ausweichpfad zu einem neuen Satz von 256 Opcodes zugewiesen. Als Vektor-Instruktionen (zum Beispiel SIMD) hinzu kamen, wurden mehr Opcodes erforderlich, und die „Zwei-Byte”-Opcode-Map reichte auch nicht mehr aus, selbst wenn sie mit Hilfe von Präfixen erweitert wurde. Zu diesem Zweck wurden neue Instruktionen in zusätzlichen Maps hinzugefügt, die 2 Bytes sowie einen optionalen Präfix als einen Identifikator verwenden.
  • Des Weiteren kann, um zusätzliche Register im 64-Bit-Modus zu ermöglichen, ein zusätzliches Präfix (als „REX” bezeichnet) zwischen den Präfixen und dem Opcode (und jeglichen Ausweich-Bytes, die zum Bestimmen des Opcodes notwendig sind) verwendet werden. In einer Ausführungsform kann das REX 4 „Nutzdaten”-Bits haben, um die Verwendung zusätzlicher Register im 64-Bit-Modus zu anzeigen. In anderen Ausführungsformen kann es weniger oder mehr als 4 Bits haben. Das allgemeine Format von mindestens einem Instruktionssatz (das allgemein dem Format 360 und/oder dem Format 370 entspricht) wird generisch durch Folgendes veranschaulicht:
    [prefixes] [rex] escape [escape2] Opcode modrm (usw.)
  • Das Opcode-Format 397 entspricht dem Opcode-Format 370 und umfasst optionale VEX-Präfix-Bytes 391 (in einer Ausführungsform mit C4 hex beginnend), um die meisten anderen üblicherweise verwendeten Legacy-Instruktionspräfix-Bytes und Ausweich-Codes zu ersetzen. Zum Beispiel veranschaulicht das Folgende eine Ausführungsform, die zwei Felder zum Codieren einer Instruktion verwendet, was verwendet werden kann, wenn ein zweiter Ausweich-Code in der originalen Instruktion vorliegt oder wenn zusätzliche Bits (zum Beispiel die XB- und W-Felder) in dem REX-Feld verwendet werden müssen. In der unten veranschaulichten Ausführungsform ist der Legacy-Ausweichpfad durch einen neuen Ausweichwert dargestellt, Legacy-Präfixe werden vollständig als Teil der „Nutzdaten”-Bytes komprimiert, Legacy-Präfixe werden zurückgewonnen und stehen für eine künftige Erweiterung zur Verfügung, der zweite Ausweich-Code wird in einem „Map”-Feld komprimiert, wobei künftiger Map- oder Merkmalraum verfügbar ist, und neue Merkmale werden hinzugefügt (zum Beispiel erhöhte Vektorlänge und ein zusätzlicher Quellenregisterspezifikator).
  • Figure DE112011105664T5_0002
  • Eine Instruktion gemäß einer Ausführungsform kann durch eines oder mehrere der Felder 391 und 392 codiert werden. Bis zu vier Operandenpositionen je Instruktion können durch das Feld 391 in Kombination mit den Quellenoperandenidentifikatoren 374 und 375 und in Kombination mit einem optionalen Scale-Index-Base(SIB)-Identifikator 393, einem optionalen Verschiebungsidentifikator 394 und einen optionalen Immediate-Byte 395 identifiziert werden. In einer Ausführungsform können VEX-Präfix-Bytes 391 zum Identifizieren von 32-Bit- oder 64-Bit-Quellen- und Zieloperanden und/oder 128-Bit- oder 256-Bit-SIMD-Register- oder -Speicheroperanden verwendet werden. In einer Ausführungsform kann die durch das Opcode-Format 397 bereitgestellte Funktionalität mit dem Opcode-Format 370 redundant sein, während sie in anderen Ausführungsformen verschieden sind. Die Opcode-Formate 370 und 397 erlauben Register to Register-, Memory to Register-, Register by Memory-, Register by Register-, Register by Immediate- und Register to Memory-Adressierung, was zum Teil durch das MOD-Feld 373 und durch den optionalen Scale-Index-Base(SIB)-Identifikator 393, einen optionalen Verschiebungsidentifikator 394 und ein optionales Immediate-Byte 395 spezifiziert wird.
  • Wenden wir uns als Nächstes 3H zu, wo eine Darstellung eines weiteren alternativen Operationscodierungs(Opcode)-Formats 398 gezeigt ist, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität gemäß einer weiteren Ausführungsform bereitzustellen. Das Opcode-Format 398 entspricht den Opcode-Formaten 370 und 397 und umfasst optionale EVEX-Präfix-Bytes 396 (in einer Ausführungsform mit 62 hex beginnend), um die meisten anderen üblicherweise verwendeten Legacy-Instruktionspräfix-Bytes und Ausweich-Codes zu ersetzen und zusätzliche Funktionalität bereitstellen. Eine Instruktion gemäß einer Ausführungsform kann durch eines oder mehrere der Felder 396 und 392 codiert werden. Bis zu vier Operandenpositionen je Instruktion und eine Maske können durch das Feld 396 in Kombination mit den Quellenoperandenidentifikatoren 374 und 375 und in Kombination mit einem optionalen Scale-Index-Base(SIB)-Identifikator 393, einem optionalen Verschiebungsidentifikator 394 und einem optionalen Immediate-Byte 395 identifiziert werden. In einer Ausführungsform können EVEX-Präfix-Bytes 396 zum Identifizieren von 32-Bit- oder 64-Bit-Quellen- und Zieloperanden und/oder 128-Bit-, 256-Bit- oder 512-Bit-SIMD-Register- oder -Speicheroperanden verwendet werden. In einer Ausführungsform kann die durch das Opcode-Format 398 bereitgestellte Funktionalität mit den Opcode-Formaten 370 oder 397 redundant sein, während sie in anderen Ausführungsformen verschieden sind. Das Opcode-Format 398 erlaubt Register to Register-, Memory to Register-, Register by Memory-, Register by Register-, Register by Immediate- und Register to Memory-Adressierung mit Masken, was zum Teil durch das MOD-Feld 373 und durch den optionalen SIB-Identifikator 393, einen optionalen Verschiebungsidentifikator 394 und ein optionales Immediate-Byte 395 spezifiziert wird. Das allgemeine Format von mindestens einem Instruktionssatz (das allgemein dem Format 360 und/oder dem Format 370 entspricht) wird generisch durch Folgendes veranschaulicht:
    evex1 RXBmmmmm WvvvLpp evex4 opcode modrm [sib] [disp] [imm]
  • In einer Ausführungsform kann eine Instruktion, die gemäß dem EVEX-Format 398 codiert ist, zusätzliche „Nutzdaten”-Bits haben, die dafür verwendet werden können, eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität mit zusätzlichen neuen Merkmalen bereitzustellen, wie zum Beispiel ein nutzerkonfigurierbares Maskenregister oder einen zusätzlichen Operanden oder Auswahlmöglichkeiten unter 128-Bit-, 256-Bit- oder 512-Bit-Vektorregistern, oder mehr Registern, aus denen ausgewählt werden kann, usw.
  • Wenn zum Beispiel das VEX-Format 397 verwendet werden kann, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität mit einer impliziten Maske bereitzustellen, oder wenn die zusätzliche Operation unär ist, wie zum Beispiel eine Typkonvertierung, so kann das EVEX-Format 398 verwendet werden, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität mit einer expliziten nutzerkonfigurierbaren Maske bereitzustellen, und wenn die zusätzliche Operation binär ist, wie zum Beispiel Addition oder Multiplikation, wofür ein zusätzlicher Operand benötigt wird. Einige Ausführungsformen des EVEX-Formats 398 können ebenfalls verwendet werden, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität und eine implizite Vollendungsmaske bereitzustellen, wenn die zusätzliche Operation ternär ist. Des Weiteren kann, wenn das VEX-Format 397 verwendet werden kann, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität in 128-Bit- oder 256-Bit-Vektorregistern bereitzustellen, das EVEX-Format 398 verwendet werden, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität in 128-Bit-, 256-Bit-, 512-Bit- oder größeren (oder kleineren) Vektorregistern bereitzustellen. Somit können Instruktionen zum Bereitstellen einer Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität Abhängigkeiten zwischen Instruktionen für zusätzliche Operationen und Instruktionen für Speicheroperationen zu beseitigen, wie zum Beispiel das Holen oder Streuen von Daten.
  • Beispielhafte Instruktionen zum Bereitzustellen einer Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität werden durch die folgenden Beispiele veranschaulicht:
    Instruktion Ziel/1. Quelle Quelle1 Maske Quelle2 Quelle3 Beschreibung
    Hol-Op Vmm1 Vmm2 Maske1 Mem32 Vindex Verwendung von Vindex und Mem32 zum Holen gemäß Maske1 in Vmm1 und dann Anwenden der Op auf Vmm1 und Vmm2
    Streuungs-Op Vmm1 Vmm2 Maske1 Mem32 Vindex Anwenden der Op auf Vmm1 und Vmm2, dann Verwendung von Vindex und Mem32 zum Streuen gemäß Maske1
    Hol-Op Vmm1 Vmm2 Mem32 Vindex Verwendung von Vindex und Mem32 zum Holen (implizite Maske) in Vmm1 und dann Anwenden der Op auf Vmm1 und Vmm2
    Streuungs-Op Vmm1 Vmm2 Mem32 Vindex Anwenden der Op auf Vmm1 und Vmm2, dann Verwendung von Vindex und Mem32 zum Streuen (implizite Maske)
    Hol-Op Vmm1 Maske1 Mem32 Vindex Verwendung von Vindex und Mem32 zum Holen gemäß Maske1 in Vmm1 und dann Anwenden einer unären Op auf Vmm1
    Streuungs-Op Vmm1 Maske1 Mem32 Vindex Anwenden einer unären Op auf Vmm1 und Verwendung von Vindex und Mem32 zum Streuen gemäß Maske1
    Hol-Op Vmm1 Maske1 Mem32 Vindex Verwendung von Vindex und Mem32 zum Holen gemäß Maske1 in Temp und dann Anwenden der Op auf Vmm1 und Temp
  • 4A ist ein Blockschaubild, das eine In-Order-Pipeline und eine Registerumbenennungsstufe/Out-of-Order-Ausgabe-/Ausführungspipeline gemäß mindestens einer Ausführungsform der Erfindung veranschaulicht. 4B ist ein Blockschaubild, das einen In-Order-Architekturkern und eine Registerumbenennungslogik/Out-of-Order-Ausgabe-/Ausführungslogik veranschaulicht, die in einem Prozessor gemäß mindestens einer Ausführungsform der Erfindung enthalten ist. Die mit durchgezogenen Linien gezeichneten Kästchen in 4A veranschaulichen die In-Order-Pipeline, während die mit Strichlinien gezeichneten Kästchen die Registerumbenennungs/Out-of-Order-Ausgabe-/Ausführungspipeline veranschaulichen. Gleichermaßen veranschaulichen die mit durchgezogenen Linien gezeichneten Kästchen in 4B die In-Order-Architekturlogik, während die mit Strichlinien gezeichneten Kästchen die Registerumbenennungslogik und Out-of-Order-Ausgabe-/Ausführungslogik veranschaulichen.
  • In 4A enthält eine Prozessorpipeline 400 eine Holstufe 402, eine Längendecodierstufe 404, eine Decodierstufe 406, eine Zuordnungsstufe 408, eine Umbenennungsstufe 410, eine Disponierungsstufe 412 (auch als Versand- oder Ausgabestufe bekannt), eine Registerlese-/Speicherlesestufe 414, eine Ausführungsstufe 416, eine Rückschreib-/Speicherschreibstufe 418, eine Ausnahmebehandlungsstufe 422 und eine Bindungsstufe 424.
  • In 4B bezeichnen Pfeile eine Kopplung zwischen zwei oder mehr Einheiten, und die Richtung des Pfeils gibt eine Richtung des Datenflusses zwischen jenen Einheiten an. 4B zeigt einen Prozessorkern 490, der eine Frontend-Einheit 430 enthält, die mit einer Ausführungs-Engine-Einheit 450 gekoppelt ist, und beide sind mit einer Speichereinheit 470 gekoppelt.
  • 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. Als eine weitere Option kann der Kern 490 ein Spezialkern sein, wie zum Beispiel ein Netzwerk- oder Kommunikationskern, eine Kompressionsengine, ein Grafikkern oder dergleichen. Die Frontend-Einheit 430 enthält eine Abzweigprädiktionseinheit 432, die mit einer Instruktions-Cache-Einheit 434 gekoppelt ist, die mit einem Instruktionsübersetzungs-Lookaside-Puffer (TLB) 436 gekoppelt ist, der mit einer Instruktionsholeinheit 438 gekoppelt ist, die mit einer Decodiereinheit 440 gekoppelt ist. Die Decodiereinheit oder der Decodierer kann Instruktionen decodieren und als einen Ausgang eine oder mehrere Mikro-Operationen, Mikrocode-Eintrittspunkte, Mikroinstruktionen, andere Instruktionen oder andere Steuersignale generieren, die aus den originalen Instruktionen decodiert werden oder die auf sonstige Weise die originalen Instruktionen widerspiegeln oder von den originalen Instruktionen abgeleitet sind. Der Decodierer kann unter Verwendung verschiedener anderer Mechanismen implementiert werden. Zu Beispielen geeigneter Mechanismen gehören Nachschlagtetabellen, Hardware-Implementierungen, Programmierbare Logikarrays (PLAs), Mikrocode-Nurlesespeicher (ROMs) usw. Die Instruktions-Cache-Einheit 434 ist des Weiteren mit einer Level 2(L2)-Cache-Einheit 476 in der Speichereinheit 470 gekoppelt. Die Decodiereinheit 440 ist mit einer Umbenennungs-/Zuordnungs-Einheit 452 in der Ausführungs-Engine-Einheit 450 gekoppelt.
  • Die Ausführungs-Engine-Einheit 450 enthält die Umbenennungs-/Zuordnungs-Einheit 452, die mit einer Retirement-Einheit 454 und einem Satz aus einer oder mehreren Disponiereinheiten 456 gekoppelt ist. Die eine oder die mehreren Disponiereinheiten 456 stellen eine beliebige Anzahl verschiedener Disponierer dar, einschließlich Reservierungsstationen, zentraler Instruktionsfenster usw. Die eine oder die mehreren Disponiereinheiten 456 sind mit der einen oder den mehreren physischen Registerdateieinheiten 458 gekoppelt. Jede der einen oder der mehreren physischen Registerdateieinheiten 458 stellt eine oder mehrere physische Registerdateien dar, von denen verschiedene eine oder mehrere andere Datenarten speichern, wie zum Beispiel skalare Ganzzahl, skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektor-Ganzzahl, Vektor-Gleitkomma usw., Status (zum Beispiel einen Instruktionszeiger, der die Adresse der nächsten auszuführenden Instruktion ist), usw. Die eine oder die mehreren physischen Registerdateien 458 werden durch die Retirement-Einheit 454 überlappt, um verschiedene Wege zu veranschaulichen, wie Registerumbenennung und Out-of-Order-Ausführung implementiert werden können (zum Beispiel unter Verwendung eines oder mehrerer Umordnungspuffer und einer oder mehrerer Retirement-Registerdateien, unter Verwendung einer oder mehrerer Zukunftsdateien, einer oder mehrerer Verlaufspuffer und einer oder mehrerer Retirement-Registerdateien; unter Verwendung einer Register-Map und eines Registerpools, usw.). Im Allgemeinen sind die Architekturregister von außerhalb des Prozessors oder aus der Perspektive eines Programmierers sichtbar. Die Register sind nicht auf eine bestimmte bekannte Art von Schaltkreis beschränkt. Verschiedene andere Arten von Registern sind ebenfalls geeignet, solange sie in der Lage sind, Daten in der im vorliegenden Text beschriebenen Weise zu speichern und bereitzustellen. Beispiele von geeigneten Registern sind dedizierte physische Register, dynamisch zugewiesene physische Register, die mit Registerumbenennung arbeiten, Kombinationen von dedizierten und dynamisch zugewiesenen physischen Registern usw. Die Retirement-Einheit 454 und die eine oder die mehreren physischen Registerdateien 458 sind mit dem einen oder den mehreren Ausführungsclustern 460 gekoppelt. Das eine oder die mehreren Ausführungscluster 460 enthalten einen Satz aus einer oder mehreren Ausführungseinheiten 462 und einen Satz aus einer oder mehreren Speicherzugriffseinheiten 464. Die Ausführungseinheiten 462 können verschiedenen Operationen (zum Beispiel Verschiebungen, Addition, Subtraktion, Multiplikation) und an verschiedenen Arten von Daten (zum Beispiel skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektor-Ganzzahl, Vektor-Gleitkomma) ausführen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten enthalten können, die speziell für bestimmte Funktionen oder Sätze von Funktionen gedacht sind, können andere Ausführungsformen eine einzige Ausführungseinheit oder mehrere Ausführungseinheiten enthalten, die allesamt alle Funktionen ausführen. Die eine oder die mehreren Disponiereinheiten 456, die eine oder die mehreren physischen Registerdateien 458 und das eine oder den mehreren Ausführungscluster 460 sind als möglicherweise in der Mehrzahl vorhanden gezeigt, weil bestimmte Ausführungsformen separate Pipelines für bestimmte Arten von Daten/Operationen erzeugen (zum Beispiel eine skalare Ganzzahlpipeline, eine skalare Gleitkomma/gepackte Ganzzahl/gepackte Gleitkomma/Vektor-Ganzzahl/Vektor-Gleitkomma-Pipeline und/oder eine Speicherzugriffspipeline, die alle ihre eigene Disponierer-Einheit, ihre eigene physische Registerdateien-Einheit und/oder ihr eigenes Ausführungscluster haben, und im Fall einer separaten Speicherzugriffspipeline werden bestimmte Ausführungsformen implementiert, bei denen nur das Ausführungscluster dieser Pipeline die eine oder die mehreren Speicherzugriffseinheiten 464 hat). Es versteht sich des Weiteren, dass, wenn separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-Order-Ausgabe-/Ausführungspipelines und der Rest In-Order-Pipelines sein können.
  • Der Satz Speicherzugriffseinheiten 464 ist mit der Speichereinheit 470 gekoppelt, die eine Daten-TLB-Einheit 472 enthält, die mit einer Daten-Cache-Einheit 474 gekoppelt ist, die mit einer Level 2(L2)-Cache-Einheit 476 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 464 eine Lasteinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit enthalten, die jeweils mit der Daten-TLB-Einheit 472 in der Speichereinheit 470 gekoppelt sind. Die L2-Cache-Einheit 476 ist mit einer oder mehreren weiteren Cache-Ebenen und letztendlich mit einem Hauptspeicher gekoppelt.
  • Zum Beispiel kann die beispielhafte Registerumbenennungs/Out-of-Order-Ausgabe-/Ausführungskern-Architektur die Pipeline 400 folgendermaßen implementieren: 1) die Instruktionsholeinheit 438 führt die Hol- und Längendecodierstufen 402 und 404 aus; 2) die Decodiereinheit 440 führt die Decodierstufe 406 aus; 3) die Umbenennungs-/Zuordnungs-Einheit 452 führt die Zuordnungsstufe 408 und die Umbenennungsstufe 410 aus; 4) die Disponiereinheiten 456 führen die Disponierstufe 412 aus; 5) die eine oder die mehreren physischen Registerdateien 458 und die Speichereinheit 470 führen die Registerlese-/Speicherlesestufe 414 aus; das Ausführungscluster 460 führt die Ausführungsstufe 416 aus; 6) die Speichereinheit 470 und die eine oder die mehreren physischen Registerdateien 458 führen die Rückschreib-/Speicherschreibstufe 418 aus; 7) mehrere Einheiten können an der Ausnahmebehandlungsstufe 422 beteiligt sein; und 8) die Retirement-Einheit 454 und die eine oder die mehreren physischen Registerdateien 458 führen die Bindungssstufe 424 aus.
  • Der Kern 490 kann einen oder mehrere Instruktionssätze unterstützen (zum Beispiel den x86-Instruktionssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden); den MIPS-Instruktionssatz von MIPS Technologies aus Sunnyvale, (Kalifornien); den ARM-Instruktionssatz (mit optionalen zusätzlichen Erweiterungen, wie zum Beispiel NEON) von ARM Holdings aus Sunnyvale, (Kalifornien)).
  • Es versteht sich, dass der Kern Multithreading unterstützen kann (das Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) und dies in einer Vielzahl verschiedener Arten tun kann, einschließlich zeitlich unterteiltes Multithreading, gleichzeitiges Multithreading (wenn ein einzelner physischer Kern einen logischen Kern für jeden der Threads bildet, so führt dieser physische Kern ein gleichzeitiges Multithreading aus) oder eine Kombination davon (zum Beispiel zeitlich unterteiltes Holen und Decodieren und gleichzeitiges Multithreading danach, wie zum Beispiel bei der Intel® Hyperthreading-Technologie).
  • Obgleich die Registerumbenennung im Kontext der Out-of-Order-Ausführung beschrieben wird, versteht es sich, dass die Registerumbenennung auch in einer In-Order Architektur verwendet werden kann. Obgleich die veranschaulichte Ausführungsform des Prozessors auch separate Instruktions- und Daten-Cache-Einheiten 434/474 und eine gemeinsam genutzte L2-Cache-Einheit 476 enthält, können alternative Ausführungsformen einen einzelnen internen Cache sowohl für Instruktionen als auch für Daten haben, wie beispielsweise einen internen Level 1(L1)-Cache, oder mehrere Ebenen von internem Cache. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, enthalten. Alternativ kann sich der gesamte Cache außerhalb des Kerns und/oder des Prozessors befinden.
  • 5 ist ein Blockschaubild eines Einzelkernprozessors und eines Mehrkernprozessors 500 mit integriertem Speicher-Controller und Grafik gemäß Ausführungsformen der Erfindung. Die mit durchgezogenen Linien gezeichneten Kästchen in 5 veranschaulichen einen Prozessor 500 mit einem einzelnen Kern 502A, einen Systemagenten 510, einen Satz aus einer oder mehreren Bus-Controllereinheiten 516, während die optionale Hinzufügung der mit Strichlinien gezeichneten Kästchen einen alternativen Prozessor 500 mit mehreren Kernen 502A–N, einen Satz aus einem oder mehreren integrierten Speicher-Controllern 514 in der Systemagenten-Einheit 510 und eine integrierte Grafiklogik 508 veranschaulicht.
  • Die Speicherhierarchie enthält eine oder mehrere Ebenen von Cache in den Kernen, einen Satz aus einer oder mehreren gemeinsam genutzten Cache-Einheiten 506 und (nicht gezeigten) externen Speicher, der mit dem Satz integrierter Speicher-Controller 514 gekoppelt ist. Die Satz gemeinsam genutzter Cache-Einheiten 506 kann einen oder mehrere Mid-Level-Caches enthalten, wie zum Beispiel Level 2 (L2), Level 3 (L3), Level 4 (L4) oder Cache weiterer Ebenen, einen Last-Level-Cache (LLC) und/oder Kombinationen davon. Obgleich in einer Ausführungsform eine ringbasierte Interconnect-Einheit 512 die integrierte Grafiklogik 508, den Satz gemeinsam genutzter Cache-Einheiten 506 und die Systemagenten-Einheit 510 untereinander verbindet, können alternative Ausführungsformen jede beliebige Anzahl allgemein bekannter Techniken zum Verbinden solcher Einheiten untereinander verwenden.
  • In einigen Ausführungsformen sind ein oder mehrere der Kerne 502A–N zum Multithreading befähigt. Der Systemagent 510 enthält jene Komponenten, welche die Kerne 502A–N koordinieren und betreiben. Die Systemagenten-Einheit 510 kann zum Beispiel eine Leistungssteuereinheit (PCU) und eine Anzeigeeinheit enthalten. Die PCU kann Logik und Komponenten sein oder enthalten, die für die Regelung des Leistungszustands der Kerne 502A–N und der integrierten Grafiklogik 508 benötigt werden. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern angeschlossener Anzeigen.
  • Die Kerne 502A–N können hinsichtlich Architektur und/oder Instruktionssatz homogen oder heterogen sein. Zum Beispiel können einige der Kerne 502A–N in-Order sein, während andere Out-of-Order sind. Als ein weiteres Beispiel können zwei oder mehr der Kerne 502A–N dazu befähigt sein, denselben Instruktionssatz auszuführen, während andere dazu befähigt sein können, nur eine Teilmenge dieses Instruktionssatzes oder einen anderen Instruktionssatz auszuführen.
  • Der Prozessor kann ein Allzweckprozessor sein, wie zum Beispiel ein CoreTM i3-, i5-, i7-, 2 Duo- und Quad-, XeonTM-, ItaniumTM-, XScaleTM- oder StrongARMTM-Prozessor, die bei der Intel Corporation aus Santa Clara, Kalifornien bezogen werden können. Alternativ kam der Prozessor auch von einem anderen Anbieter stammen, wie zum Beispiel ARM Holdings, Ltd, MIPS usw. Der Prozessor kann ein Spezialprozessor sein, wie zum Beispiel ein Netzwerk- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, ein Koprozessor, ein eingebetteter Prozessor oder dergleichen. Der Prozessor kann auf einem einzelnen oder auf mehreren Chips implementiert werden. Der Prozessor 500 kann – unter Verwendung einer beliebigen Anzahl von Prozesstechnologien, wie zum Beispiel BiCMOS, CMOS oder NMOS – ein Teil von einem oder mehreren Substraten sein und/oder auf einem oder mehreren Substraten implementiert werden.
  • Die 68 sind beispielhafte Systeme, die zum Einbinden des Prozessors 500 geeignet sind, während 9 ein beispielhaftes System auf einem Chip (SoC) ist, das einen oder mehrere der Kerne 502 enthalten kann. Andere dem Fachmann bekannte Systemdesigns und -konfigurationen für Laptops, Desktops, handgehaltene PCs, Persönliche Digitale Assistenten, Engineering-Workstations, Server, Netzwerkkomponenten, Netzwerkhubs, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Grafikkomponenten, Videospielegeräte, Settop-Boxen, Mikrocontroller, Mobiltelefone, tragbare Mediaplayer, handgehaltene Geräte und verschiedene andere elektronische Geräte sind ebenfalls geeignet. Generell sind eine enorme Vielzahl verschiedener Systeme oder elektronischer Geräte geeignet, der in der Lage sind, einen Prozessor und/oder andere Ausführungslogik, wie im vorliegenden Text offenbart, zu integrieren.
  • Wenden wir uns nun 6 zu, wo ein Blockschaubild eines Systems 600 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Das System 600 kann einen oder mehrere Prozessoren 610, 615 enthalten, die mit einem Grafik-Speicher-Controller-Hub (GMCH) 620 gekoppelt sind. Die Optionalität zusätzlicher Prozessoren 615 ist in 6 mit Strichlinien veranschaulicht.
  • Jeder Prozessor 610, 615 kann eine Version des Prozessors 500 sein. Es ist jedoch zu beachten, dass es unwahrscheinlich ist, dass integrierte Grafiklogik und integrierte Speicher-Controller in den Prozessoren 610, 615 vorhanden sind. 6 veranschaulicht, dass der GMCH 620 mit einem Speicher 640 gekoppelt sein kann, der beispielsweise ein dynamischer Direktzugriffsspeicher (DRAM) sein kann. Der DRAM kann, in mindestens einer Ausführungsform, einem nichtflüchtigen Cache zugeordnet sein.
  • Der GMCH 620 kann ein Chipsatz oder ein Abschnitt eines Chipsatzes sein. Der GMCH 620 kann mit dem einen oder den mehreren Prozessoren 610, 615 kommunizieren und die Interaktion zwischen dem einen oder den mehreren Prozessoren 610, 615 und dem Speicher 640 steuern. Der GMCH 620 kann des Weiteren als eine beschleunigte Busschnittstelle zwischen dem einen oder den mehreren Prozessoren 610, 615 und weiteren Elementen des Systems 600 fungieren. In mindestens einer Ausführungsform kommuniziert der GMCH 620 mit dem einen oder den mehreren Prozessoren 610, 615 über einen Multidrop-Bus, wie zum Beispiel einen Frontseide-Bus (FSB) 695.
  • Des Weiteren ist der GMCH 620 mit einer Anzeige 645 (wie zum Beispiel einem Flachbildschirm) gekoppelt. Der GMCH 620 kann einen integrierten Grafikbeschleuniger enthalten. Der GMCH 620 ist des Weiteren mit einem Eingabe/Ausgabe(E/A)-Controller-Hub (ICH) 650 gekoppelt, der dafür verwendet werden kann, verschiedene Peripheriegeräte mit dem System 600 zu koppeln. Zum Beispiel ist in der Ausführungsform von 6 ein externes Grafikgerät 660 gezeigt, das ein diskretes Grafikgerät sein kann, das, zusammen mit einem weiteren Peripheriegerät 670, mit einem ICH 650 gekoppelt ist.
  • Alternativ können auch zusätzliche oder andere Prozessoren in dem System 600 vorhanden sein. Zum Beispiel können ein oder mehrere zusätzliche Prozessoren 615 einen oder mehrere zusätzliche Prozessoren, die die gleichen wie der Prozessor 610 sind, einen oder mehrere zusätzliche Prozessoren, die anders als der, oder asymmetrisch zu dem, Prozessor 610 sind, Beschleuniger (wie zum Beispiel Grafikbeschleuniger oder digitale Signalverarbeitungs(DSP)-Einheiten), Feldprogrammierbare Gate-Arrays oder beliebige andere Prozessoren enthalten. Es kann eine Vielzahl von Unterschieden zwischen den physischen Ressourcen 610, 615 hinsichtlich eines Spektrums an Leistungsmessgrößen geben, wie zum Beispiel architektonische Eigenschaften, mikroarchitektonische Eigenschaften, thermische Eigenschaften, Leistungsaufnahme und dergleichen. Diese Unterschiede können sich in der Praxis als Asymmetrie und Heterogenität unter den Prozessoren 610, 615 manifestieren. In mindestens einer Ausführungsform können sich die verschiedenen Prozessoren 610, 615 auf demselben Chip-Package befinden.
  • Wenden wir uns nun 7 zu, wo ein Blockschaubild eines zweiten Systems 700 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Wie in 7 gezeigt, ist das Multiprozessor-System 700 ein Punkt-zu-Punkt-Interconnect-System und enthält einen ersten Prozessor 770 und einen zweiten Prozessor 780, die über ein Punkt-zu-Punkt-Interconnect 750 gekoppelt sind. Jeder der Prozessoren 770 und 780 kann eine Version des Prozessors 500 als einer oder mehrere der Prozessoren 610, 615 sein.
  • Zwar sind nur zwei Prozessoren 770, 780 gezeigt, doch es versteht sich, dass der Geltungsbereich der vorliegenden Erfindung 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 so gezeigt, dass sie integrierte Speicher-Controllereinheiten 772 bzw. 782 enthalten. Der Prozessor 770 enthält des Weiteren als Teil seiner Bus-Controllereinheiten Punkt-zu-Punkt(P-P)-Schnittstellen 776 und 778; gleichermaßen enthält der zweite Prozessor 780 P-P-Schnittstellen 786 und 788. Die Prozessoren 770, 780 können Informationen über eine Punkt-zu-Punkt(P-P)Schnittstelle 750 unter Verwendung von P-P-Schnittstellenschaltkreisen 778, 788 austauschen. Wie in 7 gezeigt, koppeln IMCs 772 und 782 die Prozessoren mit jeweiligen Speichern, und zwar einem Speicher 732 und einem Speicher 734, die Abschnitte eines Hauptspeichers sein können, der lokal mit den jeweiligen Prozessoren gekoppelt ist.
  • Die Prozessoren 770, 780 können jeweils Informationen mit einem Chipsatz 790 über einzelne P-P-Schnittstellen 752, 754 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltkreisen 776, 794, 786, 798 austauschen. Der Chipsatz 790 kann des Weiteren Informationen mit einem Hochleistungsgrafikschaltkreis 738 über eine Hochleistungsgrafikschnittstelle 739 austauschen.
  • Ein (nicht gezeigter) gemeinsam genutzter Cache kann in jedem der Prozessoren oder außerhalb der beiden Prozessoren enthalten sein, aber dennoch mit den Prozessoren über P-P-Interconnect verbunden, dergestalt, dass die Informationen des lokalen Cache eines der beiden oder beider Prozessoren in dem gemeinsam genutzten Cache gespeichert werden kann, wenn ein Prozessor in einem Stromsparmodus versetzt wird.
  • Der Chipsatz 790 kann mit einem ersten Bus 716 über eine Schnittstelle 796 gekoppelt sein. In einer Ausführungsform kann der erste Bus 716 ein Peripheral Component Interconnect(PCI)-Bus oder ein Bus wie zum Beispiel ein PCI Express-Bus oder ein anderer E/A-Interconnect-Bus der dritten Generation sein, obgleich der Geltungsbereich der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in 7 gezeigt, können verschiedene E/A-Geräte 714 mit einem ersten Bus 716 gekoppelt sein, zusammen mit einer Busbrücke 718, die den ersten Bus 716 mit einem zweiten Bus 720 koppelt. In einer Ausführungsform kann der zweite Bus 720 ein Low Pin Count(LPC)-Bus sein. Verschiedene Geräte können mit einem zweiten Bus 720 gekoppelt sein, einschließlich beispielsweise eine Tastatur und/oder eine Maus 722, Kommunikationsgeräte 727 und eine Speichereinheit 728, wie zum Beispiel ein Disk-Laufwerk oder ein sonstiges Massenspeichergerät, das in einer Ausführungsform Instruktionen/Code und Daten 730 enthalten kann. Des Weiteren kann ein Audio-E/A 724 mit einem zweiten Bus 720 gekoppelt sein. Es ist zu beachten, dass auch andere Architekturen möglich sind. Zum Beispiel kann ein System anstelle der Punkt-zu-Punkt-Architektur von 7 einen Multidrop-Bus oder eine andere derartige Architektur implementieren.
  • Wenden wir uns nun 8 zu, wo ein Blockschaubild eines dritten Systems 800 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Gleiche Elemente in 7 und 8 tragen gleiche Bezugszahlen, und bestimmte Aspekte von 7 wurden in 8 weggelassen, um andere Aspekte von 8 nicht in den Hintergrund treten zu lassen.
  • 8 veranschaulicht, dass die Prozessoren 870, 880 integrierten Speicher und E/A-Steuerungslogik („CL”) 872 bzw. 882 enthalten können. In mindestens einer Ausführungsform kann die CL 872, 882 integrierte Speicher-Controllereinheiten enthalten, wie zum Beispiel jene, die oben in Verbindung mit den 5 und 7 beschrieben wurden. Des Weiteren kann die CL 872, 882 auch eine E/A-Steuerungslogik enthalten. 8 veranschaulicht, dass nicht nur die Speicher 832, 834 mit dem CL 872, 882 gekoppelt sind, sondern auch, dass auch die E/A-Geräten 814 mit der Steuerungslogik 872, 882 gekoppelt sind. Legacy-E/A-Geräte 815 sind mit dem Chipsatz 890 gekoppelt.
  • Wenden wir uns nun 9 zu, wo ein Blockschaubild eines SoC 900 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt ist. Ähnliche Elemente in 5 tragen gleiche Bezugszahlen. Des Weiteren sind mit Strichlinien gezeichneten Kästchen optionale Merkmale von höherentwickelten SoCs. In 9 sind eine oder mehrere Interconnect-Einheiten 902 gekoppelt mit: einem Anwendungsprozessor 910, der einen Satz aus einem oder mehreren Kernen 502A–N und einem oder mehreren gemeinsam genutzten Cache-Einheiten 506 enthält; einer Systemagenten-Einheit 510; einer oder mehreren Bus-Controllereinheiten 516; einer oder mehreren integrierten Speicher-Controllereinheiten 514; einem Satz als einem oder mehreren Medienprozessoren 920, die eine integrierte Grafiklogik 508, einen Bildprozessor 924 zum Bereitstellen einer Foto- und/oder Videokamerafunktionalität, einen Audioprozessor 926 zum Bereitstellen einer Hardware-Audio-Beschleunigung und einen Videoprozessor 928 zum Bereitstellen einer Videocodier-/-decodierbeschleunigung enthalten können; einer statischen Direktzugriffsspeicher(SRAM)-Einheit 930; einer Direktspeicherzugriffs(DMA)-Einheit 932; und einer Anzeigeeinheit 940 zum Koppeln mit einer oder mehreren externen Anzeigen.
  • 10 veranschaulicht einen Prozessor, der eine zentrale Verarbeitungseinheit (CPU) und eine Grafikverarbeitungseinheit (GPU) enthält, die mindestens eine Instruktion gemäß einer Ausführungsform ausführen können. In einer Ausführungsform könnte eine Instruktion zum Auszuführen von Operationen gemäß mindestens einer Ausführungsform durch die CPU ausgeführt werden. In einer weiteren Ausführungsform könnte die Instruktion durch die GPU ausgeführt werden. In einer weiteren Ausführungsform kann die Instruktion durch eine Kombination von Operationen ausgeführt werden, die durch die GPU und die CPU ausgeführt werden. Zum Beispiel kann in einer Ausführungsform eine Instruktion gemäß einer Ausführungsform empfangen und zur Ausführung in der GPU decodiert werden. Jedoch können auch eine oder mehrere Operationen in der decodierten Instruktion durch eine CPU ausgeführt werden, und das Ergebnis kann an die GPU zur abschließenden Erledigung der Instruktion zurückübermittelt werden. Umgekehrt kann die CPU in einigen Ausführungsformen als der primäre Prozessor und die GPU als der Koprozessor fungieren.
  • In einigen Ausführungsformen können Instruktionen, die von Prozessoren mit einem hochparallelen Durchsatz profitieren, durch die GPU ausgeführt werden, während Instruktionen, die von der Leistung von Prozessoren profitieren, die von Architekturen mit starker Pipeline-Struktur profitieren, durch die CPU ausgeführt werden können. Zum Beispiel können Grafik, wissenschaftliche Anwendungen, Finanzanwendungen und andere parallele Arbeitslasten von der Leistung der GPU profitieren und entsprechend ausgeführt werden, während stärker sequenziell ausgerichtete Anwendungen, wie zum Beispiel der Betriebssystemkernel oder Anwendungscode, besser für die CPU geeignet sein können.
  • In 10 enthält der Prozessor 1000 eine CPU 1005, eine GPU 1010, einen Bildprozessor 1015, einen Videoprozessor 1020, einen USB-Controller 1025, einen UART-Controller 1030, einen SPI/SDIO-Controller 1035, ein Anzeigegerät 1040, einen High Definition Multimedia Interface(HDMI)-Controller 1045, einen MIPI-Controller 1050, einen Flash-Speicher-Controller 1055, einen Dual Data Rate(DDR)-Controller 1060, eine Sicherheits-Engine 1065 und eine I2S/I2C (Integrated Interchip Sound/Inter-Integrated Circuit)-Schnittstelle 1070. Es können noch andere Logik und Schaltkreise in dem Prozessor von 10 enthalten sein, einschließlich mehr CPUs oder GPUs und weitere Peripherie-Schnittstelle-Controller.
  • 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 in dem Prozessor darstellt, die, wenn sie durch eine Maschine gelesen wird, die Maschine veranlasst, Logik zu erstellen, um die im vorliegenden Text beschriebenen Techniken auszuführen. Solche Darstellungen, die als „IP-Kerne” bekannt sind, können auf einem greifbaren, maschinenlesbaren Medium („Band”) gespeichert und an verschiedene Kunden oder Produktionseinrichtungen verschickt werden, um in die Produktionsanlagen geladen zu werden, die die eigentliche Logik oder den eigentlichen Prozessor herstellen. Zum Beispiel können IP-Kerne, wie zum Beispiel die CortexTM-Prozessorenfamilie, die durch ARM Holdings, Ltd. entwickelt wurde, und Loongson-IP-Kerne, die durch das Institut für Computertechnologie (ICT) der chinesischen Akademie der Wissenschaften entwickelt wurden, an verschiedene Kunden oder Lizenznehmer lizenziert oder verkauft werden, wie zum Beispiel Texas Instruments, Qualcomm, Apple oder Samsung, und in Prozessoren implementiert werden, die durch diese Kunden oder Lizenznehmer hergestellt werden.
  • 11 zeigt ein Blockschaubild, das die Entwicklung von IP-Kernen gemäß einer Ausführungsform veranschaulicht. Der Speicher 1130 enthält Simulationssoftware 1120 und/oder ein Hardware- oder Softwaremodell 1110. In einer Ausführungsform können die Daten, die das IP-Kern-Design darstellen, über den Speicher 1140 (zum Beispiel eine Festplatte), eine verdrahtete Verbindung (zum Beispiel das Internet) 1150 oder eine Drahtlosverbindung 1160 in den Speicher 1130 eingespeist werden. Die IP-Kern-Informationen, die durch das Simulationstool und -modell generiert wurden, können dann an eine Fertigungseinrichtung gesendet werden, wo sie durch einen Dritten hergestellt werden können, um mindestens eine Instruktion gemäß mindestens einer Ausführungsform auszuführen.
  • In einigen Ausführungsformen können eine oder mehrere Instruktionen einer ersten Art oder Architektur (zum Beispiel x86) entsprechen und in einem Prozessor einer anderen Art oder Architektur (zum Beispiel ARM) übersetzt oder emuliert werden. Eine Instruktion kann – gemäß einer Ausführungsform – darum auf jedem beliebigen Prozessor oder Prozessortyp ausgeführt werden, einschließlich ARM, x86, MIPS, einer GPU oder einer sonstigen Prozessorart oder -architektur.
  • 12 veranschaulicht, wie eine Instruktion einer ersten Art durch einen Prozessor einer anderen Art gemäß einer Ausführungsform emuliert wird. In 12 enthält das Programm 1205 einige Instruktionen, die die gleichen oder im Wesentlichen die gleichen Funktion ausführen können wie eine Instruktion gemäß einer Ausführungsform. Jedoch können die Instruktionen des Programms 1205 von einer Art und/oder einem Format sein, die bzw. das von dem Prozessor 1215 verschieden oder mit diesem nicht kompatibel ist, was bedeutet, dass die Instruktionen von der Art im Programm 1205 möglicherweise nicht nativ durch den Prozessor 1215 ausgeführt werden können. Jedoch werden, mit Hilfe einer Emulationslogik 1210, die Instruktionen des Programms 1205 in Instruktionen übersetzt, die durch den Prozessor 1215 nativ ausgeführt werden können. In einer Ausführungsform ist die Emulationslogik in Hardware verkörpert. In einer weiteren Ausführungsform ist die Emulationslogik auf einem greifbaren, maschinenlesbaren Medium verkörpert, das Software zum Übersetzen von Instruktionen von der Art in dem Programm 1205 in die Art, die nativ durch den Prozessor 1215 ausgeführt werden kann, enthält. In anderen Ausführungsformen ist die Emulationslogik eine Kombination aus Festfunktions- oder programmierbarer Hardware und einem Programm, das auf einem greifbaren, maschinenlesbaren Medium gespeichert ist. In einer Ausführungsform enthält der Prozessor die Emulationslogik, während in anderen Ausführungsformen die Emulationslogik außerhalb des Prozessors existiert und durch einen Dritten bereitgestellt wird. In einer Ausführungsform ist der Prozessor in der Lage, die Emulationslogik, die auf einem greifbaren, maschinenlesbaren Medium verkörpert ist, das Software enthält, zu laden, indem er Mikrocode oder Firmware ausführt, die in dem Prozessor enthalten oder dem Prozessor zugeordnet ist.
  • 13 ist ein Blockschaubild, das im Gegensatz die Verwendung eines Software-Instruktionskonverters zum Konvertieren binärer Instruktionen in einem Quelleninstruktionssatz zu binären Instruktionen in einem Zielinstruktionssatz gemäß Ausführungsformen der Erfindung veranschaulicht. In der veranschaulichten Ausführungsform ist der Instruktionskonverter ein Software-Instruktionskonverter, obgleich der Instruktionskonverter alternativ auch in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert werden kann. 13 zeigt ein Programm in einer High-Level-Sprache 1302, die unter Verwendung eines x86-Kompilierers 1304 kompiliert werden kann, um x86-Binärcode 1306 zu generieren, der nativ durch einen Prozessor mit mindestens einem x86-Instruktionssatzkern 1316 ausgeführt werden kann. Der Prozessor mit mindestens einem x86-Instruktionssatzkern 1316 stellt einen beliebigen Prozessor dar, der im Wesentlichen die gleichen Funktionen ausführen kann wie ein Intel-Prozessor mit mindestens einem x86-Instruktionssatzkern, indem er kompatibel ausführt oder auf sonstige Weise verarbeitet: (1) einen beträchtlichen Abschnitt des Instruktionssatzes des Intel x86-Instruktionssatzkerns, oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die auf einem Intel-Prozessor mit mindestens einem x86-Instruktionssatzkern ablaufen soll, um im Wesentlichen die gleichen Ergebnis zu erreichen wie ein Intel-Prozessor mit mindestens einem x86-Instruktionssatzkern. Der x86-Kompilierer 1304 stellt einen Kompilierer dar, der veranlasst werden kann, x86-Binärcode 1306 (zum Beispiel Objektcode) zu generieren, der mit oder ohne zusätzliche Linkage-Verarbeitung auf dem Prozessor mit mindestens einem x86-Instruktionssatzkern 1316 ausgeführt werden kann. Gleichermaßen zeigt 13 das Programm in der High-Level-Sprache 1302, die unter Verwendung eines alternativen Instruktionssatz-Kompilierers 1308 kompiliert werden kann, um alternativen Instruktionssatz-Binärcode 1310 zu generieren, der durch einen Prozessor ohne mindestens einen x86-Instruktionssatzkern 1314 nativ ausgeführt werden kann (zum Beispiel einen Prozessor mit Kernen, die den MIPS-Instruktionssatz von MIPS Technologies aus Sunnyvale, (Kalifornien) ausführen, und/oder die den ARM-Instruktionssatz von ARM Holdings aus Sunnyvale, (Kalifornien) ausführen). Der Instruktionskonverter 1312 wird zum Konvertieren des x86-Binärcodes 1306 in Code verwendet, der durch den Prozessor ohne einen x86-Instruktionssatzkern 1314 nativ ausgeführt werden kann. Es ist unwahrscheinlich, dass dieser umgewandelte Code der gleiche ist wie der alternative Instruktionssatz-Binärcode 1310, weil ein dazu befähigter Instruktionskonverter schwierig herzustellen ist; jedoch führt der umgewandelte Code die allgemeine Operation aus und besteht aus Instruktionen aus dem alternativen Instruktionssatz. Somit stellt der Instruktionskonverter 1312 Software, Firmware, Hardware oder eine Kombination davon dar, die es – durch Emulation, Simulation oder einen sonstigen Prozess – einem Prozessor oder einem anderen elektronischen Bauelement, der bzw. das keinen x86-Instruktionssatz-Prozessor oder -Kern besitzt, erlaubt, den x86-Binärcode 1306 auszuführen.
  • 14 veranschaulicht ein Flussdiagramm für eine Ausführungsform eines Prozesses 1401 zum Bereitstellen einer Vektor-Hol-Op-Funktionalität. Der Prozess 1401 und andere im vorliegenden Text offenbarte Prozesse werden durch Verarbeitungsblöcke ausgeführt, die dedizierte Hardware- oder Software- oder Firmware-Operation-Codes umfassen, die durch Allzweckmaschinen oder durch Spezialmaschinen oder durch eine Kombination aus beiden ausgeführt werden kann.
  • Im Verarbeitungsblock 1409 von Prozess 1401 wird optional ein Duplikat aus der Maske erstellt, das verwendet werden soll, wenn die zweite Operation ausgeführt wird. Die Verarbeitung schreitet dann zu Verarbeitungsblock 1410 voran, wo ein nächster Wert aus jedem Feld von mehreren Maskenfeldern in einem Maskenregister gelesen wird. Es versteht sich, dass der Prozess 1401 zwar als iterativ veranschaulicht ist, dass es aber bevorzugt sein kann, viele der Operationen nach Möglichkeit parallel auszuführen. Jedes der mehreren Maskenfelder in dem Maskenregister kann einem Versatz für ein Datenelement in einem Speicher entsprechen, und für jedes Feld in dem Maskenregister gibt ein einzelner Wert an, dass das entsprechende Element noch nicht aus dem Speicher geholt wurde, und ein zweiter Wert gibt an, dass das entsprechende Datenelement nicht aus dem Speicher geholt zu werden braucht oder bereits aus dem Speicher geholt wurde. In einer Ausführungsform ist das Maskenregister ein architektonisch sichtbares Register. In einer weiteren Ausführungsform kann das Maskenregister implizit sein, wobei zum Beispiel alle Felder zunächst angeben, dass das entsprechende Element noch nicht aus dem Speicher geholt wurde. Im Verarbeitungsblock 1420 werden die Felder des Maskenregisters mit dem ersten Wert verglichen, der angibt, dass das entsprechende Element noch nicht aus dem Speicher geholt wurde. Wenn es nicht gleich dem ersten Wert ist, so schreitet die Verarbeitung zum Verarbeitungsblock 1450 voran, wo die Hol-Operation wiederholt wird, bis sie fertig ist. Anderenfalls wird im Verarbeitungsblock 1430 das entsprechende Datenelement aus dem Speicher geholt und in ein Vektorregister mit mehreren Datenfeldern gespeichert, wovon ein Abschnitt dem Speichern der geholten Datenelemente dient. Nach erfolgreicher Vollendung des Verarbeitungsblocks 1430 wird das entsprechende Feld in dem Maskenregister im Verarbeitungsblock 1440 zu dem zweiten Wert geändert, der angibt, dass das entsprechende Datenelement bereits aus dem Speicher geholt wurde.
  • Es versteht sich, dass in einer alternativen Ausführungsform die Duplikatmaske des Verarbeitungsblocks 1409 generiert werden kann, indem man ein Feld in einem Duplikatmaskenregister auf den ersten Wert zur Verwendung durch die zweite Operation setzt, wenn das entsprechende Feld in dem Maskenregister im Verarbeitungsblock 1440 zu dem zweiten Wert geändert wird. Somit könnte man die Vollendung der zweiten Operation unter einer teilweise duplizierten Maske gestatten und eine Hol-Op-Instruktion nach einem Speicherfehler unter Verwendung der neuen Maske neu starten, um nur Elemente zu verfolgen, die noch der Ausführung der Hol-Op-Instruktion bedurften.
  • Im Verarbeitungsblock 1450 wird festgestellt, ob die Hol-Operation beendet ist (d. h. ob jedes Feld der mehreren Maskenfelder in dem Maskenregister den zweiten Wert hat). Wenn nicht, so wird die Verarbeitung ab dem Verarbeitungsblock 1410 wiederholt. Anderenfalls schreitet die Verarbeitung zu Verarbeitungsblock 1460 voran, wo die zweite Operation ausgeführt wird. In einer Ausführungsform kann die zweite Operation unter Verwendung der Duplikatmaske aus dem optionalen Verarbeitungsblock 1409 ausgeführt werden. In einer weiteren Ausführungsform kann die zweite Operation ohne Verwendung einer Maske ausgeführt werden. Dann werden im Verarbeitungsblock 1470 die Ergebnisse der SIMD-Hol-Op-Instruktion in einem Vektorregister gespeichert.
  • 15 veranschaulicht ein Flussdiagramm für eine weitere Ausführungsform eines Prozesses 1501 zum Bereitstellen einer Vektor-Hol-Op-Funktionalität. Im Verarbeitungsblock 1505 von Prozess 1501 wird eine Hol-Operationsinstruktion decodiert. Die Verarbeitung schreitet zum Verarbeitungsblock 1509 voran, wo optional aus der Maske ein Duplikat generiert wird, das verwendet wird, wenn die zweite Operation ausgeführt wird. Die Verarbeitung schreitet dann zu Verarbeitungsblock 1510 voran, wo ein nächster Wert aus jedem Feld mehrerer Maskenfelder in einem Maskenregister gelesen wird. Auch dieser Prozess 1501 ist zwar als iterativ veranschaulicht, doch viele der Operationen können nach Möglichkeit auch parallel ausgeführt werden. Im Verarbeitungsblock 1520 wird das nächste Feld des Maskenregisters mit dem ersten Wert verglichen, um anzuzeigen, dass das entsprechende Element noch nicht aus dem Speicher geholt wurde. Wenn es nicht gleich dem ersten Wert ist, so schreitet die Verarbeitung zu Verarbeitungsblock 1550 voran, wo die Hol-Operation wiederholt wird, bis sie fertig ist. Anderenfalls wird im Verarbeitungsblock 1530 das entsprechende Datenelement aus dem Speicher geholt und im Verarbeitungsblock 1535 in einem Vektorzielregister mit mehreren Datenfeldern gespeichert, wovon ein Abschnitt dem Speichern der geholten Datenelemente dient. Nach erfolgreicher Vollendung des Verarbeitungsblocks 1535 wird das entsprechende Feld in dem Maskenregister im Verarbeitungsblock 1540 zu denn zweiten Wert geändert, der angibt, dass das entsprechende Datenelement bereits aus dem Speicher geholt wurde.
  • Auch hier versteht es sich, dass in einer alternativen Ausführungsform die Duplikatmaske von Verarbeitungsblock 1509 hergestellt werden kann, indem man ein Feld in einem Duplikatmaskenregister auf den ersten Wert zur Verwendung durch die zweite Operation setzt, wenn das entsprechende Feld in dem Maskenregister im Verarbeitungsblock 1540 zu dem zweiten Wert geändert wird. Somit könnte man die Vollendung der zweiten Operation unter einer teilweise duplizierten Maske gestatten und eine Hol-Op-Instruktion nach einem Speicherfehler unter Verwendung der neuen Maske neu starten, um nur Elemente zu verfolgen, die noch der Ausführung der Hol-Op-Instruktion bedurften.
  • Im Verarbeitungsblock 1550 wird festgestellt, ob die Hol-Operation beendet ist (d. h. ob jedes Feld der mehreren Maskenfelder in dem Maskenregister den zweiten Wert hat). Wenn nicht, so wird die Verarbeitung ab dem Verarbeitungsblock 1510 wiederholt. Anderenfalls schreitet die Verarbeitung zu Verarbeitungsblock 1565 voran, wo die zweite Operation an Elementen aus dem Zielregister und Elementen aus einem zweiten Operandenregister ausgeführt wird. In einer Ausführungsform kann die zweite Operation unter Verwendung der Duplikatmaske aus dem optionalen Verarbeitungsblock 1509 ausgeführt werden. In einer weiteren Ausführungsform kann die zweite Operation ohne Verwendung einer Maske ausgeführt werden. Dann werden im Verarbeitungsblock 1570 die Ergebnisse der SIMD-Hol-Operationsinstruktion in dem Vektorzielregister gespeichert.
  • Es versteht sich, dass Abhängigkeiten zwischen der Hol-Operation und einer zweiten Operation effizient durch Hardware gehandhabt werden können, insbesondere in einer Out-of-Order-Mikroarchitektur, wodurch weitere Kompiliereroptimierungen und ein verbesserter Instruktiondurchsatz ermöglicht werden.
  • 16 veranschaulicht ein Flussdiagramm in einer Ausführungsform eines Prozesses 1601 zum Bereitstellen einer Vektorstreuungs-Op-Funktionalität. Im Verarbeitungsblock 1610 von Prozess 1601 wird die erste Operation an Elementen aus einem ersten Operandenregister und entsprechenden Elementen aus einem zweiten Operandenregister ausgeführt. Die Verarbeitung schreitet dann zu Verarbeitungsblock 1620 voran, wo ein nächster Wert aus einem Feld mehrerer Maskenfelder in einem Maskenregister gelesen wird. Es versteht sich, dass der Prozess 1601 zwar als iterativ veranschaulicht ist, dass es aber bevorzugt sein kann, viele der Operationen nach Möglichkeit parallel auszuführen. Jedes der mehreren Maskenfelder in dem Maskenregister kann einem Versatz für ein Datenelement in einem Speicher entsprechen, und für jedes Feld in dem Maskenregister gibt ein einzelner Wert an, dass das entsprechende Element noch nicht in den Speicher gestreut wurde, und ein zweiter Wert gibt an, dass das entsprechende Datenelement nicht in den Speicher gestreut zu werden braucht oder bereits in den Speicher gestreut wurde. In einer Ausführungsform ist das Maskenregister ein architektonisch sichtbares Register. In einer weiteren Ausführungsform kann das Maskenregister implizit sein, wobei zum Beispiel alle Felder zunächst angeben, dass das entsprechende Element noch nicht in den Speicher gestreut wurde. Im Verarbeitungsblock 1630 werden die Felder des Maskenregisters mit dem ersten Wert verglichen, der angibt, dass das entsprechende Element noch nicht in den Speicher gestreut wurde. Wenn es nicht gleich dem ersten Wert ist, so schreitet die Verarbeitung zu Verarbeitungsblock 1660 voran, wo die Streuungsoperation wiederholt wird, bis sie fertig ist. Anderenfalls wird im Verarbeitungsblock 1640 das entsprechende Datenelement in den Speicher gestreut. Nach erfolgreicher Vollendung des Verarbeitungsblocks 1640 wird das entsprechende Feld in dem Maskenregister im Verarbeitungsblock 1650 zu dem zweiten Wert geändert, der angibt, dass das entsprechende Datenelement bereits in den Speicher gestreut wurde.
  • Im Verarbeitungsblock 1660 wird festgestellt, ob die Streuungsoperation beendet ist (d. h. ob jedes Feld der mehreren Maskenfelder in dem Maskenregister den zweiten Wert hat). Wenn nicht, so wird die Verarbeitung ab dem Verarbeitungsblock 1620 wiederholt. Anderenfalls schreitet die Verarbeitung zu Verarbeitungsblock 1670 voran, wo die Ergebnisse der SIMD-Streuungs-Op-Instruktion in einem Vektorregister gespeichert werden.
  • 17 veranschaulicht ein Flussdiagramm für eine weitere Ausführungsform eines Prozesses 1701 zum Bereitstellen einer Vektorstreuungs-Op-Funktionalität. Im Verarbeitungsblock 1705 von Prozess 1701 wird eine Streuungs-Operationsinstruktion decodiert. Die Verarbeitung schreitet zum Verarbeitungsblock 1720 voran, wo ein nächster Wert aus einem Feld mehrerer Maskenfelder in einem Maskenregister gelesen wird. Es versteht sich, dass der Prozess 1701 zwar als iterativ veranschaulicht ist, dass es aber bevorzugt sein kann, viele der Operationen nach Möglichkeit parallel auszuführen.
  • In einer Ausführungsform ist das Maskenregister ein architektonisch sichtbares Register. In einer weiteren Ausführungsform kann das Maskenregister implizit sein, wobei zum Beispiel alle Felder zunächst angeben, dass das entsprechende Element noch nicht in den Speicher gestreut wurde. Im Verarbeitungsblock 1730 werden die Felder des Maskenregisters mit dem ersten Wert verglichen, der angibt, dass das entsprechende Element noch nicht in den Speicher gestreut wurde. Wenn es nicht gleich dem ersten Wert ist, so schreitet die Verarbeitung zu Verarbeitungsblock 1760 voran, wo die Streuungsoperation wiederholt wird, bis sie fertig ist. Anderenfalls wird im Verarbeitungsblock 1710 die erste Operation an entsprechenden Elementen aus einem ersten Operanden-/Zielregister und entsprechenden Elementen aus einem zweiten Operandenregister ausgeführt. Im Verarbeitungsblock 1740 wird das entsprechende Datenelement in den Speicher gestreut. Nach erfolgreicher Vollendung des Verarbeitungsblocks 1740 wird das entsprechende Feld in dem Maskenregister im Verarbeitungsblock 1750 zu dem zweiten Wert geändert, der angibt, dass das entsprechende Datenelement bereits in den Speicher gestreut wurde.
  • Im Verarbeitungsblock 1760 wird festgestellt, ob die Streuungsoperation beendet ist (d. h. ob jedes Feld der mehreren Maskenfelder in dem Maskenregister den zweiten Wert hat). Wenn nicht, wird die Verarbeitung ab dem Verarbeitungsblock 1720 wiederholt. Anderenfalls schreitet die Verarbeitung zu Verarbeitungsblock 1770 voran, wo die Ergebnisse der SIMD-Streuungs-Op-Instruktion in einem Vektorregister gespeichert werden.
  • Ausführungsformen der vorliegenden Erfindung beinhalten eine Instruktion, um eine Vektorstreuungs-Op- und/oder -Hol-Op-Funktionalität bereitzustellen, wobei Abhängigkeiten zwischen der Hol- oder Streuungsoperation und einer weiteren Operation effizient durch Hardware gehandhabt werden können, insbesondere in einer Out-of-Order-Mikroarchitektur, wodurch weitere Kompiliereroptimierungen und ein verbesserter Instruktiondurchsatz ermöglicht werden.
  • Ausführungsformen der im vorliegenden Text offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsansätze implementiert werden. Ausführungsformen der Erfindung können als Computerprogramme oder als Programmcode implementiert werden, die auf programmierbaren Systemen ausgeführt werden, die mindestens einen Prozessor, ein Speichersystem (einschließlich flüchtiger und nichtflüchtiger Speicher und/oder Speicherelemente), mindestens ein Eingabegerät und mindestens ein Ausgabegerät umfassen.
  • Programmcode kann auf Eingabeinstruktionen angewendet werden, welche die im vorliegenden Text beschriebenen Funktionen auszuführen und Ausgabeinformationen generieren. Die Ausgabeinformationen können in bekannter Weise auf ein oder mehrere Ausgabegeräte angewendet werden. Für die Zwecke dieser Anmeldung enthält ein Verarbeitungssystem ein beliebiges System, 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 allgemeinen prozeduralen oder objektorientierten Programmiersprache implementiert werden, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann gewünschtenfalls auch in Assembly- oder Maschinensprache implementiert werden. Die im vorliegenden Text beschriebenen Mechanismen sind in ihrem Umfang keineswegs auf irgend eine spezielle Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch repräsentative Instruktionen implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik in dem Prozessor darstellt, die, wenn sie durch eine Maschine gelesen wird, die Maschine veranlasst, Logik zu erstellen, um die im vorliegenden Text beschriebenen Techniken auszuführen. Solche Darstellungen, die als „IP-Kerne” bekannt sind, können auf einem greifbaren, maschinenlesbaren Medium gespeichert und an verschiedene Kunden oder Produktionseinrichtungen verschickt werden, um in die Produktionsanlagen geladen zu werden, die die eigentliche Logik oder den eigentlichen Prozessor herstellen.
  • Zu solchen maschinenlesbaren Speichermedien gehören beispielsweise nicht-transitorische, greifbare Anordnungen von Erzeugnissen, die durch eine Maschine oder eine Vorrichtung hergestellt oder gebildet werden, einschließlich Speichermedien wie zum Beispiel Festplatten, beliebige andere Arten von Disks, einschließlich Floppydisketten, optische Disks, Compact Disk-Nurlesespeicher (CD-ROMs), Compact Disk-Rewritables (CD-RWs) und magnetoptische Disks, Halbleiterbauelemente, wie zum Beispiel Nurlesespeicher (ROMs), Direktzugriffsspeicher (RAMs), wie zum Beispiel dynamische Direktzugriffsspeicher (DRAMs), statische Direktzugriffsspeicher (SRAMs), löschbarer programmierbarer Nurlesespeicher (EPROMs), Flash-Speicher, elektrisch löschbarer programmierbarer Nurlesespeicher (EEPROMs), magnetische oder optische Karten oder sonstige Arten von Medien, die zum Speichern elektronischer Instruktionen geeignet sind.
  • Dementsprechend enthalten Ausführungsformen der Erfindung des Weiteren nicht-transitorische, greifbare maschinenlesbare Medien, die Instruktionen enthalten oder Designdaten enthalten, wie zum Beispiel Hardware Description Language (HDL), die Strukturen, Schaltkreise, Vorrichtungen, Prozessoren und/oder Systemmerkmale, die im vorliegenden Text beschrieben sind, definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • In einigen Fällen kann ein Instruktionskonverter verwendet werden, um eine Instruktion aus einem Quelleninstruktionssatz zu einem Zielinstruktionssatz zu konvertieren. Zum Beispiel kann der Instruktionskonverter eine Instruktion zu einer oder mehreren anderen Instruktionen übersetzen (zum Beispiel unter Verwendung statischer binärer Übersetzung, dynamischer binärer Übersetzung, einschließlich dynamischer Kompilation), morphen, emulieren oder auf sonstige Weise konvertieren, damit sie durch den Kern verarbeitet werden. Der Instruktionskonverter kann in Software, Hardware, Firmware oder einer Kombination davon implementiert werden. Der Instruktionskonverter kann sich auf dem Prozessor, außerhalb des Prozessors oder zum Teil auf dem Prozessor und zum Teil außerhalb des Prozessors befinden.
  • Somit sind Techniken für die Ausführung einer oder mehrerer Instruktionen gemäß mindestens einer Ausführungsform offenbart worden. Obgleich in den beiliegenden Zeichnungen bestimmte beispielhafte Ausführungsformen beschrieben und gezeigt wurden, versteht es sich, dass solche Ausführungsformen für die allgemeine Erfindung lediglich veranschaulichend sind und diese in keiner Weise einschränken, und dass diese Erfindung nicht auf die konkreten Konstruktionen und Anordnungen beschränkt werden darf, die gezeigt und beschrieben wurden, da dem Durchschnittsfachmann beim Lesen dieser Offenbarung verschiedene weitere Modifizierungen einfallen können. Auf einem technischen Gebiet wie diesem, das schnell wächst und dessen Entwicklung nur schwer vorherzusehen ist, können die offenbarten Ausführungsformen ohne Weiteres in dem Maße in Anordnung und Detail modifiziert werden, wie die technische Entwicklung voranschreitet, ohne von den Prinzipien der vorliegenden Offenbarung oder dem Geltungsbereich der beiliegenden Ansprüche abzuweichen.

Claims (30)

  1. Prozessor, der Folgendes umfasst: ein erstes Register, das eine erste Mehrzahl von Datenfeldern umfasst, wobei jedes der ersten Mehrzahl von Datenfeldern in dem ersten Register einem Versatz für ein Datenelement in einem Speicher entspricht, wobei für jedes Datenfeld in dem ersten Register ein erster Wert angibt, dass das entsprechende Element noch nicht aus dem Speicher geholt wurde, und ein zweiter Wert angibt, dass das entsprechende Datenelement nicht aus dem Speicher geholt zu werden braucht oder bereits aus dem Speicher geholt wurde; eine Decodierstufe zum Decodieren einer ersten Instruktion, die eine Hol-Operation spezifiziert und die eine zweite Operation spezifiziert; und eine oder mehrere Ausführungseinheiten, die auf die decodierte erste Instruktion ansprechen, um: die Werte eines jeden der Datenfelder in dem ersten Register zu lesen; für jedes Datenfeld der mehreren Datenfelder in dem ersten Register mit dem ersten Wert, das entsprechende Datenelement aus dem Speicher zu holen und das entsprechende Datenelement in ein zweites Register zu speichern, wobei das zweite Register eine zweite Mehrzahl von Datenfeldern aufweist, wovon ein Abschnitt dem Speichern der geholten Datenelemente dient, und den Wert des entsprechenden Datenfeldes in dem ersten Register von dem ersten Wert zu dem zweiten Wert zu ändern; und wenn jedes Datenfeld der ersten Mehrzahl von Datenfeldern in dem ersten Register den zweiten Wert hat, die zweite Operation unter Verwendung eines jeden der Datenelemente, die in der zweiten Mehrzahl von Datenfeldern gespeichert sind, auszuführen, um entsprechende Ergebnisdatenelemente zu generieren.
  2. Prozessor nach Anspruch 1, wobei der erste Wert eins ist.
  3. Prozessor nach Anspruch 1, wobei der zweite Wert null ist.
  4. Prozessor nach Anspruch 1, wobei die eine oder die mehreren Ausführungseinheiten, die auf die decodierte erste Instruktion ansprechen, zum Duplizieren der mehreren Datenfelder in dem ersten Register dienen.
  5. Prozessor nach Anspruch 5, wobei die eine oder die mehreren Ausführungseinheiten, die auf die decodierte erste Instruktion ansprechen, zum Duplizieren eines jeden der mehreren Datenfelder mit dem ersten Wert in dem ersten Register dienen, wenn der Wert jenes Datenfeldes in dem ersten Register von dem ersten Wert zu dem zweiten Wert geändert wird.
  6. Prozessor nach Anspruch 1, wobei die zweite Operation unär ist.
  7. Prozessor nach Anspruch 1, wobei die zweite Operation binär ist.
  8. Prozessor nach Anspruch 1, wobei das Datenelement, das in das zweite Register gespeichert wird, 32-Bit-Datenelemente sind.
  9. Prozessor nach Anspruch 1, wobei das Datenelement, das in das zweite Register gespeichert wird, 64-Bit-Datenelemente sind.
  10. Prozessor nach Anspruch 1, wobei das zweite Register ein 512-Bit-Vektorregister ist.
  11. Maschinenlesbares Medium zum Aufzeichnen von funktionalem deskriptivem Material, das eine erste ausführbare Instruktion enthält, die, wenn sie durch eine Maschine ausgeführt wird, die Maschine zu Folgendem veranlasst: Lesen von Werten von jedem Datenfeld einer ersten Mehrzahl von Datenfeldern in einem ersten Register, wobei jedes der ersten Mehrzahl von Datenfeldern in dem ersten Register einem Versatz für ein Datenelement in einem Speicher entspricht, und wobei für jedes Datenfeld in dem ersten Register ein erster Wert angibt, dass das entsprechende Element noch nicht aus dem Speicher geholt wurde, und ein zweiter Wert angibt, dass das entsprechende Datenelement nicht aus dem Speicher geholt zu werden braucht oder bereits aus dem Speicher geholt wurde; für jedes Datenfeld der mehreren Datenfelder in dem ersten Register mit dem ersten Wert, Holen des entsprechenden Datenelements aus dem Speicher, und Speichern des entsprechenden Datenelements in ein zweites Register, wobei das zweite Register eine zweite Mehrzahl von Datenfeldern aufweist, wovon ein Abschnitt dem Speichern der geholten Datenelemente dient, und Ändern des Wertes des entsprechendes Datenfeldes in dem ersten Register von dem ersten Wert zu dem zweiten Wert; und dann, wenn jedes Datenfeld der ersten Mehrzahl von Datenfeldern in dem ersten Register den zweiten Wert hat, Ausführen der zweiten Operation unter Verwendung eines jeden der Datenelemente, die in der zweiten Mehrzahl von Datenfeldern gespeichert sind, um entsprechende Ergebnisdatenelemente zu generieren.
  12. Maschinenlesbares Medium nach Anspruch 11, wobei die erste ausführbare Instruktion, wenn sie durch die Maschine ausgeführt wird, die Maschine des Weiteren zu Folgendem veranlasst: Duplizieren der mehreren Datenfelder in dem ersten Register.
  13. Maschinenlesbares Medium nach Anspruch 11, wobei die erste ausführbare Instruktion, wenn sie durch die Maschine ausgeführt wird, die Maschine des Weiteren zu Folgendem veranlasst: Duplizieren eines jeden der mehreren Datenfelder mit dem ersten Wert in dem ersten Register, wenn der Wert jenes Datenfeldes in dem ersten Register von dem ersten Wert zu dem zweiten Wert geändert wird.
  14. Maschinenlesbares Medium nach Anspruch 11, wobei die zweite Operation unär ist.
  15. Maschinenlesbares Medium nach Anspruch 11, wobei die zweite Operation binär ist.
  16. Maschinenlesbares Medium nach Anspruch 11, wobei die Datenelemente, die in das zweite Register gespeichert werden, 32-Bit-Datenelemente sind.
  17. Maschinenlesbares Medium nach Anspruch 11, wobei die Datenelemente, die in das zweite Register gespeichert werden, 64-Bit-Datenelemente sind.
  18. Maschinenlesbares Medium nach Anspruch 11, wobei das zweite Register ein 512-Bit-Vektorregister ist.
  19. Prozessor, der Folgendes umfasst: eine Decodierstufe zum Decodieren einer ersten Single Instruction Multiple Data(SIMD)-Instruktion, die eine Hol-Operation und eine zweite Operation, ein Zielregister, ein Operandenregister, eine Speicheradresse und ein Indizesregister spezifiziert; und eine oder mehrere Ausführungseinheiten, die auf die decodierte erste SIMD-Instruktion ansprechen, um: Werte jedes Datenfeldes einer ersten Mehrzahl von Datenfeldern in einem Maskenregister zu lesen, wobei ein jedes der ersten Mehrzahl von Datenfeldern in dem Maskenregister einem Versatzindex in dem Indizesregister für ein entsprechendes Datenelement, das in einem Speicher von der Speicheradresse versetzt ist, entspricht, und wobei für jedes Datenfeld in dem Maskenregister ein erster Wert angibt, dass das entsprechende Element noch nicht aus dem Speicher geholt wurde, und ein zweiter Wert angibt, dass das entsprechende Datenelement nicht aus dem Speicher geholt zu werden braucht oder bereits aus dem Speicher geholt wurde; für jedes Datenfeld der mehreren Datenfelder in dem Maskenregister mit dem ersten Wert, Holen des entsprechenden Datenelements aus dem Speicher und Speichern des entsprechenden Datenelements in ein Datenfeld in dem Zielregister entsprechend dem Versatzindex in dem Indizesregister, und Ändern des Wertes des entsprechenden Datenfeldes in dem Maskenregister von dem ersten Wert zu dem zweiten Wert; und wenn jedes Datenfeld der ersten Mehrzahl von Datenfeldern in dem Maskenregister den zweiten Wert hat, Ausführen der zweiten Operation unter Verwendung eines jeden der Datenelemente, die in dem Zielregister gespeichert sind, und entsprechender Datenelemente in dem Operandenregister, um entsprechende Ergebnisdatenelemente zu generieren.
  20. Prozessor nach Anspruch 19, wobei die eine oder die mehreren Ausführungseinheiten, die auf die decodierte erste SIMD-Instruktion ansprechen, zum Duplizieren der mehreren Datenfelder in dem Maskenregister dienen.
  21. Prozessor nach Anspruch 20, wobei die eine oder die mehreren Ausführungseinheiten, die auf die decodierte erste SIMD-Instruktion ansprechen, zum Duplizieren eines jeden der mehreren Datenfelder mit dem ersten Wert in dem Maskenregister dienen, wenn der Wert jenes Datenfeldes in dem Maskenregister von dem ersten Wert zu dem zweiten Wert geändert wird.
  22. Prozessor nach Anspruch 21, wobei das Datenelement, das in das zweite Register gespeichert wird, 32-Bit-Datenelemente sind.
  23. Prozessor nach Anspruch 21, wobei das Datenelement, das in das zweite Register gespeichert wird, 64-Bit-Datenelemente sind.
  24. Prozessor nach Anspruch 21, wobei das zweite Register ein 512-Bit-Vektorregister ist.
  25. Maschinenimplementiertes Verfahren, das Folgendes umfasst: Decodieren einer erster Single Instruction Multiple Data(SIMD)-Instruktion, die eine Hol-Operation und eine zweite Operation, ein Zielregister, ein Operandenregister, eine Speicheradresse und ein Indizesregister spezifiziert; und in Reaktion auf die erste SIMD-Instruktion: Lesen von Werten jedes Datenfeldes einer ersten Mehrzahl von Datenfeldern in einem Maskenregister, wobei ein jedes der ersten Mehrzahl von Datenfeldern in dem Maskenregister einem Versatzindex in dem Indizesregister für ein entsprechendes Datenelement, das in einem Speicher von der Speicheradresse versetzt ist, entspricht, und wobei für jedes Datenfeld in dem Maskenregister ein erster Wert angibt, dass das entsprechende Element noch nicht aus dem Speicher geholt wurde, und ein zweiter Wert angibt, dass das entsprechende Datenelement nicht aus dem Speicher geholt zu werden braucht oder bereits aus dem Speicher geholt wurde; für jedes Datenfeld der mehreren Datenfelder in dem Maskenregister mit dem ersten Wert, Holen des entsprechenden Datenelements aus dem Speicher und Speichern des entsprechenden Datenelements in ein Datenfeld in dem Zielregister entsprechend dem Versatzindex in dem Indizesregister, und Ändern des Wertes des entsprechenden Datenfeldes in dem Maskenregister von dem ersten Wert zu dem zweiten Wert; und wenn jedes Datenfeld der ersten Mehrzahl von Datenfeldern in dem Maskenregister den zweiten Wert hat, Ausführen der zweiten Operation unter Verwendung eines jeden der Datenelemente, die in dem Zielregister gespeichert sind, und entsprechender Datenelemente in dem Operandenregister, um entsprechende Ergebnisdatenelemente zu generieren.
  26. Maschinenimplementiertes Verfahren nach Anspruch 25, wobei des Weiteren in Reaktion auf die erste SIMD-Instruktion: die mehreren Datenfelder in dem Maskenregister dupliziert werden.
  27. Maschinenimplementiertes Verfahren nach Anspruch 26, wobei des Weiteren in Reaktion auf die erste SIMD-Instruktion: jedes der mehreren Datenfelder mit dem ersten Wert in dem Maskenregister dupliziert wird, wenn der Wert jenes Datenfeldes in dem Maskenregister von dem ersten Wert zu dem zweiten Wert geändert wird.
  28. Maschinenimplementiertes Verfahren nach Anspruch 21, wobei das zweite Register ein 512-Bit-Vektorregister ist.
  29. Verarbeitungssystem, das Folgendes umfasst: einen Speicher; und mehrere Prozessoren, die jeweils Folgendes umfassen: eine Decodierstufe zum Decodieren einer ersten Single Instruction Multiple Data(SIMD)-Instruktion, die eine Hol-Operation und eine zweite Operation, ein Zielregister, ein Operandenregister, eine Speicheradresse und ein Indizesregister spezifiziert; und eine oder mehrere Ausführungseinheiten, die auf die decodierte erste SIMD-Instruktion ansprechen, um: Werte jedes Datenfeldes einer ersten Mehrzahl von Datenfeldern in einem Maskenregister zu lesen, wobei ein jedes der ersten Mehrzahl von Datenfeldern in dem Maskenregister einem Versatzindex in dem Indizesregister für ein entsprechendes Datenelement, das in dem Speicher von der Speicheradresse versetzt ist, entspricht, und wobei für jedes Datenfeld in dem Maskenregister ein erster Wert angibt, dass das entsprechende Element noch nicht aus dem Speicher geholt wurde, und ein zweiter Wert angibt, dass das entsprechende Datenelement nicht aus dem Speicher geholt zu werden braucht oder bereits aus dem Speicher geholt wurde; für jedes Datenfeld der mehreren Datenfelder in dem Maskenregister mit dem ersten Wert, Holen des entsprechenden Datenelements aus dem Speicher und Speichern des entsprechenden Datenelements in einem Datenfeld in dem Zielregister entsprechend dem Versatzindex in dem Indizesregister, und Ändern des Wertes des entsprechenden Datenfeldes in dem Maskenregister von dem ersten Wert zu dem zweiten Wert; und wenn jedes Datenfeld der ersten Mehrzahl von Datenfeldern in dem Maskenregister den zweiten Wert hat, Ausführen der zweiten Operation unter Verwendung eines jeden der Datenelemente, die in dem Zielregister gespeichert sind, und entsprechender Datenelemente in dem Operandenregister, um entsprechende Ergebnisdatenelemente zu generieren.
  30. Verarbeitungssystem nach Anspruch 29, wobei die eine oder die mehreren Ausführungseinheiten des Weiteren in Reaktion auf die erste SIMD-Instruktion: jedes der mehreren Datenfelder mit dem ersten Wert in dem Maskenregister duplizieren, wenn der Wert jenes Datenfeldes in dem Maskenregister von dem ersten Wert zu dem zweiten Wert geändert wird.
DE112011105664.8T 2011-09-26 2011-09-26 Instruktion und Logik zum Bereitstellen einer Vektorstreuungs-Op- und -Hol-Op-Funktionalität Ceased DE112011105664T5 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2011/053328 WO2013048368A1 (en) 2011-09-26 2011-09-26 Instruction and logic to provide vector scatter-op and gather-op functionality

Publications (1)

Publication Number Publication Date
DE112011105664T5 true DE112011105664T5 (de) 2014-08-21

Family

ID=47996116

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112011105664.8T Ceased DE112011105664T5 (de) 2011-09-26 2011-09-26 Instruktion und Logik zum Bereitstellen einer Vektorstreuungs-Op- und -Hol-Op-Funktionalität

Country Status (7)

Country Link
US (2) US9747101B2 (de)
JP (1) JP5933725B2 (de)
KR (1) KR101804008B1 (de)
CN (1) CN103827813B (de)
DE (1) DE112011105664T5 (de)
GB (1) GB2508533B (de)
WO (1) WO2013048368A1 (de)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10387151B2 (en) * 2007-12-31 2019-08-20 Intel Corporation Processor and method for tracking progress of gathering/scattering data element pairs in different cache memory banks
US10175990B2 (en) 2009-12-22 2019-01-08 Intel Corporation Gathering and scattering multiple data elements
US20170269935A1 (en) * 2011-09-26 2017-09-21 Elmoustapha Ould-Ahmed-Vall Instruction and logic to provide vector loads and stores with strides and masking functionality
WO2013048368A1 (en) * 2011-09-26 2013-04-04 Intel Corporation Instruction and logic to provide vector scatter-op and gather-op functionality
US20130086315A1 (en) * 2011-10-04 2013-04-04 Moon J. Kim Direct memory access without main memory in a semiconductor storage device-based system
US9626333B2 (en) * 2012-06-02 2017-04-18 Intel Corporation Scatter using index array and finite state machine
US8972697B2 (en) 2012-06-02 2015-03-03 Intel Corporation Gather using index array and finite state machine
US9575755B2 (en) 2012-08-03 2017-02-21 International Business Machines Corporation Vector processing in an active memory device
US9569211B2 (en) 2012-08-03 2017-02-14 International Business Machines Corporation Predication in a vector processor
US9632777B2 (en) * 2012-08-03 2017-04-25 International Business Machines Corporation Gather/scatter of multiple data elements with packed loading/storing into/from a register file entry
US9594724B2 (en) 2012-08-09 2017-03-14 International Business Machines Corporation Vector register file
KR101877190B1 (ko) 2012-12-26 2018-07-10 인텔 코포레이션 인접한 수집/분산 연산들의 통합
US9244684B2 (en) 2013-03-15 2016-01-26 Intel Corporation Limited range vector memory access instructions, processors, methods, and systems
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US9552205B2 (en) * 2013-09-27 2017-01-24 Intel Corporation Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions
US9600442B2 (en) 2014-07-18 2017-03-21 Intel Corporation No-locality hint vector memory access processors, methods, systems, and instructions
US10061746B2 (en) * 2014-09-26 2018-08-28 Intel Corporation Instruction and logic for a vector format for processing computations
US10445092B2 (en) * 2014-12-27 2019-10-15 Intel Corporation Method and apparatus for performing a vector permute with an index and an immediate
US10296334B2 (en) * 2014-12-27 2019-05-21 Intel Corporation Method and apparatus for performing a vector bit gather
US9875214B2 (en) * 2015-07-31 2018-01-23 Arm Limited Apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers
US10503502B2 (en) 2015-09-25 2019-12-10 Intel Corporation Data element rearrangement, processors, methods, systems, and instructions
US20170168819A1 (en) * 2015-12-15 2017-06-15 Intel Corporation Instruction and logic for partial reduction operations
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
US10509726B2 (en) * 2015-12-20 2019-12-17 Intel Corporation Instructions and logic for load-indices-and-prefetch-scatters operations
US20170177364A1 (en) * 2015-12-20 2017-06-22 Intel Corporation Instruction and Logic for Reoccurring Adjacent Gathers
US20170177349A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Load-Indices-and-Prefetch-Gathers Operations
US20170177543A1 (en) * 2015-12-22 2017-06-22 Intel Corporation Aggregate scatter instructions
US20170185403A1 (en) * 2015-12-23 2017-06-29 Intel Corporation Hardware content-associative data structure for acceleration of set operations
US9996361B2 (en) * 2015-12-23 2018-06-12 Intel Corporation Byte and nibble sort instructions that produce sorted destination register and destination index mapping
US10409613B2 (en) * 2015-12-23 2019-09-10 Intel Corporation Processing devices to perform a key value lookup instruction
US20170185402A1 (en) * 2015-12-23 2017-06-29 Intel Corporation Instructions and logic for bit field address and insertion
US10289416B2 (en) * 2015-12-30 2019-05-14 Intel Corporation Systems, apparatuses, and methods for lane-based strided gather
US20180088946A1 (en) * 2016-09-27 2018-03-29 Intel Corporation Apparatuses, methods, and systems for mixing vector operations
US10331454B2 (en) * 2016-09-29 2019-06-25 Intel Corporation System and method for load balancing in out-of-order clustered decoding
US10282296B2 (en) 2016-12-12 2019-05-07 Intel Corporation Zeroing a cache line
EP3602276A1 (de) * 2017-03-31 2020-02-05 Intel Corporation Verfahren und vorrichtung zum umwandeln von streuungssteuerelementen zum sammeln von steuerelementen zum sortieren von vektoriellen datenelementen
CN109800194A (zh) * 2019-01-24 2019-05-24 湖南国科微电子股份有限公司 基于Linux系统的SDIO接口数据传输方法及装置
US11061676B2 (en) 2019-04-24 2021-07-13 International Business Machines Corporation Scatter gather using key-value store
CN115665335B (zh) * 2022-11-14 2023-03-21 合肥奔图智造有限公司 图像处理方法、装置、图像形成设备及介质

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3541528A (en) * 1969-01-06 1970-11-17 Ibm Implicit load and store mechanism
JPH0731669B2 (ja) * 1986-04-04 1995-04-10 株式会社日立製作所 ベクトル・プロセツサ
JPH036663A (ja) 1989-06-02 1991-01-14 Mitsubishi Electric Corp ベクトルデータ処理方式
JP2665111B2 (ja) * 1992-06-18 1997-10-22 日本電気株式会社 ベクトル処理装置
JP3335808B2 (ja) 1995-08-15 2002-10-21 エヌイーシーコンピュータテクノ株式会社 ベクトル処理装置
US5822560A (en) * 1996-05-23 1998-10-13 Advanced Micro Devices, Inc. Apparatus for efficient instruction execution via variable issue and variable control vectors per issue
JPH10164596A (ja) 1996-11-29 1998-06-19 Sony Corp 動き検出装置
US6920546B2 (en) * 2002-08-13 2005-07-19 Intel Corporation Fusion of processor micro-operations
GB2409064B (en) * 2003-12-09 2006-09-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing in parallel a data processing operation on data elements
JP2006054600A (ja) 2004-08-10 2006-02-23 Toshiba Corp 動き検出装置、動き検出方法および動き検出プログラム
TWI277010B (en) 2005-09-08 2007-03-21 Quanta Comp Inc Motion vector estimation system and method
US9529592B2 (en) 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US7984273B2 (en) 2007-12-31 2011-07-19 Intel Corporation System and method for using a mask register to track progress of gathering elements from memory
US8447962B2 (en) * 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
JP2010016454A (ja) 2008-07-01 2010-01-21 Sony Corp 画像符号化装置および方法、画像復号装置および方法、並びにプログラム
US20110170605A1 (en) 2008-09-24 2011-07-14 Kazushi Sato Image processing apparatus and image processing method
JP5573134B2 (ja) * 2009-12-04 2014-08-20 日本電気株式会社 ベクトル型計算機及びベクトル型計算機の命令制御方法
KR101572770B1 (ko) * 2011-09-26 2015-11-27 인텔 코포레이션 벡터 로드-op/저장-op에 스트라이드 기능을 제공하는 명령어 및 로직
WO2013048368A1 (en) 2011-09-26 2013-04-04 Intel Corporation Instruction and logic to provide vector scatter-op and gather-op functionality

Also Published As

Publication number Publication date
CN103827813B (zh) 2016-09-21
JP5933725B2 (ja) 2016-06-15
WO2013048368A1 (en) 2013-04-04
GB201402493D0 (en) 2014-04-02
KR101804008B1 (ko) 2017-12-01
US20140201498A1 (en) 2014-07-17
GB2508533A (en) 2014-06-04
US20170357514A1 (en) 2017-12-14
CN103827813A (zh) 2014-05-28
US9747101B2 (en) 2017-08-29
KR20140057362A (ko) 2014-05-12
JP2014526757A (ja) 2014-10-06
GB2508533B (en) 2020-01-01

Similar Documents

Publication Publication Date Title
DE112011105664T5 (de) Instruktion und Logik zum Bereitstellen einer Vektorstreuungs-Op- und -Hol-Op-Funktionalitä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
DE112011105665T5 (de) Befehl und Logik zum Liefern von Vektorladen und -speichern mit Schritt- und Maskierfunktionalität
DE102013021221A1 (de) Befehle und Logik zur Vektorisierung von bedingten Schleifen
DE102014003795A1 (de) Verfahren und Vorrichtungen für Fusionsbefehle zur Bereitstellung der OR-Test- und AND-Test-Funktionalität auf mehreren Testquellen
DE102015006863A1 (de) Befehle und Logik zum Unterbrechen und Wiederaufnehmen von Paging in Secure Enclaves
DE102014004563A1 (de) Befehle und Logik zur Bereitstellung verbesserter Paging-Fähigkeiten für Secure Enclave-Seitencaches
DE102014003563A1 (de) Fusionierbare befehle und logik zum versehen mit or-test- und and-test-funktionalität unter benutzen von mehrfachtestquellen
DE202016009016U1 (de) Befehle und Logik für wiederkehrende benachbarte Sammlungen
DE112013005416T5 (de) Verfahren, Vorrichtungen, Befehle und Logik zum Bereitstellen von Vektoradressenkonflikt-Detektionsfunktionalität
DE112017004911T5 (de) Anweisung und Logik für die Erkennung eines numerischen Ansammlungsfehlers
DE112013004867T5 (de) Befehl und Logik zum Bereitstellen von Push-Puffer-Kopier- und Speicher-Funktionalität
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE102015007943A1 (de) Mechanismen für eine Gewichtungsverschiebung in faltenden neuronalen Netzwerken
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE112016004960T5 (de) Befehl und logik, um informationen im voraus aus einem beständigen speicher zu holen
DE112012007119T5 (de) Threadmigration-Unterstützung für Kerne unterschiedlicher Architektur
DE112010004887T5 (de) Verfahren und Vorrichtung zur Durchführung einer Verschiebe- und Exklusiv-ODER-Operation in einer einzelnen Instruktion
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
DE102007045496A1 (de) Anweisung und Logik zum Bearbeiten von Textstrings
DE112013007702T5 (de) Befehl und Logik für den Speicherzugriff in einer geclusterten Maschine mit breiter Ausführung
DE102018001229A1 (de) Beschleunigerschaltung mit variabler Wortlänge für ein neuronales Netzwerk
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: BOEHMERT & BOEHMERT ANWALTSPARTNERSCHAFT MBB -, DE

R016 Response to examination communication
R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R003 Refusal decision now final