DE112013003741T5 - Systeme, Vorrichtungen und Verfahren zum Durchführen einer Konfliktdetektion unf einer Übertragung von Inhalten eines Registers an Datenelementpositionen eines anderen Registers - Google Patents

Systeme, Vorrichtungen und Verfahren zum Durchführen einer Konfliktdetektion unf einer Übertragung von Inhalten eines Registers an Datenelementpositionen eines anderen Registers Download PDF

Info

Publication number
DE112013003741T5
DE112013003741T5 DE112013003741.6T DE112013003741T DE112013003741T5 DE 112013003741 T5 DE112013003741 T5 DE 112013003741T5 DE 112013003741 T DE112013003741 T DE 112013003741T DE 112013003741 T5 DE112013003741 T5 DE 112013003741T5
Authority
DE
Germany
Prior art keywords
register
data
source
bits
vector
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
DE112013003741.6T
Other languages
English (en)
Inventor
Christopher J. Hughes
Mark J. Charney
Bret L. Toll
Jesus Corbal
Milind B. Girkar
Robert Valentine
Elmoustapha Ouldahmed-Vall
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 DE112013003741T5 publication Critical patent/DE112013003741T5/de
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic 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/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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register

Abstract

Systeme, Vorrichtungen und Verfahren zum Durchführen einer Datenübertragung in einem Computerprozessor als Antwort auf einen in einen einzigen Vektor gepackten Übertragungsbefehl, der einen Quellenschreibmaskenoperanden, einen Zielvektor-Registeroperanden und einen Opcode umfasst. In manchen Ausführungsformen werden die Daten des Quellenschreibmaskenregisters vor dem Übertragen nullextendiert.

Description

  • FACHGEBIET
  • Das Fachgebiet der Erfindung betrifft im Allgemeinen eine Computerprozessorarchitektur und, genauer, Befehle, die bei ihrer Ausführung ein bestimmtes Ergebnis erzielen.
  • HINTERGRUND
  • Ein Befehlssatz oder eine Befehlssatzarchitektur (ISA) ist der Teil der Computerarchitektur, die das Programmieren betrifft und kann die nativen Datentypen, Befehle, Registerarchitektur, Adressiermodi, Speicherarchitektur, Unterbrechungs- und Ausnahmeverwaltung und den externen Eingang und Ausgang (I/O) umfassen. Es gilt anzumerken, dass sich der Begriff Befehl im Allgemeinen hierin auf einen Makrobefehl bezieht – d. h. Befehle, die an dem Prozessor zur Ausführung bereitgestellt werden –, im Gegensatz zu Mikrobefehlen oder Mikro-Ops, die sich aus dem Entschlüssler eines Prozessors ergeben, der Makrobefehle entschlüsselt.
  • Die Befehlssatzarchitektur unterscheidet sich von der Mikroarchitektur, die die interne Struktur des Prozessors ist, das die ISA ausführt. Prozessoren mit verschiedenen Mikroarchitekturen können sich einen gemeinsamen Befehlssatz teilen. Beispielsweise führen Intel Pentium 4 Prozessoren, Intel Core Prozessoren und Advanced Micro Devices, Inc. of Sunnyvale CA Processors, beinahe identische Versionen des x86-Befehlssatzes aus (wobei zu neueren Versionen einige Erweiterungen hinzugefügt wurden), weisen jedoch unterschiedliche interne Strukturen auf. Beispielsweise kann dieselbe Registerarchitektur der ISA auf unterschiedliche Arten in verschiedenen Mikroarchitekturen unter Verwendung von bekannten Verfahren ausgeführt werden, einschließlich von zugehörigen physikalischen Registern, eines oder mehrerer dynamisch zugewiesener physikalischer Register unter Verwendung eines Registerumbenennungsmechanismus (z. B. die Verwendung einer Register-Alias-Tabelle (RAT), eines Umordnungspuffers (ROB) und einer Rückzugsregisterdatei wie in US-Patent Nr. 5.446.912 beschrieben; die Verwendung von mehreren Karten und eines Pools an Registern, wie in US-Patent Nr. 5.207.132 beschrieben) etc. Sofern nicht anders angegeben, beziehen sich die Begriffe Registerarchitektur, Registerdatei und Register auf das, was für die Software/den Programmierer sichtbar ist und die Art, auf die Befehle Register angeben. Ist eine Spezifität gewünscht, wird das Adjektiv logisch, architektonisch oder Software-sichtbar verwendet, um Register/Dateien in der Registerarchitektur anzugeben, während andere Adjektive verwendet werden, um Register in einer gegebenen Mikroarchitektur zu bezeichnen (z. B. physikalisches Register, Umordnungspuffer, Rückzugsregister, Registerpool).
  • Ein Befehlssatz umfasst ein oder mehrere Befehlsformate. Ein gegebenes Befehlsformat definiert verschiedene Felder (Anzahl von Bits, Position von Bits) um, u. a. den auszuführenden Vorgang und den/die Operanden, auf denen der Vorgang auszuführen ist, zu detaillieren. Ein gegebener Befehl wird unter Verwendung eines gegebenen Befehlsformats ausgedrückt und gibt den Vorgang und die Operanden im Detail an. Ein Befehlsstrom ist eine spezielle Sequenz aus Befehlen, wobei jeder Befehl in der Sequenz das Auftreten eines Befehls in einem Befehlsformat ist.
  • Wissenschaftliche, finanzielle, auto-vektorisierte Allzweck-, RMS-(Wiedererkennungs-, Mining- und Synthese-)/visuelle und Multimediaanwendungen (z. B. 2D/3D Grafiken, Bildverarbeitung, Videokompression/-dekompression, Stimmerkennungsalgorithmen und Audiomanipulation) erfordern oftmals, dass derselbe Vorgang auf einer großen Anzahl von Dateneinträgen ausgeführt wird (wird als „Daten-Parallelismus” bezeichnet). Einzelbefehls-Mehrfachdaten (SIMD) bezieht sich auf eine Befehlsart, die auslöst, dass ein Prozessor denselben Vorgang auf mehreren Dateneinträgen ausführt. Die SIMD-Technologie ist insbesondere für Prozessoren geeignet, die die Bits in einem Register logisch in eine Anzahl von Dateneinträgen mit fixer Größe einteilen können, wovon jeder einen getrennten Wert darstellt. Beispielswiese können die Bits in einem 64-Bit-Register als ein Quellenoperand, der auf vier getrennten 16-Bit-Datenelementen ausgeführt werden soll, wobei jedes davon einen getrennten 16-Bit-Wert darstellt, angegeben werden. Als weiteres Beispiel können die Bits in einem 256-Bit-Register als ein Quellenoperand angegeben werden, der auf als vier getrennte 64-Bitgepackten Datenelementen (Datenelementen mit einer Größe von vier Worten (Q)), als acht getrennte 32-Bit-gepackten Datenelementen (Datenelementen mit einer Größe von zwei Worten (D)), als sechzehn getrennte 16-Bit-gepackten Datenelementen (Datenelementen mit einer Größe von einem Wort (W)) oder als zweiunddreißig getrennte 8-Bit-gepackten Datenelementen (Datenelementen mit Byte-Größe (B)) ausgeführt wird. Diese Art von Daten wird als gepackter Datentyp oder als Vektordatentyp bezeichnet, und Operanden dieses Datentyps werden als gepackte Datenoperanden oder Vektoroperanden bezeichnet. Anders ausgedrückt bezieht sich ein gepackter Dateneintrag oder ein Vektor auf eine Sequenz von gepackten Datenelementen; und ein gepackter Datenoperand oder ein Vektoroperand ist ein Quellen- oder ein Zieloperand eines SIMD-Befehls (auch als ein gepackter Datenbefehl oder ein Vektorbefehl bekannt).
  • Beispielsweise gibt eine Art eines SIMD-Befehls einen einzigen Vektorvorgang an, der auf zwei Quellenvektoroperanden auf vertikale Art durchgeführt werden soll, um einen Zielvektoroperanden (auch als Ergebnisvektoroperand bezeichnet) mit derselben Größe, mit derselben Anzahl von Datenelementen und in derselben Datenelementreihenfolge zu erzeugen. Die Datenelemente in den Quellenvektoroperanden werden als Quellendatenelemente bezeichnet, während die Datenelemente in dem Zielvektoroperanden als Ziel- oder Ergebnisdatenelemente bezeichnet werden. Diese Quellenvektoroperanden weisen dieselbe Größe auf und enthalten Datenelemente derselben Breite und somit enthalten sie dieselbe Anzahl an Datenelementen. Die Quellendatenelemente in denselben Bit-Positionen in den zwei Quellenvektoroperanden bilden Paare aus Datenelementen (auch als entsprechende Datenelemente bezeichnet; d. h., dass sich die Datenelemente in Datenelementposition 0 jedes Quellenoperanden entsprechen, dass sich die Datenelemente in Datenelementposition 1 jedes Quellenoperanden entsprechen usw.). Der von diesem SIMD-Befehl angegebene Vorgang wird getrennt auf jedem dieser Paare von Quellendatenelementen ausgeführt, um eine passende Anzahl von Ergebnisdatenelementen zu erzeugen, und somit weist jedes Paar aus Quellendatenelementen ein entsprechendes Ergebnisdatenelement auf. Da der Vorgang vertikal ist und da der Ergebnisvektoroperand dieselbe Größe aufweist, dieselbe Anzahl von Datenelementen aufweist und da die Ergebnisdatenelemente in derselben Datenelementreihenfolge gespeichert werden wie die Quellenvektoroperanden, befinden sich die Ergebnisdatenelemente in denselben Bit-Positionen des Ergebnisvektoroperanden wie ihr entsprechendes Paar aus Quellendatenelementen in den Quellenvektoroperanden. Zusätzlich zu dieser beispielhaften Art von SIMD-Befehlen gibt es eine Vielzahl von anderen SIMD-Befehlsarten (z. B. der nur einen oder mehr als zwei Quellenvektoroperanden aufweist; die auf horizontale Weise arbeiten; die einen Ergebnisvektoroperanden erzeugen, der eine andere Größe aufweist, die eine andere Größe aufweisen als die Datenelemente und/oder die eine andere Datenelementreihenfolge aufweisen). Es gilt zu verstehen, dass der Begriff Zielvektoroperand (oder Zieloperand) als das direkte Ergebnis des Durchführens des Vorganges definiert ist, der von einem Befehl angegeben wird, einschließlich des Speichers des Zieloperanden an einer Position (dies kann ein Register sein oder eine Speicheradresse, die von diesem Befehl angegeben wird), so dass auf ihn von einem anderen Befehl (durch Angabe derselben Position durch den anderen Befehl) als Quellenoperand zugegriffen werden kann.
  • Die SIMD-Technologie, wie jene, die von den Intel® CoreTM Prozessoren mit einem Befehlssatz, einschließlich x86, MMXTM, Streaming SIMD Extensions (SSE), SSE2-, SSE3-, SSE4.1- und SSE4.2-Befehlen, verwendet wird, ermöglichte eine bedeutende Verbesserung des Anwendungsleistungsverhaltens (CoreTM und MMXTM sind eingetragene Markenzeichen oder Markenzeichen der Intel Corporation aus Santa Clara, Kalif.). Ein zusätzlicher Satz von SIMD-Extensionen, die als die Advanced Vector Extensions (AVX) (AVX1 und AVX2) bezeichnet werden und die das VEX-Kodierschema verwenden, wurde herausgegeben und/oder veröffentlicht (siehe z. B. Intel® 64 und IA-32 Architectures Software Developers Manual, Oktober 2011; und siehe Intel® Advanced Vector Extensions Programming Reference, Juni 2011).
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Die vorliegende Erfindung wird in den Figuren der beigelegten Zeichnungen beispielhaft und nichtbeschränkend dargestellt, in denen ähnliche Bezüge ähnliche Elemente bezeichnen und in denen:
  • 1 eine beispielhafte Darstellung eines Vorgangs von VPTESTCONF zeigt.
  • 2 eine Ausführungsform der Ausführung eines VPTESTCONF-Befehls in einem Prozessor zeigt.
  • 3 eine Ausführungsform eines Verfahrens zum Verarbeiten eines VPTESTCONF-Befehls zeigt.
  • 4 einen beispielhaften Vorgang für eine Übertragung zeigt.
  • 5 eine beispielhafte Darstellung eines Vorgangs von VPBROADCASTM zeigt.
  • 6 eine Ausführungsform der Ausführung eines VPBROADCASTM-Befehls in einem Prozessor zeigt.
  • 7 eine Ausführungsform für ein Verfahren zum Verarbeiten eines VPBROADCASTM-Befehls zeigt.
  • 8 eine Korrelation zwischen der Anzahl eines aktiven Bit-Vektorschreibmaskenelements und der Vektorgröße und der Datenelementgröße gemäß einer Ausführungsform der Erfindung darstellt.
  • 9 ein Blockschaltbild einer Registerarchitektur 900 gemäß einer Ausführungsform der Erfindung ist.
  • 10A ein Blockschaltbild ist, das eine beispielhafte Pipeline in Reihenfolge sowie eine beispielhafte Registerumbenennungs-Pipeline mit Ausgabe/Ausführung außerhalb der Reihenfolge gemäß Ausführungsformen der Erfindung zeigt.
  • 10B ist ein Blockschaltbild, das eine beispielhafte Ausführungsform eines Architekturkerns in Reihenfolge sowie einen beispielhaften Registerumbenennungs-Architekturkern mit einer Ausgabe/Ausführung außerhalb der Reihenfolge zeigt, der gemäß Ausführungsformen der Erfindung in einen Prozessor aufzunehmen ist.
  • 11A–B ein Blockschaltbild eines spezielleren Beispiels einer Kernarchitektur in Reihenfolge zeigt, wobei der Kern in einem Chip einer von mehreren Logikblöcken wäre (einschließlich anderer Kerne desselben Typs und/oder eines anderen Typs).
  • 12 ein Blockschaltbild eines Prozessors 1200 ist, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuereinheit aufweisen kann und gemäß Ausführungsformen der Erfindung integrierte Grafiken aufweisen kann.
  • 1316 Blockschaltbilder von beispielhaften Computerarchitekturen sind.
  • 17 ein Blockschaltbild ist, das die Verwendung eines Softwarebefehlskonvertierers zum Konvertieren von binären Befehlen in einem Quellenbefehlssatz binären Befehlen in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt.
  • 18 Ausgabeergebnisse von Vergleichen als Bit-Vektorsatz zeigt.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung sind verschiedene spezielle Details dargelegt. Jedoch gilt zu verstehen, dass Ausführungsformen der Erfindung ohne diese speziellen Details umgesetzt werden können. In anderen Fällen wurden bekannte Schaltungen, Strukturen und Verfahren nicht detailliert dargestellt, um das Verständnis dieser Beschreibung nicht zu erschweren.
  • Hinweise in der Patentanmeldung auf „eine (1) Ausführungsform”, „eine Ausführungsform”, „eine beispielhafte Ausführungsform” etc. geben an, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, eine Struktur oder eine Eigenschaft aufweisen kann, aber nicht jede Ausführungsform muss das bestimmte Merkmal, die Struktur oder die Eigenschaft zwingend aufweisen. Darüber hinaus beziehen sich solche Begriffe nicht notwendigerweise auf dieselbe Ausführungsform. Ferner wird eingeräumt, dass wenn ein bestimmtes Merkmal, eine Struktur oder eine Eigenschaft in Verbindung mit einer Ausführungsform beschrieben wird, es innerhalb der Befähigung eines Fachmanns liegt, ein solches Merkmal, eine Struktur oder eine Eigenschaft in Verbindung mit anderen Ausführungsformen umzusetzen, unabhängig davon ob dies ausdrücklich beschrieben ist oder nicht.
  • Überblick
  • In der nachfolgenden Beschreibung gibt es einige Elemente, die vor dem Beschreiben der Vorgänge dieses bestimmten Befehls in der Befehlssatzarchitektur erklärt werden müssen. Ein solches Element ist ein „Schreibmaskenregister”, das im Allgemeinen verwendet wird, um einen Operanden zu prädizieren, einen Computervorgang pro Element bedingt zu steuern (unten kann auch der Begriff Maskenregister verwendet werden und er bezieht sich auf ein Schreibmaskenregister wie die unten besprochenen „k”-Register). Wie unten verwendet speichert ein Schreibmaskenregister eine Vielzahl von Bits (16, 32, 64 etc.), worin jedes aktive Bit des Schreibmaskenregisters den Betrieb/die Aktualisierung eines gepackten Datenelements eines Vektorregisters während einer SIMD-Verarbeitung steuert. Typischerweise sind mehr als ein Schreibmaskenregister für die Verwendung durch einen Prozessorkern verfügbar.
  • Die Befehlssatzarchitektur umfasst zumindest einige SIMD-Befehle, die Vektorvorgänge angeben und die Felder aufweisen, um Quellenregister und/oder Zielregister aus diesen Vektorregistern auszuwählen (ein beispielhafter SIMD-Befehl kann angeben, dass ein Vektorvorgang, auf den Inhalten von einem oder mehreren der Vektorregister ausgeführt werden soll und dass das Ergebnis dieses Vektorvorgangs in einem der Vektorregister gespeichert werden soll). Verschiedene Ausführungsformen der Erfindung können Vektorregister mit unterschiedlicher Größe aufweisen und können mehr/weniger Datenelemente und solche mit unterschiedlichen Größen unterstützen.
  • Die Größe der Multibit-Datenelementen, die von einem SIMD-Befehl angegeben werden (z. B. Byte, Wort, Doppelwort, Vierfachwort) bestimmt die Bit-Positionen der „Datenelementpositionen” innerhalb eines Vektorregisters, und die Größe des Vektoroperanden bestimmt die Anzahl von Datenelementen. Ein gepacktes Datenelement bezieht sich auf die Daten, die in einer bestimmten Position gespeichert sind. Anders ausgedrückt ändern sich die Bit-Positionen der Multi-Bit-Datenelementpositionen innerhalb des resultierenden Vektors abhängig von der Größe der Datenelemente in dem Zieloperanden und der Größe des Zieloperanden (die Gesamtzahl an Bits in dem Zieloperanden) (oder anders ausgedrückt, abhängig von der Größe des Zieloperanden und der Anzahl von Datenelementen innerhalb des Zieloperanden), (z. B. falls das Ziel für den resultierenden Vektoroperanden ein Vektorregister ist (in diesem Zusammenhang sind Vektorregister und gepackte Datenelementregister austauschbar verwendet), dann ändern sich die Bit-Positionen der Multibit-Datenelemente innerhalb des Zielvektorregisters). Beispielsweise unterscheiden sich die Bit-Positionen der Multi-Bit-Datenelemente bei einem Vektorvorgang, der auf 32-Bit-Datenelementen ausgeführt wird (Datenelementposition 0 besetzt Bit-Positionen 31:0; Datenelementposition 1 besetzt Bit-Positionen 63:32 usw.) von einem Vektorvorgang, der auf 64-Bit-Datenelementen ausgeführt wird (Datenelementposition 0 besetzt Bit-Positionen 63:0, Datenelementposition 1 besetzt Bit-Positionen 127:64 usw.).
  • Zusätzlich dazu gibt es eine Korrelation zwischen der Anzahl von Vektorschreibmaskenelementen mit einem aktiven Bit und der Vektorgröße und der Datenelementgröße gemäß einer Ausführung der Erfindung, wie in 8 dargestellt. Vektorgrößen von 128 Bits, 256 Bits und 512 Bits sind dargestellt, obwohl auch andere Breiten möglich sind. Datenelementgrößen von 8 Bit-Bytes (B), 16 Bit-Worten (W), 32 Bit-Doppelworten (D) oder Einzelpräzisionsgleitkomma und 64 Bit-Vierfachwort (Q) oder Doppelpräzisionsgleitkomma werden berücksichtigt, obwohl auch andere Breiten möglich sind. Wie dargestellt, können, wenn die Vektorgröße 128 Bit beträgt, 16 Bits zum Maskieren verwendet werden wenn die Datenelementgröße des Vektors 8 Bit beträgt, 8 Bits können zum Maskieren verwendet werden wenn die Datenelementgröße des Vektors 16 Bit beträgt, 4 Bits können zum Maskieren verwendet werden wenn die Datenelementgröße des Vektors 32 Bit beträgt und 2 Bits können zum Maskieren verwendet werden wenn die Datenelementgröße des Vektors 64 Bit beträgt. Beträgt die Vektorgröße 256 Bit, können 32 Bits zum Markieren verwendet werden wenn die Breite des gepackten Datenelements 8 Bit beträgt, 16 Bits können zum Maskieren verwendet werden wenn die Datenelementgröße des Vektors 16 Bit beträgt, 8 Bits können zum Maskieren verwendet werden wenn die Datenelementgröße des Vektors 32 Bit beträgt und 4 Bits können zum Maskieren verwendet werden wenn die Datenelementgröße des Vektors 64 Bit beträgt. Beträgt die Vektorgröße 512 Bit, können 64 Bits zum Maskieren verwendet werden wenn die Datenelementgröße des Vektors 8 Bit beträgt, 32 Bits können zum Maskieren verwendet werden wenn die Datenelementgröße des Vektors 16 Bit beträgt, 16 Bits können zum Maskieren verwendet werden wenn die Datenelementgröße des Vektors 32 Bit beträgt und 8 Bits können zum Maskieren verwendet werden wenn die Datenelementgröße des Vektors 64 Bit beträgt.
  • Abhängig von der Kombination der Vektorgröße und der Datenelementgröße können entweder alle 64 Bits oder nur ein Teilsatz der 64 Bits als eine Schreibmaske verwendet werden. Wird ein einziges Maskierungssteuerbit pro Element verwendet, ist die Anzahl der Bits in dem zum Maskieren verwendeten Vektorschreibmaskenregister (aktive Bits) gleich der Vektorgröße in Bits, geteilt durch die Datenelementgröße des Vektors in Bits.
  • Wie oben dargelegt, enthalten Schreibmaskenregister Bits, die Elementen in einem Vektorregister (oder einer Speicherposition) entsprechen und verfolgen die Elemente, bei denen Vorgänge durchgeführt werden sollen. Aus diesem Grund ist es wünschenswert, gemeinsame Vorgänge zu haben, die auf diesen Maskenbits ein ähnliches Verhalten wie bei den Vektorregistern wiedergeben und es im Allgemeinen ermöglichen, diese Maskenbits innerhalb der Schreibmaskenregister einzustellen.
  • Ein wichtiges Algorithmusmuster, das die Erfinder effizient vektorisieren möchten sind ”leere Aktualisierungen”. Hier führen sie einen Lesen-Modifizieren-Schreiben-Vorgang auf einer indirekt adressierten Speicherposition durch (z. B. Laden A[B[i]], fügen etwas hinzu und speichern den Wert zurück in A[B[i]]). Ein solches Vektorisieren umfasst das Durchführen eines Sammeln-Modifizieren-Verteilen-Vorgangs, die die ISA der Erfinder und die Hardware direkt unterstützen, für 16 aufeinanderfolgende Werte von i, Sammeln 16A[B[i]], durchführen einer SIMD-Berechnung und Rückverteilen der neuen Werte. Jedoch nimmt diese Vektorisierung an, dass ein einziger Sammeln/Verteilen-Befehl nur einmal auf jede Speicherposition zugreift. Falls z. B. zwei aufeinanderfolgende Werte von B[i] dieselben sind, dann hängt das Lesen-Modifizieren-Schreiben für den zweiten Wert von dem ersten ab, ein gleichzeitiges Durchführen dessen auf SIMD-Art verletzt die Abhängigkeit und kann zu einer falschen Antwort führen.
  • Es ist möglich einen Vergleich für die Gleichheit jedes Elements in einem Vektorregister mit den „früheren” (näher zum LSB) Elementen durchzuführen. Der Befehl gibt die Ergebnisse dieser Vergleiche als einen Satz von Bit-Vektoren aus. Dies ist in 18 dargestellt. Vorausgesetzt, dass es doppelte Informationen geben wird, kann der Code vektorisiert werden und setzt immer noch Abhängigkeiten durch den Speicher durch Bestimmen eines Teilsatzes von Elementen mit einzigartigen Indizes, Berechnen davon auf SIMD-Weise und dann Zurückführen, um dies auch mit den verbleibenden Elementen zu versuchen, durch. In Pseudocode ist dies wie folgt:
    Figure DE112013003741T5_0002
  • Die Funktion Compute_Mask_of_Unique_Remaining_Indices ist ein Schwerpunkt dieser Offenbarung. Dieser Vorgang sollte Folgendes ausführen:
    • (1) Die elements_left_mask nullextendieren, sodass sie dieselbe Größe wie ein Index aufweisen und dann das Ergebnis logisch mit jedem Element der „Vergleiche” UNDieren. Dies räumt Konflikte auf allen Elementen aus dem Weg, die bereits während vorangegangener Do-while-loop-Wiederholungen berechnet wurden. Um dies momentan auszuführen, muss die Maske in ein Allzweckregister verschoben werden und dann an ein Vektorregister übertragen werden.
    • (2) Testen jedes Elements des Ergebnisses von (1) auf eine Gleichheit mit Null. Falls ein Element null ist, dann weist es keine Konflikte auf und ein Bit wurde in das Ausgabe-Maskenregister gesetzt, das diesem Element entspricht.
    • (3) Logisches UNDieren des Ergebnisses von (2) mit den elements_left_mask. Dies entfernt alle Elemente, die bereits verarbeitet wurden. Dies kann bis zu 5 Befehle erfordern.
  • Unten ist ein einziger Befehl (vptestconf k1, k2, zmm1) detailliert dargestellt, der alle Aspekte der obigen Funktionalität durchführt. Dieser Befehl ersetzt die gesamte Compute_Mask_of_Unique_Remaining_Indices-Funktion in dem Pseudocode, der zu Beginn der Offenbarung dargelegt wurde. Dies verändert den Pseudocode zu Folgendem:
    Figure DE112013003741T5_0003
  • Dieser Befehl kann verwendet werden, um Masken entsprechend sukzessiver Vektoren von Wiederholungen zu berechnen, die parallel (nicht in Konflikt miteinander) ausgeführt werden können. Anders ausgedrückt entspricht die erste Gruppe einer Maske mit allen Elementen, die keinen Konflikt (Lesen-zu-Schreiben) mit einem vorangegangenen Wiederholungssatz aufweisen, der auf 1 eingestellt wurde, diese können parallel ausgeführt werden. Die zweite Wiederholung muss nur Elemente berücksichtigen, die den Wiederholungen entsprechen, die noch nicht von der ersten Maske abgedeckt wurden usw.
  • Unten werden Ausführungsformen eines Befehls, der allgemein als ein vektorgepackter Testkonflikte-(„VPTESTCONF”) Befehl des Befehlssatzes bezeichnet wird, und Ausführungsformen von Systemen, Architekturen, Befehlsformaten etc., die verwendet werden können, um einen solchen Befehl, der auf mehrere Arten vorteilhaft ist, auszuführen, erklärt. Die Ausführung eines VPTESTCONF verursacht ein logisches „UND” von Daten aus einem Quellenmaskenoperanden mit jedem Datenelement eines gepackten Quellendatenoperanden, gefolgt von einer Bestimmung, welcher der logischen „UND”-Vorgänge einen Konflikt angeben, um ein Konfliktüberprüfungsergebnis zu erzeugen, und ein weiteres logisches „UND” mit dem Konfliktüberprüfungsergebnis mit den Daten aus dem Quellenmaskenoperanden. Das Ergebnis des zweiten „UNDs” wird in einem Zielort, wie einem Zielmaskenoperanden, gespeichert. In manchen Ausführungsformen ist der Maskenoperand ein Schreibmaskenregister, wie oben genauer beschrieben. In manchen Ausführungsformen ist der Quellenmaskenoperand nullextendiert, damit er dieselbe Größe aufweist wie jedes Datenelement des gepackten Quellendatenoperanden.
  • 1 zeigt eine beispielhafte Darstellung eines Vorgangs von VPTESTCONF. In dem dargestellten Beispiel werden Daten aus einem Quellenschreibmaskenregister 101 unter Verwendung von UND-Logik 105(0)–(N) mit Datenelementen einer gepackten Datenquelle 103(0)–(N) logisch „UNDiert”. Das Quellenregister 101 muss kein Schreibmaskenregister sein und könnte jede andere Speichereinheit sein wie ein Allzweckregister oder ein gepacktes Datenregister. Jedoch wird hierin in diesem Dokument ein Quellenschreibmaskenregister verwendet, um das Verständnis zu erleichtern. Während die Darstellung getrennte Quellenschreibmaskenregister zeigt, werden diese Daten in manchen Ausführungsformen in einem temporären gepackten Datenregister gespeichert, das dieselbe Größe aufweist wie gepackte Datenquelle 103. Das Überschreiben auf dieses Register kann durch einen Übertragungsbefehl erreicht werden, der später in dieser Patentschrift genauer erklärt werden wird. In manchen Ausführungsformen werden die Daten des Quellenschreibmaskenregisters nullextendiert, sodass die Daten dieselbe Größe aufweisen wie jedes gepackte Datenelement der gepackten Datenquelle 103. Dieses UNDieren entfernt Konflikte auf jeden Elementen, die bereits in dem zuvor beschriebenen beispielhaften Szenario berechnet wurden.
  • Das Ergebnis jedes UNDierungs-Vorgangs wird dann einer Logik 107(0)107(N) unterzogen, die bestimmt, ob das Ergebnis des UNDs eine Null ist oder nicht. Falls das Ergebnis eine Null ist, dann gibt es zwischen diesem Element und anderen Datenelementen keine Konflikte. Das Ergebnis dieser Bestimmungen wird in einem temporären Ergebnisregister 109 in entsprechenden Bit-Positionen des temporären Ergebnisregisters 109 gespeichert. Wenn Datenelement 0 der gepackten Datenquelle 103 beispielsweise mit den Daten des Quellenschreibmaskenregisters 101 UNDiert wird und die Konfliktbestimmung dann mittels Logik 107(0) durchgeführt wird, ist dies ein Konfliktergebnis für Datenelementposition 0. Diese Konfliktbestimmung wird deshalb in Bit-Position 0 des temporaren Ergebnisregisters 109 gespeichert. In manchen Ausführungsformen wir eine „1” eingestellt, wenn es keine Konflikte gibt und wenn in anderen eine „0” verwendet wird.
  • Der Inhalt des temporären Ergebnisregisters 109 werden unter Verwendung von Logik 111 mit den Daten aus dem Quellenschreibmaskenregister 101 logisch UNDiert, um jede Elemente zu entfernen, die bereits verarbeitet wurden. Das Ergebnis dieses UNDierens wird in einem Zielschreibmaskenregister 113 gespeichert.
  • Beispielhaftes Format von VPTESTCONF
  • Ein beispielhaftes Format dieses Befehls ist „VPTESTCONF K1, K2, R2”, wobei der Zieloperand K1 ein Schreibmaskenregister ist, K2 ein Quellenschreibmaskenregister ist und Quellenoperand R2 ein Vektor-(gepacktes Daten-)Register ist (wie ein 128-, 256-, 512-Bit-Register etc.) und VPTESTCONF ist der Opcode des Registers. Wie bereits zuvor festgehalten, funktioniert der Befehl auch mit anderen Registern, nicht nur mit Schreibmaskenregistern.
  • Beispielhafte Verfahren zum Ausführen von VPTESTCONF
  • 2 zeigt eine Ausführungsform der Ausführung eines VPTESTCONF-Befehls in einem Prozessor. Ein VPTESTCONF-Befehl mit einem Quellenschreibmaskenregisteroperanden, einem Quellenvektorregisteroperanden, einem Operanden und einem Zielschreibmaskenregister wird bei 201 abgerufen.
  • Der VPTESTCONF-Befehl wird von Entschlüsselungslogik bei 203 entschlüsselt. Abhängig vom Befehlsformat kann eine Vielzahl von Daten zu diesem Zeitpunkt interpretiert werden, wie ob es eine Datentransformation geben soll, welche Register geschrieben und/oder aufgerufen werden sollen, auf welche Speicheradresse zugegriffen werden soll etc.
  • Die Quellenoperandenwerte werden bei 205 aufgerufen/gelesen. Beispielsweise wird das Quellenvektorregister gelesen. Falls einer oder beide der Quellenoperanden ein Speicheroperand ist, dann werden die Datenelemente, die mit diesem Operanden assoziiert sind, abgerufen. In manchen Ausführungsformen werden Datenelemente aus einem Speicher in ein temporäres Register gespeichert. Zu diesem Zeitpunkt werden, falls notwendig, die Quellenschreibmaskendaten in manchen Ausführungsformen nullextendiert, so dass sie dieselbe Größe aufweisen wie ein Datenelement in dem Quellenvektorregister. In manchen Ausführungsformen werden die (nullextendierten) Quellenschreibmaskendaten, falls notwendig, an ein temporares Vektorregister übertragen, das dieselbe Größe aufweist wie das Quellenvektorregister.
  • Der VPTESTCONF-Befehl (oder Vorgänge, die einen solchen Befehl umfassen wie Mikrovorgänge) wird durch Ausführungsressourcen wie einer oder mehreren funktionellen Einheiten bei 207 ausgeführt, um Daten aus dem Quellenmaskenoperanden mit jedem Datenelement des gepackten Quellendatenoperanden logisch zu „UNDieren”, gefolgt von einem Bestimmen, welcher der logischen „UND”-Vorgänge auf einen Konflikt hindeuten, um ein Konfliktüberprüfungsergebnis zu erzeugen und das Konfliktüberprüfungsergebnis logisch mit den Daten aus dem Quellenmaskenoperanden zu „UNDieren”.
  • Das Ergebnis des zweiten „UNDs” ist in einem Zielort wie einem Zielmaskenoperanden bei 209 gespeichert. Während 207 und 209 getrennt dargestellt wurden, werden sie in manchen Ausführungsformen zusammen als ein Teil der Ausführung des Befehls durchgeführt.
  • 3 zeigt eine Ausführungsform eines Verfahrens zum Verarbeiten eines VPTESTCONF-Befehls. In dieser Ausführungsform wird angenommen, dass manche, wenn nicht alle, Vorgänge 201205 bereits zuvor ausgeführt wurden, jedoch sind sie nicht dargestellt, um die unten präsentierten Details nicht zu verschleiern. Beispielsweise ist das Abrufen und Entschlüsseln nicht dargestellt, noch ist die Operandenabfrage dargestellt.
  • Bei 301 werden die Daten des Quellenschreibmaskenregisters auf dieselbe Größe wie die gepackten Datenelemente der gepackten Datenquelle und der Zieloperanden nullextendiert (falls notwendig). Falls das Quellenschreibmaskenregister beispielsweise 8 Bit aufweist und einen Wert von x01 aufweist und falls die Datenelemente der gepackten Datenquelle und des Ziels 16 Bits aufweisen, dann werden die Daten des Quellenmaskenregisters 8 Bits auf x0001 extendiert. Zu diesem Zeitpunkt kann auch eine Übertragung erfolgen.
  • 4 zeigt einen beispielhaften Prozess für diese Übertragung. In manchen Ausführungsformen werden die (nullextendierten) Daten des Quellenschreibmaskenregisters bei 401 in ein Allzweckregister verschoben. Die (nullextendierten) Daten des Quellenschreibmaskenregisters werden an ein temporares gepacktes Datenelement-(Vektor-)Register übertragen, das dieselbe Größe aufweist wie das gepackte Quellendatenelement bei 403.
  • Ein logisches UND des Inhalts des (nullextendierten) Quellenschreibmaskenregisters mit jedem Datenelement der gepackten Datenquelle wird bei 303 durchgeführt. Falls eine Übertragung durchgeführt wurde, wird bei 303 eine entsprechende Datenelementposition durch ein Datenelementspositions-UNDieren des temporären gepackten Datenelementregisters zu dem gepackten Quellendatenelementregister vorgenommen.
  • Eine Bestimmung, ob das Ergebnis jedes UND-Vorgangs einen Nullwert aufweist oder nicht wird bei 305 vorgenommen. Für jeden Nullwert, der aus dem UND-Vorgang entsteht, wird eine „1” in eine entsprechende Bitposition einer temporaren Speicherposition bei 307 geschrieben. Für jeden Nicht-Nullwert, der aus dem UND-Vorgang resultiert, wird eine „0” in eine entsprechende Bitposition einer temporaren Speicherposition an 309 geschrieben.
  • Die Werte der temporären Speicherposition werden mit den (nullextendierten) Daten des Quellenschreibmaskenregisters bei 311 UNDiert und die Ergebnisse dieses UNDierens werden bei 313 in ein Zielschreibmaskenregister gespeichert.
  • Unten sind Ausführungsformen eines Befehls, der im Allgemeinen als ein vektorgepackter Testkonflikte-(”VPBROADCAST”) Befehl des Befehlssatzes bezeichnet wird und Ausführungsformen von Systemen, Architekturen, Befehlsformaten etc. beschrieben, die verwendet werden können, um einen solchen Befehl, der auf viele verschiedene Arten vorteilhaft sein kann, auszuführen. Die Ausführung eines VPBROADCASTM verursacht, dass ein Maskenregister mit Größe M an ein Vektorregister mit Elementen der Größe N(N > M) übertragen wird. Beispielsweise überträgt VPBROADCASTMW2D 16-Bit-Masken an alle Doppelwort-gepackten Datenelemente eines Vektorregisterziels. Es können viele Formen dieses Befehls existieren, wie Byte-zu-Byte (B2B), Byte-zu-Wort (B2W), Word-zu-Word (W2W), Wort-zu-Vierfachwort (W2Q), Doppelwort-zu-Doppelwort (D2D), Doppelwort-zu-Vierfachwort (D2W) und Vierfachwort-zu-Vierfachwort (Q2Q), etc.
  • 5 zeigt eine beispielhafte Darstellung eines Vorgangs von VPBROADCASTM. In dem dargestellten Beispiel werden Daten aus einem (nullextendierten) Quellenschreibmaskenregister 501 an mehrere Datenelementpositionen eines gepackten Daten-(Vektor-)Registerziels 503 übertragen.
  • Beispielhaftes Format von VPBROADCASTM
  • Ein beispielhaftes Format dieses Befehls ist „VPBROADCASTM {k2} R1, K1”, wobei der Quellenoperand K1 ein Schreibmaskenregister ist, der Zieloperand R2 ein Vektor-(gepackte Daten) Register (wie ein 128-, 256-, 512-Bit-Register etc.) ist und VBROADCASTM der Opcode des Befehls ist. Wie zuvor festgehalten wurde, funktioniert der Befehl auch mit anderen Registern, nicht nur mit Schreibmaskenregistern. K2 ist eine optionale Schreibmaske, die auf die oben beschriebene Art verwendet werden kann. Insbesondere kann jede Bitposition dieser Schreibmaske verwendet werden, um das Schreiben einer Übertragung zu blockieren. Falls die am wenigsten signifikante Bitposition beispielsweise eine 0 ist, dann weist die am wenigsten signifikante Datenelementposition des Zielregisters die (nullextendierten) Daten aus dem Quellenschreibmaskenregister, in das es überschrieben wurde, nicht auf. Der Opcode kann zusätzlich eine Angabe des Typs des Datentransfers, B2B, B2W etc. umfassen. Dies kann verwendet werden, um die Menge an Nullextension, die vorzunehmen ist, zu bestimmen.
  • Beispielhafte Verfahren zur Ausführung von VPBROADCASTM
  • 6 stellt eine Ausführungsform der Ausführung eines VPBROADCASTM-Befehls in einem Prozessor bereit. Ein VPBROADCAST-Befehl mit einem Quellenschreibmaskenregisteroperanden und einem Zielvektorregister wird bei 601 abgerufen.
  • Der VPBROADCASTM-Befehl wird durch Entschlüsselungslogik bei 603 entschlüsselt. Abhängig vom Befehlsformat kann eine Vielzahl von Daten zu diesem Zeitpunkt interpretiert werden, wie ob es eine Datentransformation geben soll, welche Register geschrieben und/oder aufgerufen werden sollen, auf welche Speicheradresse zugegriffen werden soll etc.
  • Die Quellenoperandenwerte werden bei 605 aufgerufen/gelesen. Beispielsweise wird das Quellenschreibmaskenregister gelesen.
  • Der VBROADCASTM-Befehl (oder Vorgange, die einen solchen Befehl umfassen wie Mikrovorgänge) wird durch Ausführungsressourcen wie eine oder mehrere funktionelle Einheiten bei 607 ausgeführt, um die Daten des Quellenschreibmaskenoperanden zu nullextendieren (falls notwendig), so dass die Daten des Quellenschreibmaskenoperanden dieselbe Größe aufweisen wie ein Datenelement des Zielvektorregisters.
  • Die (nullextendierten) Daten des Quellenschreibmaskenregisters wird in jede Datenelementposition des Zielvektorregisters bei 609 übertragen (gespeichert). Während 607 und 609 getrennt dargestellt wurden, werden sie in manchen Ausführungsformen gemeinsam als Teil der Ausführung des Befehls durchgeführt.
  • 7 zeigt eine Ausführungsform eines Verfahrens zum Verarbeiten eines VPBROADCASTM-Befehls. In dieser Ausführungsform wird angenommen, dass manche, wenn nicht alle, der Vorgänge 601605 bereits zuvor ausgeführt wurden, jedoch sind sie nicht dargestellt, um die unten präsentierten Details nicht zu verschleiern. Beispielsweise ist das Abrufen und Entschlüsseln nicht dargestellt, noch ist die Operandenabfrage dargestellt.
  • Bei 701 werden die Daten des Quellenschreibmaskenregisters auf dieselbe Größe wie die gepackten Datenelemente des gepackten Datenziels nullextendiert (falls notwendig). Falls das Quellenschreibmaskenregister beispielsweise 8 Bit und einen Wert von x01 aufweist und falls die Datenelemente des gepackten Datenziels 16 Bits aufweisen, dann werden die Daten des Quellenmaskenregisters 8 Bits auf x0001 extendiert.
  • Die (nullextendierten) Daten der Quellenschreibmaske wird bei 703 auf die am wenigsten signifikante Datenelementposition des Zielregisters geschrieben.
  • Eine Bestimmung, ob dies die am meisten signifikante Datenelementposition des Zielorts ist, wird bei 705 vorgenommen. Falls ja, dann wird die Übertragung bei 707 abgeschlossen. In manchen Ausführungsformen wird dieser Schritt nach dem Schreiben auf die am wenigsten signifikante Datenelementposition übersprungen.
  • Falls nein, dann werden die (nullextendierten) Daten der Schreibmaske bei 709 auf die nächste am wenigsten signifikante Datenelementposition des Zielregisters geschrieben. Eine Bestimmung, ob dies die am meisten signifikante Datenelementposition des Zielorts ist, wird bei 705 vorgenommen.
  • Während die obige Beschreibung für 7 in einem seriellen Prozess dargestellt ist, werden die Datenelementpositionen in manchen Ausführungsformen parallel zueinander geschrieben. Zusätzlich dazu kann ein Schreibmaskenregister, wie oben festgehalten, auch in einigen Ausführungsformen verwendet werden, um ein Schreiben auf Datenelementpositionen zu verhindern.
  • Beispielhafte Befehlsformate
  • Ausführungsformen des/der hierin beschriebenen Befehls/Befehle können in verschiedenen Formaten ausgeführt werden. Zusätzlich dazu sind beispielhafte Systeme, Architekturen und Pipelines unten detailliert beschrieben. Ausführungsformen des/der Befehls/Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf die beschriebenen beschränkt.
  • Beispielhafte Registerarchitektur
  • 9 ist ein Blockschaltbild einer Registerarchitektur 900 gemäß einer Ausführungsform der Erfindung. In der dargestellten Ausführungsform gibt es 32 Vektorregister 910, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 angegeben. Die 256 Bits niedrigerer Ordnung der unteren 16-zmm-Register überlagern Register ymm0–16. Die 128 Bits niedrigerer Ordnung der unteren 16-zmm-Register (die 128 Bits niedrigerer Ordnung der ymm-Register) überlagern Register xmm0–15.
  • Allzweckregister 925 – in der dargestellten Ausführungsform, gibt es sechzehn 64-Bit-Allzweckregister, die zusammen mit den existierenden x86-Adressmodi verwendet werden, um Speicheroperanden zu adressieren. Diese Register sind mit den Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • In Skalengleitkommastapelregisterdatei (x87-Stapel) 945, auf der die gepackte MMX-Flachintegerregisterdatei 950 – in der dargestellten Ausführungsform – genannt ist, ist der x87-Stapel ein Stapel aus acht Elementen, der verwendet wird, um an 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung Skalengleitkommavorgänge durchzuführen; während die MMX-Register verwendet werden, um Vorgänge auf gepackten 64-Bit-Integerdaten durchzuführen sowie um Operanden für einige Vorgänge, die zwischen dem MMX- und dem XMM-Registern durchgeführt werden, zu halten.
  • Alternative Ausführungsformen der Erfindung können breitere oder schmälere Register verwenden. Zusätzlich dazu können alternative Ausführungsformen der Erfindung mehrere, weniger oder andere Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf unterschiedliche Arten, zu unterschiedlichen Zwecken und in unterschiedlichen Prozessoren ausgeführt werden. Beispielsweise können Ausführungen solcher Kerne Folgendes umfassen: 1) einen Allzweckkern in Reihenfolge, der für Allzweckberechnungen gedacht ist; 2) einen Hochleistungs-Allzweckkern außerhalb der Reihenfolge, der für Allzweckberechnungen gedacht ist; 3) einen Spezialkern, der vor allem für Grafik- und/oder wissenschaftliche (Durchsatz-) Berechnungen gedacht ist. Ausführungen von unterschiedlichen Prozessoren können Folgende umfassen: 1) einen CPU, einschließlich eines oder mehrerer Allzweckkerne in Reihenfolge, die für Allzweckberechnungen gedacht sind und/oder eines oder mehrerer Allzweckkerne außerhalb der Reihenfolge, die für Allzweckberechnungen gedacht sind; und 2) einen Coprozessor, einschließlich eines oder mehrerer Spezialkerne, die vor allem für Grafik- und/oder wissenschaftliche (Durchsatz-)Berechnungen gedacht sind. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die die Folgenden umfassen können: 1) den Coprozessor auf einem von dem CPU getrennten Chip; 2) den Coprozessor auf einem getrennten Nacktchip in demselben Gehäuse wie ein CPU; 3) den Coprozessor auf demselben Nacktchip wie ein CPU (in dem Fall wird ein solcher Coprozessor manchmal als Speziallogik, wie eine integrierte Grafik- und/oder wissenschaftliche (Durchsatz-)Logik, oder als Spezialkerne bezeichnet); und 4) ein System auf einem Chip, der auf demselben Nacktchip den beschriebenen CPU umfassen kann (wird manchmal als der/die Anwendungskerne) oder Anwendungsprozessor(en) bezeichnet), den oben beschriebenen Coprozessor und eine zusätzliche Funktionalität. Beispielhafte Kernarchitekturen werden als nächstes beschrieben, gefolgt von Beschreibungen von beispielhaften Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen
  • Kernblockschaltbild in und außerhalb der Reihenfolge
  • 10A ist ein Blockschaltbild, das eine beispielhafte Pipeline in Reihenfolge sowie eine beispielhafte Registerumbenennungs-Pipeline mit einer Ausgabe/Ausführung außerhalb der Reihenfolge, gemäß Ausführungsformen der Erfindung darstellt.
  • In 10A umfasst eine Prozessorpipeline 1000 eine Abrufstufe 1002, eine Längenentschlüsselungsstufe 1004, eine Entschlüsselungsstufe 1006, eine Zuweisungsstufe 1008, eine Umbenennungsstufe 1010, eine Planungs-(auch bekannt als Verteilungs- oder Ausgabe-)Stufe 1012, eine Registerlesungs-/Speicherlesungsstufe 1014, eine Ausführungsstufe 1016, eine Rückschreib-/Speicherschreibstufe 1018, eine Ausnahmeverwaltungsstufe 1022 und eine Festlegungsstufe 1024.
  • 10B zeigt Prozesskern 1090, einschließlich einer Vorderendeinheit 1030, gekoppelt an eine Ausführungsengine-Einheit 1050 und beide sind an eine Speichereinheit 1070 gekoppelt. Der Kern 1090 kann ein reduzierter Befehlssatzberechnungs-(RISC) Kern, ein Komplexbefehlssatzberechnungs-(CISC) Kern, ein Kern mit sehr langem Befehlswort (VLIW) oder ein Hybrid- oder alternativer Kerntyp sein. Als eine weitere andere Option kann der Kern 1090 ein Spezialkern sein, wie z. B. ein Netzwerk- oder Kommunikationskern, eine Kompressionsengine, ein Coprozessor-Kern, ein Allzweckberechnungs-Grafikverarbeitungseinheits-(GPGPU) Kern, ein Grafikkern oder dergleichen.
  • Die Vorderendeinheit 1030 umfasst eine Zweigprognoseeinheit 1032, die an eine Befehlscache-Einheit 1034 gekoppelt ist, die an einen Befehlsadressenübersetzungspuffer (TLB) 1036 gekoppelt ist, der an eine Befehlsabrufeinheit 1038 gekoppelt ist, die an eine Entschlüsselungseinheit 1040 gekoppelt ist. Die Entschlüsselungseinheit 1040 (oder Entschlüssler) kann Befehle entschlüsseln und einen oder mehrere Mikrovorgänge, Mikrocodeeintrittspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale, die aus den originalen Befehlen entschlüsselt, abgeleitet sind oder die diese anderweitig wiedergeben, als Ausgabe erzeugen. Die Entschlüsselungseinheit 1040 kann unter Verwendung von mehreren verschiedenen Mechanismen ausgeführt werden. Beispiele für solche geeigneten Mechanismen umfassen, ohne darauf beschränkt zu sein, Verweistabellen, Hardware-Ausführungen, programmierbare Logikanordnungen (PLAs), Microcode Read Only Memories (ROMS) etc. In einer Ausführungsform umfasst der Kern 1090 einen Mikrocode-ROM oder ein anderes Medium, das Mikrocode für bestimmte Makrobefehle speichert (z. B. in Entschlüsselungseinheit 1040 oder anderweitig innerhalb der Vorderendeinheit 1030). Die Entschlüsselungseinheit 1040 ist an eine Umbenennungs-/Zuweisungseinheit 1052 in der Ausführungsengine-Einheit 1050 gekoppelt.
  • Die Ausführungsengine-Einheit 1050 umfasst die Umbenennungs-/Zuweisungseinheit 1052, die an eine Rückzugseinheit 1054 gekoppelt ist und einen Satz aus seiner oder mehreren Planungseinheit(en) 1056. Die Planungseinheit(en) 1056 stellt jede Anzahl von verschiedenen Planern dar, einschließlich Reservierungsstationen, zentrales Befehlsfenster etc. Die Planungseinheit(en) 1056 ist mit der/den physikalischen Registerdatei(en)-Einheiten) 1058 gekoppelt. Jede der physikalischen Registerdatei(en)-Einheiten 1058 stellt eine oder mehrere physikalische Registerdateien dar, die sich von denen unterscheiden, die einen oder mehrere verschiedene Datentypen speichern, wie Skaleninteger, Skalengleitkomma, gepackter Integer, gepacktes Gleitkomma, Vektorinteger, Vektorgleitkomma, Status (z. B. ein Befehlsanzeiger, der die Adresse des nächsten auszuführenden Befehls ist) etc. In einer Ausführungsform umfasst die physikalische Registerdatei(en)-Einheit 1058 eine Vektorregistereinheit und eine Skalenregistereinheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister und Allzweckregister bereitstellen. Die physikalische Registerdatei(en)-Einheit(en) 1058 wird von der Rückzugseinheit 1054 überlagert, um verschiedene Arten darzustellen, auf die eine Registerumbenennung und eine Ausführung außerhalb der Reihenfolge umgesetzt werden kann (z. B. unter Verwendung von Umordnungspuffer(n) und Rückzugsregisterdatei(en); unter Verwendung von Zukunftsdatei(en), Verlaufspuffer(n) und von Rückzugsregisterdatei(en); unter Verwendung von Registerkarten und einem Pool aus Registern etc.). Die Rückzugseinheit 1054 und die physikalischen Registerdatei(en)-Einheit(en) 1058 sind an das/die Ausführungscluster 1060 gekoppelt. Das/die Ausführungscluster 1060 umfasst einen Satz aus einer oder mehreren Ausführungseinheiten 1062 und einen Satz aus einer oder mehreren Speicherzugriffseinheiten 1064. Die Ausführungseinheiten 1062 können verschiedene Vorgänge (z. B. Verschiebung, Addition, Subtraktion, Multiplikation) und auf verschiedenen Arten von Daten (z. B. Skalengleitkomma, gepacktem Integer, gepacktem Skalengleitkomma, Vektorinteger, Vektorgleitkomma) ausführen. Während manche Ausführungsformen eine Anzahl von Ausführungseinheiten umfassen können, die speziellen Funktionen oder Funktionssätzen zugewiesen sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten umfassen, die alle Funktionen durchführen. Die Planungseinheit(en) 1056, die physikalischen Registerdatei(en)-Einheit(en) 1058 und das/die Ausführungscluster 1060 sind in möglicher Mehrfachausführung dargestellt, da bestimmte Ausführungsformen für bestimmte Arten von Daten/Vorgängen getrennte Pipelines bilden (z. B. eine Skalenintegerpipeline, eine Skalengleitkomma-/gepackter Integer-/gepackter Gleitkomma-/Vektorinteger-/Vektorgleitkommapipeline und/oder eine Speicherzugriffspipeline, wobei jede ihre eigene Planungseinheit, physikalische Registerdatei(en)-Einheit und/oder Ausführungscluster aufweist – und im Fall einer getrennten Speicherzugriffspipeline werden bestimmte Ausführungsformen ausgeführt, in denen nur das Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 1064 aufweist). Es gilt ebenfalls zu verstehen, dass wo getrennte Pipelines verwendet werden, eine oder mehrere dieser Pipelines eine Ausgabe/Ausführung außerhalb der Reihenfolge und den Rest in Reihenfolge aufweisen.
  • Der Satz aus Speicherzugriffseinheiten 1064 ist an die Speichereinheit 1070 gekoppelt, die eine Daten-TLB-Einheit 1072 umfasst, die an eine Datencache-Einheit 1074 gekoppelt ist, die an eine Level-2-(L2) Cacheeinheit 1076 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 1064 eine Ladungseinheit, eine Speicheradresseinheit und eine Speicherdateneinheit umfassen, von denen jede an die Daten-TLB-Einheit 1072 in der Speichereinheit 1070 gekoppelt ist. Die Befehlscache-Einheit 1034 ist ferner an eine Level-2-(L2) Cacheeinheit 1076 in der Speichereinheit 1070 gekoppelt. Die L2-Cacheeinheit 1076 ist an ein oder mehrere andere Cache-Level und schlussendlich an einen Hauptspeicher gekoppelt.
  • Beispielsweise kann die beispielhafte Registerumbenennungs-Kernarchitektur mit einer Ausgabe/Ausführung außerhalb der Reihenfolge die Pipeline 1000 wie folgt ausführen: 1) Befehlsaufruf 1038 führt die Aufruf- und Längenentschlüsselungsstufen 1002 und 1004 durch; 2) die Entschlüsselungseinheit 1040 führt die Entschlüsselungsstufe 1006 durch; 3) die Umbenennungs-/Zuweisungseinheit 1052 führt die Zuweisungsstufe 1008 und die Umbenennungsstufe 1010 durch; 4) die Planungseinheit(en) 1056 führen die Planungsstufe 1012 durch; 5) die physikalischen Registerdatei(en)-Einheit(en) 1058 und die Speichereinheit 1070 führen die Registerlese-/Speicherlesestufe 1014 durch; das Ausführungscluster 1060 führt die Ausführungsstufe 1016 durch; 6) die Speichereinheit 1070 und die physikalischen Registerdatei(en)-Einheit(en) 1058 führen die Rückschreib-/Speicherschreibstufe 1018 durch; 7) verschiedene Einheiten können an der Ausnahmeverwaltungsstufe 1022 beteiligt sein; und 8) die Rückzugseinheit 1054 und die physikalischen Registerdatei(en)-Einheit(en) 1058 führen die Zuweisungsstufe 1024 durch.
  • Der Kern 1090 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies of Sunnyvale, KL; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) der ARM Holdings of Sunnyvale, KL), einschließlich des/der hierin beschriebenen Befehls/Befehle. In einer Ausführungsform umfasst der Kern 1090 eine Logik, um eine gepackte Datenbefehlssatzerweiterung zu unterstützen (z. B. AVX1, AVX2 und/oder eine Form des generischen vektorfreundlichen Befehlsformats (U = 0 und/oder U = 1), das zuvor beschrieben wurde), wodurch ermöglicht wird, dass Vorgänge, die von vielen Multimediaanwendungen verwendet werden, unter Verwendung von gepackten Daten durchgeführt werden.
  • Es gilt zu verstehen, dass der Kern ein Multithreading (Ausführen von zwei oder mehreren parallelen Sätzen von Vorgängen oder Threads) unterstützen kann und kann dies auf eine Vielzahl von Arten ausführen, einschließlich eines Zeitscheiben-Multithreading, eines gleichzeitigen Multithreading (wobei ein einziger physikalischer Kern einen logischen Kern für jeden der Threads bereitstellt, wobei der physikalische Kern gleichzeitig ein Multithreading durchführt) oder einer Kombination daraus (z. B. Zeitscheiben-Aufrufen und -Entschlüsseln und ein gleichzeitiges Multithreading danach wie in der Intel® Hyperthreading-Technologie).
  • Während eine Registerumbenennung im Kontext einer Ausführung außerhalb der Reihenfolge beschrieben ist, gilt zu verstehen, dass eine Registerumbenennung in einer Architektur in Reihenfolge verwendet werden kann. Während die dargestellte Ausführungsform des Prozessors auch getrennte Befehls- und Datencache-Einheiten 1034/1074 und eine gemeinsame L2-Cacheeinheit 1076 umfasst, können alternative Ausführungsformen einen einzigen internen Cache für Befehle sowie für Daten aufweisen wie z. B. einen internen Level-1-(L1) Cache oder mehrere Level eines internen Cache. In manchen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache umfassen, die sich außerhalb des Kerns und/oder des Prozessors befindet. Alternativ dazu kann der gesamte Cache außerhalb des Kerns und/oder des Prozessors sein.
  • Spezielle beispielhafte Kernarchitektur in Reihenfolge
  • 11A-B zeigen ein Blockschaltbild einer spezielleren, beispielhaften Kernarchitektur in Reihenfolge, wobei der Kern einer aus mehreren Logikblöcken (einschließlich anderer Kerne vom selben Typ und/oder verschiedenen Typen) in einem Chip wäre. Die Logikblöcke kommunizieren über ein Verbindungsnetzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit einer fixierten Funktionslogik, Speicher-I/O-Schnittstellen und einer anderen notwendigen I/O-Logik, abhängig von der Anwendung.
  • 11A ist ein Blockschaltbild eines einzigen Prozessorkerns zusammen mit seiner Verbindung mit dem Verbindungsnetzwerk auf dem Nacktchip 1102 und mit seinem lokalen Teilsatz des Level-2-(L2) Cache 1104, gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsentschlüssler 1100 den x86-Befehlssatz mit einer gepackten Datenbefehlssatzerweiterung. Ein L1-Cache 1106 ermöglicht Zugriffe mit geringer Latenz auf Skalen- und Vektoreinheiten in einem Cache-Speicher. Während eine Skaleneinheit 1108 und eine Vektoreinheit 1110 in einer Ausführungsform (um die Konstruktion zu vereinfachen) getrennte Registersätze (Skalenregister 1112 bzw. Vektorregister 1114) verwenden, und Daten, die zwischen ihnen übertragen werden auf einen Speicher geschrieben und dann von einem Level-1-(L1) Cache 1106 zurück eingelesen werden, können alternative Ausführungsformen der Erfindung einen anderen Ansatz verwenden (z. B. können sie einen einzigen Registersatz verwenden oder einen Kommunikationspfad umfassen, der ermöglicht, dass Daten zwischen zwei Registern übertragen werden, ohne geschrieben und zurückgelesen werden).
  • Der lokale Teilsatz des L2-Cache 1104 ist Teil eines globalen L2-Cache, der in getrennte lokale Teilsätze unterteilt ist, einer für jeden Prozessorkern. Jeder Prozessorkern weist einen direkten Zugriffspfad auf seinen eigenen lokalen Teilsatz des L2-Cache 1104 auf. Daten, die von einem Prozessorkern gelesen werden, werden in ihrem eigenen L2-Cache-Teilsatz 1104 gespeichert und es kann rasch, parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen, darauf zugegriffen werden. Daten, die von einem Prozessorkern geschrieben werden, werden in seinem eigenen L2-Cache-Teilsatz 1104 gespeichert und werden, falls notwendig, aus anderen Teilsätzen geleert. Das Ringnetzwerk stellt eine Kohärenz für gemeinsame Daten sicher. Das Ringnetzwerk ist bidirektional, um es Agenten wie Prozessorkernen, L2-Caches und anderen Logikblöcken zu ermöglichen, innerhalb des Chips mit einander zu kommunizieren. Jeder Ringdatenpfad ist pro Richtung 1012 Bits breit.
  • 11B ist eine vergrößerte Ansicht eines Teils des Prozessorkerns aus 11A gemäß Ausführungsformen der Erfindung. 11B umfasst einen L1-Datencache-Teil 1106A des L1-Cache 1104 sowie mehrere Details in Bezug auf die Vektoreinheit 1110 und die Vektorregister 1114. Im Speziellen ist die Vektoreinheit 1110 eine 16 Bits breite Vektorverarbeitungseinheit (VPU) (siehe die 16 Bit breite ALU 1128), die einen oder mehrere eines Integer-, eines Einzelpräzisionsgleitkomma- und Doppelpräzisionsgleitbefehls ausführt. Die VPU unterstützt ein Swizzeln der Registereingaben mit Swizzel-Einheit 1120, eine numerische Konvertierung mit numerischen Konvertierungseinheiten 1122A–B und eine Replikation mit Replikationseinheit 1124 auf der Speichereingabe.
  • Prozessor mit integrierter Speichersteuerung und Grafiken
  • 12 ist ein Blockschaltbild eines Prozessors 1200, der mehr als einen Kern umfassen kann, mehr als eine integrierte Speichersteuereinheit umfassen kann und gemäß Ausführungsformen der Erfindung integrierte Grafiken umfassen kann. Die Kästen mit durchgehenden Linien in 12 zeigen einen Prozessor 1200 mit einem einzigen Kern 102A, einem Systemagenten 1210, einem Satz aus einer oder mehreren Bussteuereinheiten 1216, während der optionale Zusatz der Kästen mit gestrichelten Linien einen alternativen Prozessor 1200 mit mehreren Kernen 1202-N, einem Satz aus einer oder mehreren integrierten Speichersteuereinheit(en) 1214 in der Systemagenteneinheit 1210 und einer Speziallogik 1208 darstellt.
  • Somit können verschiedene Ausführungen des Prozessors 1200 Folgendes umfassen: 1) einen CPU mit der Speziallogik 1208, die eine intergierte Grafik- und/oder wissenschaftliche (Durchsatz-)Logik sein kann (der einen oder mehrere Kerne umfassen kann) und wobei die Kerne 1202A–N einer oder mehrere Allzweckkerne sind (z. B. Allzweckkerne in Reihenfolge, Allzweckkerne außerhalb der Reihenfolge, eine Kombination der zwei); 2) einen Coprozessor, wobei die Kerne 1202A–N eine große Anzahl von Spezialkernen sind, die vor allem für Grafiken und/oder wissenschaftlichen (Durchsatz) gedacht sind; und 2) einen Coprozessor, wobei die Kerne 1202A–N eine große Anzahl von Allzweckkernen in Reihenfolge sind. Somit kann der Prozessor 1200 ein Allzweckprozessor, ein Coprozessor oder ein Spezialprozessor, wie z. B. ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsengine, ein Grafikprozessor, GPGPU (Allzweckgrafikverarbeitungseinheit), ein Coprozessor mit hohem Durchsatz und vielen integrierten Kernen (MIC) (einschließlich 30 oder mehr Kernen), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann auf einem oder mehreren Chips ausgeführt sein. Der Prozessor 1200 kann ein Teil eines oder mehrerer Substrate sein und/oder darauf ausgeführt sein, die jede aus einer Reihe von Prozesstechnologien, wie z. B. BiCMOS, CMOS oder NMOS verwenden.
  • Die Speicherhierarchie umfasst ein oder mehrere Levels eines Cache innerhalb der Kerne, einen Satz oder eine oder mehrere gemeinsame Cache-Einheiten 1206 und einen externen Speicher (nicht dargestellt), der an den Satz aus integrierten Speichersteuereinheiten 1214 gekoppelt ist. Der Satz aus gemeinsamen Cache-Einheiten 1206 kann einen oder mehrere Mid-Level-Caches wie Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Level eines Cache, einen Last-Level-Cache (LLC) und/oder Kombinationen daraus umfassen. Während eine ringbasierte Verbindungseinheit 1212 in einer Ausführungsform die integrierte Grafiklogik 1208, den Satz aus gemeinsamen Cache-Einheiten 1206 und die Systemagenteinheit 1210/die integrierten Speichersteuereinheit(en) 1214 verbindet, können alternative Ausführungsformen jegliche Anzahl von bekannten Verfahren zum Verbinden solcher Einheiten verwenden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cache-Einheiten 1206 und Kernen 1202A–N aufrechterhalten.
  • In manchen Ausführungsformen sind einer oder mehrere der Kerne 1202A–N zu einem Multithreading in der Lage. Der Systemagent 1210 umfasst jene Komponenten, die Kerne 1202A–N koordinieren und betreiben. Die Systemagenteinheit 1210 kann z. B. eine Leistungssteuereinheit (PCU) und eine Anzeigeeinheit umfassen. Die PCU kann eine Logik sein oder diese und Komponenten umfassen, die zum Regulieren des Leistungszustands der Kerne 1202A–N und der integrierten Grafiklogik 1208 benötigt werden. Die Anzeigeeinheit dient zum Antreiben einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 1202A–N können in Bezug auf den Architekturbefehlssatz homogen oder heterogen sein; d. h. zwei oder mehrere der Kerne 1202A–N können dazu in der Lage sein, denselben Befehlssatz auszuführen, während andere dazu in der Lage sein können nur einen Teilsatz dieses Befehlssatzes oder einen anderen Befehlssatz auszuführen.
  • Beispielhafte Computerarchitekturen
  • 1316 sind Blockschaltbilder von beispielhaften Computerarchitekturen. Andere Systemkonstruktionen und Konfigurationen, die auf dem Gebiet für Laptops, Desktops, tragbare PCs, persönliche digitale Assistenten, Ingenieursarbeitsplätzen, Server, Netzwerkvorrichtungen, Netzwerkknoten, Schalter, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrosteuereinheiten, Mobiltelefone, tragbare Medienabspielgeräte, Handheld-Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind ebenfalls geeignet. Im Allgemeinen ist eine große Vielzahl von Systemen oder elektronischen Vorrichtungen, die dazu in der Lage sind, einen Prozessor und/oder eine andere Ausführungslogik, wie hierin offenbart, auszuführen, geeignet.
  • Unter Bezugnahme auf 13 ist ein Blockschaltbild eines Systems 1300 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung dargestellt. Das System 1300 kann einen oder mehrere Prozessoren 1310, 1315 umfassen, die an einen Steuerknoten 1320 gekoppelt sind. In einer Ausführungsform umfasst der Steuerknoten 1320 einen Grafikspeichersteuerknoten (GMCH) 1390 und einen Eingangs-/Ausgangsknoten (IOH) 1350 (der sich auf getrennten Chips befinden kann); der GMCH 1390 umfasst Speicher- und Grafiksteuereinheiten, an die Speicher 1340 und ein Coprozessor 1345 gekoppelt sind; der IOH 1350 koppelt Eingangs-/Ausgangs- (I/O) Vorrichtungen 1360 an den GMCH 1390. Alternativ dazu ist eine oder sind beide der Speicher- und Grafiksteuereinheiten innerhalb des Prozessors integriert (wie hierin beschrieben), der Speicher 1340 und der Coprozessor 1345 sind direkt an den Prozessor 1310 gekoppelt, und der Steuerknoten 1320 befindet sich in einem einzigen Chip mit dem IOH 1350.
  • Die Möglichkeit von zusätzlichen Prozessoren 1315 ist in 13 mit unterbrochenen Linien dargestellt. Jeder Prozessor 1310, 1315 kann einen oder mehreren der Prozessorkerne, die hierin beschrieben sind umfassen und kann irgendeine Version des Prozessors 1200 sein.
  • Der Speicher 1340 kann z. B. ein Dynamic Random Access Memory (DRAM), ein Phase Change Memory (PCM) oder eine Kombination aus den beiden sein. In zumindest einer Ausführungsform kommuniziert der Steuerknoten 1320 über einen Multi-Drop-Bus, wie einem Vorderseitenbus (FSB), einer Punkt-zu-Punkt-Schnittstelle wie QuickPath Interconnect (QPI) oder einer ähnlichen Verbindung 1395 mit dem/den Prozessor(en) 1310, 1315.
  • In einer Ausführungsform ist der Coprozessor 1345 ein Spezialprozessor wie z. B. ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder ein Kommunikationsprozessor, eine Kompressionsengine, ein Grafikprozessor, GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann Steuerknoten 1320 einen integrierten Grafikbeschleuniger umfassen.
  • Es kann eine Vielzahl von Unterschieden in Bezug auf ein Metrikspektrum von Vorteilen, einschließlich architektonischer, mikroarchitektonischer, thermaler, Spannungsverbrauchs-Eigenschaften und dergleichen zwischen den physikalischen Ressourcen 1310, 1315 geben.
  • In einer Ausführungsform führt der Prozessor 1310 Befehle aus, die Datenverarbeitungsvorgänge von allgemeiner Art steuern. Coprozessorbefehle können in den Befehlen eingebettet sein. Der Prozessor 1310 erkennt diese Coprozessorbefehle als Befehle eines Typs an, die von dem angebrachten Coprozessor 1345 ausgeführt werden sollten. Dementsprechend gibt der Prozessor 1310 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle darstellen) auf einem Coprozessorbus oder einer anderen Verbindung an Coprozessor 1345 aus. Coprozessor(en) 1345 akzeptieren die empfangenen Coprozessorbefehle und führen diese aus.
  • Unter Bezugnahme auf 14 ist ein Blockschaltbild eines ersten, spezielleren beispielhaften Systems 1400 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung dargestellt. Wie in 14 gezeigt, ist das Multiprozessorsystem 1400 ein Punkt-zu-Punkt-Verbindungssystem und umfasst einen ersten Prozessor 1470 und einen zweiten Prozessor 1480, die über eine Punkt-zu-Punkt-Verbindung 1450 gekoppelt sind. Jeder der Prozessoren 1470 und 1480 kann irgendeine Version des Prozessors 1200 sein. In einer Ausführungsform der Erfindung sind Prozessor 1470 bzw. 1480 Prozessoren 1310 bzw. 1315, während Coprozessor 1438 Coprozessor 1345 ist. In einer weiteren Ausführungsform ist Prozessor 1470 bzw. 1480 Prozessor 1310 bzw. Coprozessor 1345.
  • Prozessor 1470 und 1480 sind mit integrierten Speichersteuer-(IMC) Einheiten 1472 bzw. 1482 dargestellt. Prozessor 1470 umfasst als Teil seiner Bussteuereinheiten auch Punkt-zu-Punkt-(P-P) Schnittstellen 1476 bzw. 1478; ähnlich dazu umfasst der zweite Prozessor 1480 P-P-Schnittstellen 1486 und 1488. Prozessor 1470, 1480 können Informationen über Punkt-zu-Punkt-(P-P) Schnittstellen 1450 unter Verwendung von P-P-Schnittstellenschaltungen 1478, 1488 austauschen. Wie in 14 dargestellt, kuppeln IMC 1472 und 1482 die Prozessoren an die jeweiligen Speicher, nämlich einen Speicher 1432 und einen Speicher 1434, die Teile des Hauptspeichers sein können, der lokal an die jeweiligen Prozessoren angebracht ist.
  • Prozessoren 1470, 1480 können Informationen über einzelne P-P-Schnittstellen 1452, 1454 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 1476, 1494, 1486, 1498 mit einem Chipsatz 1490 austauschen. Chipsatz 1490 kann gegebenenfalls Informationen über eine Hochleistungsschnittstelle 1439 mit dem Coprozessor 1438 austauschen. In einer Ausführungsform ist der Coprozessor 1438 ein Spezialprozessor wie z. B. ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsengine, ein Grafikprozessor, GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein gemeinsamer Cache (nicht dargestellt) kann in einen der Prozessoren oder außerhalb von beiden Prozessoren, jedoch verbunden mit den Prozessoren über eine P-P-Verbindung, aufgenommen werden, sodass lokale Cache-Informationen eines oder beider Prozessoren in dem gemeinsamen Cache gespeichert werden können, falls ein Prozessor in einen geringeren Leistungszustand versetzt wird.
  • Chipsatz 1490 kann über eine Schnittstelle 1496 an einen ersten Bus 1416 gekoppelt werden. In einer Ausführungsform kann erster Bus 1416 ein peripherer Komponentenverbindungs-(PCI) Bus oder ein Bus wie ein PCI-Express-Bus oder ein anderer I/O-Bus der dritten Generation sein, obwohl der Schutzumfang der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in 14 dargestellt können verschiedene I/O-Vorrichtungen 1414 an den ersten Bus 1416 gekoppelt werden, zusammen mit einer Bus-Brücke 1418, die den ersten Bus 1416 an einen zweiten Bus 1420 koppelt. In einer Ausführungsform werden ein oder mehrere zusätzliche Prozessor(en) 1415, wie Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie z. B. Grafikbeschleuniger oder digitale Signalverarbeitungs-(DSP) Einheiten), feldprogrammierbare Gatteranordnungen oder jeder andere Prozessor an den ersten Bus 1416 gekoppelt. In einer Ausführungsform kann der zweite Bus 1420 ein Low Pin Count (LPC) Bus sein. Verschiedene Vorrichtungen können in einer Ausführungsform an einen zweiten Bus 1420 gekoppelt werden, einschließlich z. B. einer Tastatur und/oder einer Maus 1422, Kommunikationsvorrichtungen 1427 und eine Speichereinheit 1428 wie ein Diskettenlaufwerk oder eine andere Massenspeichervorrichtung, die Befehle/Code und Daten 1430 umfassen kann. Ferner kann ein Audio-I/O 1424 an den zweiten Bus 1420 gekoppelt werden. Es gilt zu beachten, dass auch andere Architekturen möglich sind. Beispielsweise kann ein System anstelle der Punkt-zu-Punkt-Architektur aus 14 einen Multi-Drop-Bus oder eine andere solche Architektur ausführen.
  • Unter Bezugnahme auf 15 ist ein Blockschaltbild eines zweiten, spezielleren beispielhaften Systems 1500 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung dargestellt. Ähnliche Elemente in 14 tragen ähnliche Bezugsziffern, und bestimmte Aspekte aus 14 wurden in 15 weggelassen, um ein Verschleiern von anderen Aspekten aus 15 zu verhindern.
  • 15 zeigt, dass die Prozessoren 1470, 1480 einen integrierten Speicher und eine I/O-Steuerlogik („CL”) 1472 bzw. 1482 umfassen können. Somit umfasst die CL 1472, 1482 integrierte Speichersteuereinheiten und umfasst eine I/O-Steuerlogik. 15 zeigt, dass nicht nur die Speicher 1432, 1434 an die CL 1472, 1482 gekoppelt sind, sondern dass auch I/O-Vorrichtungen 1514 auch an die Steuerlogik 1472, 1482 gekoppelt sind. Ältere I/O-Vorrichtungen 1515 sind an den Chipsatz 1490 gekoppelt.
  • Unter Bezugnahme auf 16 ist ein Blockschaltbild einer SoC 1600 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung dargestellt. Ähnliche Elemente tragen in 12 ähnliche Bezugsziffern. Zudem sind Kästen mit gestrichelten Linien optionale Merkmale von fortschrittlicheren SoCs. In 16 ist/sind (eine) Verbindungseinheiten) 1602 an Folgende gekoppelt: einen Anwendungsprozessor 1610, der einen Satz aus einem oder mehreren Kernen 202A-N und gemeinsamen Cache-Einheit(en) 1206 umfasst; eine Systemagenteneinheit 1210; (eine) Bussteuereinheit(en) 1216; (eine) integrierte Speichersteuereinheit(en) 1214; einen Satz oder an einen oder mehrere Coprozessoren 1620, die eine integrierte Speichersteuerlogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor umfassen können; eine statische Random Access Memory (RAM) Einheit 1630; eine direkte Speicherzugriffs-(DMA) Einheit 1632; und eine Anzeigeeinheit 1640 zum Koppeln an eine oder mehrere externe Anzeigen. In einer Ausführungsform umfasst/umfassen der/die Coprozessor(en) 1620 einen Spezialprozessor, wie z. B. einen Netzwerk- oder Kommunikationsprozessor, eine Kompressionsengine, GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder dergleichen.
  • Ausführungsformen der hierin offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination aus solchen Ausführungsansätzen ausgeführt werden. Ausführungsformen der Erfindung können als Computerprogramme oder als Programmcode ausgeführt werden, der auf programmierbaren Systemen ausgeführt wird, die zumindest einen Prozessor, ein Speichersystem (einschließlich flüchtiger und nichtflüchtiger Speicher- und/oder Speicherelemente) oder zumindest eine Eingabevorrichtung und zumindest eine Ausgabevorrichtung umfassen.
  • Programmcode, wie Code 1430, der in 14 dargestellt ist, kann auf Eingabebefehle angewandt werden, um die hierin beschriebenen Funktionen auszuführen und um Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können auf bekannte Art und Weise auf eine oder mehrere Ausgabevorrichtungen angewandt werden. Zum Zweck dieser Anmeldung umfasst ein Prozesssystem jedes System, das einen Prozessor aufweist, z. B.; einen Digitalsignalprozessor (DSP), eine Mikrosteuereinheit, eine anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren Prozess- oder objektorientierten Programmiersprache ausgeführt sein, um mit einem Prozesssystem zu kommunizieren. Der Programmcode kann, falls gewünscht, auch in Montage- oder Maschinensprache ausgeführt werden. Tatsächlich sind die hierin beschriebenen Mechanismen in ihrem Umfang nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine Compilersprache oder eine interpretierte Sprache sein.
  • Ein oder mehrere Aspekte von zumindest einer Ausführungsform können durch jeweilige Befehle, die auf einem maschinenlesbaren Medium gespeichert sind, die innerhalb des Prozessors mehrere Logiken darstellen, ausgeführt werden, was dazu führt, dass wenn sie von einer Maschine gelesen werden, die Maschine eine Logik fabriziert, um die hierin beschriebenen Verfahren durchzuführen. Solche Darstellungen, bekannt als „IP-Kerne”, können auf einem konkreten, maschinenlesbaren Medium gespeichert werden und an verschiedene Kunden oder Herstellungseinrichtungen weitergeleitet werden, um diese in die Maschinenfabrikate zu laden, die die eigentliche Logik oder den Prozessor ausmachen.
  • Solche maschinenlesbaren Speichermedien können, ohne Beschränkung, nichtvorübergehende, konkrete Anordnungen von Fabrikaten umfassen, die von einer Maschine oder einer Vorrichtung hergestellt wurden, einschließlich Speichermedien wie Festplatten, jeder anderen Art von Datenscheiben wie Disketten, optische Disketten, Compact Disk Read-Only Memories (CD-ROMs), Compact Disk Rewritables (CD-RWs) und magnetoptische Disketten, Halbleitervorrichtungen wie Read-Only Memories (ROMs), Random Access Memories (RAMs) wie dynamische Random Access Memories (DRAMs), statische Random Access Memories (SRAMs), löschbare programmierbare Read-Only Memories (EPROMs), Phasenänderungsspeicher (PCM), magnetische oder optische Karten oder jede andere Art von Medium, das zum Speichern von elektronischen Befehlen geeignet ist.
  • Dementsprechend umfassen Ausführungsformen der Erfindung ebenfalls nichtvorübergehende, konkrete maschinenlesbare Medien, die Befehle oder Konstruktionsdaten enthalten, wie Hardware Description Language (HDL), die hierin beschriebene Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemeigenschaften definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich binärer Übersetzung, Code-Morphing etc.)
  • In manchen Fällen kann ein Befehlskonvertierer verwendet werden, um einen Befehl von einem Quellenbefehlssatz in einen Zielbefehlssatz zu konvertieren. Beispielsweise kann der Befehlskonvertierer einen Befehl in einen oder mehrere andere Befehle übersetzen (z. B. unter Verwendung einer statischen binären Übersetzung, einer dynamischen binären Übersetzung, einschließlich einer dynamischen Kompilation), morphen, nachbilden oder anderweitig konvertieren, die von dem Kern zu verarbeiten sind. Der Befehlskonvertierer kann in Software, Hardware, Firmware oder einer Kombination daraus ausgeführt werden. Der Befehlskonvertierer kann sich auf einem Prozessor, nicht auf einem Prozessor, teilweise auf und teilweise außerhalb eines Prozessors befinden.
  • 17 ist ein Blockschaltbild, das die gegensätzliche Verwendung eines Softwarebefehlskonvertierers zum Konvertieren von binären Befehlen in einem Quellenbefehlssatz sowie zu binären Befehlen in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung zeigt. In der dargestellten Ausführungsform ist der Befehlskonvertierer ein Softwarebefehlskonvertierer, obwohl der Befehlskonvertierer ohne weiteres in Software, Firmware, Hardware oder verschiedenen Kombinationen daraus ausgeführt sein kann. 17 zeigt, dass ein Programm in einer höheren Programmiersprache 1702 unter Verwendung eines x86-Kompilierers 1704 kompiliert werden kann, um binären x86-Code 1706 zu erzeugen, der alternativ von einem Prozessor mit zumindest einem x86-Befehlssatzkern 1716 ausgeführt werden kann. Der Prozessor mit zumindest einem x86-Befehlssatzkern 1716 stellt jeden Prozessor dar, der im Wesentlichen dieselben Funktionen wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern durch kompatibles Ausführen oder anderweitiges Verarbeiten (1) eines wesentlichen Teils des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) von Objektcodeversionen von Anwendungen oder anderer Software, die darauf ausgerichtet ist, auf einem Intel-Prozessor mit zumindest einem x86-Befehlssatzkern zu laufen, um im Wesentlichen dasselbe Ergebnis wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern zu erzielen, durchführen kann. Der x86-Kompilierer 1704 stellt einen Kompilierer dar, der ausgelegt ist, einen binären x86-Code 1706 (z. B. einen Objektcode) zu erzeugen, der, mit oder ohne zusätzlicher Verbindungsverarbeitung, auf dem Prozessor mit zumindest einem x86-Befehlssatzkern 1716 ausgeführt werden kann. Ähnlich dazu zeigt 17 das Programm in der höheren Programmiersprache 1702, das unter Verwendung eines alternativen Befehlssatzkompilierers 1708 kompiliert werden kann, um einen alternativen binären Befehlssatzcode 1710 zu erzeugen, der von einem Prozessor mit zumindest einem x86-Befehlssatzkern 1714 ohne weiteres ausgeführt werden kann (z. B. einem Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies of Sunnyvale, KF ausführen und/oder die den ARM-Befehlssatz der ARM Holdings of Sunnyvale, KF ausführen). Der Befehlskonvertierer 1712 wird verwendet, um den binären x86-Code 1706 zu Code zu konvertieren, der ohne weiteres von dem Prozessor ohne einem x86-Befehlssatzkern 1714 ausgeführt werden kann. Dieser konvertierte Code ist wahrscheinlich nicht derselbe wie der alternative binäre Befehlssatzkern 1710, da ein Befehlskonvertierer, der dazu in der Lage ist, schwer herzustellen ist; jedoch sichert der konvertierte Code den allgemeinen Betrieb und besteht aus Befehlen aus dem alternativen Befehlssatz. Somit stellt der Befehlskonvertierer 1712 Software, Firmware, Hardware oder eine Kombination daraus dar, die es einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen x86-Befehlssatzprozessor oder einen Kern aufweist, ermöglicht, den binären x86-Code 1706 durch Nachbildung, Simulation oder jeden anderen Vorgang auszuführen.

Claims (20)

  1. Verfahren zum Ausführen eines vektorgepackten Konflikttests in einem Computerprozessor als Antwort auf einen in einem einzigen Vektor gepackten Konflikttestbefehl, der einen Quellenschreibmaskenregisteroperanden, einen Quellenvektor-Registeroperanden, einen Zielschreibmasken-Registeroperanden und einen Opcode umfasst, wobei das Verfahren Folgendes umfasst: Ausführen des in einen einzigen Vektor gepackten Konflikttestbefehls, um Daten aus dem Quellenschreibmaskenregisteroperanden logisch mit jedem Datenelement des Quellenvektor-Registeroperanden zu UNDieren, zu bestimmen, welche der logischen UNDierungs-Vorgänge einen Konflikt angeben, um ein Konfliktüberprüfungsergebnis zu erzeugen und das Konfliktüberprüfungsergebnis logisch mit den Daten aus dem Quellenmaskenoperanden zu UNDieren; und Speichern des Ergebnisses des logischen UNDierens des Konfliktüberprüfungsergebnisses mit den Daten aus dem Quellenmaskenoperanden in den Zielschreibmasken-Registeroperanden.
  2. Verfahren nach Anspruch 1, das ferner Folgendes umfasst: Nullextensionsdaten aus dem Quellenschreibmaskenregister, so dass die nullextendierten Daten dieselbe Größe aufweisen wie jedes Datenelement des Quellenvektor-Registeroperanden.
  3. Verfahren nach Anspruch 1, das ferner Folgendes umfasst: Übertragen der nullextendierten Daten des Quellenschreibmaskenregisters in ein temporäres Vektorregister, das dieselbe Anzahl an Datenelementen mit derselben Größe wie der Quellenvektor-Registeroperand aufweist.
  4. Verfahren nach Anspruch 1, worin der Quellenvektor-Registeroperand eine Größe von 128 Bit, 256 Bit oder 512 Bit aufweist.
  5. Verfahren nach Anspruch 1, worin das Zielschreibmaskenregister 64 Bit aufweist.
  6. Verfahren nach Anspruch 1, worin das Zielschreibmaskenregister 16 Bit aufweist.
  7. Verfahren nach Anspruch 1, worin Datenelemente des Quellenvektor-Registeroperanden 8 Bit, 16 Bit, 32 Bit, 64 Bit, 128 Bit oder 256 Bit groß sind.
  8. Verfahren zum Durchführen einer Datenübertragung in einem Computerprozessor als Antwort auf einen in einen einzigen Vektor gepackten Übertragungsbefehl, der einen Quellenschreibmaskenregisteroperanden, einen Zielvektor-Registeroperanden und einen Opcode umfasst, wobei das Verfahren die folgenden Schritte umfasst: Nullextendieren von Daten des Quellenschreibmaskenregisters so, dass die nullextendierten Daten dieselbe Größe aufweisen wie jedes Datenelement des Zielvektor-Registeroperanden; Speichern der nullextendierten Daten des Quellenschreibmaskenregisters in jede Datenelementposition des Zielvektorregisters.
  9. Verfahren nach Anspruch 8, worin der Zielvektor-Registeroperand eine Größe von 128 Bit, 256 Bit oder 512 Bit aufweist.
  10. Verfahren nach Anspruch 8, worin das Quellenschreibmaskenregister 64 Bit aufweist.
  11. Verfahren nach Anspruch 8, worin das Quellenschreibmaskenregister 16 Bit aufweist.
  12. Verfahren nach Anspruch 9, worin Datenelemente des Quellenvektor-Registeroperanden eine Größe von 8 Bit, 16, Bit, 32 Bit, 64 Bit, 128 Bit oder 256 Bit aufweisen.
  13. Verfahren nach Anspruch 1, worin der in einem Vektor gepackte Übertragungsbefehl ferner ein zweites Schreibmaskenquellenregister umfasst.
  14. Verfahren nach Anspruch 15, das ferner Folgendes umfasst: selektives Verhindern eines Speicherns der Daten des Quellenschreibmaskenoperanden in zumindest eine Datenelementposition des Zielvektorregisters basierend auf den Bit-Werten des zweiten Schreibmaskenquellenregisters.
  15. Vorrichtung, die Folgendes umfasst: einen Hardware-Entschlüssler, um einen in einen einzigen Vektor gepackten Übertragungsbefehl zu entschlüsseln, der einen Quellenschreibmaskenoperanden, einen Zielvektor-Registeroperanden und einen Opcode umfasst; Ausführungslogik für nullextendierte Daten des Quellenschreibmaskenregisters, so dass die nullextendierten Daten dieselbe Größe aufweisen wie jedes Datenelement des Zielvektor-Registeroperanden und Speichern der nullextendierten Daten des Quellenschreibmaskenregisters in jede Datenelementposition des Zielvektorregisters.
  16. Verfahren nach Anspruch 8, worin der Zielvektorregisteroperand eine Größe von 128 Bit, 256 Bit oder 512 Bit aufweist.
  17. Verfahren nach Anspruch 8, worin das Quellenschreibmaskenregister 64 Bit aufweist.
  18. Verfahren nach Anspruch 8, worin das Quellenschreibmaskenregister 16 Bit aufweist.
  19. Verfahren nach Anspruch 1, worin der in einen Vektor gepackte Übertragungsbefehl ferner ein zweites Schreibmaskenquellenregister umfasst.
  20. Verfahren nach Anspruch 15, worin die Ausführungslogik ferner für Folgendes besteht: selektives Verhindern des Speicherns der Daten des Quellenschreibmaskenoperanden in zumindest eine Datenelementposition des Zielvektorregisters basierend auf den Bit-Werten des zweiten Schreibaskenquellenregisters.
DE112013003741.6T 2012-09-28 2013-06-14 Systeme, Vorrichtungen und Verfahren zum Durchführen einer Konfliktdetektion unf einer Übertragung von Inhalten eines Registers an Datenelementpositionen eines anderen Registers Withdrawn DE112013003741T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/631,666 US9665368B2 (en) 2012-09-28 2012-09-28 Systems, apparatuses, and methods for performing conflict detection and broadcasting contents of a register to data element positions of another register
US13/631,666 2012-09-28
PCT/US2013/045996 WO2014051752A1 (en) 2012-09-28 2013-06-14 Systems, apparatuses, and methods for performing conflict detection and broadcasting contents of a register to data element positions of another register

Publications (1)

Publication Number Publication Date
DE112013003741T5 true DE112013003741T5 (de) 2015-09-10

Family

ID=50386389

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112013003741.6T Withdrawn DE112013003741T5 (de) 2012-09-28 2013-06-14 Systeme, Vorrichtungen und Verfahren zum Durchführen einer Konfliktdetektion unf einer Übertragung von Inhalten eines Registers an Datenelementpositionen eines anderen Registers

Country Status (7)

Country Link
US (2) US9665368B2 (de)
JP (2) JP6055549B2 (de)
KR (1) KR101851439B1 (de)
CN (1) CN104903867B (de)
DE (1) DE112013003741T5 (de)
GB (1) GB2520860B (de)
WO (1) WO2014051752A1 (de)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9477467B2 (en) * 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
WO2016047479A1 (ja) * 2014-09-26 2016-03-31 中国塗料株式会社 防錆塗料組成物およびその用途
JP6282751B2 (ja) * 2014-09-26 2018-02-21 中国塗料株式会社 防錆塗料組成物およびその用途
US20160179550A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Fast vector dynamic memory conflict detection
US9891913B2 (en) * 2014-12-23 2018-02-13 Intel Corporation Method and apparatus for performing conflict detection using vector comparison operations
WO2017107125A1 (en) 2015-12-24 2017-06-29 Intel Corporation Conflict mask generation
US20170192791A1 (en) * 2015-12-30 2017-07-06 Elmoustapha Ould-Ahmed-Vall Counter to Monitor Address Conflicts
CN116340022A (zh) * 2016-01-22 2023-06-27 索尼互动娱乐股份有限公司 用于向后兼容性的欺骗cpuid
CN105847077B (zh) * 2016-03-17 2019-03-08 华为技术有限公司 一种检测多路串行数据冲突的方法及装置、设备
US20220283947A1 (en) * 2020-03-18 2022-09-08 Nec Corporation Information processing device and information processing method
CN112579168B (zh) * 2020-12-25 2022-12-09 成都海光微电子技术有限公司 指令执行单元、处理器以及信号处理方法
CN116257350B (zh) * 2022-09-06 2023-12-08 进迭时空(杭州)科技有限公司 一种针对risc-v矢量寄存器的重命名分组装置

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2564264B2 (ja) * 1985-05-22 1996-12-18 株式会社日立製作所 ベクトル処理方法及びベクトルプロセッサ
US5615349A (en) * 1990-09-04 1997-03-25 Mitsubishi Denki Kabushiki Kaisha Data processing system capable of execution of plural instructions in parallel
JPH06274528A (ja) * 1993-03-18 1994-09-30 Fujitsu Ltd ベクトル演算処理装置
US5812147A (en) * 1996-09-20 1998-09-22 Silicon Graphics, Inc. Instruction methods for performing data formatting while moving data between memory and a vector register file
JP3733842B2 (ja) * 2000-07-12 2006-01-11 日本電気株式会社 ベクトルスキャタ命令制御回路及びベクトル型情報処理装置
US7739319B2 (en) * 2001-10-29 2010-06-15 Intel Corporation Method and apparatus for parallel table lookup using SIMD instructions
WO2004015563A1 (en) * 2002-08-09 2004-02-19 Intel Corporation Multimedia coprocessor control mechanism including alignment or broadcast instructions
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
US7196708B2 (en) 2004-03-31 2007-03-27 Sony Corporation Parallel vector processing
US7600104B2 (en) 2006-08-15 2009-10-06 Peter Neumann Method and system for parallel vector data processing of vector data having a number of data elements including a defined first bit-length
US8019977B2 (en) 2007-05-14 2011-09-13 Apple Inc. Generating predicate values during vector processing
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
US7895419B2 (en) * 2008-01-11 2011-02-22 International Business Machines Corporation Rotate then operate on selected bits facility and instructions therefore
US8131979B2 (en) * 2008-08-15 2012-03-06 Apple Inc. Check-hazard instructions for processing vectors
US8793472B2 (en) * 2008-08-15 2014-07-29 Apple Inc. Vector index instruction for generating a result vector with incremental values based on a start value and an increment value
US9952875B2 (en) * 2009-08-07 2018-04-24 Via Technologies, Inc. Microprocessor with ALU integrated into store unit
US8688957B2 (en) 2010-12-21 2014-04-01 Intel Corporation Mechanism for conflict detection using SIMD
US8972698B2 (en) * 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
WO2013095606A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for detecting identical elements within a vector register
CN104350461B (zh) * 2011-12-23 2017-10-27 英特尔公司 具有不同的读和写掩码的多元素指令
US9703558B2 (en) * 2011-12-23 2017-07-11 Intel Corporation Systems, apparatuses, and methods for setting an output mask in a destination writemask register from a source write mask register using an input writemask and immediate
CN104025067B (zh) * 2011-12-29 2017-12-26 英特尔公司 具有由向量冲突指令和置换指令共享的全连接互连的处理器
US9575753B2 (en) * 2012-03-15 2017-02-21 International Business Machines Corporation SIMD compare instruction using permute logic for distributed register files

Also Published As

Publication number Publication date
CN104903867A (zh) 2015-09-09
CN104903867B (zh) 2018-05-15
US20170329606A1 (en) 2017-11-16
KR20150091462A (ko) 2015-08-11
GB2520860A (en) 2015-06-03
JP2015530674A (ja) 2015-10-15
GB2520860B (en) 2020-09-16
WO2014051752A1 (en) 2014-04-03
JP6055549B2 (ja) 2016-12-27
US20140095843A1 (en) 2014-04-03
JP6466388B2 (ja) 2019-02-06
KR101851439B1 (ko) 2018-04-23
GB201501047D0 (en) 2015-03-11
JP2017062845A (ja) 2017-03-30
US9665368B2 (en) 2017-05-30

Similar Documents

Publication Publication Date Title
DE112013003741T5 (de) Systeme, Vorrichtungen und Verfahren zum Durchführen einer Konfliktdetektion unf einer Übertragung von Inhalten eines Registers an Datenelementpositionen eines anderen Registers
DE112012007063B4 (de) Zusammenfügen von benachbarten Sammel-/Streuoperationen
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE112013003743T5 (de) Beschleunigte spurübergreifende Vektorreduzierungsbefehle
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE112016005909T5 (de) Einrichtung und verfahren zum beschleunigen von graphenanalyse
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE112016004348T5 (de) Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle
DE112013003735B4 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102018130225A1 (de) Entfernte atomare Operationen in Multi-Sockel-Systemen
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102014003659A1 (de) Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102018005859A1 (de) Einrichtung und Verfahren zur Multiplikation und Akkumulation von komplexen und echten gepackten Datenelementen
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE112017003345T5 (de) Bit-prüfprozessoren, verfahren, systeme und anweisungen zum prüfen eines bits mit einem angegebenen prüfbitwert
DE102018129273A1 (de) Einrichtung und verfahren zum vektor-multiplizieren; und -akkumulieren von unsignierten doppelwörtern

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R409 Internal rectification of the legal status completed
R409 Internal rectification of the legal status completed
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0012020000

Ipc: G06F0009300000

R083 Amendment of/additions to inventor(s)
R083 Amendment of/additions to inventor(s)
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee