DE102019109847A1 - Beschleunigung der matrixmultplikation dünnbesetzter matrizen unter verwendung einer spaltenfaltung und -verdichtung - Google Patents

Beschleunigung der matrixmultplikation dünnbesetzter matrizen unter verwendung einer spaltenfaltung und -verdichtung Download PDF

Info

Publication number
DE102019109847A1
DE102019109847A1 DE102019109847.5A DE102019109847A DE102019109847A1 DE 102019109847 A1 DE102019109847 A1 DE 102019109847A1 DE 102019109847 A DE102019109847 A DE 102019109847A DE 102019109847 A1 DE102019109847 A1 DE 102019109847A1
Authority
DE
Germany
Prior art keywords
zero
matrix
elements
field
column
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.)
Pending
Application number
DE102019109847.5A
Other languages
English (en)
Inventor
Omid Azizi
Guy BOUDOUKH
Tony Werner
Andrew Yang
Michael ROTZIN
Chen Koren
Eriko Nurvitadhi
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 DE102019109847A1 publication Critical patent/DE102019109847A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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 or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

Die offenbarten Ausführungsformen betreffen eine Beschleunigung einer Dünnbesetzte-Matrix-Multiplikation (SMM) unter Verwendung einer Spaltenfaltung und -verdichtung. Bei einem Beispiel verwendet ein Prozessor ansprechend auf einen SMM-Befehl mit Feldern zur Spezifikation von Stellen einer ersten, einer zweiten und einer Ausgangsmatrix, wobei die zweite Matrix eine dünnbesetzte Matrix ist, eine Ausführungsschaltungsanordnung zum Packen der zweiten Matrix durch Ersetzen eines oder mehrerer nullwertiger Elemente durch noch zu verarbeitende von Null verschiedene Elemente, wobei jedes der ersetzten Elemente ferner ein Feld zur Identifikation seiner logischen Position innerhalb der zweiten Matrix aufweist, und die Ausführungsschaltungsanordnung ferner dafür ausgelegt ist, für jedes von Null verschiedene Element an Zeile M und Spalte K der spezifizierten ersten Matrix ein Produkt aus dem Element und jedem entsprechenden von Null verschiedenen Element an Zeile K, Spalte N der gepackten zweiten Matrix zu erzeugen und jedes erzeugte Produkt mit einem vorhergehenden Wert eines entsprechenden Elements an Zeile M und Spalte N der spezifizierten Ausgangsmatrix zu akkumulieren.

Description

  • GEBIET DER ERFINDUNG
  • Das Gebiet der Erfindung betrifft allgemein eine Computerprozessorarchitektur und insbesondere die Beschleunigung der Matrixmultiplikation dünnbesetzter Matrizen unter Verwendung einer Spaltenfaltung und -verdichtung.
  • HINTERGRUND
  • Viele heutige Hardwarebeschleuniger für neuronale Netze führen hauptsächlich eine Matrixmultiplikation in einem dichten Format ohne Berücksichtigung der Tatsache aus, dass es einen hohen Prozentsatz in einer (oder beiden) Matrizen vorgefundener Nullen gibt. Dies führt zu einer ineffizienten Ausnutzung der Hardware-Ressourcen (durch Multiplizieren mit null) und einer Energieverschwendung.
  • Heutige Hardwarebeschleuniger für neuronale Netze sowohl für das Training als auch für die Inference konkurrieren alle, um die besten Rohleistungsfähigkeitszahlen und Energieverbrauch-zu-Leistungsfähigkeit-Verhältniswerte zu erreichen. Die Ausnutzung der nativen und injizierten Dünnbesetztheit in diesen neuronalen Netzen ist ein Weg, bei dieser Konkurrenz einen Vorteil zu erlangen.
  • Maschinenlernarchitekturen in der Art tiefer neuronaler Netze wurden auf Gebiete angewendet, die Computersicht, Spracherkennung, natürliche Sprachverarbeitung, Audioerkennung, Soziale-Netze-Filterung, maschinelle Übersetzung, Bioinformatik und Arzneimittelentwicklung umfassen.
  • Die Matrixmultiplikation ist für viele Algorithmen, einschließlich des Maschinenlernens, ein entscheidender Begrenzer für die Leistungsfähigkeit/den Energieverbrauch. Einige herkömmliche Matrixmultiplikationsansätze sind spezialisiert, ihnen fehlt beispielsweise die Flexibilität zur Unterstützung einer Vielzahl von Datenformaten (signiertes und unsigniertes 8b/16b-ganzzahlig, 16b-Gleitkomma) mit breiten Akkumulatoren und die Flexibilität zur Unterstützung sowohl dichter als auch dünnbesetzter Matrizen.
  • Das hier adressierte Problem besteht darin, die Leistungsfähigkeit und die Energieeffizienz von Chips zur Verarbeitung neuronaler Netze durch wirksamere Verarbeitung von Matrixmultiplikationen bei Vorhandensein einer Dünnbesetztheit im Eingangsdatensatz zu erhöhen (dünnbesetzte Matrizen haben eine Dichte von weniger als 1,0, was bedeutet, dass weniger als 100 % ihrer Elemente von Null verschiedene Werte aufweisen). Insbesondere wird dieses Problem adressiert, während gleichzeitig die Leistungsfähigkeit für die Multiplikation dichter (nicht dünnbesetzter) Matrizen aufrechterhalten wird.
  • Figurenliste
  • Die vorliegende Erfindung wird in den Figuren der anliegenden Zeichnungen beispielhaft und nicht einschränkend erläutert, wobei gleiche Bezüge ähnliche Elemente angeben.
    • 1 ist ein Blockdiagramm, das Verarbeitungskomponenten zur Ausführung eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls zeigt, gemäß einer Ausführungsform.
    • 2 zeigt beispielhafte Ausführungsabläufe zur Ausführung eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls gemäß einigen Ausführungsformen.
    • 3 ist ein Blockdiagramm eines Verarbeitungsfelds zur Ausführung eines Kachelartige-Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls gemäß einigen Ausführungsformen.
    • 4 ist ein Blockdiagramm, das die Matrixfaltung für einen Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl zeigt, gemäß einigen Ausführungsformen.
    • 5A ist ein Blockdiagramm, das die Matrixfaltung für einen Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl zeigt, gemäß einigen Ausführungsformen.
    • 5B ist ein Blockdiagramm, das eine Matrixmultiplikation mit optimierten Faltungsgelegenheiten zeigt, gemäß einigen Ausführungsformen.
    • 5C ist ein Blockdiagramm, welches die Erhöhung von Faltungsgelegenheiten zeigt, gemäß einigen Ausführungsformen.
    • 6A ist ein Blockdiagramm, das die Matrixverdichtung für einen Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl zeigt, gemäß einigen Ausführungsformen.
    • 6B ist ein Blockflussdiagramm, das eine Matrixverdichtung durch einen eine Dünnbesetzte-Matrix-Multiplikation (SMM) ausführenden Prozessor zeigt, gemäß einigen Ausführungsformen.
    • 6C ist ein anderes Blockflussdiagramm, das eine Matrixverdichtung durch einen eine Dünnbesetzte-Matrix-Multiplikation (SMM) ausführenden Prozessor zeigt, gemäß einigen Ausführungsformen.
    • 6D ist ein Blockdiagramm, das eine Schaltung zur Implementation der Matrixverdichtung für einen Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl zeigt, gemäß einigen Ausführungsformen.
    • 7 ist ein Blockdiagramm, das eine Multiplikations-Akkumulations-Schaltung für einen Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl zeigt, gemäß einigen Ausführungsformen.
    • 8 ist ein Blockflussdiagramm eines Prozessors, der einen Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl ausführt, gemäß einigen Ausführungsformen.
    • 9 zeigt ein Format eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls gemäß einigen Ausführungsformen.
    • Die 10A - 10B sind Blockdiagramme, die ein generisches vektorfreundliches Befehlsformat und Befehlsschablonen davon zeigen, gemäß einigen Ausführungsformen der Erfindung.
    • 10A ist ein Blockdiagramm, das ein generisches vektorfreundliches Befehlsformat und Klasse-A-Befehlsschablonen davon zeigt, gemäß einigen Ausführungsformen der Erfindung.
    • 10B ist ein Blockdiagramm, das das generische vektorfreundliche Befehlsformat und Klasse-B-Befehlsschablonen davon zeigt, gemäß einigen Ausführungsformen der Erfindung.
    • 11A ist ein Blockdiagramm, das ein beispielhaftes spezifisches vektorfreundliches Befehlsformat zeigt, gemäß einigen Ausführungsformen der Erfindung.
    • 11B ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats zeigt, welche das Vollständiger-Opcode-Feld bilden, gemäß einer Ausführungsform.
    • 11C ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats zeigt, welche das Registerindexfeld bilden, gemäß einer Ausführungsform.
    • 11D ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats zeigt, welche das Erweiterungsoperationsfeld bilden, gemäß einer Ausführungsform.
    • 12 ist ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform.
    • 13A ist ein Blockdiagramm, das sowohl eine als Beispiel dienende In-der-Reihe-Pipeline als auch eine als Beispiel dienende Register-umbenennende Außerhalb-der-Reihe-Ausgabe/Ausführung-Pipeline gemäß einigen Ausführungsformen zeigt.
    • 13B ist ein Blockdiagramm, das sowohl eine als Beispiel dienende Ausführungsform eines In-der-Reihe-Architekturkerns als auch eines als Beispiel dienenden Register-umbenennenden Außerhalb-der-Reihe-Ausgabe/Ausführung-Architekturkerns, der in einen Prozessor gemäß Ausführungsformen aufzunehmen ist, zeigt.
    • Die 14A-B zeigen ein Blockdiagramm einer spezifischeren als Beispiel dienenden In-der-Reihe-Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne desselben Typs und/oder anderer Typen) in einem Chip wäre.
    • 14A ist ein Blockdiagramm eines Einzelprozessorkerns zusammen mit seiner Verbindung zum auf dem Chip liegenden Zwischenverbindungsnetz und mit seiner lokalen Untermenge des Level-2(L2)-Cache gemäß einigen Ausführungsformen.
    • 14B ist eine erweiterte Ansicht eines Teils des Prozessorkerns aus 14A gemäß einigen Ausführungsformen.
    • 15 ist ein Blockdiagramm eines Prozessors, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuereinrichtung aufweisen kann und eine integrierte Graphik aufweisen kann, gemäß einigen Ausführungsformen.
    • Die 16 - 19 sind Blockdiagramme als Beispiel dienender Computerarchitekturen.
    • 16 zeigt ein Blockdiagramm eines Systems gemäß einigen Ausführungsformen.
    • 17 ist ein Blockdiagramm eines ersten spezifischeren als Beispiel dienenden Systems gemäß einer Ausführungsform.
    • 18 ist ein Blockdiagramm eines zweiten spezifischeren als Beispiel dienenden Systems gemäß einigen Ausführungsformen.
    • 19 ist ein Blockdiagramm eines System-auf-einem-Chip (SoC) gemäß einigen Ausführungsformen.
    • 20 ist ein Blockdiagramm, das die Verwendung eines Softwarebefehlswandlers zur Umwandlung binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz zeigt, gemäß einigen Ausführungsformen.
  • DETAILLIERTE BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
  • In der folgenden Beschreibung werden zahlreiche spezifische Einzelheiten dargelegt. Es ist jedoch zu verstehen, dass einige Ausführungsformen ohne diese spezifischen Einzelheiten verwirklicht werden können. In anderen Fällen wurden wohlbekannte Schaltungen, Strukturen und Techniken nicht detailliert dargestellt, um das Verständnis dieser Beschreibung nicht zu behindern.
  • In der Patentschrift auftretende Bezüge auf „eine einzige Ausführungsform“, „eine Ausführungsform“, „eine beispielhafte Ausführungsform“ usw. geben an, dass die beschriebene Ausführungsform ein Merkmal, eine Struktur oder eine Eigenschaft aufweisen kann, wobei jedoch nicht jede Ausführungsform notwendigerweise das Merkmal, die Struktur oder die Eigenschaft aufzuweisen braucht. Überdies beziehen sich solche Ausdrücke nicht notwendigerweise auf dieselbe Ausführungsform. Ferner wird, wenn ein Merkmal, eine Struktur oder eine Eigenschaft in Bezug auf eine Ausführungsform beschrieben wird, angenommen, dass es innerhalb des Wissens von Fachleuten liegt, dieses Merkmal, diese Struktur oder diese Eigenschaft auf andere Ausführungsformen anzuwenden, falls explizit beschrieben.
  • Die offenbarten Ausführungsformen weisen einen Weg zum Ausnutzen der Dünnbesetztheit einer dünnbesetzten Eingangsmatrix, um die Matrixmultiplikation wirksamer auszuführen und weniger Strom zu verbrauchen, während die Anzahl der Zyklen verringert wird, die zum Abschluss der Berechnung erforderlich sind. Es wird erwartet, dass die offenbarten Ausführungsformen anders als herkömmliche symmetrische Matrixmultiplikationsschaltungen die Matrixmultiplikationsleistung und Energieausnutzung verbessern, indem sie dünnbesetzte Matrizen packen, um ein Multiplizieren mit null zu vermeiden. Die Packung ist gemäß einigen Ausführungsformen mit einem Falten einer dünnbesetzten Matrix verbunden, um nullwertige Elemente durch von Null verschiedene Elemente zu ersetzen. Gemäß anderen Ausführungsformen ist die Packung mit einem Verdichten benachbarter Spalten einer dünnbesetzten Matrix verbunden, um ähnlich nullwertige Elemente durch von Null verschiedene Elemente zu ersetzen. In jedem Fall leitet eine Routing-Schaltungsanordnung, wenn sie ein Element einer Multiplikandenmatrix bewegt, auch die geeigneten Elemente der Multiplikatormatrix weiter, um das Ergebnis zu erzeugen.
  • Hier ist die „Dünnbesetztheit“ einer Matrix als der Anteil der von Null verschiedenen Elemente definiert, wobei die restlichen Elemente Null sind. Beispielsweise wird erwartet, dass offenbarte Ausführungsformen, wenn eine Matrixmultiplikation ausgeführt wird, bei der eine dünnbesetzte Matrix mit einer Dünnbesetztheit von 0,875 verwendet wird (wobei nur 1/8 oder 12,5 % ihrer Elemente von Null verschiedene Elemente aufweisen), durch Vermeiden von Nullmultiplikationen verbesserte Kosten und eine verbesserte Leistungsfähigkeit aufweisen. Gemäß einigen Ausführungsformen kann der Begriff „Dünnbesetztheit“ verwendet werden, um den Anteil nullwertiger Elemente zu bezeichnen.
  • Gemäß einigen Ausführungsformen erkennt ein Prozessor, wenn Matrixmultiplikationsoperationen ausgeführt werden, dynamisch die Dünnbesetztheit in den Eingangsmatrizen (erkennt nullwertige Elemente). Gemäß einigen Ausführungsformen setzt der Prozessor ein Bit, um jedes nullwertige Element zu identifizieren. Wenngleich der Prozessor die Datenelemente zur Laufzeit dynamisch analysieren kann, können die Eingangsmatrizen gemäß einigen Ausführungsformen auch bereits vorab analysiert werden und können die nullwertigen Elemente markiert werden. Auf der Grundlage des bestimmten Dünnbesetztheitsniveaus verwendet der Prozessor, falls dies angemessen ist, eine Routing-Schaltungsanordnung, um die Matrizen in ein „verdichtetes“ oder „gefaltetes“ Format zu packen. Der Prozessor verwendet dann die Routing-Schaltungsanordnung zur Konfiguration eines Verarbeitungskerns, um die gepackte Matrix unter Verwendung weniger Zyklen oder weniger Hardware zu verarbeiten.
  • Gemäß einigen offenbarten Ausführungsformen, wie beispielsweise mit Bezug auf 3 dargestellt und beschrieben, wird die Matrixmultiplikation auf kleinere Matrizen heruntergebrochen, die mit weniger Hardware verarbeitet werden können. Wenn beispielsweise eine A-Matrix mit einer B-Matrix multipliziert wird, brechen die offenbarten Ausführungsformen, falls A und B logische 512x512-Matrizen sind, die Berechnung zu 32x32-Untermatrizen herunter.
  • Die offenbarten Ausführungsformen stellen eine verbesserte Matrixmultiplikation zur Verwendung bei solchen Anwendungen wie Deep Learning oder Maschinenlernen bereit.
  • Einige Ausführungsformen nutzen eine Matrixdünnbesetztheit durch Falten der dünnbesetzten Matrix, wie beispielsweise mit Bezug auf die 5A - 5C dargestellt und beschrieben, oder durch Verdichten der dünnbesetzten Matrix, wie beispielsweise mit Bezug auf die 6A - 6D dargestellt und beschrieben, aus.
  • Bei einigen vorhergehenden Lösungen ist eine Dünnbesetztheit in beiden Matrizen erforderlich, um wirksam zu sein. Hier offenbarte Ausführungsformen können jedoch selbst dann eine Beschleunigung bereitstellen, wenn nur in einer Matrix eine Dünnbesetztheit auftritt.
  • Es wird erwartet, dass die offenbarten Ausführungsformen die Kosten und die Flächenausnutzung durch Bereitstellen einer einzigen rekonfigurierbaren Ausführungsschaltung zur Unterstützung einer Vielzahl von Datenformaten - einschließlich ganzzahliger und Gleitkommaformate - verglichen mit einigen Ansätzen verbessern, die auf verschiedenen Schaltungen beruhen, welche auf verschiedene Datenformate spezialisiert sind. Die offenbarten Ausführungsformen stellen einen Matrixmultiplikationsbeschleuniger bereit, der sowohl Gleitkomma- als auch ganzzahlige Datenformate mit Akkumulation unterstützt. Der offenbarte Beschleuniger kann auch optimiert werden, um mit dünnbesetzten Matrizen zu arbeiten, indem eine Multiplikation der Nullelemente vermieden wird. Durch Kombinieren dieser Merkmale zu einer rekonfigurierbaren Schaltung ermöglichen die offenbarten Ausführungsformen demgemäß eine einzige Matrixmultiplikationsbeschleunigungsschaltung zur Unterstützung mehrerer Präzisionsformate mit breiten Akkumulatoren, während sie effizient entweder für dichte oder dünnbesetzte Matrizen rekonfigurieren. Die offenbarten Beschleunigerausführungsformen verbessern die Flächen- und Energieeffizienz, während sie Flexibilität bereitstellen, um viele typische Matrixmultiplikationsaufgaben in der Art des Maschinenlernens zu unterstützen.
  • Gemäß einigen Ausführungsformen verwendet die Ausführungsschaltungsanordnung einen Skalarproduktalgorithmus, durch den die Zeilen der A-Matrix in eine Matrixmultiplikationsverarbeitungseinheit (MMPU) geladen werden und dann die Spalten der B-Matrix einen Zyklus zur Zeit durchgestreamt werden. Elemente der B-Matrix, die noch zu verarbeiten sind, werden manchmal als „Downstream“-Elemente bezeichnet. Dieser Algorithmus erzeugt eine Spalte der C-Matrix pro Zyklus.
  • 1 ist ein Blockdiagramm, das Verarbeitungskomponenten zur Ausführung eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls zeigt, gemäß einigen Ausführungsformen. Wie dargestellt ist, speichert ein Speicher 101 einen oder mehrere auszuführende SMM-Befehle 103. Wie nachstehend ferner beschrieben wird, ist das Rechensystem 100 gemäß einigen Ausführungsformen ein SIMD-Prozessor zur gleichzeitigen Verarbeitung mehrerer Elemente von Gepackte-Daten-Vektoren in der Art von Matrizen.
  • Beim Betrieb wird der SMM-Befehl 103 durch eine Abrufschaltungsanordnung 105 aus dem Speicher 101 abgerufen. Der abgerufene SMM-Befehl 107 wird durch eine Decodierschaltungsanordnung 109 decodiert. Das SMM-Befehlsformat, das anhand der 9, 10A-B und 11A-D weiter dargestellt und beschrieben wird, weist Felder (hier nicht dargestellt) zur Spezifikation erster, zweiter und Zielmatrizen auf, wobei die spezifizierte zweite Matrix gemäß einigen Ausführungsformen eine dünnbesetzte Matrix mit einer Dichte kleiner als eins ist (wobei die Dichte proportional zu den von Null verschiedenen Elementen ist, so dass die zweite Matrix zumindest einige nullwertige Elemente aufweist). Die Decodierschaltungsanordnung 109 decodiert den abgerufenen SMM-Befehl 107 zu einer oder mehreren Operationen. Gemäß einigen Ausführungsformen umfasst diese Decodierung das Erzeugen mehrerer Mikrooperationen, die von der Ausführungsschaltungsanordnung (in der Art einer Ausführungsschaltungsanordnung 119) auszuführen sind. Die Decodierschaltungsanordnung 109 decodiert auch Befehlssuffixe und -präfixe (falls verwendet). Die Ausführungsschaltungsanordnung 119 wird nachstehend zumindest mit Bezug auf die 2 - 8, 13A-B und 14A-B weiter beschrieben und dargestellt.
  • Gemäß einigen Ausführungsformen stellt eine Registerumbenennungs-, Registerzuordnungs- und/oder Planungsschaltung 113 eine Funktionalität bereit, um eines oder mehrere der Folgenden auszuführen: 1) Umbenennen logischer Operandenwerte in physikalische Operandenwerte (beispielsweise gemäß einigen Ausführungsformen eine Register-Alias-Tabelle), 2) Zuweisen von Statusbits und Flags zum decodierten Befehl und 3) Planen des decodierten SMM-Befehls 111 zur Ausführung auf der Ausführungsschaltungsanordnung 119 von einem Befehls-Pool aus (beispielsweise unter Verwendung einer Reservierungsstation gemäß einigen Ausführungsformen).
  • Eine Routing-Schaltungsanordnung 117 unterstützt die Ausführungsschaltungsanordnung 119 durch Ausführung der Matrixfaltung (mit Bezug auf die 4 und 5A-C beschrieben und dargestellt) und der Matrixverdichtung (mit Bezug auf die 6A-D beschrieben und dargestellt), um eine optimierte Matrixmultiplikation und Reduktion von Nullmultiplikationen zu ermöglichen. Gemäß einigen Ausführungsformen befindet sich die Routing-Schaltungsanordnung 117, wie dargestellt, außerhalb der Ausführungsschaltungsanordnung 119. Gemäß anderen Ausführungsformen ist die Routing-Schaltungsanordnung 117 in die Ausführungsschaltungsanordnung 119 aufgenommen und Teil davon.
  • Register (eine Registerdatei) und/oder ein Speicher 115 speichern Daten als Operanden des decodierten SMM-Befehls 111, der durch die Ausführungsschaltungsanordnung 119 zu verarbeiten ist. Beispielhafte Registertypen umfassen Schreibmaskenregister, gepackte Datenregister, Register für allgemeine Zwecke und Gleitkommaregister, wie nachstehend zumindest mit Bezug auf 12 weiter beschrieben und dargestellt wird.
  • Gemäß einigen Ausführungsformen übergibt die Rückschreibschaltung 120 das Ergebnis der Ausführung des decodierten SMM-Befehls 111. Die Ausführungsschaltungsanordnung 119 und das System 100 werden weiter mit Bezug auf die 2 - 8, 13A-B und 14A-B dargestellt und beschrieben.
  • 2 zeigt beispielhafte Ausführungsabläufe zur Ausführung eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls gemäß einigen Ausführungsformen. Wie dargestellt ist, hat der SMM-Befehl 200 Felder zur Spezifikation einer Zielmatrix, einer ersten Quellmatrix und einer zweiten Quellmatrix, die manchmal als C-Matrix, A-Matrix bzw. B-Matrix oder als DST-Matrix, SRC1-Matrix bzw. SRC2-Matrix oder als Ausgangsmatrix, dichte Quellmatrix bzw. dünnbesetzte Quellmatrix bezeichnet werden. Wenn die zweite Quellmatrix eine dünnbesetzte Matrix ist, hat sie eine Dünnbesetztheit kleiner als eins (Dünnbesetztheit bezieht sich auf den Anteil von Null verschiedener Elemente, der als Prozentsatz, Bruchteil oder Zahl zwischen 0 und 1 ausgedrückt werden kann).
  • Wie dargestellt ist, weisen die src1-Matrix 202, die src2-Matrix 204 und die dst-Matrix 206 (M × K), (K × N) bzw. (M × N) Elemente auf, wobei M = 4, K = 4 und N = 4 gelten. Natürlich können M, K und N gemäß anderen Ausführungsformen variieren. Punkte werden verwendet, um von Null verschiedene Elemente der A-, B- und C-Matrizen zu spezifizieren, wobei die A-Matrix 202 eine dichte Matrix ist und die B-Matrix 204 eine dünnbesetzte Matrix ist.
  • Beim Betrieb soll ein Prozessor ansprechend auf den SMM-Befehl 200 die src1-Matrix 202 mit der src2-Matrix 204 multiplizieren, um ein Produkt zu erzeugen und in der dst-Matrix 206 zu speichern. Beispielsweise soll der Prozessor das als 208 bezeichnete oberste am weitesten links gelegene Element der dst-Matrix 206 (auch als C-Matrix, Ausgabe oder Produkt bezeichnet) durch Multiplizieren von Elementen in der obersten Zeile der src1-Matrix 202 (auch als A-Matrix, dichte Matrix, Multiplikator oder Faktor bezeichnet) mit entsprechenden Elementen in der am weitesten links gelegenen Spalte der src2-Matrix 204 (auch als B-Matrix, dünnbesetzte Matrix, Multiplikand oder Faktor bezeichnet) berechnen. Hier bedeutet der Begriff „entsprechend“, dass die relative Position des Elements der A-Matrix die gleiche relative Position innerhalb der multiplizierten Zeile ist wie das Element in der multiplizierten Spalte der B-Matrix. Um den Anfangsteil der Operation zu erläutern, sei bemerkt, dass das an Zeile 0, Spalte 0 der C-Matrix 206 gespeicherte Ergebnis 208 durch Multiplizieren und Akkumulieren entsprechender von Null verschiedener Elemente der src1-Matrix 202 (auch als A-Matrix bezeichnet), Zeile 0, und der src2-Matrix 204 (auch als B-Matrix bezeichnet), Spalte 0, erzeugt wird. Algebraisch ausgedrückt, gilt Cr0c0 = Ar0c0 * Br0c0 + Ar0c1*Br1c0 + Ar0c2*Br2c0 + Ar0c3*Br3c0. Die restlichen von Null verschiedenen Produkte der Spalte 0 der dst-Matrix 206 werden ähnlich erzeugt. Die Elemente der Spalten 1, 2 und 3 der C-Matrix 206 sind alle null, weil die Spalten 1, 2 und 3 der src2-Matrix 204 alle null sind. Gemäß einigen Ausführungsformen werden die erzeugten Produkte mit vorhergehenden Inhalten der dst-Matrix 206 akkumuliert. Die Ausführung des SMM-Befehls durch offenbarte Ausführungsformen wird weiter mit Bezug auf die 3 - 8, 13A-B und 14A-B dargestellt und beschrieben.
  • KACHELARTIGE MATRIXMULTIPLIKATION
  • 3 ist ein Blockdiagramm eines Verarbeitungsfelds zur Ausführung eines Kachelartige-Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls gemäß einigen Ausführungsformen. Wie dargestellt ist, sind die A-Matrix 302 und die B-Matrix 304 16x16-Matrizen, die zu multiplizieren sind, um eine C-Matrix 306 zu erzeugen, die auch eine 16x16-Matrix ist.
  • Gemäß einigen Ausführungsformen wird wie dargestellt eine Multiplikation einer großen Matrix ausgeführt, indem die Operanden auf kleinere Matrizen heruntergebrochen werden. Hier werden die 16x16-Matrizen in kleinere 4x4-Matrizen heruntergebrochen. Zur Berechnung einer Untermatrix c00 werden beispielsweise die Untermatrizen a00 und b00 multipliziert, indem zuerst ein 4x4-Feld von Verarbeitungseinheiten verwendet wird, und es werden dann die Ergebnisse der Untermatrixmultiplikationen a01*b10, a02*b20 und a03*b30 auf das erste Ergebnis akkumuliert.
  • Falls jede der 4x4-Multiplikationen in einem Zyklus ausgeführt wird, wären daher vier Zyklen erforderlich, um die Berechnung der Untermatrix c11 zu beenden. Wie ferner mit Bezug auf die 5 - 7 beschrieben und dargestellt wird, verwenden einige offenbarte Ausführungsformen ein „Faltkonzept“ zur Beschleunigung und Verbesserung der Wirksamkeit der Berechnung, ohne die Anzahl der Multiplizierer zu erhöhen. Falls die Matrizen b00, b10 und/oder b20 beispielsweise dünnbesetzte Matrizen sind, vermeiden die offenbarten Ausführungsformen die Verwendung von Hardware-Ressourcen zur Multiplikation von Nullelementen und wenden die Multiplizierer stattdessen auf die Ausführung nützlicher Arbeit durch „Umfalten“ von Elementen aus der Untermatrix b30 an, um diese Multiplizierer zu verwenden. Falls alle Elemente der Untermatrix b30 umgefaltet werden können, ermöglichen die offenbarten Ausführungsformen die Ausführung zur Beschleunigung durch gänzliches Überspringen der a03xb30-Multiplikation.
  • MATRIXFALTUNG
  • 4 ist ein Blockdiagramm einer anderen optimierten Ausführung eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls gemäß einigen Ausführungsformen. Zur Erläuterung der Optimierung ist der SMM-Befehl 400 als sowohl im nicht optimierten Modus 401 als auch im optimierten Modus 411 ausgeführt dargestellt. Wie dargestellt ist, ist während der nicht optimierten Matrixmultiplikation 401 die dichte Quellmatrix 402 (auch als A-Matrix bezeichnet) mit der dünnbesetzten Quellmatrix 404 (auch als B-Matrix bezeichnet) zu multiplizieren, um eine Ausgangsmatrix 406 (auch als C-Matrix bezeichnet) zu erzeugen.
  • Die dichte Quellmatrix 402 ist eine 3x3-Matrix mit neun von Null verschiedenen Elementen, die als A an der Stelle (0,0) bis I an der Stelle (2,2) bezeichnet sind. Die dünnbesetzte Quellmatrix 404 ist auch eine 3x3-Matrix und weist als R an der Stelle (0,0) bis Z an der Stelle (2,2) bezeichnete Elemente auf. Gemäß der erläuterten Ausführungsform ist die A-Matrix 402 eine Untermatrix einer logisch größeren Matrix, und eine nächste Spalte ist mit als J, K und L bezeichneten Elementen dargestellt. Ähnlich ist die dargestellte B-Matrix 404 eine Untermatrix einer logisch größeren Matrix, und eine nächste Zeile ist mit als O, P und Q bezeichneten Elementen dargestellt.
  • Die dünnbesetzte Quellmatrix 404 hat jedoch ein nullwertiges Element Y 408, das zu drei Nullmodifikationen im nicht optimierten Modus zur Erzeugung von Produkten CF, FY und IY führen würde (zur Optimierung der Multiplikation kann die Routing-Schaltungsanordnung, wie nachstehend beschrieben, eine Gelegenheit zur Verschiebung des Elements 409 zur Verwendung der Multiplikationsressourcen, die andernfalls für die das nullwertige Element 408 betreffende Nullmultiplikation verwendet werden würden, ausnutzen).
  • Es sei bemerkt, dass, wenngleich 4 zeigt, dass 409 von einer nächsten Untermatrix verschoben wird, bei der Operation auch Elemente aus derselben Untermatrix, beispielsweise die Elemente V oder S, verschoben werden können.
  • Die Elemente der Ausgangsmatrix 406 sind algebraisch dargestellt. Beispielsweise ist das Element an der Stelle (0,0) der C-Matrix 406 „AR+BU+CX“. Beim nicht optimierten Modus 401 würden die Elemente der mittleren Spalte der Ausgangsmatrix 406 nullwertige Produkte C * Y, F * Y und I * Y aufweisen.
  • Bei der optimierten Version der Operation 411 sind die A-, B- und C-Matrizen als 412, 414 bzw. 416 bezeichnet. Dabei verschiebt die Routing-Schaltungsanordnung gemäß einigen Ausführungsformen das Element P 419 zur zuvor vom nullwertigen Element Y belegten Stelle 418.
  • Nach der Optimierung wird die Ausführungshardware nicht mehr verwendet, um mit null zu multiplizieren. Vielmehr werden diese Multiplizierer verwendet, um nützliche Produkte JP, KP und LP zu erzeugen. Beim optimierten Modus werden die Multiplizierer, die zur Erzeugung der Produkte CY, FY und IY im nicht optimierten Modus verwendet werden würden, nun verwendet, um nützliche von Null verschiedene Produkte JP, KP und LP zu erzeugen. Zur Implementation der Optimierung werden die ansonsten möglicherweise auftretenden nullwertigen Produkte CY, FY und IY nicht mehr erzeugt. Stattdessen werden nützliche (d. h. von Null verschiedene) Produkte JP, KP und LP erzeugt und wie dargestellt mit den in der zweiten Spalte der C-Matrix 416 erzeugten Produkten akkumuliert. Bei der Operation kann ein anderes Element in die vom Element 419 freigegebene Stelle verschoben werden.
  • 5A ist ein Blockdiagramm, das die Matrixfaltung für einen Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl zeigt, gemäß einigen Ausführungsformen. Wie dargestellt ist, ist die B-Untermatrix b20 (d. h. in der zweiten Zeile und nullten Spalte eines größeren logischen Felds) als 502 bezeichnet und eine dünnbesetzte 4x4-Matrix, die neun (9) durch Kreise repräsentierte von Null verschiedene Elemente enthält. Die B-Untermatrix b30 (d. h. an der dritten Zeile und der nullten Spalte eines größeren logischen Felds) ist als 504 bezeichnet und eine dünnbesetzte 4x4-Matrix mit sieben (7) durch Quadrate repräsentierten von Null verschiedenen Elementen.
  • Zur Optimierung der Ausführung des SMM-Befehls 500 werden ähnlich der in 4 dargestellten offenbarten Ausführungsform ein oder mehrere als 502 bezeichnete von Null verschiedene Elemente der B-Untermatrix b20 in die als 504 bezeichneten nullwertigen Elemente der B-Untermatrix b30 verschoben. Wenn Elemente verschoben werden, wie beschrieben, wird dies manchmal als „Falten“ der Elemente einer Untermatrix über eine andere Untermatrix bezeichnet. Nach der Optimierung weist die als 506 bezeichnete optimierte B-Untermatrix b30 einen Brocken von neun (9) von Null verschiedenen Elementen von der B-Untermatrix b20, die darüber „gefaltet“ wurden, auf. Die C-Untermatrix 512 wird durch Multiplizieren von A-Untermatrizen 508 und 510 mit geeigneten Elementen der optimierten B-Untermatrix 506 berechnet. Im Interesse der Einfachheit ist nur das Element der C-Untermatrix 512 an der Stelle (0,1) dargestellt, wobei die anderen Elemente als „X“ dargestellt sind, d. h. als bedeutungslos.
  • Das Untermatrix-„Faltungs“-Konzept geht mit der Beobachtung einher, dass, falls die Matrix B dünnbesetzt ist (viele Werte als Nullen aufweist), die nicht optimierte Matrixmultiplikation mehrere nutzlose Nullmultiplikationen aufweisen würde. Gemäß offenbarten Ausführungsformen wird daher eine dünnbesetzte Untermatrix (beispielsweise die als 502 bezeichnete B-Untermatrix b20) über eine andere dünnbesetzte Untermatrix (beispielsweise die als 304 bezeichnete B-Untermatrix b30) gefaltet. In der Hinsicht, dass bei der Faltung mehrere Elemente verschoben werden, wird dieses manchmal als Falten eines „Brockens“ von Elementen bezeichnet.
  • Die in 5A offenbarte Ausführungsform vermeidet daher durch Vermeiden der Verwendung jeglicher der nullwertigen Elemente der B-Untermatrix b20 502 und der B-Untermatrix b30 504 die Multiplikation mit Nullen, wodurch die Multiplikationshardware nutzlos verwendet werden würde, während nichts zum Endergebnis beigetragen werden würde. Wie dargestellt, werden die nullwertigen Elemente der B-Untermatrix b30 504 mit von Null verschiedenen Elementen einer vertikal benachbarten B-Untermatrix b20 502 überschrieben. Trotz der Faltung ist das Endergebnis jedes Elements in der C-Matrix 510 die Summe von Produkten der gesamten Spalten aller Untermatrizen von A mit B. Gemäß einigen Ausführungsformen wird eine gesamte Untermatrix auf eine andere gefaltet, wodurch es dem Prozessor ermöglicht wird, die Multiplikation der nun ganz nullwertigen Untermatrix zu überspringen, wodurch die Gesamtberechnung beschleunigt wird und der Energieverbrauch davon verringert wird.
  • 5A zeigt eine Faltung, bei der es gelungen ist, einen leeren (d. h. nullwertigen) Raum in der B-Untermatrix b30 504 für jedes von Null verschiedene Element der B-Untermatrix b20 502 zu finden. Dies könnte nicht immer der Fall sein, weil von Null verschiedene Elemente an zufälligen Indizes erscheinen. In diesem Fall beschreiben die 5B und 5C zwei Ausführungsformen zur Erhöhung der Faltungsgelegenheiten.
  • Eine erste Ausführungsform zur Erhöhung der Faltungsgelegenheiten ist in 5B dargestellt, welche ein Blockdiagramm ist, das eine Matrixmultiplikation mit optimierten Faltungsgelegenheiten zeigt, gemäß einigen Ausführungsformen. Wie dargestellt ist, weist die optimierte B-Untermatrix 522 ausschließlich von Null verschiedene Elemente auf. Wenn sich auf Spalte 1 der optimierten B-Untermatrix 522 konzentriert wird, besteht die Spalte aus zwei Elementtypen, wobei einer durch einen Kreis repräsentiert ist und der andere durch ein Quadrat repräsentiert ist. Eine als 524 bezeichnete Untermatrix a00 weist durch Kreise repräsentierte von Null verschiedene Elemente auf, die mit geeigneten Elementen der B-Untermatrix 522 zu multiplizieren sind, um entsprechende Elemente der C-Matrix 528 zu erzeugen, von denen nur ein Element dargestellt ist. Eine als 526 bezeichnete Untermatrix a01 weist durch Quadrate repräsentierte von Null verschiedene Elemente auf, die mit geeigneten Elementen der optimierten B-Untermatrix 522 zu multiplizieren sind, um entsprechende Elemente der C-Matrix 528 zu erzeugen, von denen nur ein Element dargestellt ist. Durch Bereitstellen von Multiplexern zur Auswahl zwischen den Elementen der Untermatrizen a00 524 und a01 526 erhöht die Ausführungsform aus 5B demgemäß die Gelegenheiten für das Falten von Elementen in der B-Matrix 522. Durch Erhöhung des Niveaus der Multiplexierung wird der Bereich vergrößert, aus dem Elemente der B-Matrix ausgewählt und vertikal heruntergefaltet werden können. Gemäß anderen nicht dargestellten Ausführungsformen sind noch breitere Multiplexer bereitgestellt, um aus einem sogar noch breiteren Satz von A-Untermatrixelementen auszuwählen.
  • Eine zweite Ausführungsform zur Erhöhung der Faltungsgelegenheiten ist in 5C dargestellt, wobei es sich um ein Blockdiagramm handelt, welches die Erhöhung von Faltungsgelegenheiten zeigt, gemäß einigen Ausführungsformen. Wie dargestellt ist, erhöht die in 5C dargestellte Ausführungsform die Faltungsgelegenheiten durch Versuchen, über mehrere Zyklen zu falten, während der „Rest“ nach jedem Zyklus in Erinnerung behalten wird. Der Rest bezeichnet alle Elemente, die in einem Zyklus nicht gefaltet werden konnten. Wie dargestellt ist, fordert der SMM-Befehl 540 die Ausführung einer Multiplikation mit einer dünnbesetzten B-Untermatrix als Faktor. Die als 542 bezeichnete nicht optimierte B-Untermatrix 2,1 weist neun durch Kreise repräsentierte von Null verschiedene Elemente auf, die zur als 544 bezeichneten B-Untermatrix 3,1 zu falten sind, welche sechs nullwertige Elemente aufweist. In einem ersten Zyklus 0 548 wird eine als 546 bezeichnete optimierte B-Untermatrix 3,1 durch Falten von ihr in sechs von Null verschiedene Elemente der B-Untermatrix 2,1 542 gebildet. Der Rest 550, der aus den drei von Null verschiedenen Elementen der B-Untermatrix 2,1 542 besteht, die während des ersten Zyklus nicht gefaltet wurden, wird während eines zweiten Zyklus, Zyklus 1 552, zur optimierten B-Matrix 3,1 546 gefaltet.
  • Die in den 5A-C dargestellten Faltungsoptimierungen können wiederholt werden, bis jedes von Null verschiedene Element in einer B-Matrix umgefaltet wurde, wobei an diesem Punkt diese B-Untermatrix ganz übersprungen werden kann, wodurch der Energieverbrauch verringert wird und die Leistungsfähigkeit erhöht wird.
  • MATRIXVERDICHTUNG
  • 6A ist ein Blockdiagramm, das eine optimierte Ausführung eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls zeigt, gemäß einigen Ausführungsformen. Zur Erläuterung einer Optimierung gemäß einigen Ausführungsformen ist dargestellt, dass der SMM-Befehl 600 sowohl im nicht optimierten Modus 601 als auch im optimierten Modus 611 ausgeführt wird. Die dichte Quellmatrix 602 ist eine 3x3-Matrix mit neun von Null verschiedenen Elementen, die als A an der Stelle (0,0) bis I an der Stelle (2,2) bezeichnet sind. Die dünnbesetzte Quellmatrix 604 ist auch eine 3x3-Matrix und weist als R an der Stelle (0,0) bis Z an der Stelle (2,2) bezeichnete Elemente auf. Die dünnbesetzte Quellmatrix 604 weist jedoch ein nullwertiges Element U 608 auf, das zu einer Nullmultiplikation in einem nicht optimierten Modus führen würde. Die Elemente der Ausgangsmatrix 606 sind algebraisch dargestellt. Beispielsweise ist das Element an der Stelle (0, 0) der C-Matrix 606 „AR+BU+CX“. Im nicht optimierten Modus 601 würden die Elemente der am weitesten links gelegenen Spalte der Ausgangsmatrix 606 nullwertige Produkte B*U, E*U und H*U aufweisen.
  • Während der nicht optimierten Matrixmultiplikation 601 ist die dichte Quellmatrix 602 (auch als A-Matrix bezeichnet) mit der dünnbesetzten Quellmatrix 604 (auch als B-Matrix bezeichnet) zu multiplizieren, um die Ausgangsmatrix 606 (auch als C-Matrix bezeichnet) eine Spalte zur Zeit zu erzeugen. Die nicht optimierte Matrixmultiplikation 602 weist drei Nullmultiplikationen zur Erzeugung der Produkte BU, EU und HU auf. Die nicht optimierte Operation nimmt drei Zyklen in Anspruch.
  • Zur Optimierung der Multiplikation gemäß offenbarten Ausführungsformen nutzt die Routing-Schaltungsanordnung, wie nachstehend beschrieben, jedoch eine Gelegenheit zur Verschiebung des Elements 609 zur Verwendung der Multiplikationsressourcen aus, die andernfalls für die das nullwertige Element 608 betreffende Nullmultiplikation verwendet werden würden. Bei der Operation kann ein anderes Element in die vom Element 619 freigegebene Stelle verschoben werden.
  • Wenn alle Elemente in einer Spalte der dünnbesetzten Quellmatrix 604 verschoben werden, überspringt die Ausführung die nun leere Spalte. Der optimierte Modus würde dann wenigstens einen Taktzyklus weniger benötigen, um die Multiplikation auszuführen.
  • Bei der optimierten Version der Operation 611 sind die A-, B- und C-Matrizen als 612, 614 bzw. 616 bezeichnet. Dieses Mal verschiebt die Routing-Schaltungsanordnung gemäß einigen Ausführungsformen das Element „V“ von der als 619 bezeichneten Stelle (1,1) zur als 618 bezeichneten Stelle (1,1).
  • Nach der Optimierung wird die Ausführungshardware nicht mehr verwendet, um mit null zu multiplizieren. Vielmehr werden diese Multiplizierer verwendet, um nützliche Produkte BV, EV und HV zu erzeugen. Beim optimierten Modus werden die Multiplizierer, die zur Erzeugung von BU, EU und HU im nicht optimierten Modus verwendet werden würden, nun verwendet, um nützliche von Null verschiedene Produkte BV, EV und HV zu erzeugen. Zur Implementation der Optimierung werden die ansonsten möglicherweise auftretenden nullwertigen Produkte BU, EU und HU nicht mehr erzeugt. Stattdessen werden nützliche (d. h. von Null verschiedene) Produkte BV, EV und HV erzeugt und mit den in der zweiten Spalte der C-Matrix 616 erzeugten Produkten akkumuliert, wobei diese Elemente im nicht optimierten Modus zu erzeugen wären.
  • 6B ist ein Blockflussdiagramm, das eine Matrixverdichtung durch einen einen Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl ausführenden Prozessor gemäß einigen Ausführungsformen zeigt. Wie dargestellt ist, soll die beispielsweise mit Bezug auf die 1 - 8, 13A-B und 14A-B dargestellte und beschriebene Routing- und Ausführungsschaltungsanordnung den SMM-Befehl 620 über fünf Zyklen ausführen. Es ist ein Teil dieser Ausführung dargestellt, wobei nämlich die Verarbeitung der 8×8-B-Matrix über die fünf Zyklen dargestellt ist und als B-Matrixzyklus 0-4, 621A-E bezeichnet ist. Fünf Snapshots der B-Matrix sind als 622 -630 dargestellt.
  • Ohne Optimierung wären unter der Annahme, dass eine Spalte der B-Matrix pro Zyklus verarbeitet wird, 8 Zyklen erforderlich, um die B-Matrix zu verarbeiten. Die erläuterte Ausführungsform optimiert die Ausführung jedoch durch Ausnutzen von Gelegenheiten zur Verdichtung von Null verschiedener Elemente in benachbarte nullwertige Schlitze.
  • Die erläuterte Ausführungsform verwendet beim Betrieb ein paarweises Spalten-„Verdichtungsfenster“ zur Verschiebung von Null verschiedener Elemente, sofern möglich, in benachbarte nullwertige Schlitze. Das paarweise Verdichtungsfenster ist ein Gleitendes-Fenster-Ansatz, und jegliche Elemente, die nicht „verdichtbar“ waren, werden in die nächste Iteration übernommen (wie beim Beispiel dargestellt ist). Eine Optimierungsgelegenheit ergibt sich jedes Mal dann, wenn eine Spalte angetroffen wird, die nur aus Nullen besteht, wobei das Verdichtungsfenster diese Spalte ganz überspringen kann, wodurch die Leistungsfähigkeit verbessert wird und der Energieverbrauch verringert wird. Gemäß einigen nicht dargestellten Ausführungsformen ist das Verdichtungsfenster breiter als dargestellt. Gemäß einigen Ausführungsformen, wie beispielsweise in den 6C-D dargestellt und beschrieben ist, kann ein im Verdichtungsfenster identifiziertes von Null verschiedenes Element gemäß spezifizierten Verschiebungsregeln zu einem verfügbaren nahe gelegenen nullwertigen Schlitz verschoben werden. Gemäß der Ausführungsform aus den 6A-B kann ein Element nur horizontal von rechts nach links innerhalb der Fenstergröße verschoben werden. Wie mit Bezug auf die 6C-D gezeigt wird, kann gemäß einigen Ausführungsformen ein Element horizontal von der rechten zur linken Spalte verschoben werden und auch um eine Stelle nach oben oder nach unten verschoben werden, wodurch die Gelegenheiten für die Verschiebung von Elementen vergrößert werden. Die Ausführungsform aus 6C zeigt daher eine als 643 bezeichnete „Fensterscheibenbreite“ von 3 Elementen. Gemäß anderen Ausführungsformen kann die Fensterscheibenbreite verschieden sein.
  • Um zur Erörterung von 6B zurückzukehren, analysiert die Routing-Schaltungsanordnung in Zyklus 0, wie durch Snapshot 622 dargestellt ist, ein paarweises Fenster 631A an den ersten beiden Spalten der B-Matrix 621A, um zwei von Null verschiedene Elemente an den Stellen (0,1) und (5,1) zu identifizieren und zu benachbarten nullwertigen Schlitzen zu verschieben, wodurch eine teilweise optimierte B-Matrix 621B erzeugt wird.
  • Es sei bemerkt, dass die B-Matrix 521B, selbst nachdem sie optimiert wurde, noch nullwertige Elemente an den Stellen (3,0) und (6,0) der ersten Spalte enthält. Gemäß Ausführungsformen mit erhöhten Routing-Gelegenheiten, wie beispielsweise mit Bezug auf 6C dargestellt und beschrieben, werden die Stellen (3,0) und (6,0) der ersten Spalte mit von Null verschiedenen Elementen gefüllt, werden Nullmultiplikationen vermieden, wird die Leistungsfähigkeit durch Beseitigen eines Zyklus verbessert und wird der Energieverbrauch verringert. Gemäß einigen Ausführungsformen werden die nullwertigen Elemente der Spalte null der B-Matrix 521B identifiziert und wird die Nullmultiplikation vermieden. Gemäß anderen Ausführungsformen darf die Nullmultiplikation fortgesetzt werden.
  • In Zyklus 1, wie durch Snapshot 624 dargestellt ist, analysiert die Routing-Schaltungsanordnung ein paarweises Fenster 631B auf den nächsten beiden Spalten der B-Matrix 621B, um vier von Null verschiedene Elemente zu identifizieren und sie von den Stellen (0,2), (3,2), (4,2) und (6,2) zu benachbarten nullwertigen Schlitzen zu verschieben und dadurch eine teilweise optimierte B-Matrix 621C zu erzeugen.
  • Eine Optimierungsgelegenheit 632 existiert in der optimierten B-Matrix 621C. Insbesondere weist Spalte 2 der optimierten B-Matrix 621C keine von Null verschiedenen Elemente auf und kann daher übersprungen werden, um die Leistungsfähigkeit um einen Zyklus zu verbessern und den Energieverbrauch zu verringern. In Zyklus 2 hat das paarweise Verdichtungsfenster 631C dann, wie durch Snapshot 626 dargestellt ist, Spalte 2 der B-Matrix übersprungen und überspannt nun die Spalten drei bis vier. Die Routing-Schaltungsanordnung analysiert das paarweise Fenster 631C auf den Spalten drei bis vier der B-Matrix 621C, um ein von Null verschiedenes Element zu identifizieren und es von der Stelle (0,4) zu einem benachbarten nullwertigen Schlitz zu verschieben und dadurch eine teilweise optimierte B-Matrix 621D zu erzeugen.
  • In Zyklus 3, wie durch Snapshot 628 dargestellt, wird das paarweise Verdichtungsfenster 631D um ein Element verschoben, um nun die Spalten 4 - 5 der B-Matrix 621D zu analysieren. Die Routing-Schaltungsanordnung analysiert das paarweise Fenster 631D auf den Spalten vier bis fünf der B-Matrix 621D, um fünf von Null verschiedene Elemente zu identifizieren und von den Stellen (2,5), (3,5), (4,5), (6,5) und (7,5) zu benachbarten nullwertigen Schlitzen zu verschieben und dadurch eine teilweise optimierte B-Matrix 621E zu erzeugen.
  • Eine andere Optimierungsgelegenheit 634 existiert in der optimierten B-Matrix 621E. Insbesondere weist Spalte 5 der optimierten B-Matrix 621E keine von Null verschiedenen Elemente auf und kann daher übersprungen werden, um die Leistungsfähigkeit zu verbessern und den Energieverbrauch zu verringern. In Zyklus 4 hat das paarweise Verdichtungsfenster 631E dann, wie durch Snapshot 630 dargestellt ist, Spalte 5 der B-Matrix übersprungen und überspannt nun die Spalten sechs bis sieben. Die Routing-Schaltungsanordnung analysiert das paarweise Fenster 631E auf den Spalten sechs bis sieben der B-Matrix 621E, um vier von Null verschiedene Elemente zu identifizieren und von den Stellen (3,7), (4,7), (6,7) und (7,7) zu benachbarten nullwertigen Schlitzen zu verschieben und dadurch eine andere ganz aus Nullen bestehende Spalte, Spalte 7, zu erzeugen, die übersprungen werden kann, um den Energieverbrauch und die Leistungsfähigkeit zu optimieren.
  • 6C ist ein anderes Blockflussdiagramm, das eine Matrixverdichtung durch einen einen Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl ausführenden Prozessor gemäß einigen Ausführungsformen zeigt. Wie dargestellt ist, soll die beispielsweise mit Bezug auf die 1 - 5C, 7 - 8, 13A-B und 14A-B dargestellte und beschriebene Routing- und Ausführungsschaltungsanordnung den SMM-Befehl 640 über fünf Zyklen ausführen. Es ist ein Teil dieser Ausführung dargestellt, wobei nämlich die Verarbeitung der 8×8-B-Matrix über die fünf Zyklen dargestellt ist und als B-Matrixzyklus 0-4, 641A-E bezeichnet ist. Fünf Snapshots der B-Matrix sind dargestellt und als 642, 644, 646, 648 und 650 bezeichnet.
  • Ohne Optimierung wären unter der Annahme, dass eine Spalte der B-Matrix pro Zyklus verarbeitet wird, 8 Zyklen erforderlich, um die B-Matrix zu verarbeiten. Die erläuterte Ausführungsform optimiert die Ausführung jedoch durch Verwenden der Routing-Schaltungsanordnung zum Ausnutzen von Gelegenheiten zur Verdichtung von Null verschiedener Elemente in nahe gelegene nullwertige Schlitze.
  • Die erläuterte Ausführungsform verwendet beim Betrieb ein paarweises Spalten-„Verdichtungsfenster“ zur Verschiebung von Null verschiedener Elemente, sofern möglich, in nahe gelegene nullwertige Schlitze. Das paarweise Verdichtungsfenster ist ein Gleitendes-Fenster-Ansatz, und jegliche Elemente, die nicht „verdichtbar“ waren, werden in die nächste Iteration übernommen (wie beim Beispiel dargestellt ist). Eine Optimierungsgelegenheit ergibt sich jedes Mal dann, wenn eine Spalte angetroffen wird, die nur aus Nullen besteht, wobei das Verdichtungsfenster diese Spalte überspringen kann. Hier sind vier solche Gelegenheiten als 652, 654, 656 und 658 bezeichnet.
  • In Zyklus 0, wie durch Snapshot 642 dargestellt ist, analysiert die Routing-Schaltungsanordnung ein paarweises Fenster 651A auf den ersten beiden Spalten der B-Matrix 641A, um vier von Null verschiedene Elemente zu identifizieren und sie von den Stellen (0,1), (2,1), (5,1) und (7,1) zu nahe gelegenen nullwertigen Schlitzen zu verschieben und dadurch eine teilweise optimierte B-Matrix 641B zu erzeugen.
  • Es sei bemerkt, dass gemäß der in 6B dargestellten Ausführungsform nur die horizontale Verschiebung der Elemente erlaubt wurde, so dass die Elemente an den Stellen (2,1) und (7,1) nicht in Zyklus 0 verschoben worden sind. Die Ausführungsform aus 6C hat jedoch eine höhere „Fensterscheibengröße“ aus 3 Elementen, wobei ein Beispiel davon als 643 bezeichnet ist. Mit der höheren Fensterscheibengröße können die Elemente an den Stellen (2,1) und (7,1) in Zyklus 0 verschoben werden. Gemäß anderen nicht dargestellten Ausführungsformen ist die Fensterscheibengröße verschieden, sei es größer oder kleiner.
  • Es sei bemerkt, dass einige der von Null verschiedenen Elemente, die in Zyklus 0 verschoben wurden, zu diagonal benachbarten nullwertigen Schlitzen verschoben wurden. Um eine solche Verschiebung zu ermöglichen, wird eine Schaltungsanordnung in der Art der in 6D dargestellten verwendet, um das geeignete entsprechende Element der A-Matrix, das mit dem verschobenen Element der B-Matrix zu multiplizieren ist, weiterzuleiten. Gemäß anderen Ausführungsformen hat der Multiplexer 662 (6D) beispielsweise, wenn die Fensterscheibengröße drei übersteigt, zusätzliche A-Elemente als Eingaben.
  • Eine Optimierungsgelegenheit 652 existiert in der optimierten B-Matrix 641B. Insbesondere weist Spalte 1 der optimierten B-Matrix 641B keine von Null verschiedenen Elemente auf und kann daher übersprungen werden, um die Leistungsfähigkeit zu verbessern und den Energieverbrauch zu verringern. In Zyklus 1 hat das paarweise Verdichtungsfenster 651B dann, wie durch Snapshot 644 dargestellt ist, Spalte 1 der B-Matrix übersprungen und überspannt nun die Spalten zwei bis drei. Die Routing-Schaltungsanordnung analysiert das paarweise Fenster 651B auf den Spalten zwei bis drei der B-Matrix 641B, um vier von Null verschiedene Elemente zu identifizieren und von den Stellen (1,3), (3,3), (4,3) und (7,3) zu nahe gelegenen nullwertigen Schlitzen zu verschieben und dadurch eine teilweise optimierte B-Matrix 641C zu erzeugen.
  • Eine andere Optimierungsgelegenheit 654 existiert in der optimierten B-Matrix 641C. Insbesondere weist Spalte 3 der optimierten B-Matrix 641C keine von Null verschiedenen Elemente auf und kann daher übersprungen werden, um die Leistungsfähigkeit zu verbessern und den Energieverbrauch zu verringern. In Zyklus 2 hat das paarweise Verdichtungsfenster 651C dann, wie durch Snapshot 646 dargestellt ist, Spalte 3 der B-Matrix übersprungen und überspannt nun die Spalten vier bis fünf. Die Routing-Schaltungsanordnung analysiert das paarweise Fenster 651C auf den Spalten vier bis fünf der B-Matrix 641C, um vier von Null verschiedene Elemente zu identifizieren und von den Stellen (2,5), (4,5), (6,5) und (7,5) zu nahe gelegenen nullwertigen Schlitzen zu verschieben und dadurch eine teilweise optimierte B-Matrix 641D zu erzeugen.
  • Eine andere Optimierungsgelegenheit 656 existiert in der optimierten B-Matrix 641D. Insbesondere weist Spalte 5 der optimierten B-Matrix 641D keine von Null verschiedenen Elemente auf und kann daher übersprungen werden, um die Leistungsfähigkeit zu verbessern und den Energieverbrauch zu verringern. In Zyklus 3 hat das paarweise Verdichtungsfenster 651D dann Spalte 5 der B-Matrix übersprungen und überspannt nun die Spalten sechs bis sieben. Die Routing-Schaltungsanordnung analysiert ein paarweises Fenster 651D auf den Spalten sechs bis sieben der B-Matrix 641D, um fünf von Null verschiedene Elemente zu identifizieren und von den Stellen (0,7), (3,7), (4,7), (6,7) und (7,7) zu nahe gelegenen nullwertigen Schlitzen zu verschieben und dadurch eine teilweise optimierte B-Matrix 641E zu erzeugen.
  • Eine andere Optimierungsgelegenheit 658 existiert in der optimierten B-Matrix 641E. Insbesondere weist Spalte 7 der optimierten B-Matrix 641E keine von Null verschiedenen Elemente auf und kann daher übersprungen werden, um die Leistungsfähigkeit zu verbessern und den Energieverbrauch zu verringern. In Zyklus 4 gibt es dann, wie durch Snapshot 650 dargestellt, keine noch zu verarbeitenden Spalten der optimierten B-Matrix 641E.
  • 6D ist ein Blockdiagramm, das eine Schaltung zur Unterstützung der Matrixverdichtung für einen Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl zeigt, gemäß einigen Ausführungsformen. Eine Schaltung 660 kann verwendet werden, um während einer Verdichtungsoperation, wie mit Bezug auf die 6A-B dargestellt und beschrieben, mehr Optimierungsgelegenheiten zu ermöglichen. Insbesondere ermöglicht die Schaltung 660, dass ein Element der B-Matrix diagonal verschoben wird, so dass es mit dem geeigneten entsprechenden Element der A-Matrix für die Multiplikation ausgerichtet wird. Wie dargestellt ist, weist die Schaltung 660 den Multiplexer 662 auf, um eines von drei Elementen der A-Matrix zu einem Multiplizierer 664 zu leiten, der bei der Implementation eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls zu verwenden ist. Gemäß anderen nicht dargestellten Ausführungsformen werden die Optimierungsgelegenheiten weiter verbessert, indem eine Auswahl einer größeren Zahl von Elementen der A-Matrix ermöglicht wird. Beispielsweise kann ein 8-zu-1-Multiplexer verwendet werden, wodurch ermöglicht wird, dass das B-Element zu einem von acht verfügbaren nullwertigen Schlitzen verschoben wird.
  • MULTIPLIKATIONS-AKKUMULATIONS-SCHALTUNGSANORDNUNG
  • 7 ist ein Blockdiagramm, das eine Multiplikations-Akkumulations(MAC)-Schaltung für einen Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl zeigt, gemäß einigen Ausführungsformen. Wie dargestellt ist, weist die MAC-Schaltung 700 acht Multiplizierer 702 - 716, gefolgt von einem binären Baum von sieben Zwei-Eingangs-Addierern 718 - 730, auf. Gemäß einigen Ausführungsformen wird das Ergebnis vom Addierer 730 mit einem vorhergehenden Wert eines Ziels akkumuliert. Gemäß anderen Ausführungsformen werden breitere Addierer und/oder Multiplizierer verwendet.
  • Wenn er von der Ausführungsschaltungsanordnung zur Implementation eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls, beispielsweise wie mit Bezug auf die 1 - 6D dargestellt und beschrieben, verwendet wird, wählt ein (nicht dargestellter) Multiplexer am Eingang jedes der Multiplizierer 702 - 716 ein Element aus der A-Matrix aus, das mit dem entsprechenden Element der B-Matrix, das gemäß dem Algorithmus multipliziert wird, übereinstimmt. Ferner wird bei Verwendung mit der Ausführungsschaltungsanordnung zur Implementation der Dünnbesetzte-Matrix-Multiplikation (SMM) die Ausgabe des Addierers 730 weitergeleitet, um sie gemäß dem Algorithmus mit dem geeigneten Ausgangsmatrixelement zu akkumulieren.
  • Natürlich ist zu bemerken, dass, wenn eine dünnbesetzte Matrix gefaltet oder verdichtet wird, wie beispielsweise mit Bezug auf die 4 - 6D dargestellt und beschrieben, die Multiplexer 702 - 716 aus zusätzlichen Elementen der A-Matrix auswählen. Ähnlich ist, wenn ein gefaltetes Element verwendet wird, um ein Produkt zu erzeugen, ein anderer Addierer als der Addierer 730 erforderlich, um dieses Produkt mit dem geeigneten Element der Zielmatrix (auch als C-Matrix bezeichnet) zu akkumulieren.
  • BEISPIELHAFTES VERFAHREN ZUR BESCHLEUNIGUNG DER DÜNNBESETZTE-MATRIX-MULTIPLIKATION
  • 8 ist ein Blockflussdiagramm eines Prozessors, der einen Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl ausführt, gemäß einigen Ausführungsformen. Wie dargestellt ist, beginnt der Fluss 800 bei 802, wo Prozessor unter Verwendung einer Abrufschaltungsanordnung den SMM-Befehl abrufen soll, der Felder zur Spezifikation der Stellen der ersten, der zweiten und der Ausgangsmatrix aufweist, wobei die spezifizierte zweite Matrix eine dünnbesetzte Matrix ist, wobei die Abrufschaltungsanordnung ferner Elemente der spezifizierten ersten und zweiten Matrix von ihren spezifizierten Stellen abrufen und in einer Registerdatei speichern soll. Bei 804 soll der Prozessor unter Verwendung einer Decodierschaltungsanordnung den abgerufenen SMM-Befehl decodieren. Bei 806 soll der Prozessor unter Verwendung der Ausführungsschaltungsanordnung auf den decodierten SMM-Befehl reagieren durch Packen der in der Registerdatei gespeicherten spezifizierten zweiten Matrix durch Ersetzen eines oder mehrerer nullwertiger Elemente durch noch zu verarbeitende von Null verschiedene Elemente, wobei jedes ersetzte Element ein Feld zur Identifikation seiner logischen Position innerhalb der zweiten Matrix aufweist, und ferner unter Verwendung der Ausführungsschaltungsanordnung Folgendes ausführen: für jedes von Null verschiedene Element an Zeile M und Spalte K der spezifizierten ersten Matrix Erzeugen eines Produkts des von Null verschiedenen Elements und jedes entsprechenden von Null verschiedenen Elements an Zeile K und Spalte N der gepackten zweiten Matrix und Akkumulieren jedes erzeugten Produkts und eines vorhergehenden Werts eines entsprechenden Elements an Zeile M und Spalte N der spezifizierten Ausgangsmatrix. Gemäß einigen Ausführungsformen soll der Prozessor bei 808 Ausführungsergebnisse zurückschreiben und den SMM-Befehl zurückziehen. Operation 808 ist optional, wie durch ihre gestrichelten Ränder angegeben ist, sofern sie zu einer anderen Zeit oder gar nicht auftreten kann.
  • BEISPIELHAFTES FORMAT EINES DÜNNBESETZTE-MATRIX-MULTIPLIKATIONS(SMM)-BEFEHLS
  • 9 ist ein Format eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls gemäß einigen Ausführungsformen. Wie dargestellt ist, weist ein Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl 900 einen Opcode 902 (SMM*) und Felder zur Spezifikation einer Zielmatrix 904, einer Quellmatrix 1 906 und einer Quellmatrix 2 908 auf. Wie hier verwendet, werden die Quellmatrix 1, die Quellmatrix 2 und die Zielmatrix manchmal als A-, B- bzw. C-Matrix bezeichnet. Der SMM-Befehl 900 weist ferner optionale Felder zur Spezifikation des Datenformats 910 in der Art eines ganzzahligen, Halbpräzisions-Gleitkomma-, Einfache-Präzisions-Gleitkomma- oder Doppelte-Präzisions-Gleitkomma-Formats und der Elementgröße 912 in Bezug auf die Anzahl der Bits pro Matrixelement auf. Der SMM-Befehl 900 weist manchmal Felder zur Spezifikation von M 914, N 916 und K 918 auf, wobei die spezifizierten A-, B- und C-Matrizen (M × K), (K × N) bzw. (M × N) Elemente aufweisen. Wie durch die gestrichelten Ränder angegeben ist, sind das Datenformat 910, die Elementgröße 912, M 914, N 916 und K 918 optional, so dass sie fortgelassen werden können und vorgegebene Standardwerte annehmen. Gemäß einigen Ausführungsformen werden eines oder mehrere vom Datenformat 910, von der Elementgröße 912, von M 914, N 916 und K 918 als Teil des Opcodes 902 spezifiziert, beispielsweise als ein ausgewählter Code für den Opcode, ein Suffix oder ein Präfix. Beispielsweise kann der Opcode 902 einen Suffix in der Art von „B“, „W“, „D“ oder „Q“ aufweisen, um eine Elementgröße von acht, sechzehn, zweiunddreißig bzw. vierundsechzig Bits zu spezifizieren. Wie dargestellt weist der Opcode 902 einen Stern auf, um anzugeben, dass er optional zusätzliche Präfixe oder Suffixe zur Spezifikation des Befehlsverhaltens aufweisen kann. Falls der SMM-Befehl 900 keinen der optionalen Parameter spezifiziert, werden nach Bedarf vorgegebene Standardwerte angewendet. Das Format des SMM-Befehls 900 wird weiter mit Bezug auf die 10A-B und die 11A-D dargestellt und beschrieben.
  • BEFEHLSSÄTZE
  • Ein Befehlssatz kann ein oder mehrere Befehlsformate aufweisen. Ein gegebenes Befehlsformat kann verschiedene Felder definieren (beispielsweise die Anzahl von Bits, die Stelle der Bits), um unter anderem die auszuführende Operation (beispielsweise Opcode) und den einen oder die mehreren Operanden, woran diese Operation auszuführen ist, und/oder ein oder mehrere andere Datenfelder (beispielsweise eine Maske) zu spezifizieren. Einige Befehlsformate werden ferner durch die Definition von Befehlsschablonen (oder Unterformaten heruntergebrochen). Beispielsweise können die Befehlsschablonen eines gegebenen Befehlsformats so definiert werden, dass sie unterschiedliche Teilmengen der Befehlsformatfelder aufweisen (die enthaltenen Felder liegen typischerweise in der gleichen Reihenfolge vor, zumindest einige haben jedoch unterschiedliche Bitpositionen, weil weniger Felder aufgenommen sind) und/oder so definiert werden, dass sie ein anderes interpretiertes gegebenes Feld aufweisen. Demgemäß wird jeder Befehl eines ISA unter Verwendung eines gegebenen Befehsformats ausgedrückt (und, falls definiert, in einer gegebenen der Befehlsschablonen dieses Befehlsformats) und weist Felder zur Spezifikation der Operation und der Operanden auf. Beispielsweise hat ein beispielhafter ADD-Befehl einen spezifischen Opcode und ein spezifisches Befehlsformat, das ein Opcode-Feld zur Spezifikation dieses Opcodes und Operandenfelder zur Auswahl von Operanden (Quellel/Ziel und Quelle2) aufweist, und weist ein Auftreten dieses ADD-Befehls in einem Befehlsstrom spezifische Inhalte in den Operandenfeldern auf, welche spezifische Operanden auswählen. Ein Satz von SIMD-Erweiterungen, der als Advanced Vector Extensions (AVX) (AVX1 und AVX2) bezeichnet wird und das Vector-Extensions(VEX)-Codierschema verwendet, wurde herausgegeben und/oder veröffentlicht (siehe beispielsweise Intel® 64 und IA-32 Architectures Software Developer's Manual, September 2014 und Intel® Advanced Vector Extensions Programming Reference, Oktober 2014).
  • BEISPIELHAFTE BEFEHLSFORMATE
  • Hier beschriebene Ausführungsformen des einen oder der mehreren Befehle können in verschiedenen Formaten verwirklicht werden. Zusätzlich werden nachstehend beschriebene Systeme, Architekturen und Pipelines detailliert dargelegt. Ausführungsformen des einen oder der mehreren Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind jedoch nicht auf die detailliert dargelegten beschränkt.
  • GENERISCHES VEKTORFREUNDLICHES BEFEHLSFORMAT
  • Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (es gibt beispielsweise bestimmte für Vektoroperationen spezifische Felder). Wenngleich Ausführungsformen beschrieben werden, bei denen sowohl Vektor- als auch Skalaroperationen durch das vektorfreundliche Befehlsformat unterstützt werden, verwenden alternative Ausführungsformen nur Vektoroperationen des vektorfreundlichen Befehlsformats.
  • Die 10A - 10B sind Blockdiagramme, die ein generisches vektorfreundliches Befehlsformat und Befehlsschablonen davon gemäß einigen Ausführungsformen der Erfindung zeigen. 10A ist ein Blockdiagramm, das ein generisches vektorfreundliches Befehlsformat und Klasse-A-Befehlsschablonen davon zeigt, gemäß einigen Ausführungsformen der Erfindung, während 10B ein Blockdiagramm ist, welches das generische vektorfreundliche Befehlsformat und Klasse-B-Befehlsschablonen davon zeigt, gemäß einigen Ausführungsformen der Erfindung. Insbesondere ist ein generisches vektorfreundliches Befehlsformat 1000 dargestellt, für das Klasse-A- und Klasse-B-Befehlsschablonen definiert sind, die beide Kein-Speicherzugriffs-Befehlsschablonen 1005 und Speicherzugriffs-Befehlsschablonen 1020 aufweisen. Der Begriff generisch in Zusammenhang mit dem vektorfreundlichen Befehlsformat bezieht sich darauf, dass das Befehlsformat nicht an einen spezifischen Befehlssatz gebunden ist.
  • Wenngleich Ausführungsformen der Erfindung beschrieben werden, bei denen das vektorfreundliche Befehlsformat Folgendes unterstützt: eine 64-Byte-Vektoroperandenlänge (oder -größe) mit 32-Bit(4-Byte)- oder 64-Bit(8-Byte)-Datenelementbreiten (oder -größen) (so dass ein 64-Byte-Vektor entweder aus 16 Doppelwort-Größenelementen oder alternativ 8-Quadwort-Größenelemeten besteht), eine 64-Byte-Vektoroperandenlänge (oder -größe) mit 16-Bit(2-Byte)- oder 8-Bit(1-Byte)-Datenelementbreiten (oder -größen), eine 32-Byte-Vektoroperandenlänge (oder -größe) mit 32-Bit(4-Byte)-, 64-Bit(8-Byte)-, 16-Bit(2-Byte)- oder 8-Bit(1-Byte)-Datenelementbreiten (oder -größen) und eine 16-Byte-Vektoroperandenlänge (oder -größe) mit 32-Bit(4-Byte)-, 64-Bit(8-Byte)-, 16-Bit(2-Byte)- oder 8-Bit(1-Byte)-Datenelementbreiten (oder -größen), können alternative Ausführungsformen mehr, weniger und/oder verschiedene Vektoroperandengrößen (beispielsweise 256-Byte-Vektoroperanden) mit mehr, weniger oder verschiedenen Datenelementbreiten (beispielsweise 128-Bit(16-Byte)-Datenelementbreiten) unterstützen.
  • Die Klasse-A-Befehlsschablonen in 10A weisen Folgendes auf: 1) innerhalb der Kein-Speicherzugriffs-Befehlsschablonen 1005 sind eine Kein-Speicherzugriffs-Vollständige-Rundung-Steuertyp-Operations-Befehlsschablone 1010 und eine Kein-Speicherzugriffs-Datentransformationstypoperations-Befehlsschablone 1015 dargestellt, und 2) innerhalb der Speicherzugriffs-Befehlsschablonen 1020 sind eine temporale Speicherzugriffs-Befehlsschablone 1025 und eine nicht-temporale Speicherzugriffs-Befehlsschablone 1030 dargestellt. Die Klasse-B-Befehlsschablonen in 10B weisen Folgendes auf: 1) innerhalb der Kein-Speicherzugriffs-Befehlsschablonen 1005 sind eine Kein-Speicherzugriffs-Schreibmaskensteuerungs-Teilweise-Rundung-Steuertypoperations-Befehlsschablone 1012 und eine Kein-Speicherzugriffs-Schreibmaskensteuerungs-V-Größentyp-Operations-Befehlsschablone 1017 dargestellt, und 2) innerhalb der Speicherzugriffs-Befehlsschablonen 1020 ist eine Speicherzugriffs-Schreibmaskensteuerungs-Befehlsschablone 1027 dargestellt.
  • Das generische vektorfreundliche Befehlsformat 1000 weist die folgenden nachstehend in der in den 10A - 10B dargestellten Reihenfolge aufgelisteten Felder auf.
  • Formatfeld 1040 - ein spezifischer Wert (ein Befehlsformatkennungswert) in diesem Feld identifiziert eindeutig das vektorfreundliche Befehlsformat und demgemäß Instanzen von Befehlen im vektorfreundlichen Befehlsformat in Befehlsströmen. Dabei ist dieses Feld in dem Sinne optional, dass es für einen Befehlssatz nicht benötigt wird, der nur das generische vektorfreundliche Befehlsformat aufweist.
  • Basisoperationsfeld 1042 - sein Inhalt unterscheidet verschiedene Basisoperationen.
  • Registerindexfeld 1044 - sein Inhalt spezifiziert direkt oder durch Adresserzeugung die Stellen der Quell- und Zieloperanden, ob sie sich in Registern oder im Speicher befinden. Diese weisen eine ausreichende Anzahl von Bits auf, um N Register aus einer PxQ(beispielsweise 32x512, 16x128, 32x1024, 64x1024)-Registerdatei auszuwählen. Wenngleich gemäß einer Ausführungsform N aus bis zu drei Quell- und einem Zielregister bestehen kann, können alternative Ausführungsformen mehr oder weniger Quell- und Zielregister unterstützen (sie können beispielsweise bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als Ziel wirkt, sie können bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als Ziel wirkt, und sie können bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifizierfeld 1046 - sein Inhalt unterscheidet Instanzen von Befehlen im generischen Vektorbefehlsformat, welche den Speicherzugriff von jenen, die dies nicht tun, spezifizieren, d. h. zwischen Kein-Speicherzugriffs-Befehlsschablonen 1005 und Speicherzugriffs-Befehlsschablonen 1020. Speicherzugriffsoperationen lesen und/oder schreiben in die Speicherhierarchie (wobei sie in manchen Fällen die Quell- und/oder Zieladressen unter Verwendung von Werten in Registern spezifizieren), während dies bei Nicht-Speicherzugriffsoperationen nicht der Fall ist (beispielsweise sind die Quelle und die Ziele Register). Wenngleich dieses Feld gemäß einer Ausführungsform auch zwischen drei verschiedenen Arten zur Ausführung von Speicherzugriffsberechnungen auswählt, können alternative Ausführungsformen mehr, weniger oder andere Arten zur Ausführung von Speicherzugriffsberechnungen unterstützen.
  • Erweiterungsoperationsfeld 1050 - sein Inhalt entscheidet, welche von einer Vielzahl verschiedener Operationen zusätzlich zur Basisoperation auszuführen ist. Dieses Feld ist kontextspezifisch. Gemäß einigen Ausführungsformen wird dieses Feld in ein Klassenfeld 1068, ein Alphafeld 1052 und ein Betafeld 1054 unterteilt. Das Erweiterungsoperationsfeld 1050 ermöglicht es, dass gemeinsame Gruppen von Operationen statt in 2, 3 oder 4 Befehlen in einem einzigen Befehl ausgeführt werden.
  • Skalierungsfeld 1060 - sein Inhalt ermöglicht die Skalierung des Inhalts des Indexfelds für die Speicherzugriffserzeugung (beispielsweise für eine Adresserzeugung, die 2Skalierung * Index + Basis verwendet).
  • Versatzfeld 1062A - sein Inhalt wird als Teil der Speicheradresserzeugung verwendet (beispielsweise für eine Adresserzeugung, die 2Skalierung * Index + Basis + Versatz verwendet).
  • Versatzfaktorfeld 1062B (es sei bemerkt, dass die Gegenüberstellung des Versatzfelds 1062A direkt über dem Versatzfaktorfeld 1062B angibt, dass das eine oder das andere verwendet wird) - sein Inhalt wird als Teil der Adresserzeugung verwendet: Es spezifiziert einen Versatzfaktor, der mit der Größe eines Speicherzugriffs (N) zu skalieren ist - wobei N die Anzahl der Bytes im Speicherzugriff ist (beispielsweise für eine Adresserzeugung, die 2Skalierung * Index + Basis + skalierter Versatz verwendet). Redundante niederwertige Bits werden ignoriert, so dass der Inhalt des Versatzfaktorfelds mit der Speicheroperanden-Gesamtgröße (N) multipliziert wird, um den endgültigen Versatz zu erzeugen, der bei der Berechnung einer effektiven Adresse zu verwenden ist. Der Wert von N wird durch die Prozessorhardware zur Laufzeit auf der Grundlage des Vollständiger-Opcode-Felds 1074 (hier nachstehend beschrieben) und des Datenmanipulationsfelds 1054C bestimmt. Das Versatzfeld 1062A und das Versatzfaktorfeld 1062B sind in dem Sinne optional, dass sie nicht für die Kein-Speicherzugriffs-Befehlsschablonen 1005 verwendet werden und/oder verschiedene Ausführungsformen nur eine oder keine der beiden implementieren können.
  • Datenelementbreitenfeld 1064 - sein Inhalt entscheidet, welche von einer Anzahl von Datenelementbreiten zu verwenden ist (gemäß einigen Ausführungsformen für alle Befehle, gemäß anderen Ausführungsformen für nur einige der Befehle). Dieses Feld ist in dem Sinne optional, dass es nicht erforderlich ist, falls nur eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unter Verwendung irgendeines Aspekts der Opcodes unterstützt werden.
  • Schreibmaskenfeld 1070 - sein Inhalt steuert auf einer Pro-Datenelement-Positionsbasis, ob diese Datenelementposition im Zielvektoroperanden das Ergebnis der Basisoperation und der Erweiterungsoperation reflektiert. Klasse-A-Befehlsschablonen unterstützen Zusammenfügung-Schreibmaskierung, während Klasse-B-Befehlsschablonen sowohl Zusammenfügung- als auch Nullsetzungs-Schreibmaskierungen unterstützen. Wenn zusammengefügt wird, ermöglichen Vektormasken, dass ein Satz von Elementen am Ziel während der Ausführung einer Operation (durch die Basisoperation und die Erweiterungsoperation spezifiziert) vor Aktualisierungen geschützt wird, und gemäß einer anderen Ausführungsform wird der alte Wert jedes Elements des Ziels bewahrt, wobei das entsprechende Maskenbit eine 0 aufweist. Wenn dagegen Nullsetzungsvektormasken ermöglichen, dass jeglicher Satz von Elementen am Ziel während der Ausführung einer Operation (durch die Basisoperation und die Erweiterungsoperation spezifiziert) auf Null gesetzt wird, wird gemäß einer Ausführungsform ein Element des Ziels auf Null gesetzt, wenn das entsprechende Maskenbit einen 0-Wert hat. Eine Teilmenge dieser Funktionalität ist die Fähigkeit zur Steuerung der Vektorlänge der ausgeführten Operation (d. h. der Spanne der modifizierten Elemente vom ersten bis zum letzten), es ist jedoch nicht erforderlich, dass die Elemente, die modifiziert werden, aufeinander folgen. Demgemäß ermöglicht das Schreibmaskenfeld 1070 teilweise Vektoroperationen, einschließlich Laden, Speichern, arithmetisch, logisch usw. Wenngleich Ausführungsformen der Erfindung beschrieben werden, bei denen der Inhalt des Schreibmaskenfelds 1070 eines von einer Anzahl von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske aufweist (und wobei demgemäß der Inhalt des Schreibmaskenfelds 1070 indirekt identifiziert, dass die Maskierung auszuführen ist), ermöglichen alternative Ausführungsformen stattdessen oder zusätzlich, dass der Inhalt des Schreibmaskenfelds 1070 direkt die auszuführende Maskierung spezifiziert.
  • Unmittelbar-Feld 1072 - sein Inhalt ermöglicht die Spezifikation eines Unmittelbar-Werts. Dieses Feld ist in dem Sinne optional, dass es in keiner Implementation des generischen vektorfreundlichen Formats vorhanden ist, das unmittelbar nicht unterstützt, und es in Befehlen, die kein Unmittelbar verwenden, nicht vorhanden ist.
  • Klassenfeld 1068 - sein Inhalt unterscheidet zwischen verschiedenen Klassen von Befehlen. Mit Bezug auf die 10A-B sei bemerkt, dass die Inhalte dieses Felds zwischen Klasse-A- und Klasse-B-Befehlen auswählen. In den 10A-B werden Quadrate mit abgerundeten Ecken verwendet, um anzugeben, dass ein spezifischer Wert in einem Feld vorhanden ist (beispielsweise Klasse A 1068A bzw. Klasse B 1068B für das Klassenfeld 1068 in den 10A-B).
  • BEFEHLSSCHABLONEN DER KLASSE A
  • Im Fall der Nicht-Speicherzugriffs-Befehlsschablonen 1005 der Klasse A wird das Alphafeld 1052 als ein RS-Feld 1052A interpretiert, dessen Inhalt entscheidet, welcher der verschiedenen Erweiterungsoperationstypen auszuführen ist (beispielsweise werden Rundung 1052A.1 und Datentransformation 1052A.2 für die Kein-Speicherzugriffs-Rundungstypoperations-Befehlsschablone 1010 bzw. die Kein-Speicherzugriffs-Datentransformationstypoperations-Befehlsschablone 1015 verwendet), während das Betafeld 1054 entscheidet, welche der Operationen des spezifizierten Typs auszuführen ist. Bei den Kein-Speicherzugriffs-Befehlsschablonen 1005 sind das Skalierungsfeld 1060, das Versatzfeld 1062A und das Versatzskalierungsfeld 1062B nicht vorhanden.
  • KEIN-SPEICHERZUGRIFFS-BEFEHLSSCHABLONEN-VOLLSTÄNDIGE-RUNDUNG-STEUERTYP-OPERATION
  • Bei der Kein-Speicherzugriffs-Vollständige-Rundung-Steuertyp-Operations-Befehlsschablone 1010 wird das Betafeld 1054 als Rundungssteuerfeld 1054A interpretiert, dessen Inhalt eine statische Rundung bereitstellt. Wenngleich gemäß den beschriebenen Ausführungsformen der Erfindung das Rundungssteuerfeld 1054A eine Unterdrückung-aller-Gleitkommaausnahmen(SAE)-Feld 1056 und ein Rundungsoperations-Steuerfeld 1058 aufweist, können alternative Ausführungsformen diese beiden Konzepte in dasselbe Feld codieren oder nur das eine oder das andere dieser Konzepte/Felder aufweisen (beispielsweise nur das Rundungsoperations-Steuerfeld 1058 aufweisen).
  • SAE-Feld 1056 - sein Inhalt entscheidet, ob die Ausnahmeereignisberichterstattung zu deaktivieren ist oder nicht, wobei, wenn der Inhalt des SAE-Felds 1056 angibt, dass die Unterdrückung aktiviert ist, ein gegebener Befehl keine Art eines Gleitkommaausnahme-Flags angibt und keinen Gleitkomma-Ausnahme-Handler hervorruft.
  • Rundungsoperations-Steuerfeld 1058 - sein Inhalt entscheidet, welche von einer Gruppe von Rundungsoperationen auszuführen ist (beispielsweise Aufrundung, Abrundung, Rundung zu null und Rundung zum nächsten Nachbarn). Demgemäß ermöglicht das Rundungsoperations-Steuerfeld 1058 das Ändern des Rundungsmodus auf einer Pro-Befehl-Basis. Gemäß einigen Ausführungsformen, bei denen ein Prozessor ein Steuerregister zur Spezifikation von Rundungsmodi aufweist, überschreibt der Inhalt des Rundungsoperations-Steuerfelds 1050 diesen Registerwert.
  • KEIN-SPEICHERZUGRIFFS-BEFEHLSSCHABLONEN-DATENTRANSFORMATIONSTYPOPERATION
  • Bei der Kein-Speicherzugriffs Datentransformationstypoperations-Befehlsschablone 1015 wird das Betafeld 1054 als Datentransformationsfeld 1054B interpretiert, dessen Inhalt entscheidet, welche von einer Anzahl von Datentransformationen auszuführen ist (beispielsweise keine Datentransformation, Swizzle, Rundsendung).
  • Im Fall einer Speicherzugriffs-Befehlsschablone 1020 der Klasse A wird das Alphafeld 1052 als ein Räumungshinweisfeld 1052B interpretiert, dessen Inhalt entscheidet, welcher der Räumungshinweise zu verwenden ist (in 10A werden temporal 1052B.1 bzw. nicht-temporal 1052B.2 für die Speicherzugriffs-temporal-Befehlsschablone 1025 bzw. die Speicherzugriffsnicht-temporal-Befehlsschablone 1030 spezifiziert), während das Betafeld 1054 als ein Datenmanipulationsfeld 1054C interpretiert wird, dessen Inhalt entscheidet, welche von einer Anzahl von Datenmanipulationsoperationen (auch als Primitive bekannt) auszuführen ist (beispielsweise keine Manipulation, Rundsendung, Aufwärtskonvertierung einer Quelle und Abwärtskonvertierung eines Ziels). Die Speicherzugriffs-Befehlsschablonen 1020 weisen das Skalierungsfeld 1060 und optional das Versatzfeld 1062A oder das Versatzskalierungsfeld 1062B auf.
  • Vektorspeicherbefehle führen Vektorladevorgänge aus dem Speicher und Vektorspeichervorgänge in den Speicher mit Konvertierungsunterstützung aus. Wie bei regulären Vektorbefehlen übertragen Vektorspeicherbefehle Daten datenelementweise aus dem Speicher oder in diesen, wobei die Elemente, die tatsächlich übertragen werden, durch die Inhalte der Vektormaske, die als Schreibmaske ausgewählt wird, vorgeschrieben werden.
  • SPEICHERZUGRIFFSBEFEHLSSCHABLONEN-TEMPORAL
  • Temporale Daten sind Daten, die wahrscheinlich bald genug wiederverwendet werden, um von einem Caching zu profitieren. Dies ist jedoch ein Hinweis, und verschiedene Prozessoren können ihn auf verschiedene Arten implementieren, einschließlich den Hinweis ganz ignorieren.
  • SPEICHERZUGRIFFSBEFEHLSSCHABLONEN - NICHT-TEMPORAL
  • Nicht temporale Daten sind Daten, die nicht wahrscheinlich bald genug wiederverwendet werden, um von einem Caching im Ist-Level-Cache zu profitieren, und denen Priorität für eine Räumung gegeben werden sollte. Dies ist jedoch ein Hinweis, und verschiedene Prozessoren können ihn auf verschiedene Arten implementieren, einschließlich den Hinweis ganz ignorieren.
  • BEFEHLSSCHABLONEN DER KLASSE B
  • Im Fall der Befehlsschablonen der Klasse B wird das Alphafeld 1052 als Schreibmaskensteuer(Z)-Feld 1052C interpretiert, dessen Inhalt entscheidet, ob die vom Schreibmaskenfeld 1070 gesteuerte Schreibmaskierung zusammenfügend oder auf Null setzend sein sollte.
  • Im Fall der Nicht-Speicherzugriffs-Befehlsschablonen 1005 der Klasse B wird ein Teil des Betafelds 1054 als ein RL-Feld 1057A interpretiert, dessen Inhalt entscheidet, welche der verschiedenen Erweiterungsoperationstypen auszuführen sind (beispielsweise sind Rundung 1057A.1 bzw. Vektorlänge (V-Größe) 1057A.2 für die Kein-Speicherzugriffs-Schreibmaskensteuerungs-teilweise-Rundung-Steuertypoperations-Befehlsschablone 1012 und die Kein-Speicherzugriffs-Schreibmaskensteuerungs-V-Größen-Typ-Operations-Befehlsschablone 1017 spezifiziert), während der Rest des Betafelds 1054 entscheidet, welche der Operationen des spezifizierten Typs auszuführen ist. Bei den Kein-Speicherzugriffs-Befehlsschablonen 1005 sind das Skalierungsfeld 1060, das Versatzfeld 1062A und das Versatzskalierungsfeld 1062B nicht vorhanden.
  • Bei der Kein-Speicherzugriffs-Schreibmaskensteuerungs-teilweise-Rundung-Steuertypoperations-Befehlsschablone 1010 wird der Rest des Betafelds 1054 als Rundungsoperationsfeld 1059A interpretiert und wird die Ausnahmeereignis-Berichterstattung deaktiviert (ein gegebener Befehl teilt keine Art eines Gleitkommaausnahme-Flags mit und ruft keinen Gleitkomma-Ausnahme-Handler hervor).
  • Rundungsoperations-Steuerfeld 1059A - ebenso wie das Rundungsoperations-Steuerfeld 1058 entscheidet sein Inhalt, welche von einer Gruppe von Rundungsoperationen auszuführen ist (beispielsweise Aufrundung, Abrundung, Rundung zu null und Rundung zum nächsten Nachbarn). Demgemäß ermöglicht das Rundungsoperations-Steuerfeld 1059A das Ändern des Rundungsmodus auf einer Pro-Befehl-Basis. Gemäß einigen Ausführungsformen, bei denen ein Prozessor ein Steuerregister zur Spezifikation von Rundungsmodi aufweist, überschreibt der Inhalt des Rundungsoperations-Steuerfelds 1050 diesen Registerwert.
  • Bei der Kein-Speicherzugriffs-Schreibmaskensteuerungs-V-Größen-Typ-Operations-Befehlsschablone 1017 wird der Rest des Betafelds 1054 als Vektorlängenfeld 1059B interpretiert, dessen Inhalt entscheidet, welche von einer Anzahl von Datenvektorlängen zu verarbeiten ist (beispielsweise 128, 256 oder 512 Bytes).
  • Im Fall der Speicherzugriffs-Befehlsschablone 1020 der Klasse B wird ein Teil des Betafelds 1054 als Rundsendefeld 1057B interpretiert, dessen Inhalt entscheidet, ob die Rundsendetyp-Datenmanipulationsoperation auszuführen ist, während der Rest des Betafelds 1054 als Vektorlängenfeld 1059B interpretiert wird. Die Speicherzugriffs-Befehlsschablonen 1020 weisen das Skalierungsfeld 1060 und optional das Versatzfeld 1062A oder das Versatzskalierungsfeld 1062B auf.
  • Mit Bezug auf das generische vektorfreundliche Befehlsformat 1000 ist ein Vollständiger-Opcode-Feld 1074 dargestellt, welches das Formatfeld 1040, das Basisoperationsfeld 1042 und das Datenelementbreitenfeld 1064 aufweist. Wenngleich eine Ausführungsform dargestellt ist, bei der das Vollständiger-Opcode-Feld 1074 all diese Felder aufweist, weist das Vollständiger-Opcode-Feld 1074 gemäß Ausführungsformen, die nicht alle von ihnen unterstützen, weniger als all diese Felder auf. Das Vollständiger-Opcode-Feld 1074 stellt den Operationscode (Opcode) bereit.
  • Das Erweiterungsoperationsfeld 1050, das Datenelementbreitenfeld 1064 und das Schreibmaskenfeld 1070 ermöglichen die Spezifikation dieser Merkmale auf einer Pro-Befehl-Basis im generischen vektorfreundlichen Befehlsformat.
  • Die Kombination aus dem Schreibmaskenfeld und dem Datenelementbreitenfeld erzeugt in der Hinsicht typisierte Befehle, dass sie es ermöglichen, dass die Maske auf der Grundlage verschiedener Datenelementbreiten angewendet wird.
  • Die verschiedenen in der Klasse A und der Klasse B angetroffenen Befehlsschablonen sind in unterschiedlichen Situationen vorteilhaft. Gemäß einigen Ausführungsformen der Erfindung können verschiedene Prozessoren oder verschiedene Kerne innerhalb eines Prozessors nur Klasse A, nur Klasse B oder beide Klassen unterstützen. Beispielsweise kann ein für die allgemeine Berechnung vorgesehener Hochleistungs-außerhalb-der-Reihe-Kern für allgemeine Zwecke nur Klasse B unterstützen, kann ein in erster Linie für Graphik- und/oder wissenschaftliche Berechnungen (Durchsatz) vorgesehener Kern nur Klasse A unterstützen und kann ein für beide vorgesehener Kern beide unterstützen (natürlich liegt ein Kern, der eine Mischung von Schablonen und Befehlen aus beiden Klassen, jedoch nicht alle Schablonen und Befehle aus beiden Klassen aufweist, innerhalb des Geltungsbereichs der Erfindung). Auch kann ein einzelner Prozessor mehrere Kerne aufweisen, die alle die gleiche Klasse unterstützen, oder wobei verschiedene Kerne verschiedene Klassen unterstützen. Beispielsweise kann bei einem Prozessor mit getrennten Kernen für Graphik- und allgemeine Zwecke einer der Graphikkerne, der in erster Linie für Graphik- und/oder wissenschaftliche Berechnungen vorgesehen ist, nur Klasse A unterstützen, während einer oder mehrere der Kerne für allgemeine Zwecke Hochleistungskerne für allgemeine Zwecke mit einer Außerhalb-der-Reihe-Ausführung und -Registerumbenennung sein können, die für Berechnungen für allgemeine Zwecke vorgesehen sind, welche nur Klasse B unterstützen. Ein anderer Prozessor, der keinen getrennten Graphikkern aufweist, kann einen oder mehrere In-der-Reihe- oder Außerhalb-der-Reihe-Kerne für allgemeine Zwecke aufweisen, die sowohl Klasse A als auch Klasse B unterstützen. Natürlich können gemäß verschiedenen Ausführungsformen der Erfindung Merkmale aus einer Klasse auch in der anderen Klasse implementiert werden. In einer höheren Sprache geschriebene Programme würden in eine Vielzahl verschiedener ausführbarer Formen versetzt werden (beispielsweise Just-in-time-kompiliert oder statisch kompiliert), welche Folgende aufweisen: 1) eine Form, die nur Befehle der vom Zielprozessor für die Ausführung unterstützten Klassen aufweist, oder 2) eine Form mit unter Verwendung verschiedener Kombinationen der Befehle aller Klassen geschriebenen alternativen Routinen und mit einem Steuerflusscode, der die auszuführenden Routinen auf der Grundlage der vom Prozessor, der den Code gegenwärtig ausführt, unterstützten Befehle auswählt.
  • BEISPIELHAFTES SPEZIFISCHES VEKTORFREUNDLICHES BEFEHLSFORMAT
  • 11A ist ein Blockdiagramm, das ein beispielhaftes spezifisches vektorfreundliches Befehlsformat zeigt, gemäß einigen Ausführungsformen der Erfindung. 11A zeigt ein spezifisches vektorfreundliches Befehlsformat 1100, das in dem Sinne spezifisch ist, dass es die Stelle, die Größe, die Interpretation und die Reihenfolge der Felder sowie Werte für einige dieser Felder spezifiziert. Das spezifische vektorfreundliche Befehlsformat 1100 kann verwendet werden, um den x86-Befehlssatz zu erweitern, so dass einige der Felder jenen, die beim existierenden x86-Befehlssatz und einer Erweiterung davon (beispielsweise AVX) verwendet werden, ähneln oder gleichen. Dieses Format bleibt mit dem Präfixcodierfeld, dem Realer-Opcode-Byte-Feld, dem MOD-R/M-Feld, dem SIB-Feld, dem Versatzfeld und den Unmittelbar-Feldern des existierenden x86-Befehlssatzes mit Erweiterungen konsistent. Es sind die Felder von 10 dargestellt, in welche die Felder aus 11A abgebildet werden.
  • Es sei bemerkt, dass, wenngleich Ausführungsformen der Erfindung für die Zwecke der Erläuterung mit Bezug auf das spezifische vektorfreundliche Befehlsformat 1100 in Zusammenhang mit dem generischen vektorfreundlichen Befehlsformat 1000 beschrieben werden, die Erfindung nicht auf das spezifische vektorfreundliche Befehlsformat 1100 beschränkt ist, es sei denn, wo beansprucht. Beispielsweise erwägt das generische vektorfreundliche Befehlsformat 1000 eine Vielzahl möglicher Größen für die verschiedenen Felder, während gezeigt ist, dass das spezifische vektorfreundliche Befehlsformat 1100 Felder spezifischer Größen aufweist. Bei einem spezifischen Beispiel ist, wenngleich das Datenelementbreitenfeld 1064 im spezifischen vektorfreundlichen Befehlsformat 1100 als Ein-Bit-Feld dargestellt ist, die Erfindung nicht darauf beschränkt (d. h., dass das generische vektorfreundliche Befehlsformat 1000 andere Größen des Datenelementbreitenfelds 1064 erwägt).
  • Das generische vektorfreundliche Befehlsformat 1000 weist die folgenden nachfolgend in der in 11A dargestellten Reihenfolge aufgelisteten Felder auf.
  • EVEX-Präfix (Bytes 0 - 3) 1102 - ist in einer Vier-Byte-Form codiert.
  • Formatfeld 1040 (EVEX-Byte 0, Bits [7:0]) - das erste Byte (EVEX-Byte 0) ist das Formatfeld 1040 und enthält 0x62 (den eindeutigen Wert, der gemäß einigen Ausführungsformen zur Unterscheidung des vektorfreundlichen Befehlsformats verwendet wird).
  • Die Bytes zwei bis vier (EVEX-Bytes 1 - 3) weisen eine Anzahl von Bitfeldern auf, die eine spezifische Fähigkeit bereitstellen.
  • REX-Feld 1105 (EVEX-Byte 1, Bits [7 - 5]) - besteht aus einem EVEX.R-Bitfeld (EVEX-Byte 1, Bit [7] - R), EVEX.X-Bitfeld (EVEX-Byte 1, Bit [6] -X) und 1057BEX-Byte 1, Bit[5] - B). Die EVEX.R-, EVEX.X- und EVEX.B-Bitfelder stellen die gleiche Funktionalität wie die entsprechenden VEX-Bitfelder bereit und werden unter Verwendung der 1s-Komplementform codiert, d. h. ZMM0 wird als 1111B codiert, ZMM15 wird als 0000B codiert. Andere Felder der Befehle codieren die unteren drei Bits der Registerindizes, wie auf dem Fachgebiet bekannt ist (rrr, xxx und bbb), so dass Rrrr, Xxxx und Bbbb durch Addieren von EVEX.R, EVEX.X und EVEX.B gebildet werden können.
  • REX' 1110A - dies ist der erste Teil des REX'-Felds 1110 und ist das EVEX.R'-Bitfeld (EVEX-Byte 1, Bit [4] - R'), das zur Codierung entweder der oberen 16 oder der unteren 16 des erweiterten 32-Register-Satzes verwendet wird. Gemäß einigen Ausführungsformen wird dieses Bit zusammen mit anderen, wie nachstehend angegeben wird, im bitinvertierten Format gespeichert, um vom BOUND-Befehl zu unterscheiden (im wohlbekannten x86-32-Bit-Modus), dessen Realer-Opcode-Byte 62 ist, jedoch im MOD-R/M-Feld (nachstehend beschrieben) den Wert 11 im MOD-Feld nicht akzeptiert, wobei alternative Ausführungsformen der Erfindung dieses und die anderen nachstehend angegebenen Bits nicht im invertierten Format speichern. Ein Wert von 1 wird zur Codierung der unteren 16 Register verwendet. Mit anderen Worten wird R'Rrrr durch Kombinieren von EVEX.R', EVEX.R und der anderen RRR von anderen Feldern gebildet.
  • Opcode-Zuordnungsfeld 1115 (EVEX-Byte 1, Bits [3:0] - mmmm) - sein Inhalt codiert ein impliziertes führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelementbreitenfeld 1064 (EVEX-Byte 2, Bit [7] - W) - ist durch die Notation EVEX.W repräsentiert. EVEX.W wird verwendet, um die Granularität (Größe) des Datentyps zu definieren (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente).
  • EVEX.vvvv 1120 (EVEX-Byte 2, Bits [6:3]-vvvv) - die Rolle von EVEX.vvvv kann Folgendes aufweisen: 1) EVEX.vvvv codiert den ersten Quellregisteroperanden, der in invertierter Form (1s-Komplement) spezifiziert ist und für Befehle mit 2 oder mehr Quelloperanden gültig ist, 2) EVEX.vvvv codiert den Zielregisteroperanden, der in 1s-Komplementform für bestimmte Vektorverschiebungen spezifiziert ist, oder 3) EVEX.vvvv codiert keinen Operanden, das Feld wird reserviert und sollte 1111b enthalten. Demgemäß codiert das EVEX.vvvv-Feld 1120 die vier niederwertigen Bits des in invertierter Form (1s-Komplement) gespeicherten ersten Quellregisterspezifizierers. Abhängig vom Befehl wird ein zusätzliches verschiedenes EVEX-Bitfeld verwendet, um die Spezifizierergröße auf 32 Register zu erweitern.
  • EVEX.U-1068-Klassenfeld (EVEX-Byte 2, Bit [2]-U) - falls EVEX.U = 0 ist, gibt es Klasse A oder EVEX.U0 an; falls EVEX.U = 1 ist, gibt es Klasse B oder EVEX.U1 an.
  • Präfixcodierfeld 1125 (EVEX-Byte 2, Bits [1:0]-pp) - es stellt zusätzliche Bits für das Basisoperationsfeld bereit. Zusätzlich zur Bereitstellung von Unterstützung für die Legacy-SSE-Befehle im EVEX-Präfixformat hat dies auch den Vorteil der Kompaktierung des SIMD-Präfixes (statt ein Byte für den Ausdruck des SIMD-Präfixes zu benötigen, benötigt der EVEX-Präfix nur 2 Bits). Gemäß einer Ausführungsform werden diese Legacy-SIMD-Präfixe zur Unterstützung von Legacy-SSE-Befehlen, die einen SIMD-Präfix (66H, F2H, F3H) sowohl im Legacy-Format als auch im EVEX-Präfixformat verwenden, in das SIMD-Präfixcodierfeld codiert und zur Laufzeit zum Legacy-SIMD-Präfix erweitert, bevor sie dem Decodierer-PLA bereitgestellt werden (so dass das PLA sowohl das Legacy- als auch das EVEX-Format dieser Legacy-Befehle ohne Modifikation ausführen kann). Wenngleich neuere Befehle den Inhalt des EVEX-Präfix-Codierfelds direkt als Opcode-Erweiterung verwenden könnten, erweitern bestimmte Ausführungsformen in ähnlicher Weise auf Konsistenz, ermöglichen jedoch, dass unterschiedliche Bedeutungen durch diese Legacy-SIMD-Präfixe spezifiziert werden. Eine alternative Ausführungsform kann das PLA umgestalten, um die 2 Bit-SIMD-Präfixcodierungen zu unterstützen, so dass die Erweiterung nicht erforderlich ist.
  • Alphafeld 1052 (EVEX-Byte 3, Bit [7] - EH; auch als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.Schreibmaskensteuerung und EVEX.N bekannt, auch mit α bezeichnet) - wie zuvor beschrieben, ist dieses Feld kontextspezifisch.
  • Betafeld 1054 (EVEX-Byte 3, Bits [6:4]-SSS, auch als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB bekannt; auch mit βββ bezeichnet) - wie zuvor beschrieben, ist dieses Feld kontextspezifisch.
  • REX' 1110B - dies ist der Rest des REX'-Felds 1110 und ist das EVEX.V'-Bitfeld (EVEX-Byte 3, Bit [3] - V'), das zur Codierung entweder der oberen 16 oder der unteren 16 des erweiterten 32-Register-Satzes verwendet werden kann. Dieses Bit wird in einem bitinvertierten Format gespeichert. Ein Wert von 1 wird zur Codierung der unteren 16 Register verwendet. Mit anderen Worten wird V'VWV durch Kombinieren von EVEX.V', EVEX.vvvv. gebildet.
  • Schreibmaskenfeld 1070 (EVEX-Byte 3, Bits [2:0]-kkk) - sein Inhalt spezifiziert den Index eines Registers in den Schreibmaskenregistern, wie zuvor beschrieben. Gemäß einigen Ausführungsformen hat der spezifische Wert EVEX.kkk = 000 ein spezielles Verhalten, das impliziert, dass keine Schreibmaske für den bestimmten Befehl verwendet wird (dies kann auf eine Vielzahl von Arten, einschließlich der Verwendung einer Schreibmaske, die mit ausschließlich Einsen festverdrahtet ist, oder Hardware, welche die Maskierungshardware umgeht, implementiert werden).
  • Realer-Opcode-Feld 1130 (Byte 4) ist auch als Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • Das MOD-R/M-Feld 1140 (Byte 5) weist das MOD-Feld 1142, das Reg-Feld 1144 und das R/M-Feld 1146 auf. Wie zuvor beschrieben, unterscheidet der Inhalt des MOD-Felds 1142 zwischen Speicherzugriffs- und Nicht-Speicherzugriffsoperationen. Die Rolle des Reg-Felds 1144 kann in Bezug auf zwei Situationen zusammengefasst werden: eine Codierung entweder des Zielregisteroperanden oder eines Quellregisteroperanden oder eine Behandlung als Opcode-Erweiterung und keine Verwendung zur Codierung eines Befehlsoperanden. Die Rolle des R/M-Felds 1146 kann Folgende umfassen: eine Codierung des Befehlsoperanden, der einen Speicherzugriff referenziert, oder eine Codierung entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Skalierung-, Index-, Basis(SIB)-Byte (Byte 6) - wie zuvor beschrieben, wird der Inhalt des Skalierungsfelds 1050 zur Speicheradresserzeugung verwendet. SIB.xxx 1154 und SIB.bbb 1156 - die Inhalte dieser Felder wurden zuvor in Bezug auf die Registerindizes Xxxx und Bbbb erwähnt.
  • Versatzfeld 1062A (Bytes 7 - 10) - wenn das MOD-Feld 1142 10 enthält, sind die Bytes 7 - 10 das Versatzfeld 1062A, und es wirkt ebenso wie der Legacy-32-Bitversatz (disp32), und es wirkt mit Bytegranularität.
  • Versatzfaktorfeld 1062B (Byte 7) - wenn das MOD-Feld 114201 enthält, ist Byte 7 das Versatzfaktorfeld 1062B. Die Stelle dieses Felds gleicht jener des 8-Bit-Versatzes (disp8) des Legacy-x86-Befehlssatzes, und es wirkt mit Bytegranularität. Weil disp8 vorzeichenerweitert ist, kann es nur zwischen -128- und 127-Byte-Offsets adressieren. In Bezug auf 64-Byte-Cache-Leitungen verwendet disp8 8 Bits, die auf nur vier wirklich verwendbare Werte -128, -64, 0 und 64 gesetzt werden können, weil jedoch häufig ein größerer Bereich erforderlich ist, wird disp32 verwendet, wobei disp32 4 Bytes benötigt. Im Gegensatz zu disp8 und disp32 ist das Versatzfaktorfeld 1062B eine Reinterpretation von disp8, wobei, wenn das Versatzfaktorfeld 1062B verwendet wird, der tatsächliche Versatz durch den Inhalt des Versatzfaktorfelds, multipliziert mit der Größe des Speicheroperandenzugriffs (N) festgelegt ist. Dieser Versatztyp wird als disp8*N bezeichnet. Dies verringert die durchschnittliche Befehlslänge (ein einziges Byte wird für den Versatz verwendet, jedoch mit einem viel größeren Bereich). Dieser komprimierte Versatz beruht auf der Annahme, dass der effektive Versatz ein Mehrfaches der Granularität des Speicherzugriffs ist, so dass die redundanten niederwertigen Bits des Adress-Offsets nicht codiert zu werden brauchen. Mit anderen Worten ersetzt das Versatzfaktorfeld 1062B den 8-Bit-Versatz des Legacy-x86-Befehlssatzes. Demgemäß wird das Versatzfaktorfeld 1062B in der gleichen Weise codiert wie ein 8-Bit-Versatz des x86-Befehlssatzes (so dass keine Änderungen in den ModRM/SIB-Codierregeln auftreten), mit der einzigen Ausnahme, dass disp8 zu disp8*N überladen wird. Mit anderen Worten gibt es keine Änderungen in den Codierregeln oder Codierlängen, sondern lediglich bei der Interpretation des Versatzwerts durch Hardware (welche den Versatz mit der Größe des Speicheroperanden skalieren muss, um einen byteweisen Adress-Offset zu erhalten). Das Unmittelbar-Feld 1072 wirkt wie zuvor beschrieben.
  • VOLLSTÄNDIGER-OPCODE-FELD
  • 11B ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats 1100 zeigt, welche das Vollständiger-Opcode-Feld 1074 bilden, gemäß einigen Ausführungsformen. Insbesondere weist das Vollständiger-Opcode-Feld 1074 das Formatfeld 1040, das Basisoperationsfeld 1042 und das Datenelementbreiten(W)-Feld 1064 auf. Das Basisoperationsfeld 1042 weist das Präfixcodierfeld 1125, das Opcode-Zuordnungsfeld 1115 und das Realer-Opcode-Feld 1130 auf.
  • REGISTERINDEXFELD
  • 11C ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats 1100 zeigt, welche das Registerindexfeld 1044 bilden, gemäß einigen Ausführungsformen. Insbesondere weist das Registerindexfeld 1044 das REX-Feld 1105, das REX'-Feld 1110, das MODR/M.reg-Feld 1144, das MODR/M.r/m-Feld 1146, das VWV-Feld 1120, das xxx-Feld 1154 und das bbb-Feld 1156 auf.
  • ERWEITERUNGSOPERATIONSFELD
  • 11D ist ein Blockdiagramm, das die Felder des spezifischen vektorfreundlichen Befehlsformats 1100 zeigt, welche das Erweiterungsoperationsfeld 1050 bilden, gemäß einigen Ausführungsformen. Wenn das Klassenfeld (U) 1068 0 enthält, bedeutet es EVEX.U0 (Klasse A 1068A), wenn es 1 enthält, bedeutet es EVEX.U1 (Klasse B 1068B). Wenn U = 0 ist und das MOD-Feld 1142 11 enthält (was eine Kein-Speicherzugriff-Operation bedeutet), wird das Alphafeld 1052 (EVEX-Byte 3, Bit [7] - EH) als das rs-Feld 1052A interpretiert. Wenn das rs-Feld 1052A eine 1 enthält (Rundung 1052A.1), wird das Betafeld 1054 (EVEX-Byte 3, Bits [6:4]- SSS) als das Rundungssteuerfeld 1054A interpretiert. Das Rundungssteuerfeld 1054A weist ein Ein-Bit-SAE-Feld 1056 und ein Zwei-Bit-Rundungsoperationsfeld 1058 auf. Wenn das rs-Feld 1052A eine 0 enthält (Datentransformation 1052A.2), wird das Betafeld 1054 (EVEX-Byte 3, Bits [6:4]-SSS) als ein Drei-Bit-Datentransformationsfeld 1054B interpretiert. Wenn U = 0 ist und das MOD-Feld 1142 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bedeutet), wird das Alphafeld 1052 (EVEX-Byte 3, Bit [7] - EH) als das Räumungshinweis(EH)-Feld 1052B interpretiert und wird das Betafeld 1054 (EVEX-Byte 3, Bits [6:4]- SSS) als ein Drei-Bit-Datenmanipulationsfeld 1054C interpretiert.
  • Wenn U = 1 ist, wird das Alphafeld 1052 (EVEX-Byte 3, Bit [7] - EH) als das Schreibmaskensteuer(Z)-Feld 1052C interpretiert. Wenn U = 1 ist und das MOD-Feld 1142 11 enthält (was eine Kein-Speicherzugriff-Operation bedeutet), wird ein Teil des Betafelds 1054 (EVEX-Byte 3, Bit [4]- S0) als das RL-Feld 1057A interpretiert, und wenn es eine 1 (Rundung 1057A.1) enthält, wird der Rest des Betafelds 1054 (EVEX-Byte 3, Bit [6-5]- S2-1) als das Rundungsoperationsfeld 1059A interpretiert, während, wenn das RL-Feld 1057A eine 0 enthält (V-Größe 1052.A2), der Rest des Betafelds 1054 (EVEX-Byte 3, Bit [6-5]- S2-1) als Vektorlängenfeld 1059B (EVEX-Byte 3, Bit [6-5]- L1-0) interpretiert wird. Wenn U = 1 ist und das MOD-Feld 1142 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bedeutet), wird das Betafeld 1054 (EVEX-Byte 3, Bit [6:4]- SSS) als das Vektorlängenfeld 1059B (EVEX-Byte 3, Bit [6-5]- L1-0) und das Rundsendefeld 1057B (EVEX-Byte 3, Bit [4]- B) interpretiert.
  • BEISPIELHAFTE REGISTERARCHITEKTUR
  • 12 ist ein Blockdiagramm einer Registerarchitektur 1200 gemäß einigen Ausführungsformen. Gemäß der dargestellten Ausführungsform gibt es 32 Vektorregister 1210, die 512 Bits breit sind, wobei diese Register als zmm0 bis zmm31 bezeichnet werden. Die niederwertigen 256 Bits der unteren 16 zmm-Register sind Registern ymm0-16 überlagert. Die niederwertigen 128 Bits der unteren 16 zmm-Register (die niederwertigen 128 Bits der ymm-Register) sind den Registern xmm0-15 überlagert. Das spezifische vektorfreundliche Befehlsformat 1100 wirkt wie in den nachstehenden Tabellen dargestellt auf diese überlagerte Registerdatei.
    Einstellbare Vektorlänge Klasse Operationen Register
    Befehlsschablonen, die das Vektorlängenfeld 1059B nicht aufweisen A (10A; U = 0) 1010, 1015, 1025, 1030 zmm-Register (die Vektorlänge beträgt 64 Bytes)
    B (Figure 10B; U = 1) 1012 zmm-Register (die Vektorlänge beträgt 64 Bytes)
    Befehlsschablonen, die das Vektorlängenfeld 1059B aufweisen B (Figure 10B; U = 1) 1017, 1027 zmm-, ymm- oder xmm-Register (die Vektorlänge beträgt 64 Bytes, 32 Bytes oder 16 Bytes), abhängig vom Vektorlängenfeld 1059B
  • Mit anderen Worten wählt das Vektorlängenfeld 1059B zwischen einer maximalen Länge und einer oder mehreren anderen geringeren Längen, wobei jede solche geringere Länge die Hälfte der vorhergehenden Länge ist und Befehlsschablonen ohne das Vektorlängenfeld 1059B auf die maximale Vektorlänge wirken. Ferner wirken die Klasse-B-Befehlsschablonen des spezifischen vektorfreundlichen Befehlsformats 1100 auf gepackte oder skalare Gleitkommadaten mit einfacher oder doppelter Genauigkeit und gepackte oder skalare ganzzahlige Daten. Skalaroperationen sind Operationen, die auf die Datenelementposition unterster Ordnung in einem zmm/ymm/xmm-Register ausgeführt werden, wobei die Datenelementpositionen höherer Ordnung entweder so belassen werden, wie sie vor dem Befehl waren, oder auf Null gesetzt werden, wobei dies von der Ausführungsform abhängt.
  • Schreibmaskenregister 1215 - gemäß der dargestellten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7), die jeweils 64 Bits groß sind. Gemäß einer alternativen Ausführungsform sind die Schreibmaskenregister 1215 16 Bits groß. Wie zuvor beschrieben, kann das Vektormaskenregister k0 gemäß einigen Ausführungsformen nicht als Schreibmaske verwendet werden, wobei, wenn die Codierung, die normalerweise k0 angibt, für eine Schreibmaske verwendet wird, sie eine festverdrahtete Schreibmaske von Oxffff auswählt, wodurch effektiv die Schreibmaskierung für diesen Befehl deaktiviert wird.
  • Register für allgemeine Zwecke 1225 - gemäß der dargestellten Ausführungsform gibt es sechzehn 64-Bit-Register für allgemeine Zwecke, die zusammen mit den existierenden x86-Adressiermodi verwendet werden, um Speicheroperanden zu adressieren. Diese Register sind mit den Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Skalare Gleitkomma-Stapelregisterdatei (x87-Stapel) 1245, auf der die gepackte ganzzahlige flache MMX-Registerdatei 1250 stellvertretend angesprochen wird - gemäß der dargestellten Ausführungsform ist der x87-Stapel ein Acht-Elemente-Stapel, der zur Ausführung skalarer Gleitkommaoperationen an 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung verwendet wird, während die MMX-Register verwendet werden, um Operationen an gepackten ganzzahligen 64-Bit-Daten auszuführen sowie Operanden für einige Operationen zu halten, die zwischen den MMX- und XMM-Registern ausgeführt werden.
  • Alternative Ausführungsformen können breitere oder schmalere Register verwenden. Zusätzlich können alternative Ausführungsformen mehr, weniger oder andere Registerdateien und Register verwenden.
  • BEISPIELHAFTE KERNARCHITEKTUREN, PROZESSOREN UND COMPUTERARCHITEKTUREN
  • Prozessorkerne können auf verschiedene Arten, für verschiedene Zwecke und in verschiedenen Prozessoren implementiert werden. Beispielsweise können Implementationen solcher Kerne Folgendes aufweisen: 1) einen In-der-Reihe-Kern für allgemeine Zwecke, der für Berechnungen für allgemeine Zwecke vorgesehen ist, 2) einen Hochleistungs-außerhalb-der-Reihe-Kern für allgemeine Zwecke, der für Berechnungen für allgemeine Zwecke vorgesehen ist, 3) einen Kern für spezielle Zwecke, der in erster Linie für Graphik- und/oder wissenschaftliche Berechnungen (Durchsatz) vorgesehen ist. Implementationen verschiedener Prozessoren können Folgendes aufweisen: 1) eine CPU, die einen oder mehrere In-der-Reihe-Kerne für allgemeine Zwecke, die für Berechnungen für allgemeine Zwecke vorgesehen sind, und/oder einen oder mehrere Außerhalb-der-Reihe-Kerne für allgemeine Zwecke, die für Berechnungen für allgemeine Zwecke vorgesehen sind, aufweist, und 2) einen Coprozessor, der einen oder mehrere Kerne für spezielle Zwecke aufweist, die in erster Linie für graphische und/oder wissenschaftliche Zwecke (Durchsatz) vorgesehen sind. Solche verschiedene Prozessoren führen zu verschiedenen Computersystemarchitekturen, die Folgendes aufweisen können: 1) den Coprozessor auf einem von der CPU getrennten Chip, 2) den Coprozessor auf einem getrennten Die in derselben Baugruppe wie eine CPU, 3) den Coprozessor auf demselben Die wie eine CPU (wobei in diesem Fall ein solcher Coprozessor manchmal als Logik für spezielle Zwecke in der Art einer integrierten Graphik- und/oder wissenschaftlichen Logik (Durchsatz) oder als Kerne für spezielle Zwecke bezeichnet wird) und 4) ein System-auf-einem-Chip, das auf demselben Die die beschriebene CPU (manchmal als Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den vorstehend beschriebenen Coprozessor und zusätzliche Funktionalität aufweisen kann. Als nächstes werden beispielhafte Kernarchitekturen beschrieben, worauf Beschreibungen beispielhafter Prozessoren und Computerarchitekturen folgen.
  • BEISPIELHAFTE KERNARCHITEKTUREN
  • IN-DER-REIHE-UND AUßERHALB-DER-REIHE-KERN-BLOCKDIAGRAMM
  • 13A ist ein Blockdiagramm, das sowohl eine als Beispiel dienende In-der-Reihe-Pipeline als auch eine als Beispiel dienende Register-umbenennende Außerhalb-der-Reihe-Ausgabe/Ausführung-Pipeline gemäß einigen Ausführungsformen der Erfindung zeigt. 13B ist ein Blockdiagramm, das sowohl eine als Beispiel dienende Ausführungsform eines In-der-Reihe-Architekturkerns als auch eines als Beispiel dienenden Register-umbenennenden Außerhalb-der-Reihe-Ausgabe/Ausführung-Architekturkerns, der in einen Prozessor gemäß Ausführungsformen der Erfindung aufzunehmen ist, zeigt. Die mit durchgezogenen Linien dargestellten Kästchen in den 13A-B zeigen die In-der-Reihe-Pipeline und den In-der-Reihe-Kern, während die optionale Hinzufügung der mit gestrichelten Linien dargestellten Kästchen die Register-umbenennende Außerhalb-der-Reihe-Ausgabe/Ausführung-Pipeline und den Register-umbenennenden Außerhalb-der-Reihe-Ausgabe/Ausführung-Kern zeigt. Unter der Voraussetzung, dass der In-der-Reihe-Aspekt eine Untermenge des Außerhalb-der-Reihe-Aspekts ist, wird der Außerhalb-der-Reihe-Aspekt beschrieben.
  • In 13A umfasst eine Prozessorpipeline 1300 eine Abrufstufe 1302, eine Längendecodierstufe 1304, eine Decodierstufe 1306, eine Zuordnungsstufe 1308, eine Umbenennungsstufe 1310, eine Planungsstufe 1312 (auch als Absende- oder Ausgabestufe bezeichnet), eine Registerlese/Speicherlese-Stufe 1314, eine Ausführungsstufe 1316, eine Rückschreib/Speicherschreib-Stufe 1318, eine Ausnahmebehandlungsstufe 1322 und eine Übergabestufe 1324.
  • 13B zeigt einen Prozessorkern 1390 mit einer Vorverarbeitungseinheit 1330, die mit einer Ausführungsmaschineneinheit 1350 gekoppelt ist, und beide sind mit einer Speichereinheit 1370 gekoppelt. Der Kern 1390 kann ein Rechenkern mit einem reduzierten Befehlssatz (RISC), ein Rechenkern mit einem komplexen Befehlssatz (CISC), ein Kern mit einem sehr langen Befehlswort (VLIW) oder ein hybrider oder alternativer Kerntyp sein. Als eine andere Option kann der Kern 1390 ein Kern für spezielle Zwecke in der Art beispielsweise eines Netz- oder Kommunikationskerns, einer Kompressionsmaschine, eines Coprozessorkerns, eines Graphikverarbeitungseinheitskerns für allgemeine Rechenzwecke (GPGPU-Kerns), eines Graphikkerns oder dergleichen sein.
  • Die Vorverarbeitungseinheit 1330 umfasst eine Zweigvorhersageeinheit 1332, die mit einer Befehlscacheeinheit 1334 gekoppelt ist, welche mit einem Befehlsübersetzungs-Lookaside-Puffer (TLB) 1336 gekoppelt ist, welcher mit einer Befehlsabrufeinheit 1338 gekoppelt ist, welche mit einer Decodiereinheit 1340 gekoppelt ist. Die Decodiereinheit 1340 (oder Decoder) kann Befehle decodieren und als eine Ausgabe eine oder mehrere Mikrooperationen, Mikrocode-Eintrittspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale erzeugen, welche anhand der ursprünglichen Befehle decodiert werden oder diese auf andere Weise reflektieren oder von diesen abgeleitet wurden. Die Decodiereinheit 1340 kann unter Verwendung mehrerer verschiedener Mechanismen implementiert werden. Beispiele geeigneter Mechanismen umfassen Nachschlagetabellen, Hardwareimplementationen, programmierbare Logikfelder (PLA), Mikrocode-Nurlesespeicher (ROM) usw., sind jedoch nicht darauf beschränkt. Gemäß einer Ausführungsform umfasst der Kern 1390 einen Mikrocode-ROM oder ein anderes Medium, das Mikrocode für bestimmte Makrobefehle speichert (beispielsweise in der Decodiereinheit 1340 oder anderswo in der Vorverarbeitungseinheit 1330). Die Decodiereinheit 1340 ist mit einer Umbenennungs-/Zuordnungseinheit 1352 in der Ausführungsmaschineneinheit 1350 gekoppelt.
  • Die Ausführungsmaschineneinheit 1350 umfasst die Umbenennungs-/Zuordnungseinheit 1352, die mit einer Zurückzieheinheit 1354 und einem Satz einer oder mehrerer Planereinheiten 1356 gekoppelt ist. Die Planereinheit (die Planereinheiten) 1356 repräsentiert (repräsentieren) irgendeine Anzahl verschiedener Planer, einschließlich Reservierstationen, eines zentralen Befehlsfensters usw. Die Planereinheit (die Planereinheiten) 1356 ist (sind) mit der physikalischen Registerdateieinheit (den physikalischen Registerdateieinheiten) 1358 gekoppelt. Jede der physikalischen Registerdateieinheiten 1358 repräsentiert eine oder mehrere physikalische Registerdateien, von denen verschiedene einen oder mehrere verschiedene Datentypen speichern, in der Art eines skalaren ganzzahligen Typs, eines skalaren Gleitkommatyps, eines gepackten ganzzahligen Typs, eines gepackten Gleitkommatyps, eines vektoriellen ganzzahligen Typs, eines vektoriellen Gleitkommatyps, eines Status (beispielsweise eines Befehlszeigers, welche die Adresse des nächsten auszuführenden Befehls ist) usw. Gemäß einer Ausführungsform umfasst die physikalische Registerdateieinheit 1358 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und skalare Registereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Register für allgemeine Zwecke bereitstellen. Die physikalische Registerdateieinheit (die physikalischen Registerdateieinheiten) 1358 ist (sind) von der Zurückzieheinheit 1354 überlappt, um verschiedene Wege zu zeigen, in denen eine Registerumbenennung und eine Außerhalb-der-Reihe-Ausführung implementiert werden können (beispielsweise unter Verwendung eines oder mehrerer Umordnungspuffer und einer oder mehrerer Zurückziehregisterdateien; unter Verwendung einer oder mehrerer künftiger Dateien, eines oder mehrerer Geschichtspuffer und einer oder mehrerer Zurückziehregisterdateien; unter Verwendung einer Registerkarte und eines Pools von Registern usw.). Die Zurückzieheinheit 1354 und die eine oder die mehreren physikalischen Registerdateieinheiten 1358 sind mit dem einen oder den mehreren Ausführungsclustern 1360 gekoppelt. Der eine oder die mehreren Ausführungscluster 1360 umfassen einen Satz einer oder mehrerer Ausführungseinheiten 1362 und einen Satz einer oder mehrerer Speicherzugriffseinheiten 1364. Die Ausführungseinheiten 1362 können verschiedene Operationen (beispielsweise Verschiebungen, Addition, Subtraktion, Multiplikation) auf verschiedenen Datentypen ausführen (beispielsweise einem skalaren Gleitkommatyp, einem gepackten ganzzahligen Typ, einem gepackten Gleitkommatyp, einem vektoriellen ganzzahligen Typ, einem vektoriellen Gleitkommatyp). Wenngleich einige Ausführungsformen eine Anzahl von Ausführungseinheiten aufweisen können, die für spezifische Funktionen oder Sätze von Funktionen zweckgebunden sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten aufweisen, die alle alle Funktionen ausführen. Die eine oder die mehreren Planereinheiten 1356, die eine oder die mehreren physikalischen Registerdateieinheiten 1358 und der eine oder die mehreren Ausführungscluster 1360 sind als möglicherweise mehrere Einheiten dargestellt, weil bestimmte Ausführungsformen getrennte Pipelines für bestimmte Typen von Daten/Operationen erzeugen (beispielsweise eine skalare ganzzahlige Pipeline, eine skalare Gleitkomma/gepackte ganzzahlige/gepackte Gleitkomma-/vektorielle ganzzahlige/vektorielle Gleitkommapipeline und/oder eine Speicherzugriffspipeline, die jeweils ihre eigene Planereinheit, ihre eigene physikalische Registerdateieinheit und/oder ihren eigenen Ausführungscluster aufweisen, und im Fall einer getrennten Speicherzugriffspipeline werden bestimmte Ausführungsformen implementiert, bei denen nur der Ausführungscluster dieser Pipeline die eine oder die mehreren Speicherzugriffseinheiten 1364 aufweist). Es sei auch bemerkt, dass dort, wo getrennte Pipelines verwendet werden, eine oder mehrere dieser Pipelines eine Außerhalb-der-Reihe-Ausgabe/Ausführung aufweisen können und dass der Rest eine In-der-Reihe-Ausgabe/Ausführung aufweisen kann.
  • Der Satz von Speicherzugriffseinheiten 1364 ist mit der Speichereinheit 1370 gekoppelt, welche eine Daten-TLB-Einheit 1372 aufweist, die mit einer Datencacheeinheit 1374 gekoppelt ist, welche mit einer Level-2(L2)-Cacheeinheit 1376 gekoppelt ist. Gemäß einer als Beispiel dienenden Ausführungsform können die Speicherzugriffseinheiten 1364 eine Ladeeinheit, eine Speicheradresseinheit und eine Speicherdateneinheit aufweisen, die jeweils mit der Daten-TLB-Einheit 1372 in der Speichereinheit 1370 gekoppelt sind. Die Befehlscacheeinheit 1334 ist ferner mit einer Level-2(L2)-Cacheeinheit 1376 in der Speichereinheit 1370 gekoppelt. Die L2-Cacheeinheit 1376 ist mit einer oder mehreren anderen Cacheebenen und schließlich mit einem Hauptspeicher gekoppelt.
  • Beispielsweise kann die als Beispiel dienende Registerumbenennungs-Außerhalb-der-Reihe-Ausgabe/Ausführung-Kernarchitektur die Pipeline 1300 folgendermaßen implementieren: 1) Der Befehlsabruf 1338 führt die Abruf- und Längendecodierstufen 1302 und 1304 aus; 2) die Decodiereinheit 1340 führt die Decodierstufe 1306 aus; 3) die Umbenennungs-/Zuordnungseinheit 1352 führt die Zuordnungsstufe 1308 und die Umbenennungsstufe 1310 aus; 4) die eine oder die mehreren Planereinheiten 1356 führen die Planungsstufe 1312 aus; 5) die eine oder die mehreren physikalischen Registerdateieinheiten 1358 und die Speichereinheit 1370 führen die Registerlese-/Speicherlesestufe 1314 aus, der Ausführungscluster 1360 führt die Ausführungsstufe 1316 aus; 6) die Speichereinheit 1370 und die eine oder die mehreren physikalischen Registerdateieinheiten 1358 führen die Rückschreib-/Speicherschreibstufe 1318 aus; 7) verschiedene Einheiten können an der Ausführungsbehandlungsstufe 1322 beteiligt sein; und 8) die Zurückzieheinheit 1354 und die eine oder die mehreren physikalischen Registerdateieinheiten 1358 führen die Übergabestufe 1324 aus.
  • Der Kern 1390 kann einen oder mehrere Befehlssätze unterstützen (beispielsweise den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, CA; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen in der Art von NEON) von ARM Holdings aus Sunnyvale, CA), einschließlich des darin beschriebenen Befehls (der darin beschriebenen Befehle). Gemäß einer Ausführungsform umfasst der Kern 1390 Logik zum Unterstützen einer PaketdatenBefehlssatzerweiterung (beispielsweise AVX1, AVX2), wodurch es ermöglicht wird, dass die von vielen Multimediaanwendungen verwendeten Operationen unter Verwendung von Paketdaten ausgeführt werden.
  • Es sei bemerkt, dass der Kern ein Multithreading unterstützen kann (eine Ausführung zweier oder mehrerer paralleler Befehlssätze oder Threads) und dies auf eine Vielzahl von Arten ausführen kann, einschließlich eines Zeitschlitz-Multithreadings, eines gleichzeitigen Multithreadings (wobei ein einziger physikalischer Kern einen logischen Kern für jeden der Threads bereitstellt, an denen der physikalische Kern gleichzeitig ein Multithreading ausführt) oder einer Kombination davon (beispielsweise eines Zeitschlitz-Abrufs und einer Zeitschlitz-Decodierung und eines anschließenden gleichzeitigen Multithreadings wie bei der Hyperthreading-Technologie von Intel®).
  • Wenngleich die Registerumbenennung in Zusammenhang mit einer Außerhalb-der-Reihe-Ausführung beschrieben wird, ist zu verstehen, dass die Registerumbenennung auch in einer In-der-Reihe-Architektur verwendet werden kann. Wenngleich die dargestellte Ausführungsform des Prozessors auch getrennte Befehls- und Datencacheeinheiten 1334/1374 und eine geteilte L2-Cacheeinheit 1376 aufweist, können alternative Ausführungsformen einen einzigen internen Cache sowohl für Befehle als auch für Daten aufweisen, wie beispielsweise einen internen Level-1(L1)-Cache, oder mehrere Ebenen des internen Cache. Gemäß einigen Ausführungsformen kann das System eine Kombination eines internen Cache und eines externen Cache, der außerhalb des Kerns und/oder des Prozessors liegt, aufweisen. Alternativ kann der gesamte Cache außerhalb des Kerns und/oder des Prozessors liegen.
  • SPEZIFISCHE ALS BEISPIEL DIENENDE IN-DER-REIHE-KERNARCHITEKTUR
  • Die 14A-B zeigen ein Blockdiagramm einer spezifischeren als Beispiel dienenden In-der-Reihe-Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne desselben Typs und/oder anderer Typen) in einem Chip wäre. Die Logikblöcke kommunizieren über ein Zwischenverbindungsnetz (beispielsweise ein Ringnetz) hoher Bandbreite mit einer Festfunktionslogik, Speicher-E/A-Schnittstellen und anderer erforderlicher E/A-Logik, abhängig von der Anwendung.
  • 14A ist ein Blockdiagramm eines Einzelprozessorkerns zusammen mit seiner Verbindung zum auf dem Chip liegenden Zwischenverbindungsnetz 1402 und mit seiner lokalen Untermenge des Level-2(L2)-Cache 1404 gemäß einigen Ausführungsformen der Erfindung. Gemäß einer Ausführungsform unterstützt ein Befehlsdecodierer 1400 den x86-Befehlssatz mit einer Paketdatenbefehlssatzerweiterung. Ein L1-Cache 1406 ermöglicht Zugriffe geringer Latenz auf den Cachespeicher in Skalar- und Vektoreinheiten. Wenngleich gemäß einer Ausführungsform (zur Vereinfachung des Entwurfs) eine Skalareinheit 1408 und eine Vektoreinheit 1410 getrennte Registersätze verwenden (Skalarregister 1412 bzw. Vektorregister 1414) und zwischen ihnen übertragene Daten in den Speicher geschrieben werden und dann aus einem Level-1(L1)-Cache 1406 zurückgelesen werden, können alternative Ausführungsformen der Erfindung einen anderen Ansatz verwenden (beispielsweise einen einzigen Registersatz verwenden oder einen Kommunikationsweg aufnehmen, welche es ermöglichen, dass Daten zwischen den beiden Registerdateien übertragen werden, ohne geschrieben und zurückgelesen zu werden).
  • Die lokale Untermenge des L2-Cache 1404 ist Teil eines globalen L2-Cache, der in getrennte lokale Untermengen zerlegt ist, nämlich eine pro Prozessorkern. Jeder Prozessorkern hat einen direkten Zugangsweg zu seiner eigenen lokalen Untermenge des L2-Cache 1404. Durch einen Prozessorkern gelesene Daten werden in seiner L2-Cacheuntermenge 1404 gespeichert, und es kann auf sie, parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cacheuntermengen zugreifen, schnell zugegriffen werden. Durch einen Prozessorkern geschriebene Daten werden in seiner eigenen L2-Cacheuntermenge 1404 gespeichert und aus anderen Untermengen entnommen, falls dies erforderlich ist. Das Ringnetz gewährleistet eine Kohärenz für geteilte Daten. Das Ringnetz ist bidirektional, um zu ermöglichen, dass Agenten, wie Prozessorkerne, L2-Caches und andere Logikblöcke, innerhalb des Chips miteinander kommunizieren. Jeder Ringdatenweg ist pro Richtung 1012 Bits breit.
  • 14B ist eine erweiterte Ansicht eines Teils des Prozessorkerns aus 14A gemäß einigen Ausführungsformen der Erfindung. 14B umfasst einen L1-Datencache-1406A-Teil des L1-Cache 1404 sowie weitere Einzelheiten in Bezug auf die Vektoreinheit 1410 und die Vektorregister 1414. Insbesondere ist die Vektoreinheit 1410 eine 16-breite Vektorverarbeitungseinheit (VPU) (siehe die 16-breite ALU 1428), welche einen oder mehrere von ganzzahligen Befehlen, Gleitkommabefehlen einfacher Genauigkeit und Gleitkommabefehlen doppelter Genauigkeit ausführt. Die VPU unterstützt eine Verwürfelung der Registereingaben mit der Verwürfelungseinheit 1420, eine numerische Konvertierung mit numerischen Konvertiereinheiten 1422A-B und eine Replikation mit einer Replikationseinheit 1424 am Speichereingang. Schreibmaskenregister 1426 ermöglichen ein Prädizieren sich ergebender Vektorschreibvorgänge.
  • 15 ist ein Blockdiagramm eines Prozessors 1500, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuereinrichtung aufweisen kann und eine integrierte Graphik aufweisen kann, gemäß einigen Ausführungsformen der Erfindung. Die in durchgezogenen Linien dargestellten Kästchen in 15 zeigen einen Prozessor 1500 mit einem einzigen Kern 1502A, einem Systemagenten 1510, einem Satz einer oder mehrerer Bussteuereinheiten 1516, während die optionale Hinzufügung der in gestrichelten Linien dargestellten Kästchen einen alternativen Prozessor 1500 mit mehreren Kernen 1502A-N, einem Satz einer oder mehrerer integrierter Speichersteuereinheiten 1514 in der Systemagenteneinheit 1510 und eine Logik 1508 für spezielle Zwecke zeigt.
  • Demgemäß können verschiedene Implementationen des Prozessors 1500 Folgendes umfassen: 1) eine CPU mit der Logik 1508 für spezielle Zwecke, welche eine integrierte Graphik- und/oder wissenschaftliche (Durchsatz-) Logik ist (welche einen oder mehrere Kerne aufweisen kann), wobei die Kerne 1502A-N ein oder mehrere Kerne für allgemeine Zwecke sind (beispielsweise In-der-Reihe-Kerne für allgemeine Zwecke, Außerhalb-der-Reihe-Kerne für allgemeine Zwecke, eine Kombination der beiden); 2) einen Coprozessor, wobei die Kerne 1502A-N eine große Anzahl von Kernen für spezielle Zwecke sind, die in erster Linie für Graphik- und/oder wissenschaftliche Zwecke (Durchsatz) vorgesehen sind; und 3) einen Coprozessor, wobei die Kerne 1502A-N eine große Anzahl von In-der-Reihe-Kernen für allgemeine Zwecke sind. Demgemäß kann der Prozessor 1500 ein Prozessor für allgemeine Zwecke, ein Coprozessor oder ein Prozessor für spezielle Zwecke sein, wie beispielsweise ein Netz- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Graphikprozessor, eine GPGPU (Graphikverarbeitungseinheit für allgemeine Zwecke), ein Coprozessor mit vielen integrierten Kernen mit hohem Durchsatz (MIC) (mit 30 oder mehr Kernen), ein eingebetteter Prozessor oder dergleichen. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 1500 kann Teil eines oder mehrerer Substrate sein und/oder unter Verwendung einer beliebigen Anzahl von Prozesstechnologien, wie beispielsweise BiCMOS, CMOS oder NMOS, auf einem oder mehreren Substraten implementiert sein.
  • Die Speicherhierarchie umfasst einen oder mehrere Cacheebenen innerhalb der Kerne, einen Satz oder eine oder mehrere geteilte Cacheeinheiten 1506 und einen externen Speicher (nicht dargestellt), der mit dem Satz integrierter Speichersteuereinheiten 1514 gekoppelt ist. Der Satz geteilter Cacheeinheiten 1506 kann einen oder mehrere Mittelebenencaches in der Art von Level 2 (L2), Level 3 (L3), Level 4 (L4) oder anderer Cacheebenen, einen Last-Level-Cache (LLC) und/oder Kombinationen davon aufweisen. Wenngleich gemäß einer Ausführungsform eine ringbasierte Zwischenverbindungseinheit 1512 die integrierte Graphiklogik 1508 (die integrierte Graphiklogik 1508 ist ein Beispiel einer Logik für einen speziellen Zweck und wird hier auch so bezeichnet), den Satz geteilter Cacheeinheiten 1506 und die Systemagenteneinheit 1510/die eine oder die mehreren integrierten Speichersteuereinheiten 1514 verbindet, können alternative Ausführungsformen eine beliebige Anzahl wohlbekannter Techniken für die Verbindung solcher Einheiten verwenden. Gemäß einer Ausführungsform wird die Kohärenz zwischen einer oder mehreren Cacheeinheiten 1506 und Kernen 1502A-N aufrechterhalten.
  • Gemäß einigen Ausführungsformen sind einer oder mehrere der Kerne 1502A-N zu einem Multithreading in der Lage. Der Systemagent 1510 umfasst jene Komponenten, die Kerne 1502A N koordinieren und betreiben. Die Systemagenteneinheit 1510 kann beispielsweise eine Leistungssteuereinheit (PCU) und eine Anzeigeeinheit aufweisen. Die PCU kann aus Logik und Komponenten bestehen oder diese aufweisen, welche erforderlich sind, um den Leistungszustand der Kerne 1502A-N und der integrierten Graphiklogik 1508 zu regeln. Die Anzeigeeinheit dient dem Treiben einer oder mehrerer extern angeschlossener Anzeigen.
  • Die Kerne 1502A-N können in Bezug auf den Architekturbefehlssatz homogen oder heterogen sein, so dass zwei oder mehr der Kerne 1502A-N in der Lage sein können, den gleichen Befehlssatz auszuführen, während andere in der Lage sein können, nur eine Untermenge dieses Befehlssatzes oder einen anderen Befehlssatz auszuführen.
  • BEISPIELHAFTE COMPUTERARCHITEKTUREN
  • Die 16 - 19 sind Blockdiagramme als Beispiel dienender Computerarchitekturen. Andere Systementwürfe und -konfigurationen, die auf dem Fachgebiet für Laptops, Desktops, handgehaltene PC, persönliche digitale Assistenten, Ingenieursarbeitsstationen, Server, Netzvorrichtungen, Netz-Hubs, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSP), Graphikvorrichtungen, Videospielvorrichtungen, Settopboxen, Mikrosteuereinrichtungen, Mobiltelefone, tragbare Medienabspielgeräte, handgehaltene Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind auch geeignet. Im Allgemeinen ist eine große Vielzahl von Systemen oder elektronischen Vorrichtungen, die in der Lage sind, einen Prozessor und/oder eine andere Ausführungslogik aufzunehmen, wie hier offenbart, allgemein geeignet.
  • 16 zeigt ein Blockdiagramm eines Systems 1600 gemäß einer Ausführungsform der vorliegenden Erfindung. Das System 1600 kann einen oder mehrere Prozessoren 1610, 1615 umfassen, die mit einem Steuereinrichtungs-Hub 1620 gekoppelt sind. Gemäß einer Ausführungsform umfasst das Steuereinrichtungs-Hub 1620 ein Graphikspeichersteuereinrichtungs-Hub (GMCH) 1690 und ein Ein-/Ausgabe-Hub (IOH) 1650 (die sich auf getrennten Chips befinden können), umfasst das GMCH 1690 Speicher- und Graphiksteuereinrichtungen, mit denen ein Speicher 1640 und ein Coprozessor 1645 gekoppelt sind, und koppelt das IOH 1650 Ein-/Ausgabe-(E/A)-Vorrichtungen 1660 mit dem GMCH 1690. Alternativ sind einer oder beide der Speicher- und Graphiksteuereinrichtungen in den Prozessor integriert (wie hier beschrieben) und sind der Speicher 1640 und der Coprozessor 1645 in einem Einzelchip mit dem IOH 1650 direkt mit dem Prozessor 1610 und dem Steuereinrichtungs-Hub 1620 gekoppelt.
  • Die optionale Natur zusätzlicher Prozessoren 1615 ist in 16 mit unterbrochenen Linien dargestellt. Jeder Prozessor 1610, 1615 kann einen oder mehrere der hier beschriebenen Prozessorkerne aufweisen und eine Version des Prozessors 1500 sein.
  • Der Speicher 1640 kann beispielsweise ein dynamischer Direktzugriffsspeicher (DRAM), ein Phasenänderungsspeicher (PCM) oder eine Kombination der beiden sein. Für wenigstens eine Ausführungsform kommuniziert das Steuereinrichtungs-Hub 1620 mit dem einen oder den mehreren Prozessoren 1610, 1615 über einen Multi-Drop-Bus in der Art eines Frontside-Busses (FSB), einer Punkt-zu-Punkt-Schnittstelle in der Art einer QuickPath-Zwischenverbindung (QPI) oder einer ähnlichen Verbindung 1695.
  • Gemäß einer Ausführungsform ist der Coprozessor 1645 ein Prozessor für spezielle Zwecke in der Art beispielsweise eines MIC-Prozessors mit einem hohen Durchsatz, eines Netz- oder Kommunikationsprozessors, einer Kompressionsmaschine, eines Graphikprozessors, einer GPGPU, eines eingebetteten Prozessors oder dergleichen. Gemäß einer Ausführungsform kann das Steuereinrichtungs-Hub 1620 einen integrierten Graphikbeschleuniger aufweisen.
  • Es kann eine Vielzahl von Unterschieden zwischen den physikalischen Ressourcen 1610, 1615 in Bezug auf ein Gütemetrikspektrum geben, einschließlich architektonischer, mikroarchitektonischer, thermischer, Leistungsverbrauchsmerkmale und dergleichen.
  • Gemäß einer Ausführungsform führt der Prozessor 1610 Befehle aus, welche Datenverarbeitungsoperationen eines allgemeinen Typs steuern. In die Befehle können Coprozessorbefehle eingebettet sein. Der Prozessor 1610 erkennt diese Coprozessorbefehle als einem Typ angehörend, der durch den angeschlossenen Coprozessor 1645 ausgeführt werden sollte. Demgemäß gibt der Prozessor 1610 diese Coprozessorbefehle (oder Steuersignale, welche Coprozessorbefehle repräsentieren) auf einem Coprozessorbus oder einer anderen Zwischenverbindung an den Coprozessor 1645 aus. Der eine oder die mehreren Coprozessoren 1645 akzeptieren und führen die empfangenen Coprozessorbefehle aus.
  • 17 zeigt ein Blockdiagramm eines ersten spezifischeren als Beispiel dienenden Systems 1700 gemäß einer Ausführungsform der vorliegenden Erfindung. Wie in 17 dargestellt ist, ist das Mehrprozessorsystem 1700 ein Punkt-zu-Punkt-Zwischenverbindungssystem und umfasst einen ersten Prozessor 1770 und einen zweiten Prozessor 1780, die über eine Punkt-zu-Punkt-Zwischenverbindung 1750 gekoppelt sind. Jeder der Prozessoren 1770 und 1780 kann irgendeine Version des Prozessors 1500 sein. Gemäß einer Ausführungsform der Erfindung sind die Prozessoren 1770 und 1780 die Prozessoren 1610 bzw. 1615, während der Coprozessor 1738 der Coprozessor 1645 ist. Gemäß einer anderen Ausführungsform sind die Prozessoren 1770 und 1780 der Prozessor 1610 bzw. der Coprozessor 1645.
  • Die Prozessoren 1770 und 1780 sind als integrierte Speichersteuereinrichtungs(IMC)-Einheiten 1772 bzw. 1782 aufweisend dargestellt. Der Prozessor 1770 umfasst auch als Teil seiner Bussteuereinheiten Punkt-zu-Punkt(P-P)-Schnittstellen 1776 und 1778; ähnlich umfasst der zweite Prozessor 1780 P-P-Schnittstellen 1786 und 1788. Die Prozessoren 1770, 1780 können Informationen unter Verwendung der P-P-Schnittstellenschaltungen 1778, 1788 über eine Punkt-zu-Punkt(P-P)-Schnittstelle 1750 austauschen. Wie in 17 dargestellt ist, koppeln die IMC 1772 und 1782 die Prozessoren mit jeweiligen Speichern, nämlich mit einem Speicher 1732 und einem Speicher 1734, welche Abschnitte des Hauptspeichers sein können, die lokal an den jeweiligen Prozessoren angebracht sind.
  • Die Prozessoren 1770, 1780 können jeweils Informationen mit einem Chipsatz 1790 über individuelle P-P-Schnittstellen 1752, 1754 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 1776, 1794, 1786, 1798 austauschen. Der Chipsatz 1790 kann optional über eine Hochleistungsschnittstelle 1792 Informationen mit dem Coprozessor 1738 austauschen. Gemäß einer Ausführungsform ist der Coprozessor 1738 ein Prozessor für spezielle Zwecke in der Art beispielsweise eines MIC-Prozessors mit einem hohen Durchsatz, eines Netz- oder Kommunikationsprozessors, einer Kompressionsmaschine, eines Graphikprozessors, einer GPGPU, eines eingebetteten Prozessors oder dergleichen.
  • Ein geteilter Cache (nicht dargestellt) kann entweder in einen der Prozessoren aufgenommen sein oder sich außerhalb der beiden Prozessoren befinden, jedoch über eine P-P-Zwischenverbindung mit den Prozessoren verbunden sein, so dass lokale Cacheinformationen des einen oder der beiden Prozessoren im geteilten Cache gespeichert werden können, falls ein Prozessor in einen Niederleistungsmodus versetzt wird.
  • Der Chipsatz 1790 kann über eine Schnittstelle 1796 mit einem ersten Bus 1716 gekoppelt werden. Gemäß einer Ausführungsform kann der erste Bus 1716 ein Peripheriekomponentenzwischenverbindungs(PCI)-Bus oder ein Bus in der Art eines PCI-Express-Busses oder eines anderen E/A-Zwischenverbindungsbusses der dritten Generation sein, wenngleich der Schutzumfang der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in 17 dargestellt ist, können verschiedene E/A-Vorrichtungen 1714 mit dem ersten Bus 1716 zusammen mit einer Busbrücke 1718, welche den ersten Bus 1716 mit einem zweiten Bus 1720 koppelt, gekoppelt sein. Gemäß einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 1715 in der Art von Coprozessoren, MIC-Prozessoren mit einem hohen Durchsatz, GPGPU, Beschleuniger (in der Art beispielsweise von Graphikbeschleunigern oder digitalen Signalverarbeitungs(DSP)-Einheiten), feldprogrammierbarer Gate-Arrays oder eines anderen Prozessors mit dem ersten Bus 1716 gekoppelt. Gemäß einer Ausführungsform kann der zweite Bus 1720 ein Bus mit einer geringen Stiftanzahl (LPC-Bus) sein. Verschiedene Vorrichtungen können mit einem zweiten Bus 1720 gekoppelt werden, einschließlich beispielsweise einer Tastatur und/oder einer Maus 1722, von Kommunikationsvorrichtungen 1727 und einer Speichereinheit 1728 in der Art eines Plattenlaufwerks oder einer anderen Massenspeichervorrichtung, die gemäß einer Ausführungsform Befehle/Code und Daten 1730 aufweisen kann. Ferner kann eine Audio-E/A 1724 mit dem zweiten Bus 1720 gekoppelt sein. Es sei bemerkt, dass auch andere Architekturen möglich sind. Beispielsweise kann an Stelle der Punkt-zu-Punkt-Architektur aus 17 ein System einen Multi-Drop-Bus oder eine andere derartige Architektur implementieren.
  • 18 zeigt ein Blockdiagramm eines zweiten spezifischeren als Beispiel dienenden Systems 1800 gemäß einer Ausführungsform der vorliegenden Erfindung. Gleiche Elemente in den 17 und 18 weisen die gleichen Bezugszahlen auf, und bestimmte Aspekte aus 17 wurden aus 18 fortgelassen, um zu vermeiden, dass andere Aspekte von 18 unklar werden.
  • 18 zeigt, dass die Prozessoren 1770, 1780 eine integrierte Speicher- und E/A-Steuerlogik („CL“) 1772 bzw. 1782 aufweisen können. Demgemäß umfassen CL 1772, 1782 integrierte Speichersteuereinheiten und eine E/A-Steuerlogik. 18 zeigt, dass nicht nur die Speicher 1732, 1734 mit der CL 1772, 1782 gekoppelt sind, sondern auch dass E/A-Vorrichtungen 1814 mit der Steuerlogik 1772, 1782 gekoppelt sind. Legacy-E/A-Vorrichtungen 1815 sind mit dem Chipsatz 1790 gekoppelt.
  • 19 zeigt ein Blockdiagramm eines SoC 1900 gemäß einer Ausführungsform der vorliegenden Erfindung. Ähnliche Elemente in 15 weisen die gleichen Bezugszahlen auf. Auch sind mit gestrichelten Linien dargestellte Kästchen optionale Merkmale an höher entwickelten SoC. In 19 sind eine oder mehrere Zwischenverbindungseinheiten 1902 mit Folgenden gekoppelt: einem Anwendungsprozessor 1910, der einen Satz eines oder mehrerer Kerne 1502A-N mit Cacheeinheiten 1504A-N und einer oder mehreren geteilten Cacheeinheiten 1506 aufweist, einer Systemagenteneinheit 1510, einer oder mehreren Bussteuereinheiten 1516, einer oder mehreren integrierten Speichersteuereinheiten 1514, einem Satz eines oder mehrerer Coprozessoren 1920, welche eine integrierte Graphiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor aufweisen können, einer statischen Direktzugriffsspeicher(SRAM)-Einheit 1930, einer Direktspeicherzugriffs(DMA)-Einheit 1932 und einer Anzeigeeinheit 1940 zum Koppeln der einen oder der mehreren externen Anzeigen. Gemäß einer Ausführungsform umfassen der eine oder die mehreren Coprozessoren 1920 einen Prozessor für spezielle Zwecke in der Art beispielsweise eines Netz- oder Kommunikationsprozessors, einer Kompressionsmaschine, einer GPGPU, eines MIC-Prozessors mit einem hohen Durchsatz, eines eingebetteten Prozessors oder dergleichen.
  • Ausführungsformen der hier offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementationsansätze implementiert werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert werden, die auf programmierbaren Systemen ausgeführt werden, welche wenigstens einen Prozessor, ein Speichersystem (einschließlich eines flüchtigen und nichtflüchtigen Speichers und/oder Speicherelemente), wenigstens eine Eingabevorrichtung und wenigstens eine Ausgabevorrichtung umfassen.
  • Programmcode in der Art des in 17 dargestellten Codes 1730 kann angewendet werden, um Befehle zum Ausführen der hier beschriebenen Funktionen und zum Erzeugen von Ausgangsinformationen einzugeben. Die Ausgangsinformationen können in einer bekannten Weise auf eine oder mehrere Ausgangsvorrichtungen angewendet werden. Für die Zwecke dieser Anmeldung umfasst ein Verarbeitungssystem ein beliebiges System, das einen Prozessor aufweist, wie beispielsweise einen digitalen Signalprozessor (DSP), eine Mikrosteuereinrichtung, eine anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer prozeduralen oder objektorientierten Programmiersprache hoher Ebene implementiert werden, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann auch in Assembler oder Maschinensprache implementiert werden, falls dies erwünscht ist. Tatsächlich sind die hier beschriebenen Mechanismen in ihrem Umfang nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder eine interpretierte Sprache sein.
  • Ein oder mehrere Aspekte wenigstens einer Ausführungsform können durch repräsentative Befehle implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, welches verschiedene Logiken innerhalb des Prozessors repräsentiert, welche, wenn sie von einer Maschine gelesen werden, die Maschine veranlassen, Logik zur Ausführung der hier beschriebenen Techniken zu bilden. Diese als „IP-Kerne“ bekannten Repräsentationen können auf einem physischen maschinenlesbaren Medium gespeichert werden und verschiedenen Kunden oder Herstellungseinrichtungen zugeführt werden, um sie in die Herstellungsmaschinen zu laden, welche tatsächlich die Logik oder den Prozessor bilden.
  • Solche maschinenlesbaren Speichermedien können ohne Einschränkung nichtflüchtige, reale Anordnungen von durch eine Maschine oder Vorrichtung hergestellten oder gebildeten Artikeln einschließen, einschließlich Speichermedien in der Art von Festplatten, eines anderen Plattentyps, einschließlich Disketten, optischer Platten, Compact-Disk-Nurlesespeicher (CDROM), wiederbeschreibbarer Compact-Disks (CD-RW) und magnetooptischer Platten, Halbleitervorrichtungen in der Art von Nurlesespeichern (ROM), Direktzugriffsspeichern (RAM) in der Art dynamischer Direktzugriffsspeicher (DRAM), statischer Direktzugriffsspeicher (SRAM), löschbare, programmierbare Nurlesespeicher (EPROM), Flash-Speicher, elektrisch löschbare, programmierbare Nurlesespeicher (EEPROM), einen Phasenänderungsspeicher (PCM), magnetische oder optische Karten oder ein beliebiger anderer Typ eines Mediums, das dafür geeignet ist, elektronische Befehle zu speichern.
  • Dementsprechend umfassen Ausführungsformen der Erfindung auch nichtflüchtige, reale maschinenlesbare Medien, die Befehle oder Entwurfsdaten enthalten, wie die Hardware Description Language (HDL), welche hier beschriebene Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale definiert. Diese Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • EMULATION (EINSCHLIEBLICH BINÄRÜBERSETZUNG, CODE-MORPHING USW.)
  • In einigen Fällen kann ein Befehlswandler verwendet werden, um einen Befehl von einem Quellbefehlssatz in einen Zielbefehlssatz umzuwandeln. Beispielsweise kann der Befehlswandler einen Befehl zu einem oder mehreren anderen Befehlen, die durch den Kern zu verarbeiten sind, übersetzen (beispielsweise unter Verwendung einer statischen Binärübersetzung, einer dynamischen Binärübersetzung einschließlich einer dynamischen Kompilation), morphen, emulieren oder auf andere Weise umwandeln. Der Befehlswandler kann in Software, Hardware, Firmware oder einer Kombination davon implementiert sein. Der Befehlswandler kann sich an einem Prozessor, außerhalb eines Prozessors oder teilweise an und außerhalb eines Prozessors befinden.
  • 20 ist ein Blockdiagramm, das die Verwendung eines Softwarebefehlswandlers zur Umwandlung binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz zeigt, gemäß einigen Ausführungsformen der Erfindung. Gemäß der dargestellten Ausführungsform ist der Befehlswandler ein Softwarebefehlswandler, wenngleich der Befehlswandler alternativ auch in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert werden kann. 20 zeigt ein Programm in einer Sprache 2002 hoher Ebene, das unter Verwendung eines x86-Compilers 2004 kompiliert werden kann, um einen x86-Binärcode 2006 zu erzeugen, der nativ durch einen Prozessor ausgeführt werden kann, der durch wenigstens einen Kern 2016 mit einem x86-Befehlssatz ausgeführt werden kann. Der Prozessor mit wenigstens einem Kern 2016 mit einem x86-Befehlssatz repräsentiert einen Prozessor, der im Wesentlichen die gleichen Funktionen ausführen kann wie ein Intel-Prozessor mit wenigstens einem Kern mit einem x86-Befehlssatz, indem er (1) einen erheblichen Teil des Befehlssatzes des Intel-Kerns mit einem x86-Befehlssatz oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die dafür vorgesehen sind, auf einem Intel-Prozessor mit wenigstens einem Kern mit einem x86-Befehlssatz zu laufen, kompatibel ausführt oder auf andere Weise verarbeitet, um im Wesentlichen das gleiche Ergebnis zu erreichen wie ein Intel-Prozessor mit wenigstens einem Kern mit einem x86-Befehlssatz. Der x86-Compiler 2004 repräsentiert einen Compiler, der arbeiten kann, um einen x86-Binärcode 2006 (beispielsweise Objektcode) zu erzeugen, der mit oder ohne eine zusätzliche Verknüpfungsverarbeitung auf dem Prozessor mit wenigstens einem Kern 2016 mit einem x86-Befehlssatz auszuführen ist. Ähnlich zeigt 20 das Programm in der Sprache 2002 hoher Ebene, das unter Verwendung eines alternativen Befehlssatzcompilers 2008 kompiliert werden kann, um einen alternativen Befehlssatz-Binärcode 2010 zu erzeugen, der durch einen Prozessor mit wenigstens einem Kern 2014 mit einem x86-Befehlssatz nativ ausgeführt werden kann (beispielsweise einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, CA ausführen und/oder den ARM-Befehlssatz von ARM Holdings aus Sunnyvale, CA ausführen). Der Befehlswandler 2012 wird verwendet, um den x86-Binärcode 2006 in Code umzuwandeln, der durch den Prozessor ohne einen Kern 2014 mit einem x86-Befehlssatz nativ ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht der gleiche wie der alternative Befehlssatz-Binärcode 2010, weil ein Befehlswandler, der dazu in der Lage ist, schwer zu bilden ist, der umgewandelte Code schafft jedoch die allgemeine Operation und kann aus Befehlen des alternativen Befehlssatzes bestehen. Demgemäß repräsentiert der Befehlswandler 2012 Software, Firmware, Hardware oder eine Kombination davon, wodurch es einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen Prozessor oder Kern mit einem x86-Befehlssatz aufweist, durch Emulation, Simulation oder einen anderen Prozess ermöglicht wird, den x86-Binärcode 2006 auszuführen.
  • WEITERE BEISPIELE
  • Beispiel 1 sieht einen beispielhaften Prozessor zur Ausführung eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls vor, welcher Folgendes aufweist: eine Abrufschaltungsanordnung zum Abrufen des SMM-Befehls mit Feldern zum Spezifizieren von Stellen einer ersten, einer zweiten und einer Ausgangsmatrix, wobei die spezifizierte zweite Matrix eine dünnbesetzte Matrix ist, wobei die Abrufschaltungsanordnung ferner dafür ausgelegt ist, Elemente der spezifizierten ersten und zweiten Matrix aus einem Speicher abzurufen und in einer Registerdatei zu speichern, eine Decodierschaltungsanordnung zur Decodierung des abgerufenen SMM-Befehls, eine Ausführungsschaltungsanordnung, die dafür ausgelegt ist, ansprechend auf den decodierten SMM-Befehl die in der Registerdatei gespeicherte zweite Matrix durch Ersetzen eines oder mehrerer nullwertiger Elemente durch noch zu verarbeitende von Null verschiedene Elemente zu packen, wobei jedes der ersetzten Elemente ferner ein Feld zur Identifikation seiner logischen Position innerhalb der zweiten Matrix aufweist, und die Ausführungsschaltungsanordnung ferner dafür ausgelegt ist, für jedes von Null verschiedene Element an Zeile M und Spalte K der spezifizierten ersten Matrix ein Produkt des von Null verschiedenen Elements und jedes entsprechenden von Null verschiedenen Elements an Zeile K und Spalte N der gepackten zweiten Matrix zu erzeugen und jedes erzeugte Produkt mit einem vorhergehenden Wert eines entsprechenden Elements an Zeile M und Spalte N der spezifizierten Ausgangsmatrix zu akkumulieren.
  • Beispiel 2 weist den Gegenstand des beispielhaften Prozessors von Beispiel 1 auf, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Zeile K der spezifizierten zweiten Matrix festzustellen, ob die Zeile nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob die Zeile von Null verschiedene Elemente enthält, die noch anhand des nullwertigen Elements zu verarbeiten sind, und, falls dies der Fall ist, für jedes nullwertige Element mit einem noch zu verarbeitenden von Null verschiedenen Element das von Null verschiedene Element in das nullwertige Element zu falten.
  • Beispiel 3 weist den Gegenstand des beispielhaften Prozessors von Beispiel 1 auf, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Spalte N der spezifizierten zweiten Matrix festzustellen, ob die Spalte nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob eines der P-Elemente einer nachfolgenden Spalte ein von Null verschiedener Wert ist, und für jedes nullwertige Element mit einem von Null verschiedenen Element in der nachfolgenden Spalte das von Null verschiedene Element in das nullwertige Element zu drücken.
  • Beispiel 4 weist den Gegenstand des beispielhaften Prozessors von Beispiel 1 auf, wobei jedes der in der Registerdatei gespeicherten Elemente ein Feld zur Spezifikation, ob es einen Nullwert hat, aufweist, und wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, das Feld zu verwenden, wenn festgestellt wird, ob das Element einen Nullwert hat.
  • Beispiel 5 weist den Gegenstand des beispielhaften Prozessors von Beispiel 1 auf, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, die Erzeugung jeglicher Produkte von Elementen mit Nullwerten zu vermeiden.
  • Beispiel 6 weist den Gegenstand des beispielhaften Prozessors von Beispiel 1 auf, wobei die Ausführungsschaltungsanordnung so ausgelegt ist, dass sie ein Verarbeitungsfeld von (X × Y) Verarbeitungseinheiten aufweist, wobei X kleiner als M ist und Y kleiner als N ist, und wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, das Verarbeitungsfeld iterativ über mehrere Taktzyklen zu verwenden, um die gleiche Verarbeitung auszuführen wie ein tatsächliches physisches Feld von (M × N) Verarbeitungseinheiten.
  • Beispiel 7 weist den Gegenstand des beispielhaften Prozessors von Beispiel 1 auf, wobei die Ausführungsschaltungsanordnung so ausgelegt ist, dass sie ein Verarbeitungsfeld von (X × Y) Verarbeitungseinheiten aufweist, wobei X kleiner als M ist und Y kleiner als N ist, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, mehrere Instanzen des Verarbeitungsfelds zu kaskadieren, um die gleiche Verarbeitung auszuführen wie ein tatsächliches physisches Feld von (M × N) Verarbeitungseinheiten.
  • Beispiel 8 sieht ein beispielhaftes Verfahren zur Ausführung eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls vor, welches Folgendes aufweist: Abrufen des SMM-Befehls mit Feldern zur Spezifikation einer ersten, einer zweiten und einer Ausgangsmatrix unter Verwendung einer Abrufschaltungsanordnung, wobei die spezifizierte zweite Matrix eine dünnbesetzte Matrix ist, wobei die Abrufschaltungsanordnung ferner dafür ausgelegt ist, Elemente der spezifizierten ersten und zweiten Matrix aus einem Speicher abzurufen und in einer Registerdatei zu speichern, Decodieren des abgerufenen SMM-Befehls unter Verwendung der Decodierschaltungsanordnung, Reagieren durch die Ausführungsschaltungsanordnung auf den decodierten SMM-Befehl durch Packen der in der Registerdatei gespeicherten spezifizierten zweiten Matrix durch Ersetzen eines oder mehrerer nullwertiger Elemente durch noch zu verarbeitende von Null verschiedene Elemente, wobei jedes ersetzte Element in der gepackten zweiten Matrix ein Feld zur Identifikation seiner logischen Position innerhalb der zweiten Matrix aufweist, und ferner unter Verwendung der Ausführungsschaltungsanordnung: für jedes von Null verschiedene Element an Zeile M und Spalte K der spezifizierten ersten Matrix Erzeugen eines Produkts des von Null verschiedenen Elements und jedes entsprechenden von Null verschiedenen Elements an Zeile K und Spalte N der gepackten zweiten Matrix und Akkumulieren jedes erzeugten Produkts und eines vorhergehenden Werts eines entsprechenden Elements an Zeile M und Spalte N der spezifizierten Ausgangsmatrix.
  • Beispiel 9 weist den Gegenstand des beispielhaften Verfahrens von Beispiel 8 auf, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Zeile K der spezifizierten zweiten Matrix festzustellen, ob die Zeile nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob die Zeile von Null verschiedene Elemente enthält, die noch anhand des nullwertigen Elements zu verarbeiten sind, und, falls dies der Fall ist, für jedes nullwertige Element mit einem noch zu verarbeitenden von Null verschiedenen Element das von Null verschiedene Element in das nullwertige Element zu falten.
  • Beispiel 10 weist den Gegenstand des beispielhaften Verfahrens von Beispiel 8 auf, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Spalte N der spezifizierten zweiten Matrix festzustellen, ob die Spalte nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob eines der P-Elemente einer nachfolgenden Spalte ein von Null verschiedener Wert ist, und für jedes nullwertige Element mit einem von Null verschiedenen Element in der nachfolgenden Spalte das von Null verschiedene Element in das nullwertige Element zu drücken.
  • Beispiel 11 weist den Gegenstand des beispielhaften Verfahrens von Beispiel 8 auf, wobei jedes der in der Registerdatei gespeicherten Elemente ein Feld zur Spezifikation, ob es einen Nullwert hat, aufweist, und wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, das Feld zu verwenden, wenn festgestellt wird, ob das Element einen Nullwert hat.
  • Beispiel 12 weist den Gegenstand des beispielhaften Verfahrens von Beispiel 8 auf, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, die Erzeugung jeglicher Produkte von Elementen mit Nullwerten zu vermeiden.
  • Beispiel 13 weist den Gegenstand des beispielhaften Verfahrens von Beispiel 8 auf, wobei die Ausführungsschaltungsanordnung so ausgelegt ist, dass sie ein Verarbeitungsfeld von (X × Y) Verarbeitungseinheiten aufweist, wobei X kleiner als M ist und Y kleiner als N ist, und wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, das Verarbeitungsfeld iterativ über mehrere Taktzyklen zu verwenden, um die gleiche Verarbeitung auszuführen wie ein tatsächliches physisches Feld von (M × N) Verarbeitungseinheiten.
  • Beispiel 14 weist den Gegenstand des beispielhaften Verfahrens von Beispiel 8 auf, wobei die Ausführungsschaltungsanordnung so ausgelegt ist, dass sie ein Verarbeitungsfeld von (X × Y) Verarbeitungseinheiten aufweist, wobei X kleiner als M ist und Y kleiner als N ist, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, mehrere Instanzen des Verarbeitungsfelds zu kaskadieren, um die gleiche Verarbeitung auszuführen wie ein tatsächliches physisches Feld von (M × N) Verarbeitungseinheiten.
  • Beispiel 15 sieht ein beispielhaftes System zur Ausführung eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls vor, welches Folgendes aufweist: einen Speicher, eine Abrufschaltungsanordnung zum Abrufen des SMM-Befehls mit Feldern zur Spezifikation von Stellen der ersten, der zweiten und der Ausgangsmatrix, wobei die spezifizierte zweite Matrix eine dünnbesetzte Matrix ist, wobei die Abrufschaltungsanordnung ferner dafür ausgelegt ist, Elemente der spezifizierten ersten und zweiten Matrix aus dem Speicher abzurufen und in einer Registerdatei zu speichern, eine Decodierschaltungsanordnung zum Decodieren des abgerufenen SMM-Befehls, eine Ausführungsschaltungsanordnung, die dafür ausgelegt ist, ansprechend auf den decodierten SMM-Befehl die in der Registerdatei gespeicherte zweite Matrix durch Ersetzen eines oder mehrerer nullwertiger Elemente durch noch zu verarbeitende von Null verschiedene Elemente zu packen, wobei jedes der ersetzten Elemente ferner ein Feld zur Identifikation seiner logischen Position innerhalb der zweiten Matrix aufweist, und die Ausführungsschaltungsanordnung ferner dafür ausgelegt ist, für jedes von Null verschiedene Element an Zeile M und Spalte K der spezifizierten ersten Matrix ein Produkt des von Null verschiedenen Elements und jedes entsprechenden von Null verschiedenen Elements an Zeile K und Spalte N der gepackten zweiten Matrix zu erzeugen und jedes erzeugte Produkt mit einem vorhergehenden Wert eines entsprechenden Elements an Zeile M und Spalte N der spezifizierten Ausgangsmatrix zu akkumulieren.
  • Beispiel 16 weist den Gegenstand des beispielhaften Systems von Beispiel 15 auf, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Zeile K der spezifizierten zweiten Matrix festzustellen, ob die Zeile nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob die Zeile von Null verschiedene Elemente enthält, die noch anhand des nullwertigen Elements zu verarbeiten sind, und, falls dies der Fall ist, für jedes nullwertige Element mit einem noch zu verarbeitenden von Null verschiedenen Element das von Null verschiedene Element in das nullwertige Element zu falten.
  • Beispiel 17 weist den Gegenstand des beispielhaften Systems von Beispiel 15 auf, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Spalte N der spezifizierten zweiten Matrix festzustellen, ob die Spalte nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob eines der P-Elemente einer nachfolgenden Spalte ein von Null verschiedener Wert ist, und für jedes nullwertige Element mit einem von Null verschiedenen Element in der nachfolgenden Spalte das von Null verschiedene Element in das nullwertige Element zu drücken.
  • Beispiel 18 weist den Gegenstand des beispielhaften Systems von Beispiel 15 auf, wobei jedes der in der Registerdatei gespeicherten Elemente ein Feld zur Spezifikation, ob es einen Nullwert hat, aufweist, und wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, das Feld zu verwenden, wenn festgestellt wird, ob das Element einen Nullwert hat.
  • Beispiel 19 weist den Gegenstand des beispielhaften Systems von Beispiel 15 auf, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, die Erzeugung jeglicher Produkte von Elementen mit Nullwerten zu vermeiden.
  • Beispiel 20 weist den Gegenstand des beispielhaften Verfahrens von System 15 auf, wobei die Ausführungsschaltungsanordnung so ausgelegt ist, dass sie ein Verarbeitungsfeld von (X × Y) Verarbeitungseinheiten aufweist, wobei X kleiner als M ist und Y kleiner als N ist, und wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, das Verarbeitungsfeld iterativ über mehrere Taktzyklen zu verwenden, um die gleiche Verarbeitung auszuführen wie ein tatsächliches physisches Feld von (M × N) Verarbeitungseinheiten.

Claims (26)

  1. Beansprucht wird:
  2. Prozessor zur Ausführung eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls, welcher Folgendes umfasst: eine Abruf- und Decodierschaltungsanordnung zum Abrufen und Decodieren des SMM-Befehls mit Feldern zum Spezifizieren von Stellen einer ersten, einer zweiten und einer Ausgangsmatrix, wobei die zweite Matrix eine dünnbesetzte Matrix ist, wobei die Abrufschaltungsanordnung ferner dafür ausgelegt ist, Elemente der ersten und zweiten Matrix von ihren Stellen abzurufen und in einer Registerdatei zu speichern, und eine Ausführungsschaltungsanordnung, die dafür ausgelegt ist, ansprechend auf den decodierten SMM-Befehl die in der Registerdatei gespeicherte zweite Matrix durch Ersetzen eines oder mehrerer nullwertiger Elemente durch noch zu verarbeitende von Null verschiedene Elemente zu packen, wobei jedes der ersetzten Elemente ferner ein Feld zur Identifikation seiner logischen Position innerhalb der zweiten Matrix aufweist, und die Ausführungsschaltungsanordnung ferner dafür ausgelegt ist, für jedes von Null verschiedene Element an Zeile M und Spalte K der ersten Matrix ein Produkt des von Null verschiedenen Elements und jedes entsprechenden von Null verschiedenen Elements an Zeile K und Spalte N der gepackten zweiten Matrix zu erzeugen und jedes erzeugte Produkt mit einem vorhergehenden Wert eines entsprechenden Elements an Zeile M und Spalte N der Ausgangsmatrix zu akkumulieren.
  3. Prozessor nach Anspruch 1, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Zeile K der zweiten Matrix festzustellen, ob die Zeile nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob die Zeile von Null verschiedene Elemente enthält, die noch anhand des nullwertigen Elements zu verarbeiten sind, und, falls dies der Fall ist, für jedes nullwertige Element mit einem noch zu verarbeitenden von Null verschiedenen Element das von Null verschiedene Element in das nullwertige Element zu falten.
  4. Prozessor nach Anspruch 1, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Spalte N der zweiten Matrix festzustellen, ob die Spalte nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob eines der P-Elemente einer nachfolgenden Spalte ein von Null verschiedener Wert ist, und für jedes nullwertige Element mit einem von Null verschiedenen Element in der nachfolgenden Spalte das von Null verschiedene Element in das nullwertige Element zu drücken.
  5. Prozessor nach Anspruch 1, wobei jedes der in der Registerdatei gespeicherten Elemente ein Feld zur Spezifikation, ob es einen Nullwert hat, aufweist, und wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, das Feld zu verwenden, wenn festgestellt wird, ob das Element einen Nullwert hat.
  6. Prozessor nach einem der Ansprüche 1 bis 4, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, die Erzeugung jeglicher Produkte von Elementen mit Nullwerten zu vermeiden.
  7. Prozessor nach einem der Ansprüche 1 bis 4, wobei die Ausführungsschaltungsanordnung so ausgelegt ist, dass sie ein Verarbeitungsfeld von (X × Y) Verarbeitungseinheiten umfasst, wobei X kleiner als M ist und Y kleiner als N ist, und wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, das Verarbeitungsfeld iterativ über mehrere Taktzyklen zu verwenden, um die gleiche Verarbeitung auszuführen wie ein tatsächliches physisches Feld von (M × N) Verarbeitungseinheiten.
  8. Prozessor nach einem der Ansprüche 1 bis 4, wobei die Ausführungsschaltungsanordnung so ausgelegt ist, dass sie ein Verarbeitungsfeld von (X × Y) Verarbeitungseinheiten umfasst, wobei X kleiner als M ist und Y kleiner als N ist, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, mehrere Instanzen des Verarbeitungsfelds zu kaskadieren, um die gleiche Verarbeitung auszuführen wie ein tatsächliches physisches Feld von (M × N) Verarbeitungseinheiten.
  9. System zur Ausführung eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls, welches Folgendes umfasst: einen Speicher, eine Abruf- und Decodierschaltungsanordnung zum Abrufen und Decodieren des SMM-Befehls mit Feldern zum Spezifizieren von Stellen einer ersten, einer zweiten und einer Ausgangsmatrix, wobei die zweite Matrix eine dünnbesetzte Matrix ist, wobei die Abrufschaltungsanordnung ferner dafür ausgelegt ist, Elemente der ersten und zweiten Matrix aus dem Speicher abzurufen und in einer Registerdatei zu speichern, und eine Ausführungsschaltungsanordnung, die dafür ausgelegt ist, ansprechend auf den decodierten SMM-Befehl die in der Registerdatei gespeicherte zweite Matrix durch Ersetzen eines oder mehrerer nullwertiger Elemente durch noch zu verarbeitende von Null verschiedene Elemente zu packen, wobei jedes der ersetzten Elemente ferner ein Feld zur Identifikation seiner logischen Position innerhalb der zweiten Matrix aufweist, und die Ausführungsschaltungsanordnung ferner dafür ausgelegt ist, für jedes von Null verschiedene Element an Zeile M und Spalte K der ersten Matrix ein Produkt des von Null verschiedenen Elements und jedes entsprechenden von Null verschiedenen Elements an Zeile K und Spalte N der gepackten zweiten Matrix zu erzeugen und jedes erzeugte Produkt mit einem vorhergehenden Wert eines entsprechenden Elements an Zeile M und Spalte N der Ausgangsmatrix zu akkumulieren.
  10. System nach Anspruch 8, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Zeile K der zweiten Matrix festzustellen, ob die Zeile nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob die Zeile von Null verschiedene Elemente enthält, die noch anhand des nullwertigen Elements zu verarbeiten sind, und, falls dies der Fall ist, für jedes nullwertige Element mit einem noch zu verarbeitenden von Null verschiedenen Element das von Null verschiedene Element in das nullwertige Element zu falten.
  11. System nach Anspruch 8, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Spalte N der zweiten Matrix festzustellen, ob die Spalte nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob eines der P-Elemente einer nachfolgenden Spalte ein von Null verschiedener Wert ist, und für jedes nullwertige Element mit einem von Null verschiedenen Element in der nachfolgenden Spalte das von Null verschiedene Element in das nullwertige Element zu drücken.
  12. System nach einem der Ansprüche 8 bis 10, wobei jedes der in der Registerdatei gespeicherten Elemente ein Feld zur Spezifikation, ob es einen Nullwert hat, aufweist, und wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, das Feld zu verwenden, wenn festgestellt wird, ob das Element einen Nullwert hat.
  13. System nach einem der Ansprüche 8 bis 10, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, die Erzeugung jeglicher Produkte von Elementen mit Nullwerten zu vermeiden.
  14. System nach einem der Ansprüche 8 bis 10, wobei die Ausführungsschaltungsanordnung so ausgelegt ist, dass sie ein Verarbeitungsfeld von (X × Y) Verarbeitungseinheiten umfasst, wobei X kleiner als M ist und Y kleiner als N ist, und wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, das Verarbeitungsfeld iterativ über mehrere Taktzyklen zu verwenden, um die gleiche Verarbeitung auszuführen wie ein tatsächliches physisches Feld von (M × N) Verarbeitungseinheiten.
  15. Verfahren zur Ausführung eines Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehls, welches Folgendes umfasst: Abrufen und Decodieren des SMM-Befehls mit Feldern zur Spezifikation von Stellen der ersten, der zweiten und der Ausgangsmatrix unter Verwendung der Abruf- und Decodierschaltungsanordnung, wobei die zweite Matrix eine dünnbesetzte Matrix ist, wobei die Abrufschaltungsanordnung ferner dafür ausgelegt ist, Elemente der ersten und zweiten Matrix von ihren Stellen abzurufen und in einer Registerdatei zu speichern, und Reagieren auf den decodierten SMM-Befehl unter Verwendung der Ausführungsschaltungsanordnung durch Packen der in der Registerdatei gespeicherten zweiten Matrix durch Ersetzen eines oder mehrerer nullwertiger Elemente durch noch zu verarbeitende von Null verschiedene Elemente, wobei jedes ersetzte Element ein Feld zur Identifikation seiner logischen Position innerhalb der zweiten Matrix aufweist, und ferner unter Verwendung der Ausführungsschaltungsanordnung: für jedes von Null verschiedene Element an Zeile M und Spalte K der ersten Matrix Erzeugen eines Produkts des von Null verschiedenen Elements und jedes entsprechenden von Null verschiedenen Elements an Zeile K und Spalte N der gepackten zweiten Matrix und Akkumulieren jedes erzeugten Produkts und eines vorhergehenden Werts eines entsprechenden Elements an Zeile M und Spalte N der Ausgangsmatrix.
  16. Verfahren nach Anspruch 14, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Zeile K der zweiten Matrix festzustellen, ob die Zeile nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob die Zeile von Null verschiedene Elemente enthält, die noch anhand des nullwertigen Elements zu verarbeiten sind, und, falls dies der Fall ist, für jedes nullwertige Element mit einem noch zu verarbeitenden von Null verschiedenen Element das von Null verschiedene Element in das nullwertige Element zu falten.
  17. Verfahren nach Anspruch 14, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Spalte N der zweiten Matrix festzustellen, ob die Spalte nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob eines der P-Elemente einer nachfolgenden Spalte ein von Null verschiedener Wert ist, und für jedes nullwertige Element mit einem von Null verschiedenen Element in der nachfolgenden Spalte das von Null verschiedene Element in das nullwertige Element zu drücken.
  18. Verfahren nach einem der Ansprüche 14 bis 16, wobei jedes der in der Registerdatei gespeicherten Elemente ein Feld zur Spezifikation, ob es einen Nullwert hat, aufweist, und wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, das Feld zu verwenden, wenn festgestellt wird, ob das Element einen Nullwert hat.
  19. Verfahren nach einem der Ansprüche 14 bis 16, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, die Erzeugung jeglicher Produkte von Elementen mit Nullwerten zu vermeiden.
  20. Verfahren nach einem der Ansprüche 14 bis 16, wobei die Ausführungsschaltungsanordnung so ausgelegt ist, dass sie ein Verarbeitungsfeld von (X × Y) Verarbeitungseinheiten umfasst, wobei X kleiner als M ist und Y kleiner als N ist, und wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, das Verarbeitungsfeld iterativ über mehrere Taktzyklen zu verwenden, um die gleiche Verarbeitung auszuführen wie ein tatsächliches physisches Feld von (M × N) Verarbeitungseinheiten.
  21. Verfahren nach einem der Ansprüche 14 bis 16, wobei die Ausführungsschaltungsanordnung so ausgelegt ist, dass sie ein Verarbeitungsfeld von (X × Y) Verarbeitungseinheiten umfasst, wobei X kleiner als M ist und Y kleiner als N ist, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, mehrere Instanzen des Verarbeitungsfelds zu kaskadieren, um die gleiche Verarbeitung auszuführen wie ein tatsächliches physisches Feld von (M × N) Verarbeitungseinheiten.
  22. Nichtflüchtiges maschinenlesbares Medium, das Befehle aufweist, auf die ein Prozessor ansprechen soll, um einen Dünnbesetzte-Matrix-Multiplikations(SMM)-Befehl auszuführen durch: Abrufen und Decodieren des SMM-Befehls mit Feldern zur Spezifikation von Stellen der ersten, der zweiten und der Ausgangsmatrix unter Verwendung der Abruf- und Decodierschaltungsanordnung, wobei die zweite Matrix eine dünnbesetzte Matrix ist, wobei die Abrufschaltungsanordnung ferner dafür ausgelegt ist, Elemente der ersten und zweiten Matrix von ihren Stellen abzurufen und in einer Registerdatei zu speichern, und Reagieren auf den decodierten SMM-Befehl unter Verwendung der Ausführungsschaltungsanordnung durch Packen der in der Registerdatei gespeicherten zweiten Matrix durch Ersetzen eines oder mehrerer nullwertiger Elemente durch noch zu verarbeitende von Null verschiedene Elemente, wobei jedes ersetzte Element ein Feld zur Identifikation seiner logischen Position innerhalb der zweiten Matrix aufweist, und ferner unter Verwendung der Ausführungsschaltungsanordnung: für jedes von Null verschiedene Element an Zeile M und Spalte K der ersten Matrix Erzeugen eines Produkts des von Null verschiedenen Elements und jedes entsprechenden von Null verschiedenen Elements an Zeile K und Spalte N der gepackten zweiten Matrix und Akkumulieren jedes erzeugten Produkts und eines vorhergehenden Werts eines entsprechenden Elements an Zeile M und Spalte N der Ausgangsmatrix.
  23. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 21, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Zeile K der zweiten Matrix festzustellen, ob die Zeile nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob die Zeile von Null verschiedene Elemente enthält, die noch anhand des nullwertigen Elements zu verarbeiten sind, und, falls dies der Fall ist, für jedes nullwertige Element mit einem noch zu verarbeitenden von Null verschiedenen Element das von Null verschiedene Element in das nullwertige Element zu falten.
  24. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 21, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, für jede Spalte N der zweiten Matrix festzustellen, ob die Spalte nullwertige Elemente enthält, und, falls dies der Fall ist, festzustellen, ob eines der P-Elemente einer nachfolgenden Spalte ein von Null verschiedener Wert ist, und für jedes nullwertige Element mit einem von Null verschiedenen Element in der nachfolgenden Spalte das von Null verschiedene Element in das nullwertige Element zu drücken.
  25. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 21, wobei jedes der in der Registerdatei gespeicherten Elemente ein Feld zur Spezifikation, ob es einen Nullwert hat, aufweist, und wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, das Feld zu verwenden, wenn festgestellt wird, ob das Element einen Nullwert hat.
  26. Nichtflüchtiges maschinenlesbares Medium nach einem der Ansprüche 21 bis 24, wobei die Ausführungsschaltungsanordnung dafür ausgelegt ist, die Erzeugung jeglicher Produkte von Elementen mit Nullwerten zu vermeiden.
DE102019109847.5A 2018-06-22 2019-04-15 Beschleunigung der matrixmultplikation dünnbesetzter matrizen unter verwendung einer spaltenfaltung und -verdichtung Pending DE102019109847A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/016,278 2018-06-22
US16/016,278 US10620951B2 (en) 2018-06-22 2018-06-22 Matrix multiplication acceleration of sparse matrices using column folding and squeezing

Publications (1)

Publication Number Publication Date
DE102019109847A1 true DE102019109847A1 (de) 2019-12-24

Family

ID=65229528

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102019109847.5A Pending DE102019109847A1 (de) 2018-06-22 2019-04-15 Beschleunigung der matrixmultplikation dünnbesetzter matrizen unter verwendung einer spaltenfaltung und -verdichtung

Country Status (3)

Country Link
US (1) US10620951B2 (de)
CN (1) CN110633793A (de)
DE (1) DE102019109847A1 (de)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10489480B2 (en) * 2017-01-22 2019-11-26 Gsi Technology Inc. Sparse matrix multiplication in associative memory device
WO2018174931A1 (en) 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and appartus for tile configuration
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
US10846363B2 (en) * 2018-11-19 2020-11-24 Microsoft Technology Licensing, Llc Compression-encoding scheduled inputs for matrix computations
KR20200082617A (ko) * 2018-12-31 2020-07-08 삼성전자주식회사 메모리 장치를 이용한 계산 방법 및 이를 수행하는 메모리 장치
US10762035B1 (en) * 2019-02-08 2020-09-01 Hewlett Packard Enterprise Development Lp Matrix tiling to accelerate computing in redundant matrices
US11061738B2 (en) * 2019-02-28 2021-07-13 Movidius Limited Methods and apparatus to store and access multi dimensional data
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
WO2020190807A1 (en) 2019-03-15 2020-09-24 Intel Corporation Systolic disaggregation within a matrix accelerator architecture
WO2020190800A1 (en) 2019-03-15 2020-09-24 Intel Corporation Dynamic memory reconfiguration
US11493985B2 (en) 2019-03-15 2022-11-08 Microsoft Technology Licensing, Llc Selectively controlling memory power for scheduled computations
US11126690B2 (en) 2019-03-29 2021-09-21 Intel Corporation Machine learning architecture support for block sparsity
US11379556B2 (en) * 2019-05-21 2022-07-05 Arm Limited Apparatus and method for matrix operations
US11250107B2 (en) * 2019-07-15 2022-02-15 International Business Machines Corporation Method for interfacing with hardware accelerators
TWI688871B (zh) * 2019-08-27 2020-03-21 國立清華大學 矩陣乘法裝置及其操作方法
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
US11615320B1 (en) 2020-06-30 2023-03-28 Cadence Design Systems, Inc. Method, product, and apparatus for variable precision weight management for neural networks
US11823018B1 (en) 2020-06-30 2023-11-21 Cadence Design Systems, Inc. Method, product, and apparatus for a machine learning process using weight sharing within a systolic array having reduced memory bandwidth
US11651283B1 (en) * 2020-06-30 2023-05-16 Cadence Design Systems, Inc. Method, product, and apparatus for a machine learning process using dynamic rearrangement of sparse data and corresponding weights
US11687831B1 (en) 2020-06-30 2023-06-27 Cadence Design Systems, Inc. Method, product, and apparatus for a multidimensional processing array for hardware acceleration of convolutional neural network inference
US11676068B1 (en) 2020-06-30 2023-06-13 Cadence Design Systems, Inc. Method, product, and apparatus for a machine learning process leveraging input sparsity on a pixel by pixel basis
TWI742802B (zh) 2020-08-18 2021-10-11 創鑫智慧股份有限公司 矩陣運算裝置及其操作方法
CN112732222B (zh) * 2021-01-08 2023-01-10 苏州浪潮智能科技有限公司 一种稀疏矩阵加速计算方法、装置、设备及介质
US11797270B2 (en) 2021-06-17 2023-10-24 International Business Machines Corporation Single function to perform multiple operations with distinct operation parameter validation
US11675592B2 (en) 2021-06-17 2023-06-13 International Business Machines Corporation Instruction to query for model-dependent information
US11693692B2 (en) 2021-06-17 2023-07-04 International Business Machines Corporation Program event recording storage alteration processing for a neural network accelerator instruction
US11269632B1 (en) 2021-06-17 2022-03-08 International Business Machines Corporation Data conversion to/from selected data type with implied rounding mode
US11734013B2 (en) 2021-06-17 2023-08-22 International Business Machines Corporation Exception summary for invalid values detected during instruction execution
US11669331B2 (en) 2021-06-17 2023-06-06 International Business Machines Corporation Neural network processing assist instruction
CN115880132B (zh) * 2023-02-06 2023-05-23 南京砺算科技有限公司 图形处理器、矩阵乘法任务处理方法、装置及存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5206822A (en) * 1991-11-15 1993-04-27 Regents Of The University Of California Method and apparatus for optimized processing of sparse matrices
US6243734B1 (en) * 1998-10-30 2001-06-05 Intel Corporation Computer product and method for sparse matrices
GB2489526A (en) * 2011-04-01 2012-10-03 Schlumberger Holdings Representing and calculating with sparse matrixes in simulating incompressible fluid flows.
US9367519B2 (en) * 2013-08-30 2016-06-14 Microsoft Technology Licensing, Llc Sparse matrix data structure
US10275479B2 (en) * 2014-02-27 2019-04-30 Sas Institute Inc. Sparse matrix storage in a database
US10146740B1 (en) * 2017-03-08 2018-12-04 Symantec Corporation Sparse data set processing
US10572568B2 (en) * 2018-03-28 2020-02-25 Intel Corporation Accelerator for sparse-dense matrix multiplication

Also Published As

Publication number Publication date
US10620951B2 (en) 2020-04-14
CN110633793A (zh) 2019-12-31
US20190042237A1 (en) 2019-02-07
CN113762490A (zh) 2021-12-07

Similar Documents

Publication Publication Date Title
DE102019109847A1 (de) Beschleunigung der matrixmultplikation dünnbesetzter matrizen unter verwendung einer spaltenfaltung und -verdichtung
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE102010051476B4 (de) Addierbefehle, um drei Quelloperanden zu addieren
DE102019109845A1 (de) Vereinheitlichte Beschleunigung eines Blockgeheimcodes eines symmetrischen Schlüssels für AES-SMS4-Camellia
DE102020126212A1 (de) Vorrichtungen, Verfahren und Systeme für Anweisungen eines Matrixoperationsbeschleunigers
DE112013003743T5 (de) Beschleunigte spurübergreifende Vektorreduzierungsbefehle
DE112017003336T5 (de) Vorrichtungen, verfahren und systeme zum elementsortieren von vektoren
DE112013005236T5 (de) Verfahren und Vorrichtung für Integralbild-Berechnungsbefehle
DE112011105121T5 (de) Systeme, Vorrichtungen und Verfahren zum Schrittmustersammeln von Datenelementen und Schrittmusterstreuen von Datenelementen
DE112012007063T5 (de) Zusammenfügen von benachbarten Sammel-/Streuoperationen
DE202019005682U1 (de) Hardwaregestützte Paging-Mechanismen
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE112019002389T5 (de) Architektur zur dynamischen umwandlung einer speicherkonfiguration
DE102014003644A1 (de) Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich
DE112016004348T5 (de) Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle
DE102018126036A1 (de) Systeme und verfahren zum setzen eines kachelregisterpaars auf null
DE112016005909T5 (de) Einrichtung und verfahren zum beschleunigen von graphenanalyse
DE102018006744A1 (de) Bitmatrixmultiplikation
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
DE102018125971A1 (de) Systeme und verfahren zum berechnen von skalaprodukten von halbbytes in operanden aus zwei kacheln

Legal Events

Date Code Title Description
R130 Divisional application to

Ref document number: 102019009287

Country of ref document: DE