DE112013003743T5 - Beschleunigte spurübergreifende Vektorreduzierungsbefehle - Google Patents

Beschleunigte spurübergreifende Vektorreduzierungsbefehle Download PDF

Info

Publication number
DE112013003743T5
DE112013003743T5 DE112013003743.2T DE112013003743T DE112013003743T5 DE 112013003743 T5 DE112013003743 T5 DE 112013003743T5 DE 112013003743 T DE112013003743 T DE 112013003743T DE 112013003743 T5 DE112013003743 T5 DE 112013003743T5
Authority
DE
Germany
Prior art keywords
reduction
vector
data elements
track
instruction
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
DE112013003743.2T
Other languages
English (en)
Inventor
Jeffrey J. Cook
Paul Caprioli
Abhay S. Kanhere
Muawya M. Al-Otoom
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 DE112013003743T5 publication Critical patent/DE112013003743T5/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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator

Abstract

Ein Vektorreduzierungsbefehl wird durch einen Prozessor ausgeführt, um effiziente Reduzierungsoperationen auf einer Anordnung von Datenelementen bereitzustellen. Der Prozessor enthält Vektorregister. Jedes Vektorregister ist in eine Vielzahl von Spuren unterteilt, und jede Spur speichert die gleiche Anzahl von Datenelementen. Der Prozessor enthält auch eine Ausführungsschaltung, die den Vektorreduzierungsbefehl empfängt, um die Anordnung aus in einem Quelloperand gespeicherten Datenelementen unter Verwendung eines Reduzierungsoperators zu einem Ergebnis in einem Zieloperand zu reduzieren. Quelloperand und Zieloperand sind jeweils eines der Vektorregister. Als Reaktion auf den Vektorreduzierungsbefehl, wendet die Ausführungsschaltung den Reduzierungsoperator auf zwei der Datenelemente in jeder Spur an und verschiebt ein oder mehrere verbliebene Datenelemente, wenn mindestens eines der Datenelemente in jeder Spur verblieben ist.

Description

  • Technisches Gebiet
  • Die vorliegende Offenbarung betrifft das Gebiet der Verarbeitungslogik, Mikroprozessoren und zugehöriger Befehlssatzarchitektur, die, wenn sie durch den Prozessor oder eine andere Verarbeitungslogik ausgeführt wird, logische, mathematische oder andere funktionelle Operationen durchführt.
  • Stand der Technik
  • Ein Befehlssatz oder eine Befehlssatzarchitektur (instruction set architecture – ISA) ist der auf die Programmierung bezogene Teil der Rechnerarchitektur und kann native Datentypen, Befehle, Registerarchitektur, Addressierungmodi, Speicherarchitektur, Interrupt- und Ausnahmebehandlung und einen externen Eingang und Ausgang (input/output – I/O) enthalten. Der Begriff Befehl bezieht sich hierin allgemein auf Makrobefehle – d. h. Befehle, die dem Prozessor (oder Befehlswandler, der einen Befehl in eine oder mehrere durch den Prozessor zu verarbeitende Befehle (z. B. unter Verwendung statischer binärer Übersetzung, dynamischer binärer Übersetzung, einschließlich dynamischer Kompilation) übersetzt, umformt, emuliert oder auf andere Weise umwandelt) zur Ausführung bereitgestellt werden – im Gegensatz zu Mikrobefehlen oder Mikrooperationen (Mikroops) – d. h. das Ergebnis eines Decodierers des Prozessors, der Makrobefehle decodiert.
  • Die ISA unterscheidet sich von der Mikroarchitektur, die das interne Design des Prozessors ist, der den Befehlssatz implementiert. Prozessoren mit unterschiedlichen Mikroarchitekturen können sich einen gemeinsamen Befehlssatz teilen. Zum Beispiel implementieren Intel® CoreTM Prozessoren und Prozessoren von Advanced Micro Devices Inc., Sunnyvale CA, nahezu identische Versionen des x86-Befehlssatzes (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden), haben aber unterschiedliche interne Designs. Zum Beispiel kann dieselbe Registerarchitektur der ISA auf verschiedene Weisen in verschiedenen Mikroarchitekturen unter Verwendung bekannter Techniken implementiert werden, einschließlich speziell dafür vorgesehener physischer Register, eines oder mehrerer dynamisch zugewiesener physischer Register, unter Verwendung eines Registerumbenennungsmechanismus, usw.
  • Viele moderne ISAs unterstützen Single-Instruction-Multiple-Data(SIMD)-Operationen. Statt eines skalaren Befehls, der nur auf einem Datenelement oder Paar von Datenelementen arbeitet, kann ein Vektorbefehl (auch als gepackter Datenbefehl oder SIMD-Befehl bezeichnet) auf mehreren Datenelementen oder mehreren Paaren von Datenelementen gleichzeitig oder parallel arbeiten. Der Prozessor kann Parallelausführungshardware aufweisen, um als Reaktion auf den Vektorbefehl die mehreren Operationen gleichzeitig oder parallel durchzuführen.
  • Eine SIMD-Operation arbeitet auf mehreren Datenelementen, die innerhalb eines Registers oder Speicherortes gepackt sind, in einer Operation. Diese Datenelemente werden als gepackte Daten oder Vektordaten bezeichnet. Jedes der Vektorelemente kann ein separates einzelnes Datenstück darstellen (z. B. eine Farbe eines Pixels, usw.), mit dem separat oder unabhängig von den anderen gearbeitet werden kann.
  • In einigen Szenarios kann ein Quellcodestück eine bestimmte Reihenfolge zur Durchführung einer Reduzierungsoperation auf einer Anordnung von Datenelementen spezifizieren. Ein Beispiel für eine Reduzierungsoperation ist die Addition, die alle Datenelemente in der Anordnung addiert, um eine einzige Summe zu erzeugen, wie etwa die im folgenden seriellen Quellcode spezifizierte Operation:
    Figure DE112013003743T5_0002
  • Der obige Quellcode führt eine Reduzierungsoperation auf einer Anordnung durch, indem Anordnungselemente in aufsteigender Reihenfolge summiert werden. Bei Gleitkomma(floating-point)-Datenelementen kann eine Veränderung der Reihenfolge, in der die Datenelemente addiert werden, die Endsumme verändern – auch wenn die Änderung möglicherweise gering ist. Bei wissenschaftlichen Berechnungen, die hochgenaue Arithmetik erfordern, kann schon eine geringe Veränderung inakzeptabel sein. Deshalb besteht ein Bedarf an der Aufrechterhaltung der Reihenfolge, in der die Datenelemente abgearbeitet werden, um das genaue Rundungsverhalten, das durch den Quellcode spezifiziert ist, zu bewahren. Jedoch ist eine serielle Berechnung wie die obige zeitaufwendig. Wenn die Gleitkommaberechnungen neu geordnet werden könnten, könnte die Summierung durch das Akkumulieren von vier Teilsummen erreicht werden, die dann außerhalb der Schleife zusammenaddiert würden. In diesem Fall lädt der Schleifenkörper vier Werte einfacher Genauigkeit auf einmal und würde enthalten:
    movups (%[a], %[i], 4), %xmm0 // lade 16B
    addps %xmm0, %[sum]
  • Der oben genannte Assemblercode verwendet die Addition von gepackten Daten (auch Vektoraddition genannt) 'addps', die den Inhalt eines Vektorregisters (xmm0) zu einer Summe akkumuliert. Der Assemblercode ist, weil er Vektoroperation verwendet, effizienter als der serielle Quellcode; der Assemblercode bewahrt jedoch nicht die Reihenfolge der Reduzierungsoperation wie im seriellen Quellcode und kann ein vom Ergebnis des seriellen Quellcodes verschiedenes Ergebnis erzeugen.
  • Kurzbeschreibung der Figuren
  • Ausführungsformen werden in den Figuren der begleitenden Zeichnungen als Beispiele und nicht als Beschränkung dargestellt:
  • 1 ist ein Blockdiagramm einer Befehlsverarbeitungsvorrichtung einschließlich Vektorregister gemäß einer Ausführungsform.
  • 2 ist ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform.
  • 3A veranschaulicht ein Beispiel einer Vektorreduzierungsoperation für Werte einfacher Genauigkeit gemäß einer Ausführungsform.
  • 3B veranschaulicht ein Beispiel einer Vektorreduzierungsoperation für Werte doppelter Genauigkeit gemäß einer Ausführungsform.
  • 4A veranschaulicht ein Beispiel einer Umwandlung eines Codes ohne Vektorreduzierungsbefehl in einen übersetzten Code mit Vektorreduzierungsbefehlen gemäß einer Ausführungsform.
  • 4B veranschaulicht ein weiteres Beispiel einer Umwandlung eines Codes ohne Vektorreduzierungsbefehl in einen übersetzten Code mit Vektorreduzierungsbefehlen gemäß einer Ausführungsform.
  • 5A veranschaulicht Elemente eines Computersystems zur Durchführung von Vektorreduzierungsbefehlen gemäß einer Ausführungsform.
  • 5B ist ein Ablaufdiagramm, das Operationen, die als Reaktion auf einen Vektorreduzierungsbefehl gemäß einer Ausführungsform durchzuführen sind, veranschaulicht.
  • 6 ist ein Blockdiagramm, das die Verwendung eines Software-Befehlsumwandlers zur Umwandlung von binären Befehlen in einem Quellbefehlssatz in einen Zielbefehlssatz gemäß einer Ausführungsform veranschaulicht.
  • 7A ist ein Blockdiagramm einer In-order(In-der-Reihenfolge)- und Out-of-order(In-anderer-Reihenfolge)-Pipeline gemäß einer Ausführungsform.
  • 7B ist ein Blockdiagramm eines In-order- und Out-of-order-Kerns gemäß einer Ausführungsform.
  • 8A–B sind Blockdiagramme einer spezifischeren beispielhaften In-order-Kernarchitektur gemäß einer Ausführungsform.
  • 9 ist ein Blockdiagramm eines Prozessors gemäß einer Ausführungsform.
  • 10 ist ein Blockdiagramm eines Systems gemäß einer Ausführungsform.
  • 11 ist ein Blockdiagramm eines zweiten Systems gemäß einer Ausführungsform.
  • 12 ist ein Blockdiagramm eines dritten Systems gemäß einer Ausführungsform der Erfindung.
  • 13 ist ein Blockdiagramm eines Ein-Chip-Systems (system on a chip – SoC) gemäß einer Ausführungsform.
  • Beschreibung der Ausführungsformen
  • In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt. Es versteht sich jedoch, dass Ausführungsformen der Erfindung auch ohne diese spezifischen Details umgesetzt werden können. In anderen Fällen sind bekannte Schaltungen, Strukturen und Techniken nicht im Detail gezeigt, um das Verständnis dieser Beschreibung nicht zu erschweren.
  • Die hierin beschriebenen Ausführungsformen stellen Vektorreduzierungsbefehle zur Beschleunigung von Reduzierungsoperationen bereit. Die Reduzierungsoperationen können additive Reduzierungen, multiplikative Reduzierungen oder subtraktive Reduzierungen sein. Die Vektorreduzierungsbefehle können auf eine Anordnung von Datenelementen jeglicher Größe und jeglichen numerischen Datenformats angewendet werden, die durch einen Prozessor verarbeitet werden können, wie etwa 64-Bit-Gleitkommazahlen doppelter Genauigkeit, 32-Bit-Gleitkommazahlen einfacher Genauigkeit, 16-Bit-Gleitkommazahlen halber Genauigkeit oder andere numerische Datenformate. Eine vordefinierte Reihenfolge zur Durchführung einer Reduzierungsoperation vorausgesetzt, können die Vektorreduzierungsbefehle so angeordnet sein, dass der Prozessor die Reduzierungsoperation in der gegebenen vordefinierten Reihenfolge unter Verwendung von Vektoroperationen (auch als gepackte Datenoperationen bezeichnet) durchführt, um den Wirkungsgrad zu verbessern. In einigen Ausführungsformen können die Vektorreduzierungsbefehle durch einen Compiler erzeugt werden, der einen serialisierten Code einer Hochsprache in einen Vektorcode eines binären oder anderen Zwischenformats kompiliert. In einigen Ausführungsformen können die Vektorreduzierungsbefehle durch ein binäres Übersetzungs-/Umwandlungssystem erzeugt werden, das einen Vektorcode kürzerer Vektorbreite in einen anderen Vektorcode breiterer Vektorbreite übersetzt oder anderweitig umwandelt, oder von einem Vektorcode, der die neuen Reduzierungsbefehle nicht benutzt, in einen anderen Vektorcode, der die neuen Reduzierungsbefehle benutzt. In anderen Ausführungsformen können die Vektorreduzierungsbefehle durch einen Computerprogrammierer in ein Programm geschrieben werden.
  • In einer Ausführungsform enthalten die Vektorreduzierungsbefehle VADDREDUCEPS, VMULTREDUCEPS, VSUBREDUCEPS, sowie deren Varianten für unterschiedliche arithmetische Operationen und unterschiedliche numerische Datenformate (z. B. einfache Genauigkeit, doppelte Genauigkeit, halbe Genauigkeit, usw.). Das Präfix 'V' zeigt Vektoroperationen an; 'ADD', 'MULT' und 'SUB' zeigen Addition, Multiplikation bzw. Subtraktion an; das Suffix 'P' zeigt gepackte Operationen (d. h. Vektoroperationen) an und das Suffix 'S' zeigt Datenelemente einfacher Genauigkeit an. In anderen Ausführungsformen können unterschiedliche Schreibweisen für denselben oder ähnlichen Befehl verwendet werden. Um die Diskussion zu vereinfachen, kann die folgende Beschreibung den Begriff 'Vektorreduzierungsbefehl' verwenden, um einige oder alle dieser Reduzierungsbefehle und deren Varianten darzustellen, soweit nicht anderweitig spezifisch angegeben. In einer Ausführungsform veranlassen diese Vektorreduzierungsbefehle einen Prozessor zur Durchführung einer arithmetischen Operation (z. B. addieren, subtrahieren, multiplizieren, usw.) auf einer Anordnung von Datenelementen und zum Schieben (shuffle) der Datenelemente in der Anordnung. Die Vektorreduzierungsbefehle verwenden ein oder mehrere Vektorregister als Operanden, wobei das Vektorregister, das als Quelloperand dient, mit der Anordnung von Datenelementen geladen wird. Jeder Vektorreduzierungsbefehl kann auf mehreren Datenelementen arbeiten: mit einigen der Datenelemente wird mathematisch gearbeitet (z. B. addieren, subtrahieren, multiplizieren, usw.) und einige der Datenelemente werden geschoben (z. B. an eine andere Position in der Anordnung verschoben). Die Vektorreduzierungsbefehle können die Reduzierungsoperationen beschleunigen, während sie dieselbe Reihenfolge der Operationen bewahren, um dasselbe Ergebnis wie ein serieller Quellcode oder ein anderer Quellcode, der eine beliebige gegebene Reihenfolge von Operationen spezifiziert, zu erzeugen.
  • 1 ist ein Blockdiagramm einer Ausführungsform einer Befehlsverarbeitungsvorrichtung 115, die eine Ausführungseinheit 140 aufweist, die eine Schaltung enthält, die zum Ausführen von Befehlen, einschließlich der neuen Reduzierungsbefehle, betreibbar ist. In einigen Ausführungsformen kann die Befehlsverarbeitungsvorrichtung 115 ein Prozessor, ein Prozessorkern eines Mehrkernprozessors oder ein Verarbeitungselement in einem elektronischen System sein.
  • Ein Decodierer 130 empfängt eingehende Befehle in der Form übergeordneter Maschinenbefehle oder Makrobefehle und decodiert sie, um untergeordnete Mikrooperationen, Mikrocode-Einsprungspunkte, Mikrobefehle oder andere untergeordnete Befehle oder Steuersignale zu erzeugen, die den ursprünglichen übergeordneten Befehl wiedergeben und/oder von diesem abgeleitet sind. Die untergeordneten Befehle oder Steuersignale können die Operation des übergeordneten Befehls durch untergeordnete Operationen (z. B. auf Schaltungsebene oder Hardware-Ebene) implementieren. Der Decodierer 130 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert sein. Beispiele für geeignete Mechanismen enthalten, ohne darauf beschränkt zu sein, Mikrocode, Verweistabellen, Hardware-Implementierungen, programmierbare logische Anordnungen (PLAs), andere Mechanismen, die in der Technik zur Implementierung von Decodierern bekannt sind, usw.
  • Der Decodierer 130 kann eingehende Befehle für einen Cachespeicher 110, einen Speicher 120 oder andere Quellen empfangen. Die decodierten Befehle werden zur Ausführungseinheit 140 gesendet. Die Ausführungseinheit 140 kann vom Decodierer 130 eine oder mehrere Mikrooperationen, Mikrocode-Einsprungspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale empfangen, die die empfangenen Befehle wiedergeben oder von diesen abgeleitet sind. Die Ausführungseinheit 140 empfängt einen Dateneingang von und erzeugt einen Datenausgang zu einer Registerdatei 170, dem Cachespeicher 110 und/oder dem Speicher 120.
  • In einer Ausführungsform enthält die Registerdatei 170 architektonische Register, die auch als Register bezeichnet werden. Falls nicht anders angegeben oder klar offensichtlich, werden die Bezeichnungen architektonische Register, Registerdatei und Register hierin zur Bezeichnung von Registern verwendet, die für die Software und/oder den Programmierer sichtbar sind (z. B. software-sichtbar) und/oder für die Register, die durch Makrobefehle spezifiziert sind, um Operanden zu identifizieren. Diese Register stehen anderen nicht architektonischen Registern in einer bestimmten Mikroarchitektur gegenüber (z. B. temporären Registern, Neuordnungspuffern, Rückordnungsregistern, usw.).
  • Zur Vermeidung einer Verschleierung der Beschreibung ist eine relativ einfache Befehlsverarbeitungsvorrichtung 115 dargestellt und beschrieben. Es versteht sich, dass andere Ausführungsformen mehr als eine Ausführungseinheit haben können. Zum Beispiel kann die Vorrichtung 115 mehrere verschiedene Arten von Ausführungseinheiten enthalten, wie zum Beispiel arithmetische Einheiten, arithmetische logische Einheiten (ALUs), ganzzahlige Einheiten, Gleitkommaeinheiten, usw. Noch andere Ausführungsformen von Befehlsverarbeitungsvorrichtungen oder Prozessoren können mehrere Kerne, logische Prozessoren oder Ausführungsmaschinen aufweisen. Eine Reihe von Ausführungsformen der Befehlsverarbeitungsvorrichtung 115 wird später in Bezug auf die 713 angegeben.
  • Gemäß einer Ausführungsform enthält die Registerdatei 170 einen Satz Vektorregister 175, die verwendet werden können, um die Operanden der Vektorreduzierungsbefehle zu speichern. Jedes Vektorregister 175 kann 512 Bit, 256 Bit oder 128 Bit breit sein (d. h. 64 Bytes, 32 Bytes oder 16 Bytes breit), oder es kann eine andere Vektorbreite verwendet werden.
  • 2 veranschaulicht eine Ausführungsform einer zugrunde liegenden Registerarchitektur 200, die die hierin beschriebenen Befehle unterstützt. Die Registerarchitektur 200 basiert auf den Intel® CoreTM Prozessoren, die einen Befehlssatz, einschließlich x86-, MMXTM-, Streaming-SIMD-Extensions(SSE)-, SSE2-, SSE3-, SSE4.1- und SSE4.2-Befehle, sowie einen zusätzlichen Satz von SIMD-Erweiterungen (Extensions), als Advanced Vector Extensions (AVX) (AVX1, AVX2 und AVX3) bezeichnet, implementieren. Es versteht sich jedoch, dass eine andere Registerarchitektur, die andere Registerlängen andere Registertypen und/oder andere Anzahlen von Registern unterstützt, auch verwendet werden kann.
  • In der dargestellten Ausführungsform gibt es zweiunddreißig Vektorregister 210, die 512 Bit breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die niederwertigen 256 Bits der unteren sechzehn zmm-Register liegen auf den Registern ymm0–16. Die niederwertigen 128 Bits der unteren sechzehn zmm-Register (die niederwertigen 128 Bits der ymm-Register) liegen auf den Registern xmm0–15. In der dargestellten Ausführungsform gibt es acht Maskenregister 220 (k0 bis k7), die jeweils 64 Bits lang sind. In einer alternativen Ausführungsform sind die Maskenregister 220 16 Bits breit.
  • In der dargestellten Ausführungsform enthält die Registerarchitektur 200 ferner sechzehn 64-Bit-Allzweck(general purpose – GP)-Register 230. In einer Ausführungsform werden diese gemeinsam mit den bestehenden x86-Adressiermodi zum Adressieren von Speicheroperanden verwendet. Die Ausführungsform stellt auch RFLAGS-Register 260, RIP-Register 270 und MXCSR-Register 280 dar.
  • Die Ausführungsform zeigt auch eine skalare Gleitkomma(floating point – FP)-Stapel-Registerdatei (x87-Stapel) 240, auf der die MMX-gepackte ganzzahlige Flachregisterdatei 250 mit Alias ist. In der dargestellten Ausführungsform ist der x87-Stapel ein Acht-Elemente-Stapel, der zur Durchführung skalarer Gleitkommaoperationen auf 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung verwendet wird; während die MMX-Register zur Durchführung von Operationen auf 64-Bit gepackten ganzzahligen Daten verwendet werden, wie auch zum Halten von Operanden für einige Operationen, die zwischen den MMX- und xmm-Registern durchgeführt werden.
  • Alternative Ausführungsformen der Erfindung können breitere oder schmälere Register verwenden. Zusätzlich können alternative Ausführungsformen der Erfindung mehr, weniger oder andere Registerdateien und Register verwenden.
  • 3A und 3B sind Diagramme, die Beispiele der Reduzierungsoperationen darstellen, die von einem Prozessor (z. B. der Befehlsverarbeitungsvorrichtung 115) als Reaktion auf einen VADDREDUCEPS-Befehl (für einfache Genauigkeit) bzw. VADDREDUCEPD-Befehl (für doppelte Genauigkeit) durchgeführt werden. Eine Version mit halber Genauigkeit kann in ähnlicher Weise definiert werden. Obwohl die Beispiele Additionen für die Reduzierungsoperationen verwenden, kann in alternativen Ausführungsformen der Additionsoperator durch einen beliebigen arithmetischen Operator ersetzt werden, der eine Abfolge von Zahlen zu einer einzigen Zahl reduzieren kann, wobei die Reihenfolge, in der die Operationen durchgeführt werden, den Wert dieser einzigen Zahl verändern kann.
  • Jedes Vektorregister 310, 320, 330 und 340 in diesem Beispiel wird mit 64-Byte-Breite gezeigt, wie etwa das zmm-Register aus 2. Jedes Vektorregister wird in vier Spuren unterteilt, jede Spur (16 Byte) speichert dieselbe Anzahl von Datenelementen, wie etwa vier Gleitkommazahlen einfacher Genauigkeit. In alternativen Ausführungsformen können die Vektorregister 16 Bytes breit sein (z. B. die xmm-Register aus 2), 32 Bytes breit sein (z. B. die ymm-Register aus 2) oder eine andere Vektorbreite haben, und können in eine andere Anzahl von Spuren unterteilt sein.
  • Im Beispiel der 3A wird das Quellvektorregister 310 mit sechzehn Datenelementen A0–A15 einfacher Genauigkeit in vier Spuren geladen. Der VADDREDUCEPS-Befehl veranlasst einen Prozessor, in jeder Spur identisch zu arbeiten, um eine additive Reduzierungsoperation auf den Werten einfacher Genauigkeit durchzuführen. Die additive Reduzierungsoperation addiert die zwei am äußersten rechten Rand liegenden Werte (d. h. die zwei niedrigstwertigen Werte) in jeder Spur, und verschiebt die anderen Werte in derselben Spur um eine Position nach rechts, ohne die Spurgrenzen zu übertreten. Eine Null wird in die am äußersten linken Rand liegende (d. h. die höchstwertige) Position in jeder Spur eingefügt. Das Ergebnis der einmaligen Anwendung dieser Operation auf die Werte des Quellvektorregisters 310 wird in einem Zielvektorregister 320 in 3A gezeigt. In einer Ausführungsform kann das Zielvektorregister 320 dasselbe Register wie das Quellvektorregister 310 sein. In einer alternativen Ausführungsform können die Register 310 und 320 unterschiedliche Register sein.
  • Das Beispiel der 3B zeigt den VADDREDUCEPD-Befehl, wie er durch einen Prozessor auf einer Datenelementanordnung von Werten doppelter Genauigkeit im Quellvektorregister 330 ausgeführt wird. Das Quellvektorregister 330 weist dieselbe Breite wie das Quellvektorregister 310 auf und kann deshalb acht Werte doppelter Genauigkeit (statt der sechzehn Werte einfacher Genauigkeit in 3A) speichern. Das Ergebnis der einmaligen Anwendung des VADDREDUCEPD-Befehls wird im Zielvektorregister 340 gezeigt, das dasselbe Register wie das Quellvektorregister 330 oder ein anderes Register sein kann.
  • Formal führt der Befehl VADDREDUCEPS SRC, DST das Folgende aus:
    DST[31:0] = SRC[31:0] + SRC[63:32]
    DST[63:32] = SRC[95:64]
    DST[95:64] = SRC[127:96]
    DST[127:96] = 0

    DST[159:128] = SRC[159:128] + SRC[191:160]
    DST[191:160] = SRC[223:192]
    DST[223:192] = SRC[255:224]
    DST[255:224] = 0

    DST[287:256] = SRC[287:256] + SRC[319:288]
    DST[319:288] = SRC[351:320]
    DST[351:320] = SRC[383:352]
    DST[383:352] = 0

    DST[415:384] = SRC[415:384] + SRC[447:416]
    DST[447:416] = SRC[479:448]
    DST[479:448] = SRC[511:480]
    DST[511:480] = 0
  • Die Version doppelter Genauigkeit VADDREDUCEPD SRC, DST führt das Folgende aus:
    DST[63:0] = SRC[63:0] + SRC[127:64]
    DST[127:64] = 0
    DST[191:128] = SRC[191:128] + SRC[255:192]
    DST[255:192] = 0

    DST[319:256] = SRC[319:256] + SRC[383:320]
    DST[383:320] = 0
    DST[447:384] = SRC[447:384] + SRC[511:448]
    DST[511:448] = 0
  • Analoge Reduzierungsoperationen für Subtraktion, Multiplikation oder andere arithmetische Operationen können ebenfalls definiert werden. Ferner kann AVX3-Merging-Maskierung oder Zeroing-Maskierung beim Schreiben des endgültigen Zielregisters angewandt werden. In einer Ausführungsform können die k Maskenregister 220 (aus 2) zum Modifizieren des in das endgültige Zielregister geschriebenen Ergebnisses verwendet werden. Falls kein Maskenregister spezifiziert ist, wird das gesamte Zielregister geschrieben (wie im vorhergehenden Absatz beschrieben). In einer alternativen Ausführungsform, in der Merge-Maskierung angewandt wird, kann ein Maskenregister spezifiziert sein, das die ursprünglichen Inhalte von spezifizierten Positionen im Zielregister bewahrt. Mit Merge-Maskierung werden die im vorherigen Absatz berechneten Ergebnisse mit den vorhandenen Inhalten des Zielregisters zusammengeführt (merged), bevor der endgültige Wert in das Zielregister geschrieben wird. In einer alternativen Ausführungsform, in der Zero-Maskierung angewandt wird, wird eine Maske in einem Maskenregister bereitgestellt, das im Zielregister Positionen spezifiziert, die auf Null gesetzt (zeroed) sein sollten.
  • 4A zeigt ein Beispiel eines Assemblercodes zur Durchführung einer additiven Reduzierungsoperation auf einer Anordnung von Datenelementen einfacher Genauigkeit in einer ansteigenden Reihenfolge von Anordnungspositionen. Der Assemblercode zeigt die Szenarios (a) AVX3-Code ohne den Befehl VADDREDUCEPS, (b) SSE-Code und (c) AVX3-Code mit dem Befehl VADDREDUCEPS. Die Pfeile zwischen (a) und (c) und zwischen (b) und (c) zeigen an, dass die Assemblercodes bei (a) und (b) in den Code bei (c) übersetzt oder auf andere Weise umgewandelt werden können; z. B. durch ein Computersystem, das einen Compiler oder einen Codeübersetzer/-wandler ausführt, oder durch einen Programmierer. Es sei angemerkt, dass der AVX3-Code in (a) und (c) sechzehn Datenelemente einfacher Genauigkeit auf einmal laden kann, während der SSE-Code in (b) nur 4 Elemente auf einmal laden kann. Deshalb braucht der SSE-Code vier Schleifen, um dieselbe Anzahl von Elementen zu verarbeiten, im Gegensatz zu einer Schleife des AVX3-Codes. Aufgrund der seriellen Natur der Reduzierungsoperation muss der AVX3-Code in (a) und (c) erst vier Elemente aus dem 64-Byte-zmm-Register in jedes der 16-Byte-xmm0-xmm3-Register extrahieren. In dem Code ist 'ADDSS' ein skalarer Additionsbefehl, der verwendet wird, um die niedrigstwertigen Elemente im Vektorregister xmm zu der Summe zu addieren, und 'ADDPS' ist ein Additionsbefehl für gepackte Daten, der zur Durchführung einer parallelen Addition verwendet wird. Befehle wie 'MOVSHDUP' und 'MOVHLPS' sind verschiedene Shuffle-Befehle, die zum Schieben eines Elements an die niedrigswertige Position in xmm für eine nachfolgende skalare Addition verwendet werden. Die Gesamtzahl der Additionen ist dieselbe für jeden der Codes in (a), (b) und (c), da die Notwendigkeit der Durchführung von sechzehn seriellen Additionen, in Anbetracht des Wunsches, das Gleitkommaabrundungsverhalten des ursprünglichen Codes zu bewahren, nicht vermieden werden kann. Dennoch ist der AVX3-Code in (c) effizienter als die zwei anderen Versionen, weil der Befehl VADDREDUCEPS in (c) sowohl Additions- als auch Shuffle-Operationen enthält und die Notwendigkeit der Extraktionen innerhalb der Spuren in der Sechzehn-Elemente-Reduzierungsschleife, wie den MOVSHDUP-Befehl und die MOVHLPS-Befehle, welche sowohl in (a) als auch in (b) vorhanden sind, beseitigt.
  • 4B zeigt ein zusätzliches Beispiel eines Assemblercodes zur Durchführung einer additiven Reduzierungsoperation auf einer Anordnung von Datenelementen einfacher Genauigkeit, in dem der SSE-Code in (a) erzeugt wird, um die Reduzierung in jeder der vier Spuren unter Verwendung von vier Teilsummen durchzuführen, und die vier Teilsummen werden dann nach dem Schleifenkörper zu einem einzigen Wert summiert.
  • Der Assemblercode zeigt die Szenarios (a) SSE-Code und (b) AVX3-Code mit dem Befehl VADDREDUCEPS. Ein Compiler oder binäres Übersetzungs-/Wandlersystem kann verwendet werden, um die Berechnung in (a) zu beschleunigen, indem sie in einen AVX3-Code unter Nutzung breiterer Vektorregister (wobei jedes sechzehn Datenelemente einfacher Genauigkeit unterbringt) umgewandelt wird, während das genaue Gleitkomma-Rundungsverhalten des ursprünglichen SSE-Codes (der vier Datenelemente einfacher Genauigkeit in jedem Vektorregister aufweist) bewahrt wird. Der in (b) gezeigte AVX3-Code setzt die vier Teilsummen, die in der SSE-Version vorliegen (d. h. %[sum] in (a)) in das niedrigswertige Element jeder Spur des zmm-Registers (d. h. %[zsum]). Nach dem Körper der Schleife werden die vier Teilsummen-Elemente selbst zu einem einzigen Wert summiert. Im AVX3-Code in (b) enthält %[Indizes] die Konstante, die ein Permute-Muster für die Datenelemente bestimmt. Diese Permutation bewegt das niedrigstwertige Element aus jeder der vier Spuren in die vier angrenzenden Elemente der niedrigstwertigen Spur, und das höchstwertige Element aus jeder Spur in die vier angrenzenden Elemente der höchstwertigen Spur. D. h. %[Indizes] enthält die folgenden ganzen 32-Bit-Zahlen F,B,7,3,E,A,6,2,D,9,5,1,C,8,4,0, damit Datenelemente in der selben Reihenfolge wie der Code in (a) abgearbeitet werden können. Es sei angemerkt, dass der Schleifenkörper in (b) nur einen Extrabefehl (den Permute-Befehl VPERMPS) zusätzlich zu den notwendigen vier Additionen enthält.
  • 5A veranschaulicht Elemente eines Computersystems 500 gemäß einer Ausführungsform. Das Computersystem 500 enthält einen Hauptspeicher 550, um Software zu speichern, und enthält ebenso Hardware-Elemente zur Unterstützung der Software. Die Software kann Anwendungssoftware 560 (die die Code-Blöcke 561 enthält) und ein OS 530 enthalten. Andere System- und Benutzerebenen-Software wird nicht gezeigt. In einer Ausführungsform werden die Code-Blöcke 561 mit einem Compiler 520, der sich im Hauptspeicher 550 oder im Speicher eines anderen Systems befinden kann, kompiliert. Der Compiler 520 kann ein statischer Compiler oder ein Just-in-time-Compiler sein. In einigen Ausführungsformen können sich die Code-Blöcke 561 in irgendeiner anderen Software, die auf dem OS 530 läuft, befinden. In einer Ausführungsform können die Code-Blöcke 561 Teil des OS 530 oder einer anderen System-Software sein. In einer Ausführungsform enthalten die Code-Blöcke 561 die oben beschriebenen Vektorreduzierungsbefehle.
  • Das System 500 enthält ferner Hardware-Elemente, wie etwa einen oder mehrere Prozessoren 540. Ein oder mehrere der Prozessoren 540 können mehrere Prozessorkerne 580 enthalten. In einer Ausführungsform unterstützt jeder Prozessorkern 580 Multithreading, wie etwa das gleichzeitige Multithreading (simultaneous multi-threading – SMT) gemäß der Hyper-Threading Technologie. Jeder Prozessorkern 580 enthält eine Ausführungsschaltung 585, um die Vektorreduzierungsbefehle auszuführen. Jeder Prozessorkern 580 enthält auch Vektorregister zur Verwendung im Zusammenhang mit Vektorreduzierungsbefehlen. In einer Ausführungsform ist der Prozessor 540 die Befehlsverarbeitungsvorrichtung 115 der 1, und die Ausführungsschaltung 585 ist die Ausführungseinheit 140 aus 1.
  • 5B ist ein Blockablaufdiagramm eines Verfahrens 510 zur Ausführung eines Vektorreduzierungsbefehls gemäß einer Ausführungsform. Das Verfahren 510 beginnt mit einem Prozessor (genauer z. B. der Ausführungsschaltung 585 aus 5A), der einen Vektorreduzierungsbefehl empfängt, um eine Anordnung der in einem Quelloperanden gespeicherten Datenelemente unter Verwendung eines Reduzierungsoperators (Block 511) zu einem Ergebnis in einem Zieloperand zu reduzieren. Quelloperand und Zieloperand sind jeweils eines aus einem Satz von Vektorregistern, wobei jedes Vektorregister in mehrfache Spuren unterteilt ist, und jede Spur dieselbe Anzahl von Datenelementen speichert. Der Reduzierungsoperator kann addieren, subtrahieren, multiplizieren oder ein anderer arithmetischer Operator sein. Jedes Datenelement kann eine Gleitkommazahl doppelter Genauigkeit, eine Gleitkommazahl einfacher Genauigkeit, eine Gleitkommazahl halber Genauigkeit oder anderen numerischen Datenformats sein. Als Reaktion auf den Vektorreduzierungsbefehl wendet der Prozessor den Reduzierungsoperator auf zwei der Datenelemente in jeder Spur an (Block 512), und verschiebt ein oder mehrere verbliebene Datenelemente, wenn mindestens eines der Datenelemente in jeder Spur verblieben ist (Block 513). Der Prozessor kann auch eine Null in die höchstwertige Position in jeder Spur einfügen (Block 514). In einer Ausführungsform kann der Prozessor einen Reduzierungscode, der keinen der oben beschriebenen Vektorreduzierungsbefehle aufweist, in einen übersetzten Reduzierungscode umwandeln, der einen oder mehrere der Vektorreduzierungsbefehle aufweist, wobei der Reduzierungscode und der übersetzte Reduzierungscode dieselbe Abfolge von Reduzierungsoperationen, die auf die Anordnung von Datenelementen über die mehreren Spuren hinweg angewendet werden, spezifizieren und dasselbe Ergebnis erzeugen.
  • In verschiedenen Ausführungsformen kann das Verfahren der 5B durch einen Allzweckprozessor, einen Spezialzweckprozessor (z. B. ein Grafikprozessor oder ein Digitalsignalprozessor) oder einen anderen Typ von Digitallogikeinrichtung oder Befehlsverarbeitungsvorrichtung durchgeführt werden. In einigen Ausführungsformen kann das Verfahren der 5B durch die Ausführungsschaltung 585 aus 5A, die Befehlsverarbeitungsvorrichtung 115 aus 1 oder einen ähnlichen Prozessor, eine ähnliche Vorrichtung oder ein ähnliches System durchgeführt werden, wie bei den in den 713 gezeigten Ausführungsformen. Außerdem können die Ausführungsschaltung 585 aus 5A, die Befehlsverarbeitungsvorrichtung 115 aus 1, sowie der Prozessor, die Vorrichtung bzw. das System, gezeigt in den 713, Ausführungsformen von Operationen und Verfahren durchführen, die entweder gleich, ähnlich oder unterschiedlich zu denen der Verfahren aus 5B sind.
  • In einigen Ausführungsformen kann die Befehlsverarbeitungsvorrichtung 115 aus 1 in Verbindung mit einem Befehlswandler, der einen Befehl aus einem Quellbefehlssatz in einen Zielbefehlssatz umwandelt, arbeiten. Zum Beispiel kann der Befehlswandler einen Befehl übersetzen (z. B. unter Verwendung von statischer binärer Übersetzung, dynamischer binärer Übersetzung einschließlich dynamischer Kompilation), umformen, emulieren oder in anderer Weise in einen oder mehrere andere vom Kern zu bearbeitende Befehle umwandeln. Der Befehlswandler kann in der Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. Der Befehlswandler kann in dem Prozessor, außerhalb des Prozessors oder zum Teil in und zum Teil außerhalb des Prozessors sein.
  • 6 ist ein Blockdiagramm, das die Verwendung eines Software-Befehlsumwandlers gemäß Ausführungsformen der Erfindung gegenüberstellt. In der veranschaulichten Ausführungsform ist der Befehlswandler ein Software-Befehlswandler, obwohl der Befehlswandler alternativ als Software, Firmware, Hardware oder in verschiedenen Kombinationen daraus implementiert sein kann. 6 zeigt ein Programm in einer Hochsprache 602, das unter Verwendung eines x86-Compilers 604 zum Erzeugen eines x86-Binärcodes 606 kompiliert werden kann, der nativ von einem Prozessor mit mindestens einem x86-Befehlssatzkern 616 ausgeführt werden kann. Der Prozessor mit mindestens einem x86-Befehlssatzkern 616 stellt einen beliebigen Prozessor dar, der im Wesentlichen dieselben Funktionen wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern ausführen kann, indem er (1) einen wesentlichen Teil des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) Objektcodeversionen von Anwendungen oder einer anderen Software, die dazu bestimmt ist, auf einem Intel-Prozessor mit mindestens einem x86-Befehlssatzkern zu laufen, kompatibel ausführt oder andersartig verarbeitet, um im Wesentlichen dieselben Ergebnisse wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern zu erreichen. Der x86-Compiler 604 stellt einen Compiler dar, der zum Erzeugen eines x86-Binärcodes 606 (z. B. Objektcodes) betreibbar ist, der mit oder ohne zusätzliche Verknüpfungsverarbeitung auf dem Prozessor mit mindestens einem x86-Befehlssatzkern 616 ausgeführt werden kann. Gleichermaßen zeigt 6, dass das Programm in der Hochsprache 602 unter Verwendung eines alternativen Befehlssatz-Compilers 608 kompiliert werden kann, um einen alternativen Befehlssatz-Binärcode 610 zu erzeugen, der nativ von einem Prozessor ohne mindestens einem x86-Befehlssatzkern 614 ausgeführt werden kann (z. B. einem Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies, Sunnyvale, CA, und/oder den ARM-Befehlssatz von ARM Holdings, Sunnyvale, CA, ausführen). Der Befehlswandler 612 wird zum Umwandeln des x86-Binärcodes 606 in einen Code, der nativ von dem Prozessor ohne einen x86-Befehlssatzkern 614 ausgeführt werden kann, verwendet. Dieser umgewandelte Code ist wahrscheinlich nicht derselbe wie der alternative Befehlssatz-Binärcode 610, da ein Befehlswandler, der dazu in der Lage ist, schwierig herzustellen ist; der umgewandelte Code wird jedoch die allgemeine Operation bewerkstelligen und aus Befehlen aus dem alternativen Befehlssatz bestehen. Somit stellt der Befehlswandler 612 Software, Firmware, Hardware oder eine Kombination daraus dar, die es einem Prozessor oder einer anderen elektronischen Einrichtung, der bzw. die keinen x86-Befehlssatzprozessor oder Kern aufweist, durch Emulation, Simulation oder einen beliebigen anderen Prozess erlaubt, den x86-Binärcode 606 auszuführen.
  • Beispielhafte Kernarchitekturen
  • In-Order- und Out-of-Order-Kernblockdiagramm
  • 7A ist ein Blockdiagramm, das sowohl eine beispielhafte In-Order-Pipeline wie auch eine beispielhafte Registerumbenennungs-, Out-of-Order-Issue/Ausführungs-Pipeline gemäß Ausführungsformen der Erfindung zeigt. 7B ist ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines beispielhaften In-Order-Architektur-Kerns wie auch eines beispielhaften Registerumbenennungs-, Out-of-Order-Issue/Ausführungs-Architektur/Kerns zeigt, der in einem Prozessor gemäß Ausführungsformen der Erfindung enthalten sein soll. Die Kästchen in Volllinien in den 7A und 7B zeigen die In-Order-Pipeline und den In-Order-Kern, während die optionale Ergänzung der Kästchen in gestrichelten Linien die Registerumbenennungs-, Out-of-Order-Issue/Ausführungs-Pipeline und den Kern zeigt. Angesichts der Tatsache, dass der In-Order-Aspekt ein Teilsatz des Out-of-Order-Aspekts ist, wird der Out-of-Order-Aspekt beschrieben.
  • In 7A enthält eine Prozessor-Pipeline 700 eine Abrufphase 702, eine Längendecodierphase 704, eine Decodierphase 706, eine Zuordnungsphase 708, eine Umbenennungsphase 710, eine Scheduling-Phase 712 (auch bekannt als Dispatch- oder Issue-Phase), eine Registerlese-/Speicherlesephase 714, eine Ausführungsphase 716, eine Rückschreib-/Speicherschreibphase 718, eine Ausnahmebehandlungsphase 722 und eine Festschreibungsphase 724.
  • 7B zeigt einen Prozessorkern 790, der eine Frontend-Einheit 730 enthält, die an eine Ausführungsmaschineneinheit 750 gekoppelt ist, und beide sind an eine Speichereinheit 770 gekoppelt. Der Kern 790 kann ein RISC(Reduced Instruction Set Computing)-Kern oder ein CISC(Complex Instruction Set Computing)-Kern, ein VLIW(Very Long Instruction Word)-Kern oder ein hybrider oder alternativer Kerntyp sein. Als eine noch weitere Option kann der Kern 790 ein Spezialzweckkern sein, wie zum Beispiel ein Netz- oder Kommunikationskern, eine Komprimierungsmaschine, ein Coprozessorkern, ein GPGPU(General Purpose Computing Graphics Processing Unit)-Kern, ein Grafikkern oder dergleichen.
  • Die Frontend-Einheit 730 enthält eine Zweigvorhersageeinheit 732, die an eine Befehls-Cachespeichereinheit 734 gekoppelt ist, die an einen Befehlsübersetzungspuffer (Translation Lookaside Buffer – TLB) 736 gekoppelt ist, der an eine Befehlsabrufeinheit 738 gekoppelt ist, die an eine Decodiereinheit 740 gekoppelt ist. Die Decodiereinheit 740 (oder der Decodierer) kann Befehle decodieren und als Ausgang eine oder mehrere Mikrooperationen, Mikrocode-Einsprungspunkte, Mikrobefehle oder andere Befehle oder andere Steuersignale erzeugen, die aus den ursprünglichen Befehlen decodiert sind oder diese auf andere Weise wiedergeben oder von diesen abgeleitet sind. Die Decodiereinheit 740 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Beispiele für geeignete Mechanismen enthalten, ohne aber darauf beschränkt zu sein, Verweistabellen, Hardware-Implementierungen, programmierbare logische Anordnungen (PLAs), Mikrocode-Nur-Lese-Speicher (Read Only Memories – ROMs) usw. In einer Ausführungsform enthält der Kern 790 einen Mikrocode-ROM oder ein anderes Medium, das einen Mikrocode für gewisse Makrobefehle (z. B. in einer Decodiereinheit 740 oder auf andere Weise innerhalb der Frontend-Einheit 730) speichert. Die Decodiereinheit 740 ist an eine Umbenennungs-/Zuordnungseinheit 752 in der Ausführungsmaschineneinheit 750 gekoppelt.
  • Die Ausführungsmaschineneinheit 750 enthält die Umbenennungs-/Zuordnungseinheit 752, die an eine Rückordnungseinheit 754 gekoppelt ist, und einen Satz aus einer oder mehreren Scheduler-Einheit(en) 756. Die Scheduler-Einheit(en) 756 stellen eine beliebige Anzahl verschiedener Scheduler dar, einschließlich Reservierungsstationen, zentrales Befehlsfenster, usw. Die Scheduler-Einheit(en) 756 ist (sind) an die physische(n) Registerdatei(n)-Einheit(en) 758 gekoppelt. Jede der physischen Registerdatei(n)-Einheiten 758 stellt eine oder mehrere physische Registerdateien dar, wobei unterschiedliche physische Registerdateien einen oder mehrere unterschiedliche Datentypen speichern, wie etwa skalare ganze Zahl, skalares Gleitkomma, gepackte ganze Zahl, gepacktes Gleitkomma, ganze Vektorzahl, Vektorgleitkomma, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. In einer Ausführungsform umfasst die physische Registerdatei(en)-Einheit 758 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister und Allzweckregister bereitstellen. Die physische(n) Registerdatei(n)-Einheit(en) 758 wird (werden) von der Rückordnungseinheit 754 überlappt, um verschiedene Wege zu veranschaulichen, wie Registerumbenennungs- und Out-of-Order-Ausführung implementiert werden kann (z. B. unter Verwendung von Aufzeichnungspuffer(n) und Rückordnungsregisterdatei(en); unter Verwendung von Zukunftsdatei(en), History-Puffer(n) und Rückordnungsregisterdatei(n); unter Verwendung von Registerkarten und einem Pool von Registern; usw.). Die Rückordnungseinheit 754 und die physische(n) Registerdatei(en)-Einheit(en) 758 sind an den (die) Ausführungs-Cluster 760 gekoppelt. Der (die) Ausführungs-Cluster 760 enthält (enthalten) eine oder mehrere Ausführungseinheit(en) 762 und einen Satz aus einer oder mehreren Speicherzugriffseinheit(en) 764. Die Ausführungseinheiten 762 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) an verschiedenen Arten von Daten (z. B. skalares Gleitkomma, gepackte ganze Zahl, gepacktes Gleitkomma, ganze Vektorzahl, Vektorfließkomma) ausführen. Während einige Ausführungsformen eine Reihe von Ausführungseinheiten enthalten können, die für bestimmte Funktionen oder Sätze von Funktionen bestimmt sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten enthalten, die alle alle Funktionen ausführen. Die Scheduler-Einheit(en) 756, physische(n) Registerdatei(n)-Einheit(en) 758 und der (die) Ausführungs-Cluster 760 sind in einer möglichen Vielzahl dargestellt, da gewisse Ausführungsformen separate Pipelines für gewisse Arten von Daten/Operationen schaffen (z. B. eine skalare Ganzzahlen-Pipeline, eine skalare Gleitkomma/gepackte ganze Zahl/gepackte Gleitkomma/ganze Vektorzahl/Vektorgleitkomma-Pipeline und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre eigene Scheduler-Einheit, physische Registerdatei(en)-Einheit und/oder ihren eigenen Ausführungs-Cluster haben – und im Falle einer separaten Speicherzugriffs-Pipeline werden gewisse Ausführungsformen implementiert, in welchen nur der Ausführungs-Cluster dieser Pipeline die Speicherzugriffseinheit(en) 764 aufweist. Es versteht sich auch, dass, wenn separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-Order-Issue/Ausführung und die übrigen In-Order sein können.
  • Der Satz von Speicherzugriffseinheiten 764 ist an die Speichereinheit 770 gekoppelt, die eine Daten-TLB-Einheit 772 enthält, die an eine Daten-Cachespeichereinheit 774 gekoppelt ist, die an eine Stufe-2(L2)-Cachespeichereinheit 776 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 764 eine Ladeeinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit enthalten, die jeweils an die Daten-TLB-Einheit 772 in der Speichereinheit 770 gekoppelt sind. Die Befehls-Cachespeichereinheit 734 ist ferner an eine Stufe-2(L2)-Cachespeichereinheit 776 in der Speichereinheit 770 gekoppelt. Die L2-Cachespeichereinheit 776 ist an eine oder mehrere andere Stufen eines Cachespeichers und schließlich an einen Hauptspeicher gekoppelt.
  • Als Beispiel kann die beispielhafte Registerumbenennungs-, Out-of-Order Issue/Ausführungs-Kernarchitektur die Pipeline 700 wie folgt implementieren: 1) der Befehlsabruf 738 führt die Abruf- und Längendecodierphasen 702 und 704 aus; 2) die Decodiereinheit 740 führt die Decodierphase 706 aus; 3) die Umbenennungs-/Zuordnungseinheit 752 führt die Zuordnungsphase 708 und Umbenennungsphase 710 aus; 4) die Scheduler-Einheit(en) 756 führt (führen) die Scheduling-Phase 712 aus; 5) die physische(n) Registerdatei(en)-Einheit(en) 758 und die Speichereinheit 770 führen die Registerlese-/Speicherlesephase 714 aus; der Ausführungs-Cluster 760 führt die Ausführungsphase 716 aus; 6) die Speichereinheit 770 und die physische(n) Registerdatei(en)-Einheit(en) 758 führen die Rückschreib-/Speicherschreibphase 718 aus; 7) an der Ausnahmebehandlungsphase 722 können verschiedene Einheiten beteiligt sein; und 8) die Rückordnungseinheit 754 und die physische(n) Registerdatei(en)-Einheit(en) 758 führen die Festschreibungsphase 724 aus.
  • Der Kern 790 kann einen oder mehrere Befehlssätze (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies, Sunnyvale, CA; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) von ARM Holdings, Sunnyvale, CA) einschließlich des (der) hierin beschriebenen Befehls (Befehle) unterstützen. In einer Ausführungsform enthält der Kern 790 eine Logik zur Unterstützung einer gepackten Datenbefehlssatzerweiterung (z. B. SSE, AVX1, AVX2, usw.), wodurch die Operationen, die von vielen Multimedia-Anwendungen verwendet werden, mit gepackten Daten ausgeführt werden können.
  • Es versteht sich, dass der Kern Multithreading (Ausführung von zwei oder mehr parallelen Sätzen von Operationen oder Ausführungssträngen (Threads)) unterstützt und dies auf verschiedene Weisen, einschließlich Zeitintervall-Multithreading, gleichzeitiges Multithreading (worin ein einziger physischer Kern einen logischen Kern für jeden der Ausführungsstränge bereitstellt, bei welchen dieser physische Kern gleichzeitig ein Multithreading ausführt) oder einer Kombination daraus (z. B. ein Abrufen in Zeitintervallen und Decodieren und anschließendes gleichzeitiges Multithreading, wie in der Intel® Hyperthreading Technologie).
  • Zwar wird die Registerumbenennung im Zusammenhang mit der Out-of-Order-Ausführung beschrieben, aber es versteht sich, dass die Registerumbenennung in einer In-Order-Architektur verwendet werden kann. Zwar enthält die dargestellte Ausführungsform des Prozessors auch separate Befehls- und Daten-Cachespeichereinheiten 734/774 und eine gemeinsam genutzte L2-Cachespeichereinheit 776, aber alternative Ausführungsformen können auch einen einzigen internen Cachespeicher sowohl für Befehle wie auch für Daten aufweisen, wie zum Beispiel einen Stufe-1(L1) internen Cachespeicher oder mehrere Stufen eines internen Cachespeichers. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cachespeicher und einem externen Cachespeicher, der extern zum Kern und/oder zum Prozessor ist, enthalten. Alternativ kann der gesamte Cachespeicher extern zum Kern und/oder zum Prozessor sein.
  • Spezifische beispielhafte In-Order-Kernarchitektur
  • Die 8A–B zeigen ein Blockdiagramm einer spezifischeren beispielhaften In-Order-Kernarchitektur, wobei der Kern einer von mehreren logischen Blöcken (einschließlich anderer Kerne derselben Art und/oder verschiedener Arten) in einem Chip ist. Die logischen Blöcke kommunizieren durch ein Verbindungsnetz mit hoher Bandbreite (z. B. ein Ringnetz) mit einer gewissen festgelegten Funktionslogik, Speicher-I/O-Schnittstellen und anderer notwendiger I/O-Logik, abhängig von der Anwendung.
  • 8A ist ein Blockdiagramm eines einzelnen Prozessorkerns, zusammen mit seiner Verbindung zum Verbindungsnetz 802 auf dem Chip und mit seinem lokalen Teilsatz des Stufe-2(L2)-Cachespeichers 804 gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdecodierer 800 den x86-Befehlssatz mit einer gepackten Datenbefehlssatzerweiterung. Ein L1-Cachespeicher 806 erlaubt Zugriffe geringer Latenz auf einem Cachespeicher in die skalaren und Vektoreinheiten. Zwar verwenden in einer Ausführungsform (zur Vereinfachung des Designs) eine skalare Einheit 808 und eine Vektoreinheit 810 separate Registersätze (skalare Register 812 bzw. Vektorregister 814) und werden Daten, die zwischen diesen übertragen werden, in einen Speicher geschrieben und dann wieder aus einem Stufe-1(L1)-Cachespeicher 806 ausgelesen, aber alternative Ausführungsformen der Erfindung können eine andere Herangehensweise verwenden (z. B. einen einzigen Registersatz verwenden oder einen Kommunikationspfad enthalten, der eine Datenübertragung zwischen den zwei Registerdateien erlaubt, ohne dass diese geschrieben und ausgelesen werden).
  • Der lokale Teilsatz des L2-Cachespeichers 804 ist Teil eines globalen L2-Cachespeichers, der in separate lokale Teilsätze, ein Teilsatz pro Prozessorkern, unterteilt ist. Jeder Prozessorkern weist einen direkten Zugriffspfad auf seinen eigenen lokalen Teilsatz des L2-Cachespeichers 804 auf. Daten, die von einem Prozessorkern gelesen werden, werden in seinem L2-Cachespeicherteilsatz 804 gespeichert und auf diese kann rasch zugegriffen werden, parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cachespeicherteilsätze zugreifen. Daten, die von einem Prozessorkern geschrieben werden, werden in seinem eigenen L2-Cachespeicherteilsatz 804 gespeichert und, falls notwendig, aus anderen Teilsätzen gelöscht. Das Ringnetz stellt die Kohärenz für gemeinsam genutzte Daten sicher. Das Ringnetz ist bidirektional, so dass die Agenten wie Prozessorkerne, L2-Cachespeicher und andere logische Blöcke innerhalb des Chips miteinander kommunizieren können.
  • 8B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 8A gemäß Ausführungsformen der Erfindung. 8B enthält einen L1-Daten-Cachespeicherteil 806A des L1-Cachespeichers 804 wie auch mehrere Einzelheiten bezüglich der Vektoreinheit 810 und der Vektorregister 814. Insbesondere ist die Vektoreinheit 810 eine 16-breite Vektorverarbeitungseinheit (VPU) (siehe die 16-breite ALU 828), die einen oder mehrere aus ganzzahligen Befehlen, Gleitkomma-Befehlen einfacher Genauigkeit und Gleitkomma-Befehlen doppelter Genauigkeit ausführt. Die VPU unterstützt ein Swizzling der Registereingänge mit einer Swizzling-Einheit 820, eine numerische Umwandlung mit numerischen Umwandlungseinheiten 822A–B und eine Replikation mit einer Replikationseinheit 824 auf dem Speichereingang. Schreibmaskenregister 826 erlauben eine Vorhersage resultierender Vektoreinträge.
  • Prozessor mit integrierter Speichersteuerung und Grafik
  • 9 ist ein Blockdiagramm eines Prozessors 900, der gemäß Ausführungsformen der Erfindung mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und eine integrierte Grafik aufweisen kann. Die Kästchen in Volllinie in 9 zeigen einen Prozessor 900 mit einem einzigen Kern 902A, einem Systemagenten 910, einem Satz von einer oder mehreren Bus-Steuereinheiten 916, während die optionale Ergänzung der Kästchen in gestrichelten Linien einen alternativen Prozessor 900 mit mehreren Kernen 902A–N, einem Satz aus einer oder mehreren integrierten Speichersteuereinheit(en) 914 in der Systemagenteneinheit 910 und einer Spezialzwecklogik 908 zeigt.
  • Somit können verschiedene Implementierungen des Prozessors 900 Folgendes enthalten: 1) eine CPU, wobei die Spezialzwecklogik 908 eine integrierte Grafik und/oder wissenschaftliche (Durchsatz)Logik ist (die einen oder mehrere Kerne enthalten kann) und wobei die Kerne 902A–N ein oder mehrere Allzweckkerne sind (z. B. Allzweck-In-Order-Kerne, Allzweck-Out-of-Order-Kerne, eine Kombination aus beiden), 2) einen Coprozessor, wobei die Kerne 902A–N eine große Anzahl von Spezialzweckkernen sind, die vorwiegend für Grafik und/oder Wissenschaft (Durchsatz) bestimmt sind; und 3) einen Coprozessor, wobei die Kerne 902A–N eine große Anzahl von Spezialzweck-Out-of-Order-Kernen sind. Somit kann der Prozessor 900 ein Allzweckprozessor, ein Coprozessor oder Spezialprozessor sein, wie zum Beispiel ein Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, eine Allzweckgrafikverarbeitungseinheit (GPGPU), ein Coprozessor mit hohem Durchsatz und vielen integrierten Kernen (MIC) (einschließlich 30 oder mehr Kernen), ein eingebetteter Prozessor oder dergleichen. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 900 kann ein Teil eines Substrats sein und/oder kann auf einem oder mehreren Substraten unter Verwendung einer beliebigen aus einer Anzahl von Prozesstechnologien, wie zum Beispiel BiCMOS, CMOS oder NMOS, implementiert sein.
  • Die Speicherhierarchie enthält eine oder mehrere Cachespeicherstufen innerhalb der Kerne, einen Satz von oder eine oder mehrere gemeinsam genutzte Cachespeichereinheiten 906 und einen externen Speicher (nicht dargestellt), der an den Satz von integrierten Speichersteuerungseinheiten 914 gekoppelt ist. Der Satz gemeinsamer Cache-Einheiten 906 kann einen oder mehrere Mittelstufen-Cachespeicher, wie Stufe-2(L2)-, Stufe-3(L3)-, Stufe-4(L4)- oder andere Cachespeicherstufen, einen Cachespeicher der letzten Stufe (Last Level Cache – LLC) und/oder eine Kombination daraus enthalten. Zwar verbindet in einer Ausführungsform eine auf einem Ring basierende Verbindungseinheit 912 die integrierte Grafiklogik 908, den Satz gemeinsam genutzter Cachespeichereinheiten 906 und die Systemagenteneinheit 910/integrierte Speichersteuerungseinheit(en) 914, alternative Ausführungsformen können jedoch eine beliebige Anzahl von bekannten Techniken zur Verbindung solcher Einheiten verwenden. In einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cachespeichereinheiten 906 und Kernen 902A–N aufrecht erhalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 902A–N zu einem Multithreading in der Lage. Der Systemagent 910 enthält jene Komponenten, die die Kerne 902A–N koordinieren und betreiben. Die Systemagenteneinheit 910 kann zum Beispiel eine Leistungssteuereinheit (Power Control Unit – PCU) und eine Anzeigeeinheit enthalten. Die PCU kann eine Logik und Komponenten sein oder enthalten, die zur Regulierung des Leistungszustandes der Kerne 902A–N und der integrierten Grafiklogik 908 erforderlich sind. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern angeschlossener Anzeigen.
  • Die Kerne 902A–N können im Hinblick auf den Architekturbefehlssatz homogen oder heterogen sein: das heißt, zwei oder mehr der Kerne 902A–N können zur Ausführung desselben Befehlssatzes in der Lage sein, während andere nur zur Ausführung eines Teilsatzes dieses Befehlssatzes oder eines anderen Befehlssatzes in der Lage sein können.
  • Beispielhafte Rechnerarchitektur
  • Die 1013 sind Blockdiagramme beispielhafter Rechnerarchitekturen. Andere Systemdesigns und -konfigurationen, die in der Technik für Laptops, Desktops, tragbare PCs, persönliche digitale Assistenten, Technikarbeitsplätze (Engineering Workstations), Server, Netzeinrichtungen, Netzknoten, Schalter, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs), Grafikeinrichtungen, Videospieleinrichtungen, Set-Top-Boxes, Mikrosteuerungen, Mobiltelefone, tragbare Media-Player, tragbare Einrichtungen und verschiedene andere elektronische Einrichtungen bekannt sind, sind ebenso geeignet. Im Allgemeinen ist eine große Vielfalt von Systemen oder elektronische Einrichtungen, die in der Lage sind, einen Prozessor und/oder eine andere Ausführungslogik wie hierin offenbart zu integrieren, allgemein geeignet.
  • Unter Bezugnahme auf 10 wird ein Blockdiagramm eines Systems 1000 gemäß einer Ausführungsform dargestellt. Das System 1000 kann einen oder mehrere Prozessoren 1010, 1015 enthalten, die an einen Steuerungsknoten 1020 gekoppelt sind. In einer Ausführungsform enthält der Steuerungsknoten 1020 einen Grafikspeichersteuerungsknoten (Graphics Memory Controller Hub – GMCH) 1090 und einen Eingangs-/Ausgangsknoten (Input/Output Hub – IOH) 1050 (die auf separaten Chips vorhanden sein können), der GMCH 1090 enthält Speicher- und Grafiksteuerungen, an die ein Speicher 1040 und ein Coprozessor 1045 gekoppelt sind; der IOH 1050 koppelt die Eingangs/Ausgangs(I/O)-Einrichtungen 1060 an den GMCH 1090. Alternativ sind eine oder beide der Speicher- und Grafiksteuerungen in dem Prozessor (wie hierin beschrieben) integriert, der Speicher 1040 und der Coprozessor 1045 sind direkt an den Prozessor 1010 gekoppelt und der Steuerungsknoten 1020 in einem einzelnen Chip mit dem IOH 1050.
  • Die optionale Eigenschaft von zusätzlichen Prozessoren 1015 ist in 10 mit unterbrochenen Linien gekennzeichnet. Jeder Prozessor 1010, 1015 kann einen oder mehrere der hierein beschriebenen Prozessorkerne enthalten und kann eine gewisse Version des Prozessors 900 sein.
  • Der Speicher 1040 kann zum Beispiel ein dynamischer Direktzugriffsspeicher (Dynamic Random Access Memory – DRAM), ein Phasenänderungsspeicher (Phase Change Memory – PCM) oder eine Kombination aus beiden sein. Für mindestens eine Ausführungsform kommuniziert der Steuerungsknoten 1020 mit dem (den) Prozessor(en) 1010, 1015 über einen Multidrop-Bus, wie einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie QuickPath Interconnect (QPI) oder eine ähnliche Verbindung 1095.
  • In einer Ausführungsform ist der Coprozessor 1045 ein Spezialzweckprozessor, wie zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, GPGPU, eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Steuerungsknoten 1020 einen integrierten Grafikbeschleuniger enthalten.
  • Es kann eine Vielzahl von Unterschieden zwischen den physischen Ressourcen 1010, 1015 im Hinblick auf ein sachliches Metrikspektrum, einschließlich architektonischer, mikroarchitektonischer, thermischer, Leistungsverbrauchs-Eigenschaften und dergleichen geben.
  • In einer Ausführungsform führt der Prozessor 1010 Befehle aus, die Datenverarbeitungsoperationen einer allgemeinen Art steuern. In den Befehlen können Coprozessorbefehle eingebettet sein. Der Prozessor 1010 erkennt diese Coprozessorbefehle als eine Art, die von dem angeschlossenen Coprozessor 1045 ausgeführt werden sollte. Dementsprechend gibt der Prozessor 1010 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle darstellen) auf einem Coprozessorbus oder einer anderen Verbindung an den Coprozessor 1045 aus. Der (die) Coprozessor(en) 1045 nimmt (nehmen) die empfangenen Coprozessorbefehle an und führt (führen) diese aus.
  • Unter Bezugnahme auf 11 ist ein Blockdiagramm eines ersten spezifischeren beispielhaften Systems 1100 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Wie in 11 gezeigt, ist ein Multiprozessorsystem 1100 ein Punkt-zu-Punkt-Verbindungssystem und enthält einen ersten Prozessor 1170 und einen zweiten Prozessor 1180, die über eine Punkt-zu-Punkt-Verbindung 1150 gekoppelt sind. Jeder der Prozessoren 1170 und 1180 kann eine gewisse Version des Prozessors 900 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 1170 und 1180 die Prozessoren 1010 bzw. 1015, während der Coprozessor 1138 der Coprozessor 1045 ist. In einer anderen Ausführungsform sind die Prozessoren 1170 und 1180 der Prozessor 1010 bzw. Coprozessor 1045.
  • Die Prozessoren 1170 und 1180 enthalten in der Darstellung integrierte Speichersteuerungs(Integrated Memory Controller – IMC)-Einheiten 1172 bzw. 1182. Der Prozessor 1170 enthält als Teil seiner Bussteuerungseinheiten auch Punkt-zu-Punkt(P-P)-Schnittstellen 1176 und 1178; ebenso enthält der zweite Prozessor 1180 P-P-Schnittstellen 1186 und 1188. Die Prozessoren 1170, 1180 können Informationen über eine Punkt-zu-Punkt(P-P)-Schnittstelle 1150 unter Verwendung von P-P-Schnittstellenschaltungen 1178, 1188 austauschen. Wie in 11 dargestellt, koppeln die IMCs 1172 und 1182 die Prozessoren an entsprechende Speicher, nämlich einen Speicher 1132 und einen Speicher 1134, die Teile eines Hauptspeichers sein können, der lokal an den entsprechenden Prozessoren angeschlossen ist.
  • Die Prozessoren 1170, 1180 können Informationen mit einem Chipsatz 1190 über einzelne P-P-Schnittstellen 1152, 1154 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 1176, 1194, 1186, 1198 austauschen. Der Chipsatz 1190 kann optional Informationen mit dem Coprozessor 1138 über eine Hochleistungsschnittstelle 1139 austauschen. In einer Ausführungsform ist der Coprozessor 1138 ein Spezialzweckprozessor, wie zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, ein Grafikprozessor, GPGPU, eingebetteter Prozessor oder dergleichen.
  • Ein gemeinsam genutzter Cachespeicher (nicht dargestellt) kann entweder in einem der beiden Prozessoren oder außerhalb beider Prozessoren, aber mit den Prozessoren über eine P-P-Verbindung verbunden, enthalten sein, so dass die lokalen Cachespeicher-Informationen des einen oder beider Prozessoren in dem gemeinsam genutzten Cachespeicher gespeichert werden können, wenn ein Prozessor in einen Modus mit niedriger Leistung versetzt wird.
  • Der Chipsatz 1190 kann über eine Schnittstelle 1196 an einen ersten Bus 1116 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1116 ein PCI(Peripheral Component Interconnect)-Bus oder ein Bus wie etwa ein PCI-Expressbus oder ein anderer I/O-Verbindungsbus der dritten Generation sein, der Umfang der vorliegenden Erfindung ist jedoch nicht darauf beschränkt.
  • Wie in 11 dargestellt, können verschiedene I/O-Vorrichtungen 1114 an den ersten Bus 1116 gekoppelt sein, zusammen mit einer Bus-Brücke 1118, die den ersten Bus 1116 an einen zweiten Bus 1120 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessor(en) 1115, wie etwa Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie z. B. Grafikbeschleuniger oder Digitalsignalverarbeitungs(DSP)-Einheiten) feldprogrammierbare Gate-Arrays oder ein beliebiger anderer Prozessor, an den ersten Bus 1116 gekoppelt. In einer Ausführungsform kann der zweite Bus 1120 ein LPC(Low Pin Count)-Bus sein. In einer Ausführungsform können verschiedene Einrichtungen an einen zweiten Bus 1120 gekoppelt sein, einschließlich zum Beispiel einer Tastatur und/oder Maus 1122, Kommunikationseinrichtungen 1127 und einer Speichereinheit 1128, wie ein Laufwerk oder andere Massenspeichereinrichtung, die Befehle/Code und Daten 1130 enthalten können. Ferner kann ein Audio-I/O 1124 an den zweiten Bus 1120 gekoppelt sein. Es ist zu beachten, dass andere Architekturen möglich sind. Zum Beispiel kann anstelle der Punkt-zu-Punkt-Architektur der 11 ein System einen Multidrop-Bus oder eine andere solche Architektur implementieren.
  • Unter Bezugnahme auf 12 ist ein Blockdiagramm eines zweiten spezifischeren beispielhaften Systems 1200 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in 11 und 12 tragen gleiche Bezugszeichen und gewisse Aspekte aus 11 wurden in 12 ausgelassen, um eine Verschleierung anderer Aspekte aus 12 zu vermeiden.
  • 12 zeigt, dass die Prozessoren 1170, 1180 einen integrierten Speicher und eine I/O-Steuerlogik (Control Logic – ”CL”) 1172 bzw. 1182 enthalten können. Somit enthalten die CL 1172, 1182 integrierte Speichersteuerungseinheiten und enthalten eine I/O-Steuerlogik. 12 zeigt, dass nicht nur die Speicher 1132, 1134 an die CL 1172, 1182 gekoppelt sind, sondern dass auch die I/O-Einrichtungen 1214 an die Steuerlogik 1172, 1182 gekoppelt sind. Alt-I/O-Einrichtungen 1215 sind an den Chipsatz 1190 gekoppelt.
  • Unter Bezugnahme auf 13 wird ein Blockdiagramm eines SoC 1300 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in 9 tragen die gleichen Bezugszeichen. Ebenso sind Kästchen in gestrichelten Linien optionale Merkmale auf höher entwickelten SoCs. In 13 ist (sind) eine Verbindungseinheit(en) 1302 gekoppelt an: einen Anwendungsprozessor 1310, der einen Satz aus einem oder mehreren Kernen 202A–N und (eine) gemeinsam genutzte Cachespeichereinheit(en) 906 enthält; eine Systemagenteneinheit 910; (eine) Bussteuerungseinheit(en) 916; (eine) integrierte Speichersteuerungseinheit(en) 914; einen Satz oder ein oder mehrere Coprozessoren 1320, die eine integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor enthalten können; eine statische Direktzugriffsspeicher(SRAM)-Einheit 1330; eine Direktzugriffspeicher(DMA)-Einheit 1332; und eine Anzeigeeinheit 1340 zum Koppeln an eine oder mehrere externe Anzeigen. In einer Ausführungsform enthält (enthalten) der (die) Coprozessor(en) 1320 einen Spezialzweckprozessor, wie zum Beispiel einen Netz- oder Kommunikationsprozessor, eine Komprimierungsmaschine, eine 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 solcher Implementierungsstrategien implementiert werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert werden, die auf programmierbaren Systemen laufen, die mindestens einen Prozessor, ein Speichersystem (einschließlich flüchtiger und nicht flüchtiger Speicher und/oder Speicherelemente), mindestens eine Eingabevorrichtung und mindestens eine Ausgabevorrichtung umfassen.
  • Ein Programmcode wie der in 11 dargestellte Code 1130 kann auf Eingabebefehle angewendet werden, um die hierin beschriebenen Funktionen auszuführen und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können auf ein oder mehrere Ausgabegeräte in bekannter Weise angewendet werden. Zum Zweck dieser Anmeldung enthält ein Verarbeitungssystem ein beliebiges System, das einen Prozessor aufweist, wie zum Beispiel einen Digitalsignalprozessor (DSP), eine Mikrosteuerung, eine anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer prozedur- oder objektorientierten Programmierhochsprache zur Kommunikation mit einem Verarbeitungssystem implementiert werden. Der Programmcode kann, falls gewünscht, auch in einer Assembler- oder Maschinensprache implementiert 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 kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch repräsentative Befehle implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logiken im Prozessor darstellt, die, wenn sie von einer Maschine gelesen werden, die Maschine veranlassen, eine Logik zu erstellen, um die hierin beschriebenen Techniken auszuführen. Solche Darstellungen, bekannt als ”IP Kerne”, können auf einem greifbaren, maschinenlesbaren Medium gespeichert und verschiedenen Kunden oder Herstellungseinrichtungen zugeführt werden, um in die Herstellungsmaschinen geladen zu werden, die die Logik oder den Prozessor tatsächlich erstellen.
  • Solche maschinenlesbaren Speichermedien können, ohne Einschränkung, nicht vergängliche, greifbare Anordnungen von Artikeln enthalten, die von einer Maschine oder Einrichtung hergestellt oder gebildet werden, einschließlich Speichermedien wie Harddisks oder jeder anderen Art von Disk, einschließlich Disketten, optischer Disks, Kompakt-Disk-Nur-Lese-Speicher (CD-ROMs), wiederbeschreibbarer Kompakt-Disks (CD-RWs) und magneto-optischer Disks, Halbleitereinrichtungen, wie Nur-Lese-Speicher (ROMs), Direktzugriffsspeicher (RAMs), wie dynamischer Direktzugriffsspeicher (DRAMs), statischer Direktzugriffsspeicher (SRAMs), löschbarer, programmierbarer Nur-Lese-Speicher (EPROMs), Flash-Speicher, elektrisch löschbarer programmierbarer Nur-Lese-Speicher (EEPROMs), Phasenänderungsspeicher (PCM), magnetischer oder optischer Karten oder jeder anderen Art von Medien, die zum Speichern elektronischer Befehle geeignet sind.
  • Dementsprechend enthalten Ausführungsformen der Erfindung auch nicht vergängliche, greifbare, maschinenlesbare Medien, die Befehle enthalten oder Designdaten enthalten, wie HDL (Hardware Description Language), die hierin beschriebene Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale definieren. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Zwar wurden gewisse beispielhafte Ausführungsformen beschrieben und in den beiliegenden Zeichnungen gezeigt, es versteht sich jedoch, dass solche Ausführungsformen nur beispielhaft und nicht einschränkend für die breite Erfindung sind, und dass diese Erfindung nicht beschränkt sein soll auf die spezifischen gezeigten und beschriebenen Konstruktionen und Anordnungen, da dem Durchschnittsfachmann beim Studium dieser Offenbarung verschiedene andere Modifizierungen in den Sinn kommen können. In einem Technologiebereich wie diesem, der schnell wächst und in dem Weiterentwicklungen nicht leicht vorherzusehen sind, können die offenbarten Ausführungsformen leicht in Anordnung und Detail modifizierbar sein, was durch die Ermöglichung technologischer Fortschritte erleichtert wird, ohne dass von den Grundsätzen der vorliegenden Offenbarung oder dem Umfang der beiliegenden Ansprüche abgewichen wird.

Claims (20)

  1. Vorrichtung, umfassend: eine Vielzahl von Vektorregistern, wobei jedes Vektorregister in eine Vielzahl von Spuren unterteilt ist und jede Spur eine gleiche Anzahl von Datenelementen speichert; und eine Ausführungsschaltung, die an die Vielzahl von Vektorregistern gekoppelt ist, um einen Vektorreduzierungsbefehl zu empfangen, um eine Anordnung der in einem Quelloperand gespeicherten Datenelemente unter Verwendung eines Reduzierungsoperators zu einem Ergebnis in einem Zieloperand zu reduzieren, wobei Quelloperand und Zieloperand jeweils eines der Vektorregister sind, als Reaktion auf den Vektorreduzierungsbefehl, den Reduzierungsoperator auf zwei der Datenelemente in jeder Spur anzuwenden, und ein oder mehrere verbliebene Datenelemente zu verschieben, wenn mindestens eines der Datenelemente in jeder Spur verblieben ist.
  2. Vorrichtung nach Anspruch 1, wobei die Ausführungsschaltung als Reaktion auf den Vektorreduzierungsbefehl eine Null an eine höchstwertige Position in jeder Spur einfügen soll.
  3. Vorrichtung nach Anspruch 1, wobei der Reduzierungsoperator addieren, subtrahieren oder multiplizieren enthält.
  4. Vorrichtung nach Anspruch 1, wobei die Ausführungsschaltung den Reduzierungsoperator auf zwei der niedrigstwertigen Datenelemente in jeder Spur anwenden soll.
  5. Vorrichtung nach Anspruch 1, wobei die Ausführungsschaltung als Reaktion auf den Vektorreduzierungsbefehl jedes der verbliebenen Datenelemente eine Position nach rechts innerhalb jeder Spur verschieben soll.
  6. Vorrichtung nach Anspruch 1, wobei die Ausführungsschaltung einen Reduzierungscode ohne den Vektorreduzierungsbefehl in einen übersetzten Reduzierungscode mit dem Vektorreduzierungsbefehl umwandeln soll, wobei der Reduzierungscode und der übersetzte Reduzierungscode eine gleiche Abfolge von Reduzierungsoperationen, die auf die Anordnung von Datenelementen über die Vielzahl von Spuren hinweg angewendet werden, spezifizieren und ein gleiches Ergebnis erzeugen.
  7. Vorrichtung nach Anspruch 1, wobei jedes der Datenelemente eine Gleitkommazahl doppelter Genauigkeit, eine Gleitkommazahl einfacher Genauigkeit oder eine Gleitkommazahl halber Genauigkeit ist.
  8. Verfahren, umfassend: Empfangen eines Vektorreduzierungsbefehls, um eine Anordnung der in einem Quelloperand gespeicherten Datenelemente unter Verwendung eines Reduzierungsoperators zu einem Ergebnis in einem Zieloperand zu reduzieren, wobei Quelloperand und Zieloperand jeweils eines aus der Vielzahl der Vektorregister ist, wobei jedes Vektorregister in eine Vielzahl von Spuren unterteilt ist und jede Spur eine gleiche Anzahl von Datenelementen speichert; als Reaktion auf den Vektorreduzierungsbefehl, Anwenden des Reduzierungsoperators auf zwei der Datenelemente in jeder Spur; und Verschieben von einem oder mehreren verbliebenen Datenelementen, wenn mindestens eines der Datenelemente in jeder Spur verblieben ist.
  9. Verfahren nach Anspruch 8, ferner umfassend: als Reaktion auf den Vektorreduzierungsbefehl, Einfügen einer Null an eine höchstwertige Position in jeder Spur.
  10. Verfahren nach Anspruch 8, wobei der Reduzierungsoperator addieren, subtrahieren oder multiplizieren enthält.
  11. Verfahren nach Anspruch 8, wobei das Anwenden des Reduzierungsoperators ferner das Anwenden des Reduzierungsoperators auf zwei der niedrigswertigen Datenelemente in jeder Spur umfasst.
  12. Verfahren nach Anspruch 8 wobei das Verschieben von Positionen ferner das Verschieben jedes der verbliebenen Datenelemente eine Position nach rechts innerhalb jeder Spur umfasst.
  13. Verfahren nach Anspruch 8, ferner umfassend: Umwandeln eines Reduzierungscodes ohne den Vektorreduzierungsbefehl in einen übersetzten Reduzierungscode mit dem Vektorreduzierungsbefehl, wobei der Reduzierungscode und der übersetzte Reduzierungscode eine gleiche Abfolge von Reduzierungsoperationen, die auf die Anordnung von Datenelementen über die Vielzahl von Spuren hinweg angewendet werden, spezifizieren und ein gleiches Ergebnis erzeugen.
  14. Verfahren nach Anspruch 8, wobei jedes der Datenelemente eine Gleitkommazahl doppelter Genauigkeit, eine Gleitkommazahl einfacher Genauigkeit oder eine Gleitkommazahl halber Genauigkeit ist.
  15. System, umfassend: einen Speicher; und einen an den Speicher gekoppelten Prozessor, wobei der Prozessor umfasst: eine Vielzahl von Vektorregistern, wobei jedes Vektorregister in eine Vielzahl von Spuren unterteilt ist und jede Spur eine gleiche Anzahl von Datenelementen speichert; und eine Ausführungsschaltung, die an die Vielzahl von Vektorregistern gekoppelt ist, um einen Vektorreduzierungsbefehl zu empfangen, um eine Anordnung der in einem Quelloperanden gespeicherten Datenelemente unter Verwendung eines Reduzierungsoperators zu einem Ergebnis in einem Zieloperand zu reduzieren, wobei Quelloperand und Zieloperand jeweils eines der Vektorregister sind, als Reaktion auf den Vektorreduzierungsbefehl, den Reduzierungsoperator auf zwei der Datenelemente in jeder Spur anzuwenden, und ein oder mehrere verbliebene Datenelemente zu verschieben, wenn mindestens eines der Datenelemente in jeder Spur verblieben ist.
  16. System nach Anspruch 15, wobei die Ausführungsschaltung als Reaktion auf den Vektorreduzierungsbefehl eine Null an eine höchstwertige Position in jeder Spur einfügen soll.
  17. System nach Anspruch 15, wobei der Reduzierungsoperator addieren, subtrahieren oder multiplizieren enthält.
  18. System nach Anspruch 15, wobei die Ausführungsschaltung den Reduzierungsoperator auf zwei der niedrigstwertigen Datenelemente in jeder Spur anwenden soll.
  19. System nach Anspruch 15, wobei die Ausführungsschaltung als Reaktion auf den Vektorreduzierungsbefehl jedes der verbliebenen Datenelemente eine Position nach rechts innerhalb jeder Spur verschieben soll.
  20. System nach Anspruch 15, wobei die Ausführungsschaltung einen Reduzierungscode ohne den Vektorreduzierungsbefehl in einen übersetzten Reduzierungscode mit dem Vektorreduzierungsbefehl umwandeln soll, wobei der Reduzierungscode und der übersetzte Reduzierungscode eine gleiche Abfolge von Reduzierungsoperationen, die auf die Anordnung von Datenelementen über die Vielzahl von Spuren hinweg angewendet werden, spezifizieren und ein gleiches Ergebnis erzeugen.
DE112013003743.2T 2012-09-28 2013-06-10 Beschleunigte spurübergreifende Vektorreduzierungsbefehle Withdrawn DE112013003743T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/630,154 US9588766B2 (en) 2012-09-28 2012-09-28 Accelerated interlane vector reduction instructions
US13/630,154 2012-09-28
PCT/US2013/045014 WO2014051720A1 (en) 2012-09-28 2013-06-10 Accelerated interlane vector reduction instructions

Publications (1)

Publication Number Publication Date
DE112013003743T5 true DE112013003743T5 (de) 2015-05-21

Family

ID=50386388

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112013003743.2T Withdrawn DE112013003743T5 (de) 2012-09-28 2013-06-10 Beschleunigte spurübergreifende Vektorreduzierungsbefehle

Country Status (7)

Country Link
US (2) US9588766B2 (de)
JP (2) JP6025986B2 (de)
KR (1) KR101703743B1 (de)
CN (1) CN104603766B (de)
DE (1) DE112013003743T5 (de)
GB (1) GB2520644B (de)
WO (1) WO2014051720A1 (de)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9588766B2 (en) * 2012-09-28 2017-03-07 Intel Corporation Accelerated interlane vector reduction instructions
US9557993B2 (en) * 2012-10-23 2017-01-31 Analog Devices Global Processor architecture and method for simplifying programming single instruction, multiple data within a register
US10318308B2 (en) * 2012-10-31 2019-06-11 Mobileye Vision Technologies Ltd. Arithmetic logic unit
US9419792B2 (en) 2012-12-28 2016-08-16 Intel Corporation Instruction for accelerating SNOW 3G wireless security algorithm
US9490971B2 (en) * 2012-12-28 2016-11-08 Intel Corporation Instruction for fast ZUC algorithm processing
US9477467B2 (en) * 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
CN103995688B (zh) * 2014-05-30 2016-10-12 广东顺德中山大学卡内基梅隆大学国际联合研究院 一种基于标签的无序矢量归约电路
US9619214B2 (en) 2014-08-13 2017-04-11 International Business Machines Corporation Compiler optimizations for vector instructions
US10169014B2 (en) 2014-12-19 2019-01-01 International Business Machines Corporation Compiler method for generating instructions for vector operations in a multi-endian instruction set
US9851970B2 (en) * 2014-12-23 2017-12-26 Intel Corporation Method and apparatus for performing reduction operations on a set of vector elements
US10459731B2 (en) * 2015-07-20 2019-10-29 Qualcomm Incorporated Sliding window operation
US9880821B2 (en) * 2015-08-17 2018-01-30 International Business Machines Corporation Compiler optimizations for vector operations that are reformatting-resistant
US10691453B2 (en) * 2015-11-13 2020-06-23 International Business Machines Corporation Vector load with instruction-specified byte count less than a vector size for big and little endian processing
US10691456B2 (en) 2015-11-13 2020-06-23 International Business Machines Corporation Vector store instruction having instruction-specified byte count to be stored supporting big and little endian processing
US9830150B2 (en) 2015-12-04 2017-11-28 Google Llc Multi-functional execution lane for image processor
US20170168819A1 (en) * 2015-12-15 2017-06-15 Intel Corporation Instruction and logic for partial reduction operations
US20170177352A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Store Operations
US10846087B2 (en) 2016-12-30 2020-11-24 Intel Corporation Systems, apparatuses, and methods for broadcast arithmetic operations
US10268479B2 (en) 2016-12-30 2019-04-23 Intel Corporation Systems, apparatuses, and methods for broadcast compare addition
US10579338B2 (en) * 2017-01-30 2020-03-03 Arm Limited Apparatus and method for processing input operand values
GB2560159B (en) * 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
US10261786B2 (en) * 2017-03-09 2019-04-16 Google Llc Vector processing unit
US10108581B1 (en) * 2017-04-03 2018-10-23 Google Llc Vector reduction processor
US11436010B2 (en) 2017-06-30 2022-09-06 Intel Corporation Method and apparatus for vectorizing indirect update loops
EP3499362B1 (de) * 2017-12-13 2022-11-30 ARM Limited Vektor add-with-carry-anweisung
US10409601B2 (en) * 2017-12-29 2019-09-10 Intel Corporation Apparatus and method for loop flattening and reduction in a single instruction multiple data (SIMD) pipeline
US11132228B2 (en) 2018-03-21 2021-09-28 International Business Machines Corporation SMT processor to create a virtual vector register file for a borrower thread from a number of donated vector register files
CN111338694B (zh) * 2018-12-19 2022-05-31 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质
US11216281B2 (en) * 2019-05-14 2022-01-04 International Business Machines Corporation Facilitating data processing using SIMD reduction operations across SIMD lanes
US20240004647A1 (en) * 2022-07-01 2024-01-04 Andes Technology Corporation Vector processor with vector and element reduction method

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3940542B2 (ja) * 2000-03-13 2007-07-04 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
US20030167460A1 (en) * 2002-02-26 2003-09-04 Desai Vipul Anil Processor instruction set simulation power estimation method
US20040193838A1 (en) 2003-03-31 2004-09-30 Patrick Devaney Vector instructions composed from scalar instructions
GB2411974C (en) * 2003-12-09 2009-09-23 Advanced Risc Mach Ltd Data shift operations
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US8074051B2 (en) * 2004-04-07 2011-12-06 Aspen Acquisition Corporation Multithreaded processor with multiple concurrent pipelines per thread
US7529918B2 (en) * 2006-07-21 2009-05-05 Broadcom Corporation System and method for efficiently performing bit-field extraction and bit-field combination operations in a processor
US7676647B2 (en) 2006-08-18 2010-03-09 Qualcomm Incorporated System and method of processing data using scalar/vector instructions
CN101163240A (zh) 2006-10-13 2008-04-16 国际商业机器公司 一种滤波装置及其方法
US7765384B2 (en) 2007-04-18 2010-07-27 International Business Machines Corporation Universal register rename mechanism for targets of different instruction types in a microprocessor
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
US9600281B2 (en) * 2010-07-12 2017-03-21 International Business Machines Corporation Matrix multiplication operations using pair-wise load and splat operations
US9588766B2 (en) * 2012-09-28 2017-03-07 Intel Corporation Accelerated interlane vector reduction instructions

Also Published As

Publication number Publication date
GB2520644A (en) 2015-05-27
WO2014051720A1 (en) 2014-04-03
GB2520644B (en) 2020-07-01
US20170242699A1 (en) 2017-08-24
JP2017076395A (ja) 2017-04-20
KR20150038408A (ko) 2015-04-08
GB201500477D0 (en) 2015-02-25
JP6351682B2 (ja) 2018-07-04
JP6025986B2 (ja) 2016-11-16
CN104603766B (zh) 2017-06-30
US9588766B2 (en) 2017-03-07
KR101703743B1 (ko) 2017-02-07
US20140095842A1 (en) 2014-04-03
JP2015532755A (ja) 2015-11-12
US10209989B2 (en) 2019-02-19
CN104603766A (zh) 2015-05-06

Similar Documents

Publication Publication Date Title
DE112013003743T5 (de) Beschleunigte spurübergreifende Vektorreduzierungsbefehle
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE112012007088B4 (de) Vorrichtung, verfahren und system mit einem befehl zum reduzieren von elementen in einem vektorregister mit einem schrittweisem zugriffsmuster
DE102016006400A1 (de) Hardware-prozessoren und verfahren für eng-gekoppelte heterogene datenverarbeitung
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE112017001825T5 (de) Prozessoren, verfahren, systeme und instruktionen zum atomischen speichern von daten, die breiter als eine nativ unterstützte datenbreite sind, in einem speicher
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
DE112013004783T5 (de) Durch Lese- und Schreibmasken gesteuerter Vektor-Verschiebebefehl
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE112013004770T5 (de) Lese- und -Schreibmaskenaktualisierungsbefehl zur Vektorisierung rekursiver Berechnungen über unabhängige Daten
DE112013004800T5 (de) Anweisung zur Bitverschiebung nach links mit Ziehen von Einsen in niedrigwertigere Bit
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE112013003741T5 (de) Systeme, Vorrichtungen und Verfahren zum Durchführen einer Konfliktdetektion unf einer Übertragung von Inhalten eines Registers an Datenelementpositionen eines anderen Registers
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102015002253A1 (de) Verfahren und Vorrichtung zum Ausführen mehrerer Multiplikationsoperationen
DE112013003735B4 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE112017001716T5 (de) Speicherkopierbefehle, prozessoren, verfahren und systeme
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102014003659A1 (de) Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters
DE102018128626A1 (de) Systeme, Verfahren und Vorrichtungen für Matrixoperationen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee